From 6e3846c12bf06a7ac8f33f4f1f7f972afe80d61f Mon Sep 17 00:00:00 2001 From: akenmorris Date: Wed, 25 Oct 2023 15:41:22 +0000 Subject: [PATCH] Deployed 2cc1ddc913 to 6.5 with MkDocs 1.3.0 and mike 1.1.2 --- 6.5/api/Classes/classColorScheme.html | 2 +- 6.5/api/Classes/classColorScheme.md | 2 +- 6.5/api/Classes/classColorSchemes.html | 2 +- 6.5/api/Classes/classColorSchemes.md | 2 +- 6.5/api/Classes/classCustomSlider.html | 2 +- 6.5/api/Classes/classCustomSlider.md | 2 +- ...lassCustomSurfaceReconstructionFilter.html | 2 +- .../classCustomSurfaceReconstructionFilter.md | 2 +- 6.5/api/Classes/classFEAreaCoverage.html | 2 +- 6.5/api/Classes/classFEAreaCoverage.md | 2 +- .../classFEAreaCoverage_1_1Surface.html | 2 +- .../Classes/classFEAreaCoverage_1_1Surface.md | 2 +- 6.5/api/Classes/classFEAutoMesher.html | 2 +- 6.5/api/Classes/classFEAutoMesher.md | 2 +- .../Classes/classFECVDDecimationModifier.html | 2 +- .../Classes/classFECVDDecimationModifier.md | 2 +- ...assFECVDDecimationModifier_1_1Cluster.html | 2 +- ...classFECVDDecimationModifier_1_1Cluster.md | 2 +- .../classFECVDDecimationModifier_1_1NODE.html | 2 +- .../classFECVDDecimationModifier_1_1NODE.md | 2 +- 6.5/api/Classes/classFECoreMesh.html | 2 +- 6.5/api/Classes/classFECoreMesh.md | 2 +- 6.5/api/Classes/classFEEdge.html | 2 +- 6.5/api/Classes/classFEEdge.md | 2 +- 6.5/api/Classes/classFEElement.html | 2 +- 6.5/api/Classes/classFEElement.md | 2 +- 6.5/api/Classes/classFEElementData.html | 2 +- 6.5/api/Classes/classFEElementData.md | 2 +- 6.5/api/Classes/classFEElement__.html | 2 +- 6.5/api/Classes/classFEElement__.md | 2 +- 6.5/api/Classes/classFEFace.html | 2 +- 6.5/api/Classes/classFEFace.md | 2 +- 6.5/api/Classes/classFEFillHole.html | 2 +- 6.5/api/Classes/classFEFillHole.md | 2 +- .../Classes/classFEFillHole_1_1EdgeRing.html | 2 +- .../Classes/classFEFillHole_1_1EdgeRing.md | 2 +- 6.5/api/Classes/classFEFixMesh.html | 2 +- 6.5/api/Classes/classFEFixMesh.md | 2 +- 6.5/api/Classes/classFEItem.html | 2 +- 6.5/api/Classes/classFEItem.md | 2 +- 6.5/api/Classes/classFEMesh.html | 2 +- 6.5/api/Classes/classFEMesh.md | 2 +- .../Classes/classFEMeshSmoothingModifier.html | 2 +- .../Classes/classFEMeshSmoothingModifier.md | 2 +- 6.5/api/Classes/classFENode.html | 2 +- 6.5/api/Classes/classFENode.md | 2 +- 6.5/api/Classes/classFENodeElementList.html | 2 +- 6.5/api/Classes/classFENodeElementList.md | 2 +- 6.5/api/Classes/classFENodeFaceList.html | 2 +- 6.5/api/Classes/classFENodeFaceList.md | 2 +- 6.5/api/Classes/classFENodeNodeList.html | 2 +- 6.5/api/Classes/classFENodeNodeList.md | 2 +- 6.5/api/Classes/classFETri3.html | 2 +- 6.5/api/Classes/classFETri3.md | 2 +- 6.5/api/Classes/classFEVTKExport.html | 2 +- 6.5/api/Classes/classFEVTKExport.md | 2 +- 6.5/api/Classes/classFEVTKimport.html | 2 +- 6.5/api/Classes/classFEVTKimport.md | 2 +- 6.5/api/Classes/classGLCOLOR.html | 2 +- 6.5/api/Classes/classGLCOLOR.md | 2 +- 6.5/api/Classes/classLegacyMeshGenerator.html | 2 +- 6.5/api/Classes/classLegacyMeshGenerator.md | 2 +- 6.5/api/Classes/classMeshSettings.html | 2 +- 6.5/api/Classes/classMeshSettings.md | 2 +- 6.5/api/Classes/classObjectReader.html | 2 +- 6.5/api/Classes/classObjectReader.md | 2 +- 6.5/api/Classes/classObjectWriter.html | 2 +- 6.5/api/Classes/classObjectWriter.md | 2 +- .../classParticleEvent_1_1_01Parent.html | 2 +- .../classParticleEvent_1_1_01Parent.md | 2 +- ...ticleGradientDescentPositionOptimizer.html | 2 +- ...articleGradientDescentPositionOptimizer.md | 2 +- 6.5/api/Classes/classParticleImageDomain.html | 2 +- 6.5/api/Classes/classParticleImageDomain.md | 2 +- ...classParticleImageDomainWithCurvature.html | 2 +- .../classParticleImageDomainWithCurvature.md | 2 +- .../classParticleImageDomainWithGradN.html | 2 +- .../classParticleImageDomainWithGradN.md | 2 +- ...classParticleImageDomainWithGradients.html | 2 +- .../classParticleImageDomainWithGradients.md | 2 +- .../classParticleImplicitSurfaceDomain.html | 2 +- .../classParticleImplicitSurfaceDomain.md | 2 +- .../classParticleMeanCurvatureAttribute.html | 2 +- .../classParticleMeanCurvatureAttribute.md | 2 +- .../classParticleProcrustesRegistration.html | 2 +- .../classParticleProcrustesRegistration.md | 2 +- ...eShapeLinearRegressionMatrixAttribute.html | 2 +- ...cleShapeLinearRegressionMatrixAttribute.md | 2 +- .../classParticleShapeMatrixAttribute.html | 2 +- .../classParticleShapeMatrixAttribute.md | 2 +- ...ticleShapeMixedEffectsMatrixAttribute.html | 2 +- ...articleShapeMixedEffectsMatrixAttribute.md | 2 +- 6.5/api/Classes/classPreferences.html | 2 +- 6.5/api/Classes/classPreferences.md | 2 +- 6.5/api/Classes/classProcrustes3D.html | 2 +- 6.5/api/Classes/classProcrustes3D.md | 2 +- 6.5/api/Classes/classReconstruction.html | 2 +- 6.5/api/Classes/classReconstruction.md | 2 +- 6.5/api/Classes/classStudioLogger.html | 2 +- 6.5/api/Classes/classStudioLogger.md | 2 +- .../Classes/classSurfaceReconstructor.html | 2 +- 6.5/api/Classes/classSurfaceReconstructor.md | 2 +- 6.5/api/Classes/classUtils.html | 2 +- 6.5/api/Classes/classUtils.md | 2 +- .../classitk_1_1AdvancedTransform.html | 2 +- .../Classes/classitk_1_1AdvancedTransform.md | 2 +- ...ateImageFunctionWithDoubleCoefficents.html | 2 +- ...olateImageFunctionWithDoubleCoefficents.md | 2 +- ...ctlySupportedRBFSparseKernelTransform.html | 2 +- ...pactlySupportedRBFSparseKernelTransform.md | 2 +- ...sitk_1_1Functor_1_1MultiplyByConstant.html | 2 +- ...assitk_1_1Functor_1_1MultiplyByConstant.md | 2 +- .../Classes/classitk_1_1KernelTransform2.html | 2 +- .../Classes/classitk_1_1KernelTransform2.md | 2 +- ...sitk_1_1MultiplyByConstantImageFilter.html | 2 +- ...assitk_1_1MultiplyByConstantImageFilter.md | 2 +- .../classitk_1_1SparseKernelTransform.html | 2 +- .../classitk_1_1SparseKernelTransform.md | 2 +- .../classitk_1_1TPGACLevelSetImageFilter.html | 2 +- .../classitk_1_1TPGACLevelSetImageFilter.md | 2 +- ...tk_1_1ThinPlateSplineKernelTransform2.html | 2 +- ...sitk_1_1ThinPlateSplineKernelTransform2.md | 2 +- 6.5/api/Classes/classmat3d.html | 2 +- 6.5/api/Classes/classmat3d.md | 2 +- 6.5/api/Classes/classmatrix.html | 2 +- 6.5/api/Classes/classmatrix.md | 2 +- 6.5/api/Classes/classmeshFIM.html | 2 +- 6.5/api/Classes/classmeshFIM.md | 2 +- 6.5/api/Classes/classobject__reader.html | 2 +- 6.5/api/Classes/classobject__reader.md | 2 +- 6.5/api/Classes/classobject__writer.html | 2 +- 6.5/api/Classes/classobject__writer.md | 2 +- 6.5/api/Classes/classquatd.html | 2 +- 6.5/api/Classes/classquatd.md | 2 +- .../classshapeworks_1_1AnalysisTool.html | 2 +- .../classshapeworks_1_1AnalysisTool.md | 2 +- .../classshapeworks_1_1AnalysisUtils.html | 2 +- .../classshapeworks_1_1AnalysisUtils.md | 2 +- .../Classes/classshapeworks_1_1Analyze.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Analyze.md | 2 +- ...lassshapeworks_1_1AnalyzeCommandGroup.html | 2 +- .../classshapeworks_1_1AnalyzeCommandGroup.md | 2 +- .../Classes/classshapeworks_1_1ColorMap.html | 2 +- .../Classes/classshapeworks_1_1ColorMap.md | 2 +- .../Classes/classshapeworks_1_1ColorMaps.html | 2 +- .../Classes/classshapeworks_1_1ColorMaps.md | 2 +- .../Classes/classshapeworks_1_1Command.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Command.md | 2 +- .../classshapeworks_1_1CompareSettings.html | 2 +- .../classshapeworks_1_1CompareSettings.md | 2 +- .../classshapeworks_1_1CompareWidget.html | 2 +- .../classshapeworks_1_1CompareWidget.md | 2 +- .../classshapeworks_1_1Constraint.html | 2 +- .../Classes/classshapeworks_1_1Constraint.md | 2 +- .../classshapeworks_1_1Constraints.html | 2 +- .../Classes/classshapeworks_1_1Constraints.md | 2 +- .../classshapeworks_1_1ContourDomain.html | 2 +- .../classshapeworks_1_1ContourDomain.md | 2 +- ...sshapeworks_1_1CorrespondenceFunction.html | 2 +- ...assshapeworks_1_1CorrespondenceFunction.md | 2 +- ...apeworks_1_1CurvatureSamplingFunction.html | 2 +- ...shapeworks_1_1CurvatureSamplingFunction.md | 2 +- .../Classes/classshapeworks_1_1DataTool.html | 2 +- .../Classes/classshapeworks_1_1DataTool.md | 2 +- .../classshapeworks_1_1DeepSSMJob.html | 2 +- .../Classes/classshapeworks_1_1DeepSSMJob.md | 2 +- .../classshapeworks_1_1DeepSSMParameters.html | 2 +- .../classshapeworks_1_1DeepSSMParameters.md | 2 +- .../classshapeworks_1_1DeepSSMTool.html | 2 +- .../Classes/classshapeworks_1_1DeepSSMTool.md | 2 +- ...1_1DisentangledCorrespondenceFunction.html | 2 +- ...s_1_1DisentangledCorrespondenceFunction.md | 2 +- ...classshapeworks_1_1DualVectorFunction.html | 2 +- .../classshapeworks_1_1DualVectorFunction.md | 2 +- .../classshapeworks_1_1EigenUtils.html | 2 +- .../Classes/classshapeworks_1_1EigenUtils.md | 2 +- ...classshapeworks_1_1ExcelProjectReader.html | 2 +- .../classshapeworks_1_1ExcelProjectReader.md | 2 +- ...classshapeworks_1_1ExcelProjectWriter.html | 2 +- .../classshapeworks_1_1ExcelProjectWriter.md | 2 +- .../classshapeworks_1_1Executable.html | 2 +- .../Classes/classshapeworks_1_1Executable.md | 2 +- .../classshapeworks_1_1ExportImageDialog.html | 2 +- .../classshapeworks_1_1ExportImageDialog.md | 2 +- .../classshapeworks_1_1ExportUtils.html | 2 +- .../Classes/classshapeworks_1_1ExportUtils.md | 2 +- ...classshapeworks_1_1FreeFormConstraint.html | 2 +- .../classshapeworks_1_1FreeFormConstraint.md | 2 +- .../classshapeworks_1_1GenericContainer.html | 2 +- .../classshapeworks_1_1GenericContainer.md | 2 +- ...ssshapeworks_1_1GenericContainerArray.html | 2 +- ...lassshapeworks_1_1GenericContainerArray.md | 2 +- ...hapeworks_1_1GradientDescentOptimizer.html | 2 +- ...sshapeworks_1_1GradientDescentOptimizer.md | 2 +- 6.5/api/Classes/classshapeworks_1_1Groom.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Groom.md | 2 +- .../classshapeworks_1_1GroomCommandGroup.html | 2 +- .../classshapeworks_1_1GroomCommandGroup.md | 2 +- .../classshapeworks_1_1GroomParameters.html | 2 +- .../classshapeworks_1_1GroomParameters.md | 2 +- .../Classes/classshapeworks_1_1GroomTool.html | 2 +- .../Classes/classshapeworks_1_1GroomTool.md | 2 +- .../classshapeworks_1_1GroupPvalueJob.html | 2 +- .../classshapeworks_1_1GroupPvalueJob.md | 2 +- 6.5/api/Classes/classshapeworks_1_1Image.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Image.md | 2 +- .../classshapeworks_1_1ImageCommand.html | 2 +- .../classshapeworks_1_1ImageCommand.md | 2 +- .../classshapeworks_1_1ImageDomain.html | 2 +- .../Classes/classshapeworks_1_1ImageDomain.md | 2 +- ...hapeworks_1_1ImageDomainWithCurvature.html | 2 +- ...sshapeworks_1_1ImageDomainWithCurvature.md | 2 +- ...assshapeworks_1_1ImageDomainWithGradN.html | 2 +- ...classshapeworks_1_1ImageDomainWithGradN.md | 2 +- ...hapeworks_1_1ImageDomainWithGradients.html | 2 +- ...sshapeworks_1_1ImageDomainWithGradients.md | 2 +- .../classshapeworks_1_1ImageLabel.html | 2 +- .../Classes/classshapeworks_1_1ImageLabel.md | 2 +- .../classshapeworks_1_1ImageUtils.html | 2 +- .../Classes/classshapeworks_1_1ImageUtils.md | 2 +- ...ssshapeworks_1_1ImplicitSurfaceDomain.html | 2 +- ...lassshapeworks_1_1ImplicitSurfaceDomain.md | 2 +- .../classshapeworks_1_1IndexRegion.html | 2 +- .../Classes/classshapeworks_1_1IndexRegion.md | 2 +- 6.5/api/Classes/classshapeworks_1_1Job.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Job.md | 2 +- .../classshapeworks_1_1JsonProjectReader.html | 2 +- .../classshapeworks_1_1JsonProjectReader.md | 2 +- .../classshapeworks_1_1JsonProjectWriter.html | 2 +- .../classshapeworks_1_1JsonProjectWriter.md | 2 +- .../classshapeworks_1_1KeyboardShortcuts.html | 2 +- .../classshapeworks_1_1KeyboardShortcuts.md | 2 +- ...classshapeworks_1_1LandmarkDefinition.html | 2 +- .../classshapeworks_1_1LandmarkDefinition.md | 2 +- ...assshapeworks_1_1LandmarkItemDelegate.html | 2 +- ...classshapeworks_1_1LandmarkItemDelegate.md | 2 +- ...classshapeworks_1_1LandmarkTableModel.html | 2 +- .../classshapeworks_1_1LandmarkTableModel.md | 2 +- .../classshapeworks_1_1LandmarkWidget.html | 2 +- .../classshapeworks_1_1LandmarkWidget.md | 2 +- ...works_1_1LegacyCorrespondenceFunction.html | 2 +- ...peworks_1_1LegacyCorrespondenceFunction.md | 2 +- .../classshapeworks_1_1LegacyShapeMatrix.html | 2 +- .../classshapeworks_1_1LegacyShapeMatrix.md | 2 +- .../Classes/classshapeworks_1_1Lightbox.html | 2 +- .../Classes/classshapeworks_1_1Lightbox.md | 2 +- ...eworks_1_1LinearRegressionShapeMatrix.html | 2 +- ...apeworks_1_1LinearRegressionShapeMatrix.md | 2 +- .../Classes/classshapeworks_1_1LogWindow.html | 2 +- .../Classes/classshapeworks_1_1LogWindow.md | 2 +- .../Classes/classshapeworks_1_1Logging.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Logging.md | 2 +- .../classshapeworks_1_1MatrixContainer.html | 2 +- .../classshapeworks_1_1MatrixContainer.md | 2 +- ...sshapeworks_1_1MeanCurvatureContainer.html | 2 +- ...assshapeworks_1_1MeanCurvatureContainer.md | 2 +- 6.5/api/Classes/classshapeworks_1_1Mesh.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Mesh.md | 2 +- .../Classes/classshapeworks_1_1MeshCache.html | 2 +- .../Classes/classshapeworks_1_1MeshCache.md | 2 +- .../classshapeworks_1_1MeshCommand.html | 2 +- .../Classes/classshapeworks_1_1MeshCommand.md | 2 +- .../classshapeworks_1_1MeshDomain.html | 2 +- .../Classes/classshapeworks_1_1MeshDomain.md | 2 +- .../classshapeworks_1_1MeshGenerator.html | 2 +- .../classshapeworks_1_1MeshGenerator.md | 2 +- .../Classes/classshapeworks_1_1MeshGroup.html | 2 +- .../Classes/classshapeworks_1_1MeshGroup.md | 2 +- .../classshapeworks_1_1MeshManager.html | 2 +- .../Classes/classshapeworks_1_1MeshManager.md | 2 +- .../classshapeworks_1_1MeshReader.html | 2 +- .../Classes/classshapeworks_1_1MeshReader.md | 2 +- ...classshapeworks_1_1MeshReconstructors.html | 2 +- .../classshapeworks_1_1MeshReconstructors.md | 2 +- .../Classes/classshapeworks_1_1MeshSlice.html | 2 +- .../Classes/classshapeworks_1_1MeshSlice.md | 2 +- .../Classes/classshapeworks_1_1MeshUtils.html | 2 +- .../Classes/classshapeworks_1_1MeshUtils.md | 2 +- .../classshapeworks_1_1MeshWarper.html | 2 +- .../Classes/classshapeworks_1_1MeshWarper.md | 2 +- .../classshapeworks_1_1MeshWorkItem.html | 2 +- .../classshapeworks_1_1MeshWorkItem.md | 2 +- .../classshapeworks_1_1MeshWorkQueue.html | 2 +- .../classshapeworks_1_1MeshWorkQueue.md | 2 +- .../classshapeworks_1_1MeshWorker.html | 2 +- .../Classes/classshapeworks_1_1MeshWorker.md | 2 +- .../classshapeworks_1_1MeshWrapper.html | 2 +- .../Classes/classshapeworks_1_1MeshWrapper.md | 2 +- ...shapeworks_1_1MixedEffectsShapeMatrix.html | 2 +- ...ssshapeworks_1_1MixedEffectsShapeMatrix.md | 2 +- ...classshapeworks_1_1NetworkAnalysisJob.html | 2 +- .../classshapeworks_1_1NetworkAnalysisJob.md | 2 +- .../Classes/classshapeworks_1_1Observer.html | 2 +- .../Classes/classshapeworks_1_1Observer.md | 2 +- ...sshapeworks_1_1OptimizationVisualizer.html | 2 +- ...assshapeworks_1_1OptimizationVisualizer.md | 2 +- .../Classes/classshapeworks_1_1Optimize.html | 2 +- .../Classes/classshapeworks_1_1Optimize.md | 2 +- ...assshapeworks_1_1OptimizeCommandGroup.html | 2 +- ...classshapeworks_1_1OptimizeCommandGroup.md | 2 +- ...ssshapeworks_1_1OptimizeParameterFile.html | 2 +- ...lassshapeworks_1_1OptimizeParameterFile.md | 2 +- ...classshapeworks_1_1OptimizeParameters.html | 2 +- .../classshapeworks_1_1OptimizeParameters.md | 2 +- .../classshapeworks_1_1OptimizeTool.html | 2 +- .../classshapeworks_1_1OptimizeTool.md | 2 +- .../classshapeworks_1_1PaintWidget.html | 2 +- .../Classes/classshapeworks_1_1PaintWidget.md | 2 +- .../classshapeworks_1_1Parameters.html | 2 +- .../Classes/classshapeworks_1_1Parameters.md | 2 +- .../classshapeworks_1_1ParticleArea.html | 2 +- .../classshapeworks_1_1ParticleArea.md | 2 +- .../classshapeworks_1_1ParticleAreaJob.html | 2 +- .../classshapeworks_1_1ParticleAreaJob.md | 2 +- .../classshapeworks_1_1ParticleAreaPanel.html | 2 +- .../classshapeworks_1_1ParticleAreaPanel.md | 2 +- .../classshapeworks_1_1ParticleColors.html | 2 +- .../classshapeworks_1_1ParticleColors.md | 2 +- .../classshapeworks_1_1ParticleDomain.html | 2 +- .../classshapeworks_1_1ParticleDomain.md | 2 +- .../classshapeworks_1_1ParticleEvent.html | 2 +- .../classshapeworks_1_1ParticleEvent.md | 2 +- ...peworks_1_1ParticleGaussianModeWriter.html | 2 +- ...hapeworks_1_1ParticleGaussianModeWriter.md | 2 +- ...apeworks_1_1ParticleGoodBadAssessment.html | 2 +- ...shapeworks_1_1ParticleGoodBadAssessment.md | 2 +- ...assshapeworks_1_1ParticleNeighborhood.html | 2 +- ...classshapeworks_1_1ParticleNeighborhood.md | 2 +- ...hapeworks_1_1ParticleNormalEvaluation.html | 2 +- ...sshapeworks_1_1ParticleNormalEvaluation.md | 2 +- ...eworks_1_1ParticleNormalEvaluationJob.html | 2 +- ...apeworks_1_1ParticleNormalEvaluationJob.md | 2 +- ...assshapeworks_1_1ParticleRegionDomain.html | 2 +- ...classshapeworks_1_1ParticleRegionDomain.md | 2 +- ...peworks_1_1ParticleRegionNeighborhood.html | 2 +- ...hapeworks_1_1ParticleRegionNeighborhood.md | 2 +- ...shapeworks_1_1ParticleShapeStatistics.html | 2 +- ...ssshapeworks_1_1ParticleShapeStatistics.md | 2 +- ...eworks_1_1ParticleSurfaceNeighborhood.html | 2 +- ...apeworks_1_1ParticleSurfaceNeighborhood.md | 2 +- .../classshapeworks_1_1ParticleSystem.html | 2 +- .../classshapeworks_1_1ParticleSystem.md | 2 +- ...ssshapeworks_1_1ParticleSystemCommand.html | 2 +- ...lassshapeworks_1_1ParticleSystemCommand.md | 2 +- ...hapeworks_1_1ParticleSystemEvaluation.html | 2 +- ...sshapeworks_1_1ParticleSystemEvaluation.md | 2 +- .../Classes/classshapeworks_1_1Particles.html | 2 +- .../Classes/classshapeworks_1_1Particles.md | 2 +- .../classshapeworks_1_1PhysicalRegion.html | 2 +- .../classshapeworks_1_1PhysicalRegion.md | 2 +- .../classshapeworks_1_1PickResult.html | 2 +- .../Classes/classshapeworks_1_1PickResult.md | 2 +- .../classshapeworks_1_1PlaneConstraint.html | 2 +- .../classshapeworks_1_1PlaneConstraint.md | 2 +- .../classshapeworks_1_1PlaneWidget.html | 2 +- .../Classes/classshapeworks_1_1PlaneWidget.md | 2 +- ...lassshapeworks_1_1PowerOfTwoPointTree.html | 2 +- .../classshapeworks_1_1PowerOfTwoPointTree.md | 2 +- ...shapeworks_1_1PowerOfTwoPointTreeNode.html | 2 +- ...ssshapeworks_1_1PowerOfTwoPointTreeNode.md | 2 +- .../classshapeworks_1_1PreferencesWindow.html | 2 +- .../classshapeworks_1_1PreferencesWindow.md | 2 +- ...sshapeworks_1_1ProcrustesRegistration.html | 2 +- ...assshapeworks_1_1ProcrustesRegistration.md | 2 +- .../Classes/classshapeworks_1_1Project.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Project.md | 2 +- ...lassshapeworks_1_1ProjectCommandGroup.html | 2 +- .../classshapeworks_1_1ProjectCommandGroup.md | 2 +- .../classshapeworks_1_1ProjectReader.html | 2 +- .../classshapeworks_1_1ProjectReader.md | 2 +- .../classshapeworks_1_1ProjectUtils.html | 2 +- .../classshapeworks_1_1ProjectUtils.md | 2 +- .../classshapeworks_1_1PythonWorker.html | 2 +- .../classshapeworks_1_1PythonWorker.md | 2 +- .../classshapeworks_1_1QMeshWarper.html | 2 +- .../Classes/classshapeworks_1_1QMeshWarper.md | 2 +- .../Classes/classshapeworks_1_1QOptimize.html | 2 +- .../Classes/classshapeworks_1_1QOptimize.md | 2 +- ...classshapeworks_1_1ReconstructSurface.html | 2 +- .../classshapeworks_1_1ReconstructSurface.md | 2 +- .../Classes/classshapeworks_1_1Sampler.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Sampler.md | 2 +- .../classshapeworks_1_1SamplingFunction.html | 2 +- .../classshapeworks_1_1SamplingFunction.md | 2 +- .../Classes/classshapeworks_1_1Session.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Session.md | 2 +- 6.5/api/Classes/classshapeworks_1_1Shape.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Shape.md | 2 +- .../classshapeworks_1_1ShapeEvaluation.html | 2 +- .../classshapeworks_1_1ShapeEvaluation.md | 2 +- ...classshapeworks_1_1ShapeEvaluationJob.html | 2 +- .../classshapeworks_1_1ShapeEvaluationJob.md | 2 +- ...lassshapeworks_1_1ShapeGradientMatrix.html | 2 +- .../classshapeworks_1_1ShapeGradientMatrix.md | 2 +- .../classshapeworks_1_1ShapeMatrix.html | 2 +- .../Classes/classshapeworks_1_1ShapeMatrix.md | 2 +- ...lassshapeworks_1_1ShapeWorksStudioApp.html | 2 +- .../classshapeworks_1_1ShapeWorksStudioApp.md | 2 +- .../classshapeworks_1_1Shape_1_1Point.html | 2 +- .../classshapeworks_1_1Shape_1_1Point.md | 2 +- .../classshapeworks_1_1ShapeworksCommand.html | 2 +- .../classshapeworks_1_1ShapeworksCommand.md | 2 +- .../classshapeworks_1_1ShapeworksUtils.html | 2 +- .../classshapeworks_1_1ShapeworksUtils.md | 2 +- .../classshapeworks_1_1ShapeworksWorker.html | 2 +- .../classshapeworks_1_1ShapeworksWorker.md | 2 +- .../Classes/classshapeworks_1_1SliceView.html | 2 +- .../Classes/classshapeworks_1_1SliceView.md | 2 +- .../classshapeworks_1_1SplashScreen.html | 2 +- .../classshapeworks_1_1SplashScreen.md | 2 +- .../classshapeworks_1_1StatsGroupLDAJob.html | 2 +- .../classshapeworks_1_1StatsGroupLDAJob.md | 2 +- .../classshapeworks_1_1StatusBarWidget.html | 2 +- .../classshapeworks_1_1StatusBarWidget.md | 2 +- .../classshapeworks_1_1StringUtils.html | 2 +- .../Classes/classshapeworks_1_1StringUtils.md | 2 +- ...classshapeworks_1_1StudioHandleWidget.html | 2 +- .../classshapeworks_1_1StudioHandleWidget.md | 2 +- ...ssshapeworks_1_1StudioInteractorStyle.html | 2 +- ...lassshapeworks_1_1StudioInteractorStyle.md | 2 +- .../classshapeworks_1_1StudioMesh.html | 2 +- .../Classes/classshapeworks_1_1StudioMesh.md | 2 +- ...peworks_1_1StudioSliceInteractorStyle.html | 2 +- ...hapeworks_1_1StudioSliceInteractorStyle.md | 2 +- .../classshapeworks_1_1StudioUtils.html | 2 +- .../Classes/classshapeworks_1_1StudioUtils.md | 2 +- ...ssshapeworks_1_1StudioVtkOutputWindow.html | 2 +- ...lassshapeworks_1_1StudioVtkOutputWindow.md | 2 +- 6.5/api/Classes/classshapeworks_1_1Style.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Style.md | 2 +- .../Classes/classshapeworks_1_1Subject.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Subject.md | 2 +- .../Classes/classshapeworks_1_1Telemetry.html | 2 +- .../Classes/classshapeworks_1_1Telemetry.md | 2 +- .../classshapeworks_1_1UpdateChecker.html | 2 +- .../classshapeworks_1_1UpdateChecker.md | 2 +- .../Classes/classshapeworks_1_1Variant.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Variant.md | 2 +- .../classshapeworks_1_1VectorFunction.html | 2 +- .../classshapeworks_1_1VectorFunction.md | 2 +- .../classshapeworks_1_1VectorImage.html | 2 +- .../Classes/classshapeworks_1_1VectorImage.md | 2 +- .../Classes/classshapeworks_1_1Viewer.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Viewer.md | 2 +- .../classshapeworks_1_1Visualizer.html | 2 +- .../Classes/classshapeworks_1_1Visualizer.md | 2 +- .../classshapeworks_1_1VtkMeshWrapper.html | 2 +- .../classshapeworks_1_1VtkMeshWrapper.md | 2 +- ...lassshapeworks_1_1WheelEventForwarder.html | 2 +- .../classshapeworks_1_1WheelEventForwarder.md | 2 +- .../Classes/classshapeworks_1_1Worker.html | 2 +- 6.5/api/Classes/classshapeworks_1_1Worker.md | 2 +- ...ssshapeworks_1_1shapeworks__exception.html | 2 +- ...lassshapeworks_1_1shapeworks__exception.md | 2 +- 6.5/api/Classes/classvec2d.html | 2 +- 6.5/api/Classes/classvec2d.md | 2 +- 6.5/api/Classes/classvec3d.html | 2 +- 6.5/api/Classes/classvec3d.md | 2 +- 6.5/api/Classes/classvec6d.html | 2 +- 6.5/api/Classes/classvec6d.md | 2 +- .../Classes/classvtkPolyDataToImageData.html | 2 +- .../Classes/classvtkPolyDataToImageData.md | 2 +- 6.5/api/Classes/index_classes.html | 2 +- 6.5/api/Classes/index_classes.md | 2 +- 6.5/api/Classes/structColorScheme_1_1rgb.html | 2 +- 6.5/api/Classes/structColorScheme_1_1rgb.md | 2 +- ...structFECVDDecimationModifier_1_1EDGE.html | 2 +- .../structFECVDDecimationModifier_1_1EDGE.md | 2 +- 6.5/api/Classes/structFEFillHole_1_1FACE.html | 2 +- 6.5/api/Classes/structFEFillHole_1_1FACE.md | 2 +- 6.5/api/Classes/structIntersection.html | 2 +- 6.5/api/Classes/structIntersection.md | 2 +- 6.5/api/Classes/structQuad.html | 2 +- 6.5/api/Classes/structQuad.md | 2 +- 6.5/api/Classes/structRay.html | 2 +- 6.5/api/Classes/structRay.md | 2 +- .../Classes/structSimilarityTransform3D.html | 2 +- .../Classes/structSimilarityTransform3D.md | 2 +- 6.5/api/Classes/structTriangle.html | 2 +- 6.5/api/Classes/structTriangle.md | 2 +- 6.5/api/Classes/structVTKEXPORT.html | 2 +- 6.5/api/Classes/structVTKEXPORT.md | 2 +- ...ructfmt_1_1formatter_3_01QString_01_4.html | 2 +- ...structfmt_1_1formatter_3_01QString_01_4.md | 2 +- ...ngFunction_1_1CrossDomainNeighborhood.html | 2 +- ...lingFunction_1_1CrossDomainNeighborhood.md | 2 +- .../structshapeworks_1_1MeshGeoEntry.html | 2 +- .../structshapeworks_1_1MeshGeoEntry.md | 2 +- ...hapeworks_1_1MultiVariateNormalRandom.html | 2 +- ...tshapeworks_1_1MultiVariateNormalRandom.md | 2 +- ...1_1Observer_1_1DefinedCallbacksStruct.html | 2 +- ...s_1_1Observer_1_1DefinedCallbacksStruct.md | 2 +- ...tshapeworks_1_1ParticlePointIndexPair.html | 2 +- ...uctshapeworks_1_1ParticlePointIndexPair.md | 2 +- ...egionNeighborhood_1_1IteratorNodePair.html | 2 +- ...eRegionNeighborhood_1_1IteratorNodePair.md | 2 +- .../structshapeworks_1_1Reconstruction.html | 2 +- .../structshapeworks_1_1Reconstruction.md | 2 +- ...eworks_1_1Sampler_1_1CuttingPlaneType.html | 2 +- ...apeworks_1_1Sampler_1_1CuttingPlaneType.md | 2 +- ...ctshapeworks_1_1Sampler_1_1SphereType.html | 2 +- ...ructshapeworks_1_1Sampler_1_1SphereType.md | 2 +- ...structshapeworks_1_1SharedCommandData.html | 2 +- .../structshapeworks_1_1SharedCommandData.md | 2 +- .../structshapeworks_1_1powstruct.html | 2 +- .../Classes/structshapeworks_1_1powstruct.md | 2 +- ...eworks_1_1powstruct_3_01a_00_010_01_4.html | 2 +- ...apeworks_1_1powstruct_3_01a_00_010_01_4.md | 2 +- 6.5/api/Files/AnalysisTool_8h.html | 2 +- 6.5/api/Files/AnalysisTool_8h.md | 2 +- 6.5/api/Files/AnalysisUtils_8h.html | 2 +- 6.5/api/Files/AnalysisUtils_8h.md | 2 +- 6.5/api/Files/Analyze_8h.html | 2 +- 6.5/api/Files/Analyze_8h.md | 2 +- 6.5/api/Files/ColorMap_8h.html | 2 +- 6.5/api/Files/ColorMap_8h.md | 2 +- 6.5/api/Files/ColorSchemes_8h.html | 2 +- 6.5/api/Files/ColorSchemes_8h.md | 2 +- 6.5/api/Files/Command_8h.html | 2 +- 6.5/api/Files/Command_8h.md | 2 +- 6.5/api/Files/Commands_8h.html | 2 +- 6.5/api/Files/Commands_8h.md | 2 +- 6.5/api/Files/CompareWidget_8h.html | 2 +- 6.5/api/Files/CompareWidget_8h.md | 2 +- 6.5/api/Files/ConstraintType_8h.html | 2 +- 6.5/api/Files/ConstraintType_8h.md | 2 +- 6.5/api/Files/Constraint_8h.html | 2 +- 6.5/api/Files/Constraint_8h.md | 2 +- 6.5/api/Files/Constraints_8h.html | 2 +- 6.5/api/Files/Constraints_8h.md | 2 +- 6.5/api/Files/ContourDomain_8h.html | 2 +- 6.5/api/Files/ContourDomain_8h.md | 2 +- 6.5/api/Files/CorrespondenceFunction_8h.html | 2 +- 6.5/api/Files/CorrespondenceFunction_8h.md | 2 +- 6.5/api/Files/CorrespondenceMode_8h.html | 2 +- 6.5/api/Files/CorrespondenceMode_8h.md | 2 +- .../Files/CurvatureSamplingFunction_8h.html | 2 +- 6.5/api/Files/CurvatureSamplingFunction_8h.md | 2 +- 6.5/api/Files/CustomSlider_8h.html | 2 +- 6.5/api/Files/CustomSlider_8h.md | 2 +- .../CustomSurfaceReconstructionFilter_8h.html | 2 +- .../CustomSurfaceReconstructionFilter_8h.md | 2 +- 6.5/api/Files/DataTool_8h.html | 2 +- 6.5/api/Files/DataTool_8h.md | 2 +- 6.5/api/Files/DeepSSMJob_8h.html | 2 +- 6.5/api/Files/DeepSSMJob_8h.md | 2 +- 6.5/api/Files/DeepSSMParameters_8h.html | 2 +- 6.5/api/Files/DeepSSMParameters_8h.md | 2 +- 6.5/api/Files/DeepSSMTool_8h.html | 2 +- 6.5/api/Files/DeepSSMTool_8h.md | 2 +- ...DisentangledCorrespondenceFunction_8h.html | 2 +- .../DisentangledCorrespondenceFunction_8h.md | 2 +- 6.5/api/Files/DomainType_8h.html | 2 +- 6.5/api/Files/DomainType_8h.md | 2 +- 6.5/api/Files/DualVectorFunction_8h.html | 2 +- 6.5/api/Files/DualVectorFunction_8h.md | 2 +- 6.5/api/Files/EigenUtils_8h.html | 2 +- 6.5/api/Files/EigenUtils_8h.md | 2 +- 6.5/api/Files/EvaluationUtil_8h.html | 2 +- 6.5/api/Files/EvaluationUtil_8h.md | 2 +- 6.5/api/Files/ExcelProjectReader_8h.html | 2 +- 6.5/api/Files/ExcelProjectReader_8h.md | 2 +- 6.5/api/Files/ExcelProjectWriter_8h.html | 2 +- 6.5/api/Files/ExcelProjectWriter_8h.md | 2 +- 6.5/api/Files/Exception_8h.html | 2 +- 6.5/api/Files/Exception_8h.md | 2 +- 6.5/api/Files/Executable_8h.html | 2 +- 6.5/api/Files/Executable_8h.md | 2 +- 6.5/api/Files/ExportImageDialog_8h.html | 2 +- 6.5/api/Files/ExportImageDialog_8h.md | 2 +- 6.5/api/Files/ExportUtils_8h.html | 2 +- 6.5/api/Files/ExportUtils_8h.md | 2 +- 6.5/api/Files/FEAreaCoverage_8h.html | 2 +- 6.5/api/Files/FEAreaCoverage_8h.md | 2 +- 6.5/api/Files/FEAutoMesher_8h.html | 2 +- 6.5/api/Files/FEAutoMesher_8h.md | 2 +- 6.5/api/Files/FECVDDecimationModifier_8h.html | 2 +- 6.5/api/Files/FECVDDecimationModifier_8h.md | 2 +- 6.5/api/Files/FECoreMesh_8h.html | 2 +- 6.5/api/Files/FECoreMesh_8h.md | 2 +- 6.5/api/Files/FEElement_8h.html | 2 +- 6.5/api/Files/FEElement_8h.md | 2 +- 6.5/api/Files/FEFillHole_8h.html | 2 +- 6.5/api/Files/FEFillHole_8h.md | 2 +- 6.5/api/Files/FEFixMesh_8h.html | 2 +- 6.5/api/Files/FEFixMesh_8h.md | 2 +- 6.5/api/Files/FEMeshSmoothingModifier_8h.html | 2 +- 6.5/api/Files/FEMeshSmoothingModifier_8h.md | 2 +- 6.5/api/Files/FEMesh_8h.html | 2 +- 6.5/api/Files/FEMesh_8h.md | 2 +- 6.5/api/Files/FENodeElementList_8h.html | 2 +- 6.5/api/Files/FENodeElementList_8h.md | 2 +- 6.5/api/Files/FENodeFaceList_8h.html | 2 +- 6.5/api/Files/FENodeFaceList_8h.md | 2 +- 6.5/api/Files/FENodeNodeList_8h.html | 2 +- 6.5/api/Files/FENodeNodeList_8h.md | 2 +- 6.5/api/Files/FEVTKExport_8h.html | 2 +- 6.5/api/Files/FEVTKExport_8h.md | 2 +- 6.5/api/Files/FEVTKImport_8h.html | 2 +- 6.5/api/Files/FEVTKImport_8h.md | 2 +- 6.5/api/Files/FreeFormConstraint_8h.html | 2 +- 6.5/api/Files/FreeFormConstraint_8h.md | 2 +- 6.5/api/Files/GenericContainerArray_8h.html | 2 +- 6.5/api/Files/GenericContainerArray_8h.md | 2 +- 6.5/api/Files/GenericContainer_8h.html | 2 +- 6.5/api/Files/GenericContainer_8h.md | 2 +- .../Files/GradientDescentOptimizer_8h.html | 2 +- 6.5/api/Files/GradientDescentOptimizer_8h.md | 2 +- 6.5/api/Files/GroomParameters_8h.html | 2 +- 6.5/api/Files/GroomParameters_8h.md | 2 +- 6.5/api/Files/GroomTool_8h.html | 2 +- 6.5/api/Files/GroomTool_8h.md | 2 +- 6.5/api/Files/Groom_8h.html | 2 +- 6.5/api/Files/Groom_8h.md | 2 +- 6.5/api/Files/GroupPvalueJob_8h.html | 2 +- 6.5/api/Files/GroupPvalueJob_8h.md | 2 +- .../Files/ImageDomainWithCurvature_8h.html | 2 +- 6.5/api/Files/ImageDomainWithCurvature_8h.md | 2 +- 6.5/api/Files/ImageDomainWithGradN_8h.html | 2 +- 6.5/api/Files/ImageDomainWithGradN_8h.md | 2 +- .../Files/ImageDomainWithGradients_8h.html | 2 +- 6.5/api/Files/ImageDomainWithGradients_8h.md | 2 +- 6.5/api/Files/ImageDomain_8h.html | 2 +- 6.5/api/Files/ImageDomain_8h.md | 2 +- 6.5/api/Files/ImageLabel_8h.html | 2 +- 6.5/api/Files/ImageLabel_8h.md | 2 +- 6.5/api/Files/ImageUtils_8h.html | 2 +- 6.5/api/Files/ImageUtils_8h.md | 2 +- 6.5/api/Files/Image_8h.html | 2 +- 6.5/api/Files/Image_8h.md | 2 +- 6.5/api/Files/ImplicitSurfaceDomain_8h.html | 2 +- 6.5/api/Files/ImplicitSurfaceDomain_8h.md | 2 +- 6.5/api/Files/Intersect_8h.html | 2 +- 6.5/api/Files/Intersect_8h.md | 2 +- 6.5/api/Files/ItkToVtk_8h.html | 2 +- 6.5/api/Files/ItkToVtk_8h.md | 2 +- 6.5/api/Files/Job_8h.html | 2 +- 6.5/api/Files/Job_8h.md | 2 +- 6.5/api/Files/JsonProjectReader_8h.html | 2 +- 6.5/api/Files/JsonProjectReader_8h.md | 2 +- 6.5/api/Files/JsonProjectWriter_8h.html | 2 +- 6.5/api/Files/JsonProjectWriter_8h.md | 2 +- 6.5/api/Files/KeyboardShortcuts_8h.html | 2 +- 6.5/api/Files/KeyboardShortcuts_8h.md | 2 +- 6.5/api/Files/LandmarkItemDelegate_8h.html | 2 +- 6.5/api/Files/LandmarkItemDelegate_8h.md | 2 +- 6.5/api/Files/LandmarkTableModel_8h.html | 2 +- 6.5/api/Files/LandmarkTableModel_8h.md | 2 +- 6.5/api/Files/LandmarkWidget_8h.html | 2 +- 6.5/api/Files/LandmarkWidget_8h.md | 2 +- .../LegacyCorrespondenceFunction_8h.html | 2 +- .../Files/LegacyCorrespondenceFunction_8h.md | 2 +- 6.5/api/Files/LegacyMeshGenerator_8h.html | 2 +- 6.5/api/Files/LegacyMeshGenerator_8h.md | 2 +- 6.5/api/Files/LegacyShapeMatrix_8h.html | 2 +- 6.5/api/Files/LegacyShapeMatrix_8h.md | 2 +- 6.5/api/Files/Lightbox_8h.html | 2 +- 6.5/api/Files/Lightbox_8h.md | 2 +- .../Files/LinearRegressionShapeMatrix_8h.html | 2 +- .../Files/LinearRegressionShapeMatrix_8h.md | 2 +- 6.5/api/Files/LogWindow_8h.html | 2 +- 6.5/api/Files/LogWindow_8h.md | 2 +- 6.5/api/Files/Logging_8h.html | 2 +- 6.5/api/Files/Logging_8h.md | 2 +- 6.5/api/Files/MeanCurvatureContainer_8h.html | 2 +- 6.5/api/Files/MeanCurvatureContainer_8h.md | 2 +- 6.5/api/Files/MemoryUsage_8h.html | 2 +- 6.5/api/Files/MemoryUsage_8h.md | 2 +- 6.5/api/Files/MeshCache_8h.html | 2 +- 6.5/api/Files/MeshCache_8h.md | 2 +- 6.5/api/Files/MeshComputeThickness_8h.html | 2 +- 6.5/api/Files/MeshComputeThickness_8h.md | 2 +- 6.5/api/Files/MeshDomain_8h.html | 2 +- 6.5/api/Files/MeshDomain_8h.md | 2 +- 6.5/api/Files/MeshGenerator_8h.html | 2 +- 6.5/api/Files/MeshGenerator_8h.md | 2 +- 6.5/api/Files/MeshGeoEntry_8h.html | 2 +- 6.5/api/Files/MeshGeoEntry_8h.md | 2 +- 6.5/api/Files/MeshGroup_8h.html | 2 +- 6.5/api/Files/MeshGroup_8h.md | 2 +- 6.5/api/Files/MeshManager_8h.html | 2 +- 6.5/api/Files/MeshManager_8h.md | 2 +- 6.5/api/Files/MeshSettings_8h.html | 2 +- 6.5/api/Files/MeshSettings_8h.md | 2 +- 6.5/api/Files/MeshSlice_8h.html | 2 +- 6.5/api/Files/MeshSlice_8h.md | 2 +- 6.5/api/Files/MeshUtils_8h.html | 2 +- 6.5/api/Files/MeshUtils_8h.md | 2 +- 6.5/api/Files/MeshWarper_8h.html | 2 +- 6.5/api/Files/MeshWarper_8h.md | 2 +- 6.5/api/Files/MeshWorkQueue_8h.html | 2 +- 6.5/api/Files/MeshWorkQueue_8h.md | 2 +- 6.5/api/Files/MeshWorker_8h.html | 2 +- 6.5/api/Files/MeshWorker_8h.md | 2 +- 6.5/api/Files/MeshWrapper_8h.html | 2 +- 6.5/api/Files/MeshWrapper_8h.md | 2 +- 6.5/api/Files/Mesh_8h.html | 2 +- 6.5/api/Files/Mesh_8h.md | 2 +- 6.5/api/Files/MixedEffectsShapeMatrix_8h.html | 2 +- 6.5/api/Files/MixedEffectsShapeMatrix_8h.md | 2 +- 6.5/api/Files/Module_8dox.html | 2 +- 6.5/api/Files/Module_8dox.md | 2 +- 6.5/api/Files/NetworkAnalysisJob_8h.html | 2 +- 6.5/api/Files/NetworkAnalysisJob_8h.md | 2 +- 6.5/api/Files/ObjectReader_8h.html | 2 +- 6.5/api/Files/ObjectReader_8h.md | 2 +- 6.5/api/Files/ObjectWriter_8h.html | 2 +- 6.5/api/Files/ObjectWriter_8h.md | 2 +- 6.5/api/Files/Observer_8h.html | 2 +- 6.5/api/Files/Observer_8h.md | 2 +- 6.5/api/Files/OptimizationVisualizer_8h.html | 2 +- 6.5/api/Files/OptimizationVisualizer_8h.md | 2 +- 6.5/api/Files/OptimizeParameterFile_8h.html | 2 +- 6.5/api/Files/OptimizeParameterFile_8h.md | 2 +- 6.5/api/Files/OptimizeParameters_8h.html | 2 +- 6.5/api/Files/OptimizeParameters_8h.md | 2 +- 6.5/api/Files/OptimizeTool_8h.html | 2 +- 6.5/api/Files/OptimizeTool_8h.md | 2 +- 6.5/api/Files/Optimize_8h.html | 2 +- 6.5/api/Files/Optimize_8h.md | 2 +- 6.5/api/Files/PaintWidget_8h.html | 2 +- 6.5/api/Files/PaintWidget_8h.md | 2 +- 6.5/api/Files/Parameters_8h.html | 2 +- 6.5/api/Files/Parameters_8h.md | 2 +- 6.5/api/Files/ParticleAreaJob_8h.html | 2 +- 6.5/api/Files/ParticleAreaJob_8h.md | 2 +- 6.5/api/Files/ParticleAreaPanel_8h.html | 2 +- 6.5/api/Files/ParticleAreaPanel_8h.md | 2 +- 6.5/api/Files/ParticleArea_8h.html | 2 +- 6.5/api/Files/ParticleArea_8h.md | 2 +- 6.5/api/Files/ParticleColors_8h.html | 2 +- 6.5/api/Files/ParticleColors_8h.md | 2 +- 6.5/api/Files/ParticleDomain_8h.html | 2 +- 6.5/api/Files/ParticleDomain_8h.md | 2 +- 6.5/api/Files/ParticleEvents_8h.html | 2 +- 6.5/api/Files/ParticleEvents_8h.md | 2 +- 6.5/api/Files/ParticleFile_8h.html | 2 +- 6.5/api/Files/ParticleFile_8h.md | 2 +- .../Files/ParticleGaussianModeWriter_8h.html | 2 +- .../Files/ParticleGaussianModeWriter_8h.md | 2 +- .../Files/ParticleGoodBadAssessment_8h.html | 2 +- 6.5/api/Files/ParticleGoodBadAssessment_8h.md | 2 +- 6.5/api/Files/ParticleNeighborhood_8h.html | 2 +- 6.5/api/Files/ParticleNeighborhood_8h.md | 2 +- .../Files/ParticleNormalEvaluationJob_8h.html | 2 +- .../Files/ParticleNormalEvaluationJob_8h.md | 2 +- .../Files/ParticleNormalEvaluation_8h.html | 2 +- 6.5/api/Files/ParticleNormalEvaluation_8h.md | 2 +- 6.5/api/Files/ParticlePointIndexPair_8h.html | 2 +- 6.5/api/Files/ParticlePointIndexPair_8h.md | 2 +- 6.5/api/Files/ParticleRegionDomain_8h.html | 2 +- 6.5/api/Files/ParticleRegionDomain_8h.md | 2 +- .../Files/ParticleRegionNeighborhood_8h.html | 2 +- .../Files/ParticleRegionNeighborhood_8h.md | 2 +- 6.5/api/Files/ParticleShapeStatistics_8h.html | 2 +- 6.5/api/Files/ParticleShapeStatistics_8h.md | 2 +- .../Files/ParticleSurfaceNeighborhood_8h.html | 2 +- .../Files/ParticleSurfaceNeighborhood_8h.md | 2 +- .../Files/ParticleSystemEvaluation_8h.html | 2 +- 6.5/api/Files/ParticleSystemEvaluation_8h.md | 2 +- 6.5/api/Files/ParticleSystem_8h.html | 2 +- 6.5/api/Files/ParticleSystem_8h.md | 2 +- 6.5/api/Files/Particles_8h.html | 2 +- 6.5/api/Files/Particles_8h.md | 2 +- 6.5/api/Files/PlaneConstraint_8h.html | 2 +- 6.5/api/Files/PlaneConstraint_8h.md | 2 +- 6.5/api/Files/PlaneWidget_8h.html | 2 +- 6.5/api/Files/PlaneWidget_8h.md | 2 +- 6.5/api/Files/PowerOfTwoPointTree_8h.html | 2 +- 6.5/api/Files/PowerOfTwoPointTree_8h.md | 2 +- 6.5/api/Files/PreferencesWindow_8h.html | 2 +- 6.5/api/Files/PreferencesWindow_8h.md | 2 +- 6.5/api/Files/Preferences_8h.html | 2 +- 6.5/api/Files/Preferences_8h.md | 2 +- 6.5/api/Files/Procrustes3D_8h.html | 2 +- 6.5/api/Files/Procrustes3D_8h.md | 2 +- 6.5/api/Files/ProcrustesRegistration_8h.html | 2 +- 6.5/api/Files/ProcrustesRegistration_8h.md | 2 +- 6.5/api/Files/ProjectReader_8h.html | 2 +- 6.5/api/Files/ProjectReader_8h.md | 2 +- 6.5/api/Files/ProjectUtils_8h.html | 2 +- 6.5/api/Files/ProjectUtils_8h.md | 2 +- 6.5/api/Files/Project_8h.html | 2 +- 6.5/api/Files/Project_8h.md | 2 +- 6.5/api/Files/PythonAnalyze_8h.html | 2 +- 6.5/api/Files/PythonAnalyze_8h.md | 2 +- 6.5/api/Files/PythonWorker_8h.html | 2 +- 6.5/api/Files/PythonWorker_8h.md | 2 +- 6.5/api/Files/QMeshWarper_8h.html | 2 +- 6.5/api/Files/QMeshWarper_8h.md | 2 +- 6.5/api/Files/QOptimize_8h.html | 2 +- 6.5/api/Files/QOptimize_8h.md | 2 +- 6.5/api/Files/ReconstructSurface_8h.html | 2 +- 6.5/api/Files/ReconstructSurface_8h.md | 2 +- 6.5/api/Files/Reconstruction_8h.html | 2 +- 6.5/api/Files/Reconstruction_8h.md | 2 +- 6.5/api/Files/Region_8h.html | 2 +- 6.5/api/Files/Region_8h.md | 2 +- 6.5/api/Files/Sampler_8h.html | 2 +- 6.5/api/Files/Sampler_8h.md | 2 +- 6.5/api/Files/SamplingFunction_8h.html | 2 +- 6.5/api/Files/SamplingFunction_8h.md | 2 +- 6.5/api/Files/Session_8h.html | 2 +- 6.5/api/Files/Session_8h.md | 2 +- 6.5/api/Files/ShapeEvaluationJob_8h.html | 2 +- 6.5/api/Files/ShapeEvaluationJob_8h.md | 2 +- 6.5/api/Files/ShapeEvaluation_8h.html | 2 +- 6.5/api/Files/ShapeEvaluation_8h.md | 2 +- 6.5/api/Files/ShapeGradientMatrix_8h.html | 2 +- 6.5/api/Files/ShapeGradientMatrix_8h.md | 2 +- 6.5/api/Files/ShapeMatrix_8h.html | 2 +- 6.5/api/Files/ShapeMatrix_8h.md | 2 +- 6.5/api/Files/ShapeWorksStudioApp_8h.html | 2 +- 6.5/api/Files/ShapeWorksStudioApp_8h.md | 2 +- 6.5/api/Files/ShapeWorksWorker_8h.html | 2 +- 6.5/api/Files/ShapeWorksWorker_8h.md | 2 +- 6.5/api/Files/Shape_8h.html | 2 +- 6.5/api/Files/Shape_8h.md | 2 +- 6.5/api/Files/ShapeworksUtils_8h.html | 2 +- 6.5/api/Files/ShapeworksUtils_8h.md | 2 +- 6.5/api/Files/Shapeworks_8h.html | 2 +- 6.5/api/Files/Shapeworks_8h.md | 2 +- 6.5/api/Files/SharedCommandData_8h.html | 2 +- 6.5/api/Files/SharedCommandData_8h.md | 2 +- 6.5/api/Files/SliceView_8h.html | 2 +- 6.5/api/Files/SliceView_8h.md | 2 +- 6.5/api/Files/SplashScreen_8h.html | 2 +- 6.5/api/Files/SplashScreen_8h.md | 2 +- 6.5/api/Files/StackWalker_8h.html | 2 +- 6.5/api/Files/StackWalker_8h.md | 2 +- 6.5/api/Files/StatsGroupLDAJob_8h.html | 2 +- 6.5/api/Files/StatsGroupLDAJob_8h.md | 2 +- 6.5/api/Files/StatusBarWidget_8h.html | 2 +- 6.5/api/Files/StatusBarWidget_8h.md | 2 +- 6.5/api/Files/StringUtils_8h.html | 2 +- 6.5/api/Files/StringUtils_8h.md | 2 +- 6.5/api/Files/StudioEnums_8h.html | 2 +- 6.5/api/Files/StudioEnums_8h.md | 2 +- 6.5/api/Files/StudioHandleWidget_8h.html | 2 +- 6.5/api/Files/StudioHandleWidget_8h.md | 2 +- 6.5/api/Files/StudioInteractorStyle_8h.html | 2 +- 6.5/api/Files/StudioInteractorStyle_8h.md | 2 +- 6.5/api/Files/StudioLogger_8h.html | 2 +- 6.5/api/Files/StudioLogger_8h.md | 2 +- 6.5/api/Files/StudioMesh_8h.html | 2 +- 6.5/api/Files/StudioMesh_8h.md | 2 +- .../Files/StudioSliceInteractorStyle_8h.html | 2 +- .../Files/StudioSliceInteractorStyle_8h.md | 2 +- 6.5/api/Files/StudioUtils_8h.html | 2 +- 6.5/api/Files/StudioUtils_8h.md | 2 +- 6.5/api/Files/StudioVtkOutputWindow_8h.html | 2 +- 6.5/api/Files/StudioVtkOutputWindow_8h.md | 2 +- 6.5/api/Files/Style_8h.html | 2 +- 6.5/api/Files/Style_8h.md | 2 +- 6.5/api/Files/Subject_8h.html | 2 +- 6.5/api/Files/Subject_8h.md | 2 +- 6.5/api/Files/SurfaceReconstructor_8h.html | 2 +- 6.5/api/Files/SurfaceReconstructor_8h.md | 2 +- 6.5/api/Files/Telemetry_8h.html | 2 +- 6.5/api/Files/Telemetry_8h.md | 2 +- 6.5/api/Files/UpdateChecker_8h.html | 2 +- 6.5/api/Files/UpdateChecker_8h.md | 2 +- 6.5/api/Files/Utils_8h.html | 2 +- 6.5/api/Files/Utils_8h.md | 2 +- 6.5/api/Files/Variant_8h.html | 2 +- 6.5/api/Files/Variant_8h.md | 2 +- 6.5/api/Files/VectorFunction_8h.html | 2 +- 6.5/api/Files/VectorFunction_8h.md | 2 +- 6.5/api/Files/VectorImage_8h.html | 2 +- 6.5/api/Files/VectorImage_8h.md | 2 +- 6.5/api/Files/Viewer_8h.html | 2 +- 6.5/api/Files/Viewer_8h.md | 2 +- 6.5/api/Files/Visualizer_8h.html | 2 +- 6.5/api/Files/Visualizer_8h.md | 2 +- 6.5/api/Files/VtkMeshWrapper_8h.html | 2 +- 6.5/api/Files/VtkMeshWrapper_8h.md | 2 +- 6.5/api/Files/WheelEventForwarder_8h.html | 2 +- 6.5/api/Files/WheelEventForwarder_8h.md | 2 +- 6.5/api/Files/WindowsCrashHandler_8h.html | 2 +- 6.5/api/Files/WindowsCrashHandler_8h.md | 2 +- 6.5/api/Files/Worker_8h.html | 2 +- 6.5/api/Files/Worker_8h.md | 2 +- .../dir_0e4564af99249380ef1f30404400c0a3.html | 2 +- .../dir_0e4564af99249380ef1f30404400c0a3.md | 2 +- .../dir_18c9fb63c9ecb061d3bfcf14463b37a6.html | 2 +- .../dir_18c9fb63c9ecb061d3bfcf14463b37a6.md | 2 +- .../dir_2efd803177123288b92908ec296fe578.html | 2 +- .../dir_2efd803177123288b92908ec296fe578.md | 2 +- .../dir_36d0ece48b2c599ca7cdf3fcf70a4111.html | 2 +- .../dir_36d0ece48b2c599ca7cdf3fcf70a4111.md | 2 +- .../dir_37dfc33913c47c48c20c22cdbf1559c0.html | 2 +- .../dir_37dfc33913c47c48c20c22cdbf1559c0.md | 2 +- .../dir_3c387d8f52af5a1c9b80596228515621.html | 2 +- .../dir_3c387d8f52af5a1c9b80596228515621.md | 2 +- .../dir_409787ee32d93aa6a212981d92e6dc9a.html | 2 +- .../dir_409787ee32d93aa6a212981d92e6dc9a.md | 2 +- .../dir_4481568adb70067b4bb4b5ce096891b2.html | 2 +- .../dir_4481568adb70067b4bb4b5ce096891b2.md | 2 +- .../dir_48521012c292b6dfb1bd2f2ae5aacf6c.html | 2 +- .../dir_48521012c292b6dfb1bd2f2ae5aacf6c.md | 2 +- .../dir_486a45e6ebc11931a27093b877e14af3.html | 2 +- .../dir_486a45e6ebc11931a27093b877e14af3.md | 2 +- .../dir_4ea27a77bf632cd63100af8008b8abf4.html | 2 +- .../dir_4ea27a77bf632cd63100af8008b8abf4.md | 2 +- .../dir_645c19d7da098e01621cdebb663b8767.html | 2 +- .../dir_645c19d7da098e01621cdebb663b8767.md | 2 +- .../dir_6cd87311705ab44b460cce19838a0cf5.html | 2 +- .../dir_6cd87311705ab44b460cce19838a0cf5.md | 2 +- .../dir_6e6cb9563333489fde7459b1f95e59a5.html | 2 +- .../dir_6e6cb9563333489fde7459b1f95e59a5.md | 2 +- .../dir_73a09fceee206218e6d903b3c5deb969.html | 2 +- .../dir_73a09fceee206218e6d903b3c5deb969.md | 2 +- .../dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html | 2 +- .../dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md | 2 +- .../dir_85653c7ab6d0c0e003ea454a8b2baba9.html | 2 +- .../dir_85653c7ab6d0c0e003ea454a8b2baba9.md | 2 +- .../dir_8703d550aef9c899d5cf3c4cd311a554.html | 2 +- .../dir_8703d550aef9c899d5cf3c4cd311a554.md | 2 +- .../dir_8c1195e4829fa17630c4278c41da729a.html | 2 +- .../dir_8c1195e4829fa17630c4278c41da729a.md | 2 +- .../dir_9e4ba78685e6608cfdea07960abd189c.html | 2 +- .../dir_9e4ba78685e6608cfdea07960abd189c.md | 2 +- .../dir_9e99c41d3802fada2a0119d079df0956.html | 2 +- .../dir_9e99c41d3802fada2a0119d079df0956.md | 2 +- .../dir_a4bc8cdb2751c8604311dac5c98fb558.html | 2 +- .../dir_a4bc8cdb2751c8604311dac5c98fb558.md | 2 +- .../dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html | 2 +- .../dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md | 2 +- .../dir_b0b944fd4368961b4965dd28c72a00a2.html | 2 +- .../dir_b0b944fd4368961b4965dd28c72a00a2.md | 2 +- .../dir_b61e4180fa497c41c4b364a945b36efe.html | 2 +- .../dir_b61e4180fa497c41c4b364a945b36efe.md | 2 +- .../dir_b6c1f9d4f6080dc79a7a9d2c69150815.html | 2 +- .../dir_b6c1f9d4f6080dc79a7a9d2c69150815.md | 2 +- .../dir_b92c77c85671879e4c48e03051777b7e.html | 2 +- .../dir_b92c77c85671879e4c48e03051777b7e.md | 2 +- .../dir_baf8d66207f3fc39faf866e67ca98ce2.html | 2 +- .../dir_baf8d66207f3fc39faf866e67ca98ce2.md | 2 +- .../dir_c13ed27a749775eeb2d59234813cae48.html | 2 +- .../dir_c13ed27a749775eeb2d59234813cae48.md | 2 +- .../dir_c8a30dba58b805ee2d567ab327483fca.html | 2 +- .../dir_c8a30dba58b805ee2d567ab327483fca.md | 2 +- .../dir_c8ce71b7fc76205395f44c2291e69b75.html | 2 +- .../dir_c8ce71b7fc76205395f44c2291e69b75.md | 2 +- .../dir_cb8980ab440f994989990a6313097edf.html | 2 +- .../dir_cb8980ab440f994989990a6313097edf.md | 2 +- .../dir_d77cc112773b74d11448b7fad9142c8e.html | 2 +- .../dir_d77cc112773b74d11448b7fad9142c8e.md | 2 +- .../dir_e938d55d0d25a8e3889ca0b02966a6b3.html | 2 +- .../dir_e938d55d0d25a8e3889ca0b02966a6b3.md | 2 +- .../dir_f02d5d8e81e1edd3722111e50e18938d.html | 2 +- .../dir_f02d5d8e81e1edd3722111e50e18938d.md | 2 +- .../dir_f27aadd9c7f02e71212dbf7893d91496.html | 2 +- .../dir_f27aadd9c7f02e71212dbf7893d91496.md | 2 +- .../dir_f6c26397dfcef1d1f5f1786f8168e7dd.html | 2 +- .../dir_f6c26397dfcef1d1f5f1786f8168e7dd.md | 2 +- 6.5/api/Files/index_files.html | 2 +- 6.5/api/Files/index_files.md | 2 +- 6.5/api/Files/itkAdvancedTransform_8h.html | 2 +- 6.5/api/Files/itkAdvancedTransform_8h.md | 2 +- ...ySupportedRBFSparseKernelTransform_8h.html | 2 +- ...tlySupportedRBFSparseKernelTransform_8h.md | 2 +- 6.5/api/Files/itkKernelTransform2_8h.html | 2 +- 6.5/api/Files/itkKernelTransform2_8h.md | 2 +- .../itkMultiplyByConstantImageFilter_8h.html | 2 +- .../itkMultiplyByConstantImageFilter_8h.md | 2 +- .../Files/itkSparseKernelTransform_8h.html | 2 +- 6.5/api/Files/itkSparseKernelTransform_8h.md | 2 +- .../Files/itkTPGACLevelSetImageFilter_8h.html | 2 +- .../Files/itkTPGACLevelSetImageFilter_8h.md | 2 +- ...itkThinPlateSplineKernelTransform2_8h.html | 2 +- .../itkThinPlateSplineKernelTransform2_8h.md | 2 +- 6.5/api/Files/math3d_8h.html | 2 +- 6.5/api/Files/math3d_8h.md | 2 +- 6.5/api/Files/meshFIM_8h.html | 2 +- 6.5/api/Files/meshFIM_8h.md | 2 +- 6.5/api/Files/pybind__utils_8h.html | 2 +- 6.5/api/Files/pybind__utils_8h.md | 2 +- 6.5/api/Files/resource_8h.html | 2 +- 6.5/api/Files/resource_8h.md | 2 +- 6.5/api/Files/stdafx_8h.html | 2 +- 6.5/api/Files/stdafx_8h.md | 2 +- 6.5/api/Files/vtkPolyDataToImageData_8h.html | 2 +- 6.5/api/Files/vtkPolyDataToImageData_8h.md | 2 +- 6.5/api/Modules/group__Group-Common.html | 2 +- 6.5/api/Modules/group__Group-Common.md | 2 +- 6.5/api/Modules/group__Group-Constraint.html | 2 +- 6.5/api/Modules/group__Group-Constraint.md | 2 +- 6.5/api/Modules/group__Group-Image.html | 2 +- 6.5/api/Modules/group__Group-Image.md | 2 +- 6.5/api/Modules/group__Group-Mesh.html | 2 +- 6.5/api/Modules/group__Group-Mesh.md | 2 +- 6.5/api/Modules/index_groups.html | 2 +- 6.5/api/Modules/index_groups.md | 2 +- 6.5/api/Namespaces/index_namespaces.html | 2 +- 6.5/api/Namespaces/index_namespaces.md | 2 +- 6.5/api/Namespaces/namespaceUi.html | 2 +- 6.5/api/Namespaces/namespaceUi.md | 2 +- 6.5/api/Namespaces/namespacefmt.html | 2 +- 6.5/api/Namespaces/namespacefmt.md | 2 +- 6.5/api/Namespaces/namespaceitk.html | 2 +- 6.5/api/Namespaces/namespaceitk.md | 2 +- .../Namespaces/namespaceitk_1_1Functor.html | 2 +- 6.5/api/Namespaces/namespaceitk_1_1Functor.md | 2 +- 6.5/api/Namespaces/namespaceshapeworks.html | 2 +- 6.5/api/Namespaces/namespaceshapeworks.md | 2 +- .../namespaceshapeworks_1_1mesh.html | 2 +- .../Namespaces/namespaceshapeworks_1_1mesh.md | 2 +- .../namespaceshapeworks_1_1particles.html | 2 +- .../namespaceshapeworks_1_1particles.md | 2 +- .../namespaceshapeworks_1_1project.html | 2 +- .../namespaceshapeworks_1_1project.md | 2 +- ...paceshapeworks_1_1project_1_1prefixes.html | 2 +- ...espaceshapeworks_1_1project_1_1prefixes.md | 2 +- ...mespaceshapeworks_1_1project_1_1types.html | 2 +- ...namespaceshapeworks_1_1project_1_1types.md | 2 +- 6.5/api/Namespaces/namespacestd.html | 2 +- 6.5/api/Namespaces/namespacestd.md | 2 +- 6.5/api/Namespaces/namespaceutils.html | 2 +- 6.5/api/Namespaces/namespaceutils.md | 2 +- 6.5/python/python-api.html | 2 +- 6.5/search/search_index.json | 2 +- 6.5/sitemap.xml | 1216 ++++++++--------- 6.5/sitemap.xml.gz | Bin 5618 -> 5619 bytes dev/api/Classes/classColorScheme.html | 2 +- dev/api/Classes/classColorScheme.md | 2 +- dev/api/Classes/classColorSchemes.html | 2 +- dev/api/Classes/classColorSchemes.md | 2 +- dev/api/Classes/classCustomSlider.html | 2 +- dev/api/Classes/classCustomSlider.md | 2 +- ...lassCustomSurfaceReconstructionFilter.html | 2 +- .../classCustomSurfaceReconstructionFilter.md | 2 +- dev/api/Classes/classFEAreaCoverage.html | 2 +- dev/api/Classes/classFEAreaCoverage.md | 2 +- .../classFEAreaCoverage_1_1Surface.html | 2 +- .../Classes/classFEAreaCoverage_1_1Surface.md | 2 +- dev/api/Classes/classFEAutoMesher.html | 2 +- dev/api/Classes/classFEAutoMesher.md | 2 +- .../Classes/classFECVDDecimationModifier.html | 2 +- .../Classes/classFECVDDecimationModifier.md | 2 +- ...assFECVDDecimationModifier_1_1Cluster.html | 2 +- ...classFECVDDecimationModifier_1_1Cluster.md | 2 +- .../classFECVDDecimationModifier_1_1NODE.html | 2 +- .../classFECVDDecimationModifier_1_1NODE.md | 2 +- dev/api/Classes/classFECoreMesh.html | 2 +- dev/api/Classes/classFECoreMesh.md | 2 +- dev/api/Classes/classFEEdge.html | 2 +- dev/api/Classes/classFEEdge.md | 2 +- dev/api/Classes/classFEElement.html | 2 +- dev/api/Classes/classFEElement.md | 2 +- dev/api/Classes/classFEElementData.html | 2 +- dev/api/Classes/classFEElementData.md | 2 +- dev/api/Classes/classFEElement__.html | 2 +- dev/api/Classes/classFEElement__.md | 2 +- dev/api/Classes/classFEFace.html | 2 +- dev/api/Classes/classFEFace.md | 2 +- dev/api/Classes/classFEFillHole.html | 2 +- dev/api/Classes/classFEFillHole.md | 2 +- .../Classes/classFEFillHole_1_1EdgeRing.html | 2 +- .../Classes/classFEFillHole_1_1EdgeRing.md | 2 +- dev/api/Classes/classFEFixMesh.html | 2 +- dev/api/Classes/classFEFixMesh.md | 2 +- dev/api/Classes/classFEItem.html | 2 +- dev/api/Classes/classFEItem.md | 2 +- dev/api/Classes/classFEMesh.html | 2 +- dev/api/Classes/classFEMesh.md | 2 +- .../Classes/classFEMeshSmoothingModifier.html | 2 +- .../Classes/classFEMeshSmoothingModifier.md | 2 +- dev/api/Classes/classFENode.html | 2 +- dev/api/Classes/classFENode.md | 2 +- dev/api/Classes/classFENodeElementList.html | 2 +- dev/api/Classes/classFENodeElementList.md | 2 +- dev/api/Classes/classFENodeFaceList.html | 2 +- dev/api/Classes/classFENodeFaceList.md | 2 +- dev/api/Classes/classFENodeNodeList.html | 2 +- dev/api/Classes/classFENodeNodeList.md | 2 +- dev/api/Classes/classFETri3.html | 2 +- dev/api/Classes/classFETri3.md | 2 +- dev/api/Classes/classFEVTKExport.html | 2 +- dev/api/Classes/classFEVTKExport.md | 2 +- dev/api/Classes/classFEVTKimport.html | 2 +- dev/api/Classes/classFEVTKimport.md | 2 +- dev/api/Classes/classGLCOLOR.html | 2 +- dev/api/Classes/classGLCOLOR.md | 2 +- dev/api/Classes/classLegacyMeshGenerator.html | 2 +- dev/api/Classes/classLegacyMeshGenerator.md | 2 +- dev/api/Classes/classMeshSettings.html | 2 +- dev/api/Classes/classMeshSettings.md | 2 +- dev/api/Classes/classObjectReader.html | 2 +- dev/api/Classes/classObjectReader.md | 2 +- dev/api/Classes/classObjectWriter.html | 2 +- dev/api/Classes/classObjectWriter.md | 2 +- .../classParticleEvent_1_1_01Parent.html | 2 +- .../classParticleEvent_1_1_01Parent.md | 2 +- ...ticleGradientDescentPositionOptimizer.html | 2 +- ...articleGradientDescentPositionOptimizer.md | 2 +- dev/api/Classes/classParticleImageDomain.html | 2 +- dev/api/Classes/classParticleImageDomain.md | 2 +- ...classParticleImageDomainWithCurvature.html | 2 +- .../classParticleImageDomainWithCurvature.md | 2 +- .../classParticleImageDomainWithGradN.html | 2 +- .../classParticleImageDomainWithGradN.md | 2 +- ...classParticleImageDomainWithGradients.html | 2 +- .../classParticleImageDomainWithGradients.md | 2 +- .../classParticleImplicitSurfaceDomain.html | 2 +- .../classParticleImplicitSurfaceDomain.md | 2 +- .../classParticleMeanCurvatureAttribute.html | 2 +- .../classParticleMeanCurvatureAttribute.md | 2 +- .../classParticleProcrustesRegistration.html | 2 +- .../classParticleProcrustesRegistration.md | 2 +- ...eShapeLinearRegressionMatrixAttribute.html | 2 +- ...cleShapeLinearRegressionMatrixAttribute.md | 2 +- .../classParticleShapeMatrixAttribute.html | 2 +- .../classParticleShapeMatrixAttribute.md | 2 +- ...ticleShapeMixedEffectsMatrixAttribute.html | 2 +- ...articleShapeMixedEffectsMatrixAttribute.md | 2 +- dev/api/Classes/classPreferences.html | 2 +- dev/api/Classes/classPreferences.md | 2 +- dev/api/Classes/classProcrustes3D.html | 2 +- dev/api/Classes/classProcrustes3D.md | 2 +- dev/api/Classes/classReconstruction.html | 2 +- dev/api/Classes/classReconstruction.md | 2 +- dev/api/Classes/classStudioLogger.html | 2 +- dev/api/Classes/classStudioLogger.md | 2 +- .../Classes/classSurfaceReconstructor.html | 2 +- dev/api/Classes/classSurfaceReconstructor.md | 2 +- dev/api/Classes/classUtils.html | 2 +- dev/api/Classes/classUtils.md | 2 +- .../classitk_1_1AdvancedTransform.html | 2 +- .../Classes/classitk_1_1AdvancedTransform.md | 2 +- ...ateImageFunctionWithDoubleCoefficents.html | 2 +- ...olateImageFunctionWithDoubleCoefficents.md | 2 +- ...ctlySupportedRBFSparseKernelTransform.html | 2 +- ...pactlySupportedRBFSparseKernelTransform.md | 2 +- ...sitk_1_1Functor_1_1MultiplyByConstant.html | 2 +- ...assitk_1_1Functor_1_1MultiplyByConstant.md | 2 +- .../Classes/classitk_1_1KernelTransform2.html | 2 +- .../Classes/classitk_1_1KernelTransform2.md | 2 +- ...sitk_1_1MultiplyByConstantImageFilter.html | 2 +- ...assitk_1_1MultiplyByConstantImageFilter.md | 2 +- .../classitk_1_1SparseKernelTransform.html | 2 +- .../classitk_1_1SparseKernelTransform.md | 2 +- .../classitk_1_1TPGACLevelSetImageFilter.html | 2 +- .../classitk_1_1TPGACLevelSetImageFilter.md | 2 +- ...tk_1_1ThinPlateSplineKernelTransform2.html | 2 +- ...sitk_1_1ThinPlateSplineKernelTransform2.md | 2 +- dev/api/Classes/classmat3d.html | 2 +- dev/api/Classes/classmat3d.md | 2 +- dev/api/Classes/classmatrix.html | 2 +- dev/api/Classes/classmatrix.md | 2 +- dev/api/Classes/classmeshFIM.html | 2 +- dev/api/Classes/classmeshFIM.md | 2 +- dev/api/Classes/classobject__reader.html | 2 +- dev/api/Classes/classobject__reader.md | 2 +- dev/api/Classes/classobject__writer.html | 2 +- dev/api/Classes/classobject__writer.md | 2 +- dev/api/Classes/classquatd.html | 2 +- dev/api/Classes/classquatd.md | 2 +- .../classshapeworks_1_1AnalysisTool.html | 2 +- .../classshapeworks_1_1AnalysisTool.md | 2 +- .../classshapeworks_1_1AnalysisUtils.html | 2 +- .../classshapeworks_1_1AnalysisUtils.md | 2 +- .../Classes/classshapeworks_1_1Analyze.html | 2 +- dev/api/Classes/classshapeworks_1_1Analyze.md | 2 +- ...lassshapeworks_1_1AnalyzeCommandGroup.html | 2 +- .../classshapeworks_1_1AnalyzeCommandGroup.md | 2 +- .../Classes/classshapeworks_1_1ColorMap.html | 2 +- .../Classes/classshapeworks_1_1ColorMap.md | 2 +- .../Classes/classshapeworks_1_1ColorMaps.html | 2 +- .../Classes/classshapeworks_1_1ColorMaps.md | 2 +- .../Classes/classshapeworks_1_1Command.html | 2 +- dev/api/Classes/classshapeworks_1_1Command.md | 2 +- .../classshapeworks_1_1CompareSettings.html | 2 +- .../classshapeworks_1_1CompareSettings.md | 2 +- .../classshapeworks_1_1CompareWidget.html | 2 +- .../classshapeworks_1_1CompareWidget.md | 2 +- .../classshapeworks_1_1Constraint.html | 2 +- .../Classes/classshapeworks_1_1Constraint.md | 2 +- .../classshapeworks_1_1Constraints.html | 2 +- .../Classes/classshapeworks_1_1Constraints.md | 2 +- .../classshapeworks_1_1ContourDomain.html | 2 +- .../classshapeworks_1_1ContourDomain.md | 2 +- ...sshapeworks_1_1CorrespondenceFunction.html | 2 +- ...assshapeworks_1_1CorrespondenceFunction.md | 2 +- ...apeworks_1_1CurvatureSamplingFunction.html | 2 +- ...shapeworks_1_1CurvatureSamplingFunction.md | 2 +- .../Classes/classshapeworks_1_1DataTool.html | 2 +- .../Classes/classshapeworks_1_1DataTool.md | 2 +- .../classshapeworks_1_1DeepSSMJob.html | 2 +- .../Classes/classshapeworks_1_1DeepSSMJob.md | 2 +- .../classshapeworks_1_1DeepSSMParameters.html | 2 +- .../classshapeworks_1_1DeepSSMParameters.md | 2 +- .../classshapeworks_1_1DeepSSMTool.html | 2 +- .../Classes/classshapeworks_1_1DeepSSMTool.md | 2 +- ...1_1DisentangledCorrespondenceFunction.html | 2 +- ...s_1_1DisentangledCorrespondenceFunction.md | 2 +- ...classshapeworks_1_1DualVectorFunction.html | 2 +- .../classshapeworks_1_1DualVectorFunction.md | 2 +- .../classshapeworks_1_1EigenUtils.html | 2 +- .../Classes/classshapeworks_1_1EigenUtils.md | 2 +- ...classshapeworks_1_1ExcelProjectReader.html | 2 +- .../classshapeworks_1_1ExcelProjectReader.md | 2 +- ...classshapeworks_1_1ExcelProjectWriter.html | 2 +- .../classshapeworks_1_1ExcelProjectWriter.md | 2 +- .../classshapeworks_1_1Executable.html | 2 +- .../Classes/classshapeworks_1_1Executable.md | 2 +- .../classshapeworks_1_1ExportImageDialog.html | 2 +- .../classshapeworks_1_1ExportImageDialog.md | 2 +- .../classshapeworks_1_1ExportUtils.html | 2 +- .../Classes/classshapeworks_1_1ExportUtils.md | 2 +- ...classshapeworks_1_1FreeFormConstraint.html | 2 +- .../classshapeworks_1_1FreeFormConstraint.md | 2 +- .../classshapeworks_1_1GenericContainer.html | 2 +- .../classshapeworks_1_1GenericContainer.md | 2 +- ...ssshapeworks_1_1GenericContainerArray.html | 2 +- ...lassshapeworks_1_1GenericContainerArray.md | 2 +- ...hapeworks_1_1GradientDescentOptimizer.html | 2 +- ...sshapeworks_1_1GradientDescentOptimizer.md | 2 +- dev/api/Classes/classshapeworks_1_1Groom.html | 2 +- dev/api/Classes/classshapeworks_1_1Groom.md | 2 +- .../classshapeworks_1_1GroomCommandGroup.html | 2 +- .../classshapeworks_1_1GroomCommandGroup.md | 2 +- .../classshapeworks_1_1GroomParameters.html | 2 +- .../classshapeworks_1_1GroomParameters.md | 2 +- .../Classes/classshapeworks_1_1GroomTool.html | 2 +- .../Classes/classshapeworks_1_1GroomTool.md | 2 +- .../classshapeworks_1_1GroupPvalueJob.html | 2 +- .../classshapeworks_1_1GroupPvalueJob.md | 2 +- dev/api/Classes/classshapeworks_1_1Image.html | 2 +- dev/api/Classes/classshapeworks_1_1Image.md | 2 +- .../classshapeworks_1_1ImageCommand.html | 2 +- .../classshapeworks_1_1ImageCommand.md | 2 +- .../classshapeworks_1_1ImageDomain.html | 2 +- .../Classes/classshapeworks_1_1ImageDomain.md | 2 +- ...hapeworks_1_1ImageDomainWithCurvature.html | 2 +- ...sshapeworks_1_1ImageDomainWithCurvature.md | 2 +- ...assshapeworks_1_1ImageDomainWithGradN.html | 2 +- ...classshapeworks_1_1ImageDomainWithGradN.md | 2 +- ...hapeworks_1_1ImageDomainWithGradients.html | 2 +- ...sshapeworks_1_1ImageDomainWithGradients.md | 2 +- .../classshapeworks_1_1ImageLabel.html | 2 +- .../Classes/classshapeworks_1_1ImageLabel.md | 2 +- .../classshapeworks_1_1ImageUtils.html | 2 +- .../Classes/classshapeworks_1_1ImageUtils.md | 2 +- ...ssshapeworks_1_1ImplicitSurfaceDomain.html | 2 +- ...lassshapeworks_1_1ImplicitSurfaceDomain.md | 2 +- .../classshapeworks_1_1IndexRegion.html | 2 +- .../Classes/classshapeworks_1_1IndexRegion.md | 2 +- dev/api/Classes/classshapeworks_1_1Job.html | 2 +- dev/api/Classes/classshapeworks_1_1Job.md | 2 +- .../classshapeworks_1_1JsonProjectReader.html | 2 +- .../classshapeworks_1_1JsonProjectReader.md | 2 +- .../classshapeworks_1_1JsonProjectWriter.html | 2 +- .../classshapeworks_1_1JsonProjectWriter.md | 2 +- .../classshapeworks_1_1KeyboardShortcuts.html | 2 +- .../classshapeworks_1_1KeyboardShortcuts.md | 2 +- ...classshapeworks_1_1LandmarkDefinition.html | 2 +- .../classshapeworks_1_1LandmarkDefinition.md | 2 +- ...assshapeworks_1_1LandmarkItemDelegate.html | 2 +- ...classshapeworks_1_1LandmarkItemDelegate.md | 2 +- ...classshapeworks_1_1LandmarkTableModel.html | 2 +- .../classshapeworks_1_1LandmarkTableModel.md | 2 +- .../classshapeworks_1_1LandmarkWidget.html | 2 +- .../classshapeworks_1_1LandmarkWidget.md | 2 +- ...works_1_1LegacyCorrespondenceFunction.html | 2 +- ...peworks_1_1LegacyCorrespondenceFunction.md | 2 +- .../classshapeworks_1_1LegacyShapeMatrix.html | 2 +- .../classshapeworks_1_1LegacyShapeMatrix.md | 2 +- .../Classes/classshapeworks_1_1Lightbox.html | 2 +- .../Classes/classshapeworks_1_1Lightbox.md | 2 +- ...eworks_1_1LinearRegressionShapeMatrix.html | 2 +- ...apeworks_1_1LinearRegressionShapeMatrix.md | 2 +- .../Classes/classshapeworks_1_1LogWindow.html | 2 +- .../Classes/classshapeworks_1_1LogWindow.md | 2 +- .../Classes/classshapeworks_1_1Logging.html | 2 +- dev/api/Classes/classshapeworks_1_1Logging.md | 2 +- .../classshapeworks_1_1MatrixContainer.html | 2 +- .../classshapeworks_1_1MatrixContainer.md | 2 +- ...sshapeworks_1_1MeanCurvatureContainer.html | 2 +- ...assshapeworks_1_1MeanCurvatureContainer.md | 2 +- dev/api/Classes/classshapeworks_1_1Mesh.html | 2 +- dev/api/Classes/classshapeworks_1_1Mesh.md | 2 +- .../Classes/classshapeworks_1_1MeshCache.html | 2 +- .../Classes/classshapeworks_1_1MeshCache.md | 2 +- .../classshapeworks_1_1MeshCommand.html | 2 +- .../Classes/classshapeworks_1_1MeshCommand.md | 2 +- .../classshapeworks_1_1MeshDomain.html | 2 +- .../Classes/classshapeworks_1_1MeshDomain.md | 2 +- .../classshapeworks_1_1MeshGenerator.html | 2 +- .../classshapeworks_1_1MeshGenerator.md | 2 +- .../Classes/classshapeworks_1_1MeshGroup.html | 2 +- .../Classes/classshapeworks_1_1MeshGroup.md | 2 +- .../classshapeworks_1_1MeshManager.html | 2 +- .../Classes/classshapeworks_1_1MeshManager.md | 2 +- .../classshapeworks_1_1MeshReader.html | 2 +- .../Classes/classshapeworks_1_1MeshReader.md | 2 +- ...classshapeworks_1_1MeshReconstructors.html | 2 +- .../classshapeworks_1_1MeshReconstructors.md | 2 +- .../Classes/classshapeworks_1_1MeshSlice.html | 2 +- .../Classes/classshapeworks_1_1MeshSlice.md | 2 +- .../Classes/classshapeworks_1_1MeshUtils.html | 2 +- .../Classes/classshapeworks_1_1MeshUtils.md | 2 +- .../classshapeworks_1_1MeshWarper.html | 2 +- .../Classes/classshapeworks_1_1MeshWarper.md | 2 +- .../classshapeworks_1_1MeshWorkItem.html | 2 +- .../classshapeworks_1_1MeshWorkItem.md | 2 +- .../classshapeworks_1_1MeshWorkQueue.html | 2 +- .../classshapeworks_1_1MeshWorkQueue.md | 2 +- .../classshapeworks_1_1MeshWorker.html | 2 +- .../Classes/classshapeworks_1_1MeshWorker.md | 2 +- .../classshapeworks_1_1MeshWrapper.html | 2 +- .../Classes/classshapeworks_1_1MeshWrapper.md | 2 +- ...shapeworks_1_1MixedEffectsShapeMatrix.html | 2 +- ...ssshapeworks_1_1MixedEffectsShapeMatrix.md | 2 +- ...classshapeworks_1_1NetworkAnalysisJob.html | 2 +- .../classshapeworks_1_1NetworkAnalysisJob.md | 2 +- .../Classes/classshapeworks_1_1Observer.html | 2 +- .../Classes/classshapeworks_1_1Observer.md | 2 +- ...sshapeworks_1_1OptimizationVisualizer.html | 2 +- ...assshapeworks_1_1OptimizationVisualizer.md | 2 +- .../Classes/classshapeworks_1_1Optimize.html | 2 +- .../Classes/classshapeworks_1_1Optimize.md | 2 +- ...assshapeworks_1_1OptimizeCommandGroup.html | 2 +- ...classshapeworks_1_1OptimizeCommandGroup.md | 2 +- ...ssshapeworks_1_1OptimizeParameterFile.html | 2 +- ...lassshapeworks_1_1OptimizeParameterFile.md | 2 +- ...classshapeworks_1_1OptimizeParameters.html | 2 +- .../classshapeworks_1_1OptimizeParameters.md | 2 +- .../classshapeworks_1_1OptimizeTool.html | 2 +- .../classshapeworks_1_1OptimizeTool.md | 2 +- .../classshapeworks_1_1PaintWidget.html | 2 +- .../Classes/classshapeworks_1_1PaintWidget.md | 2 +- .../classshapeworks_1_1Parameters.html | 2 +- .../Classes/classshapeworks_1_1Parameters.md | 2 +- .../classshapeworks_1_1ParticleArea.html | 2 +- .../classshapeworks_1_1ParticleArea.md | 2 +- .../classshapeworks_1_1ParticleAreaJob.html | 2 +- .../classshapeworks_1_1ParticleAreaJob.md | 2 +- .../classshapeworks_1_1ParticleAreaPanel.html | 2 +- .../classshapeworks_1_1ParticleAreaPanel.md | 2 +- .../classshapeworks_1_1ParticleColors.html | 2 +- .../classshapeworks_1_1ParticleColors.md | 2 +- .../classshapeworks_1_1ParticleDomain.html | 2 +- .../classshapeworks_1_1ParticleDomain.md | 2 +- .../classshapeworks_1_1ParticleEvent.html | 2 +- .../classshapeworks_1_1ParticleEvent.md | 2 +- ...peworks_1_1ParticleGaussianModeWriter.html | 2 +- ...hapeworks_1_1ParticleGaussianModeWriter.md | 2 +- ...apeworks_1_1ParticleGoodBadAssessment.html | 2 +- ...shapeworks_1_1ParticleGoodBadAssessment.md | 2 +- ...assshapeworks_1_1ParticleNeighborhood.html | 2 +- ...classshapeworks_1_1ParticleNeighborhood.md | 2 +- ...hapeworks_1_1ParticleNormalEvaluation.html | 2 +- ...sshapeworks_1_1ParticleNormalEvaluation.md | 2 +- ...eworks_1_1ParticleNormalEvaluationJob.html | 2 +- ...apeworks_1_1ParticleNormalEvaluationJob.md | 2 +- ...assshapeworks_1_1ParticleRegionDomain.html | 2 +- ...classshapeworks_1_1ParticleRegionDomain.md | 2 +- ...peworks_1_1ParticleRegionNeighborhood.html | 2 +- ...hapeworks_1_1ParticleRegionNeighborhood.md | 2 +- ...shapeworks_1_1ParticleShapeStatistics.html | 2 +- ...ssshapeworks_1_1ParticleShapeStatistics.md | 2 +- ...eworks_1_1ParticleSurfaceNeighborhood.html | 2 +- ...apeworks_1_1ParticleSurfaceNeighborhood.md | 2 +- .../classshapeworks_1_1ParticleSystem.html | 2 +- .../classshapeworks_1_1ParticleSystem.md | 2 +- ...ssshapeworks_1_1ParticleSystemCommand.html | 2 +- ...lassshapeworks_1_1ParticleSystemCommand.md | 2 +- ...hapeworks_1_1ParticleSystemEvaluation.html | 2 +- ...sshapeworks_1_1ParticleSystemEvaluation.md | 2 +- .../Classes/classshapeworks_1_1Particles.html | 2 +- .../Classes/classshapeworks_1_1Particles.md | 2 +- .../classshapeworks_1_1PhysicalRegion.html | 2 +- .../classshapeworks_1_1PhysicalRegion.md | 2 +- .../classshapeworks_1_1PickResult.html | 2 +- .../Classes/classshapeworks_1_1PickResult.md | 2 +- .../classshapeworks_1_1PlaneConstraint.html | 2 +- .../classshapeworks_1_1PlaneConstraint.md | 2 +- .../classshapeworks_1_1PlaneWidget.html | 2 +- .../Classes/classshapeworks_1_1PlaneWidget.md | 2 +- ...lassshapeworks_1_1PowerOfTwoPointTree.html | 2 +- .../classshapeworks_1_1PowerOfTwoPointTree.md | 2 +- ...shapeworks_1_1PowerOfTwoPointTreeNode.html | 2 +- ...ssshapeworks_1_1PowerOfTwoPointTreeNode.md | 2 +- .../classshapeworks_1_1PreferencesWindow.html | 2 +- .../classshapeworks_1_1PreferencesWindow.md | 2 +- ...sshapeworks_1_1ProcrustesRegistration.html | 2 +- ...assshapeworks_1_1ProcrustesRegistration.md | 2 +- .../Classes/classshapeworks_1_1Project.html | 2 +- dev/api/Classes/classshapeworks_1_1Project.md | 2 +- ...lassshapeworks_1_1ProjectCommandGroup.html | 2 +- .../classshapeworks_1_1ProjectCommandGroup.md | 2 +- .../classshapeworks_1_1ProjectReader.html | 2 +- .../classshapeworks_1_1ProjectReader.md | 2 +- .../classshapeworks_1_1ProjectUtils.html | 2 +- .../classshapeworks_1_1ProjectUtils.md | 2 +- .../classshapeworks_1_1PythonWorker.html | 2 +- .../classshapeworks_1_1PythonWorker.md | 2 +- .../classshapeworks_1_1QMeshWarper.html | 2 +- .../Classes/classshapeworks_1_1QMeshWarper.md | 2 +- .../Classes/classshapeworks_1_1QOptimize.html | 2 +- .../Classes/classshapeworks_1_1QOptimize.md | 2 +- ...classshapeworks_1_1ReconstructSurface.html | 2 +- .../classshapeworks_1_1ReconstructSurface.md | 2 +- .../Classes/classshapeworks_1_1Sampler.html | 2 +- dev/api/Classes/classshapeworks_1_1Sampler.md | 2 +- .../classshapeworks_1_1SamplingFunction.html | 2 +- .../classshapeworks_1_1SamplingFunction.md | 2 +- .../Classes/classshapeworks_1_1Session.html | 2 +- dev/api/Classes/classshapeworks_1_1Session.md | 2 +- dev/api/Classes/classshapeworks_1_1Shape.html | 2 +- dev/api/Classes/classshapeworks_1_1Shape.md | 2 +- .../classshapeworks_1_1ShapeEvaluation.html | 2 +- .../classshapeworks_1_1ShapeEvaluation.md | 2 +- ...classshapeworks_1_1ShapeEvaluationJob.html | 2 +- .../classshapeworks_1_1ShapeEvaluationJob.md | 2 +- ...lassshapeworks_1_1ShapeGradientMatrix.html | 2 +- .../classshapeworks_1_1ShapeGradientMatrix.md | 2 +- .../classshapeworks_1_1ShapeMatrix.html | 2 +- .../Classes/classshapeworks_1_1ShapeMatrix.md | 2 +- ...lassshapeworks_1_1ShapeWorksStudioApp.html | 2 +- .../classshapeworks_1_1ShapeWorksStudioApp.md | 2 +- .../classshapeworks_1_1Shape_1_1Point.html | 2 +- .../classshapeworks_1_1Shape_1_1Point.md | 2 +- .../classshapeworks_1_1ShapeworksCommand.html | 2 +- .../classshapeworks_1_1ShapeworksCommand.md | 2 +- .../classshapeworks_1_1ShapeworksUtils.html | 2 +- .../classshapeworks_1_1ShapeworksUtils.md | 2 +- .../classshapeworks_1_1ShapeworksWorker.html | 2 +- .../classshapeworks_1_1ShapeworksWorker.md | 2 +- .../Classes/classshapeworks_1_1SliceView.html | 2 +- .../Classes/classshapeworks_1_1SliceView.md | 2 +- .../classshapeworks_1_1SplashScreen.html | 2 +- .../classshapeworks_1_1SplashScreen.md | 2 +- .../classshapeworks_1_1StatsGroupLDAJob.html | 2 +- .../classshapeworks_1_1StatsGroupLDAJob.md | 2 +- .../classshapeworks_1_1StatusBarWidget.html | 2 +- .../classshapeworks_1_1StatusBarWidget.md | 2 +- .../classshapeworks_1_1StringUtils.html | 2 +- .../Classes/classshapeworks_1_1StringUtils.md | 2 +- ...classshapeworks_1_1StudioHandleWidget.html | 2 +- .../classshapeworks_1_1StudioHandleWidget.md | 2 +- ...ssshapeworks_1_1StudioInteractorStyle.html | 2 +- ...lassshapeworks_1_1StudioInteractorStyle.md | 2 +- .../classshapeworks_1_1StudioMesh.html | 2 +- .../Classes/classshapeworks_1_1StudioMesh.md | 2 +- ...peworks_1_1StudioSliceInteractorStyle.html | 2 +- ...hapeworks_1_1StudioSliceInteractorStyle.md | 2 +- .../classshapeworks_1_1StudioUtils.html | 2 +- .../Classes/classshapeworks_1_1StudioUtils.md | 2 +- ...ssshapeworks_1_1StudioVtkOutputWindow.html | 2 +- ...lassshapeworks_1_1StudioVtkOutputWindow.md | 2 +- dev/api/Classes/classshapeworks_1_1Style.html | 2 +- dev/api/Classes/classshapeworks_1_1Style.md | 2 +- .../Classes/classshapeworks_1_1Subject.html | 2 +- dev/api/Classes/classshapeworks_1_1Subject.md | 2 +- .../Classes/classshapeworks_1_1Telemetry.html | 2 +- .../Classes/classshapeworks_1_1Telemetry.md | 2 +- .../classshapeworks_1_1UpdateChecker.html | 2 +- .../classshapeworks_1_1UpdateChecker.md | 2 +- .../Classes/classshapeworks_1_1Variant.html | 2 +- dev/api/Classes/classshapeworks_1_1Variant.md | 2 +- .../classshapeworks_1_1VectorFunction.html | 2 +- .../classshapeworks_1_1VectorFunction.md | 2 +- .../classshapeworks_1_1VectorImage.html | 2 +- .../Classes/classshapeworks_1_1VectorImage.md | 2 +- .../Classes/classshapeworks_1_1Viewer.html | 2 +- dev/api/Classes/classshapeworks_1_1Viewer.md | 2 +- .../classshapeworks_1_1Visualizer.html | 2 +- .../Classes/classshapeworks_1_1Visualizer.md | 2 +- .../classshapeworks_1_1VtkMeshWrapper.html | 2 +- .../classshapeworks_1_1VtkMeshWrapper.md | 2 +- ...lassshapeworks_1_1WheelEventForwarder.html | 2 +- .../classshapeworks_1_1WheelEventForwarder.md | 2 +- .../Classes/classshapeworks_1_1Worker.html | 2 +- dev/api/Classes/classshapeworks_1_1Worker.md | 2 +- ...ssshapeworks_1_1shapeworks__exception.html | 2 +- ...lassshapeworks_1_1shapeworks__exception.md | 2 +- dev/api/Classes/classvec2d.html | 2 +- dev/api/Classes/classvec2d.md | 2 +- dev/api/Classes/classvec3d.html | 2 +- dev/api/Classes/classvec3d.md | 2 +- dev/api/Classes/classvec6d.html | 2 +- dev/api/Classes/classvec6d.md | 2 +- .../Classes/classvtkPolyDataToImageData.html | 2 +- .../Classes/classvtkPolyDataToImageData.md | 2 +- dev/api/Classes/index_classes.html | 2 +- dev/api/Classes/index_classes.md | 2 +- dev/api/Classes/structColorScheme_1_1rgb.html | 2 +- dev/api/Classes/structColorScheme_1_1rgb.md | 2 +- ...structFECVDDecimationModifier_1_1EDGE.html | 2 +- .../structFECVDDecimationModifier_1_1EDGE.md | 2 +- dev/api/Classes/structFEFillHole_1_1FACE.html | 2 +- dev/api/Classes/structFEFillHole_1_1FACE.md | 2 +- dev/api/Classes/structIntersection.html | 2 +- dev/api/Classes/structIntersection.md | 2 +- dev/api/Classes/structQuad.html | 2 +- dev/api/Classes/structQuad.md | 2 +- dev/api/Classes/structRay.html | 2 +- dev/api/Classes/structRay.md | 2 +- .../Classes/structSimilarityTransform3D.html | 2 +- .../Classes/structSimilarityTransform3D.md | 2 +- dev/api/Classes/structTriangle.html | 2 +- dev/api/Classes/structTriangle.md | 2 +- dev/api/Classes/structVTKEXPORT.html | 2 +- dev/api/Classes/structVTKEXPORT.md | 2 +- ...ructfmt_1_1formatter_3_01QString_01_4.html | 2 +- ...structfmt_1_1formatter_3_01QString_01_4.md | 2 +- ...ngFunction_1_1CrossDomainNeighborhood.html | 2 +- ...lingFunction_1_1CrossDomainNeighborhood.md | 2 +- .../structshapeworks_1_1MeshGeoEntry.html | 2 +- .../structshapeworks_1_1MeshGeoEntry.md | 2 +- ...hapeworks_1_1MultiVariateNormalRandom.html | 2 +- ...tshapeworks_1_1MultiVariateNormalRandom.md | 2 +- ...1_1Observer_1_1DefinedCallbacksStruct.html | 2 +- ...s_1_1Observer_1_1DefinedCallbacksStruct.md | 2 +- ...tshapeworks_1_1ParticlePointIndexPair.html | 2 +- ...uctshapeworks_1_1ParticlePointIndexPair.md | 2 +- ...egionNeighborhood_1_1IteratorNodePair.html | 2 +- ...eRegionNeighborhood_1_1IteratorNodePair.md | 2 +- .../structshapeworks_1_1Reconstruction.html | 2 +- .../structshapeworks_1_1Reconstruction.md | 2 +- ...eworks_1_1Sampler_1_1CuttingPlaneType.html | 2 +- ...apeworks_1_1Sampler_1_1CuttingPlaneType.md | 2 +- ...ctshapeworks_1_1Sampler_1_1SphereType.html | 2 +- ...ructshapeworks_1_1Sampler_1_1SphereType.md | 2 +- ...structshapeworks_1_1SharedCommandData.html | 2 +- .../structshapeworks_1_1SharedCommandData.md | 2 +- .../structshapeworks_1_1powstruct.html | 2 +- .../Classes/structshapeworks_1_1powstruct.md | 2 +- ...eworks_1_1powstruct_3_01a_00_010_01_4.html | 2 +- ...apeworks_1_1powstruct_3_01a_00_010_01_4.md | 2 +- dev/api/Files/AnalysisTool_8h.html | 2 +- dev/api/Files/AnalysisTool_8h.md | 2 +- dev/api/Files/AnalysisUtils_8h.html | 2 +- dev/api/Files/AnalysisUtils_8h.md | 2 +- dev/api/Files/Analyze_8h.html | 2 +- dev/api/Files/Analyze_8h.md | 2 +- dev/api/Files/ColorMap_8h.html | 2 +- dev/api/Files/ColorMap_8h.md | 2 +- dev/api/Files/ColorSchemes_8h.html | 2 +- dev/api/Files/ColorSchemes_8h.md | 2 +- dev/api/Files/Command_8h.html | 2 +- dev/api/Files/Command_8h.md | 2 +- dev/api/Files/Commands_8h.html | 2 +- dev/api/Files/Commands_8h.md | 2 +- dev/api/Files/CompareWidget_8h.html | 2 +- dev/api/Files/CompareWidget_8h.md | 2 +- dev/api/Files/ConstraintType_8h.html | 2 +- dev/api/Files/ConstraintType_8h.md | 2 +- dev/api/Files/Constraint_8h.html | 2 +- dev/api/Files/Constraint_8h.md | 2 +- dev/api/Files/Constraints_8h.html | 2 +- dev/api/Files/Constraints_8h.md | 2 +- dev/api/Files/ContourDomain_8h.html | 2 +- dev/api/Files/ContourDomain_8h.md | 2 +- dev/api/Files/CorrespondenceFunction_8h.html | 2 +- dev/api/Files/CorrespondenceFunction_8h.md | 2 +- dev/api/Files/CorrespondenceMode_8h.html | 2 +- dev/api/Files/CorrespondenceMode_8h.md | 2 +- .../Files/CurvatureSamplingFunction_8h.html | 2 +- dev/api/Files/CurvatureSamplingFunction_8h.md | 2 +- dev/api/Files/CustomSlider_8h.html | 2 +- dev/api/Files/CustomSlider_8h.md | 2 +- .../CustomSurfaceReconstructionFilter_8h.html | 2 +- .../CustomSurfaceReconstructionFilter_8h.md | 2 +- dev/api/Files/DataTool_8h.html | 2 +- dev/api/Files/DataTool_8h.md | 2 +- dev/api/Files/DeepSSMJob_8h.html | 2 +- dev/api/Files/DeepSSMJob_8h.md | 2 +- dev/api/Files/DeepSSMParameters_8h.html | 2 +- dev/api/Files/DeepSSMParameters_8h.md | 2 +- dev/api/Files/DeepSSMTool_8h.html | 2 +- dev/api/Files/DeepSSMTool_8h.md | 2 +- ...DisentangledCorrespondenceFunction_8h.html | 2 +- .../DisentangledCorrespondenceFunction_8h.md | 2 +- dev/api/Files/DomainType_8h.html | 2 +- dev/api/Files/DomainType_8h.md | 2 +- dev/api/Files/DualVectorFunction_8h.html | 2 +- dev/api/Files/DualVectorFunction_8h.md | 2 +- dev/api/Files/EigenUtils_8h.html | 2 +- dev/api/Files/EigenUtils_8h.md | 2 +- dev/api/Files/EvaluationUtil_8h.html | 2 +- dev/api/Files/EvaluationUtil_8h.md | 2 +- dev/api/Files/ExcelProjectReader_8h.html | 2 +- dev/api/Files/ExcelProjectReader_8h.md | 2 +- dev/api/Files/ExcelProjectWriter_8h.html | 2 +- dev/api/Files/ExcelProjectWriter_8h.md | 2 +- dev/api/Files/Exception_8h.html | 2 +- dev/api/Files/Exception_8h.md | 2 +- dev/api/Files/Executable_8h.html | 2 +- dev/api/Files/Executable_8h.md | 2 +- dev/api/Files/ExportImageDialog_8h.html | 2 +- dev/api/Files/ExportImageDialog_8h.md | 2 +- dev/api/Files/ExportUtils_8h.html | 2 +- dev/api/Files/ExportUtils_8h.md | 2 +- dev/api/Files/FEAreaCoverage_8h.html | 2 +- dev/api/Files/FEAreaCoverage_8h.md | 2 +- dev/api/Files/FEAutoMesher_8h.html | 2 +- dev/api/Files/FEAutoMesher_8h.md | 2 +- dev/api/Files/FECVDDecimationModifier_8h.html | 2 +- dev/api/Files/FECVDDecimationModifier_8h.md | 2 +- dev/api/Files/FECoreMesh_8h.html | 2 +- dev/api/Files/FECoreMesh_8h.md | 2 +- dev/api/Files/FEElement_8h.html | 2 +- dev/api/Files/FEElement_8h.md | 2 +- dev/api/Files/FEFillHole_8h.html | 2 +- dev/api/Files/FEFillHole_8h.md | 2 +- dev/api/Files/FEFixMesh_8h.html | 2 +- dev/api/Files/FEFixMesh_8h.md | 2 +- dev/api/Files/FEMeshSmoothingModifier_8h.html | 2 +- dev/api/Files/FEMeshSmoothingModifier_8h.md | 2 +- dev/api/Files/FEMesh_8h.html | 2 +- dev/api/Files/FEMesh_8h.md | 2 +- dev/api/Files/FENodeElementList_8h.html | 2 +- dev/api/Files/FENodeElementList_8h.md | 2 +- dev/api/Files/FENodeFaceList_8h.html | 2 +- dev/api/Files/FENodeFaceList_8h.md | 2 +- dev/api/Files/FENodeNodeList_8h.html | 2 +- dev/api/Files/FENodeNodeList_8h.md | 2 +- dev/api/Files/FEVTKExport_8h.html | 2 +- dev/api/Files/FEVTKExport_8h.md | 2 +- dev/api/Files/FEVTKImport_8h.html | 2 +- dev/api/Files/FEVTKImport_8h.md | 2 +- dev/api/Files/FreeFormConstraint_8h.html | 2 +- dev/api/Files/FreeFormConstraint_8h.md | 2 +- dev/api/Files/GenericContainerArray_8h.html | 2 +- dev/api/Files/GenericContainerArray_8h.md | 2 +- dev/api/Files/GenericContainer_8h.html | 2 +- dev/api/Files/GenericContainer_8h.md | 2 +- .../Files/GradientDescentOptimizer_8h.html | 2 +- dev/api/Files/GradientDescentOptimizer_8h.md | 2 +- dev/api/Files/GroomParameters_8h.html | 2 +- dev/api/Files/GroomParameters_8h.md | 2 +- dev/api/Files/GroomTool_8h.html | 2 +- dev/api/Files/GroomTool_8h.md | 2 +- dev/api/Files/Groom_8h.html | 2 +- dev/api/Files/Groom_8h.md | 2 +- dev/api/Files/GroupPvalueJob_8h.html | 2 +- dev/api/Files/GroupPvalueJob_8h.md | 2 +- .../Files/ImageDomainWithCurvature_8h.html | 2 +- dev/api/Files/ImageDomainWithCurvature_8h.md | 2 +- dev/api/Files/ImageDomainWithGradN_8h.html | 2 +- dev/api/Files/ImageDomainWithGradN_8h.md | 2 +- .../Files/ImageDomainWithGradients_8h.html | 2 +- dev/api/Files/ImageDomainWithGradients_8h.md | 2 +- dev/api/Files/ImageDomain_8h.html | 2 +- dev/api/Files/ImageDomain_8h.md | 2 +- dev/api/Files/ImageLabel_8h.html | 2 +- dev/api/Files/ImageLabel_8h.md | 2 +- dev/api/Files/ImageUtils_8h.html | 2 +- dev/api/Files/ImageUtils_8h.md | 2 +- dev/api/Files/Image_8h.html | 2 +- dev/api/Files/Image_8h.md | 2 +- dev/api/Files/ImplicitSurfaceDomain_8h.html | 2 +- dev/api/Files/ImplicitSurfaceDomain_8h.md | 2 +- dev/api/Files/Intersect_8h.html | 2 +- dev/api/Files/Intersect_8h.md | 2 +- dev/api/Files/ItkToVtk_8h.html | 2 +- dev/api/Files/ItkToVtk_8h.md | 2 +- dev/api/Files/Job_8h.html | 2 +- dev/api/Files/Job_8h.md | 2 +- dev/api/Files/JsonProjectReader_8h.html | 2 +- dev/api/Files/JsonProjectReader_8h.md | 2 +- dev/api/Files/JsonProjectWriter_8h.html | 2 +- dev/api/Files/JsonProjectWriter_8h.md | 2 +- dev/api/Files/KeyboardShortcuts_8h.html | 2 +- dev/api/Files/KeyboardShortcuts_8h.md | 2 +- dev/api/Files/LandmarkItemDelegate_8h.html | 2 +- dev/api/Files/LandmarkItemDelegate_8h.md | 2 +- dev/api/Files/LandmarkTableModel_8h.html | 2 +- dev/api/Files/LandmarkTableModel_8h.md | 2 +- dev/api/Files/LandmarkWidget_8h.html | 2 +- dev/api/Files/LandmarkWidget_8h.md | 2 +- .../LegacyCorrespondenceFunction_8h.html | 2 +- .../Files/LegacyCorrespondenceFunction_8h.md | 2 +- dev/api/Files/LegacyMeshGenerator_8h.html | 2 +- dev/api/Files/LegacyMeshGenerator_8h.md | 2 +- dev/api/Files/LegacyShapeMatrix_8h.html | 2 +- dev/api/Files/LegacyShapeMatrix_8h.md | 2 +- dev/api/Files/Lightbox_8h.html | 2 +- dev/api/Files/Lightbox_8h.md | 2 +- .../Files/LinearRegressionShapeMatrix_8h.html | 2 +- .../Files/LinearRegressionShapeMatrix_8h.md | 2 +- dev/api/Files/LogWindow_8h.html | 2 +- dev/api/Files/LogWindow_8h.md | 2 +- dev/api/Files/Logging_8h.html | 2 +- dev/api/Files/Logging_8h.md | 2 +- dev/api/Files/MeanCurvatureContainer_8h.html | 2 +- dev/api/Files/MeanCurvatureContainer_8h.md | 2 +- dev/api/Files/MemoryUsage_8h.html | 2 +- dev/api/Files/MemoryUsage_8h.md | 2 +- dev/api/Files/MeshCache_8h.html | 2 +- dev/api/Files/MeshCache_8h.md | 2 +- dev/api/Files/MeshComputeThickness_8h.html | 2 +- dev/api/Files/MeshComputeThickness_8h.md | 2 +- dev/api/Files/MeshDomain_8h.html | 2 +- dev/api/Files/MeshDomain_8h.md | 2 +- dev/api/Files/MeshGenerator_8h.html | 2 +- dev/api/Files/MeshGenerator_8h.md | 2 +- dev/api/Files/MeshGeoEntry_8h.html | 2 +- dev/api/Files/MeshGeoEntry_8h.md | 2 +- dev/api/Files/MeshGroup_8h.html | 2 +- dev/api/Files/MeshGroup_8h.md | 2 +- dev/api/Files/MeshManager_8h.html | 2 +- dev/api/Files/MeshManager_8h.md | 2 +- dev/api/Files/MeshSettings_8h.html | 2 +- dev/api/Files/MeshSettings_8h.md | 2 +- dev/api/Files/MeshSlice_8h.html | 2 +- dev/api/Files/MeshSlice_8h.md | 2 +- dev/api/Files/MeshUtils_8h.html | 2 +- dev/api/Files/MeshUtils_8h.md | 2 +- dev/api/Files/MeshWarper_8h.html | 2 +- dev/api/Files/MeshWarper_8h.md | 2 +- dev/api/Files/MeshWorkQueue_8h.html | 2 +- dev/api/Files/MeshWorkQueue_8h.md | 2 +- dev/api/Files/MeshWorker_8h.html | 2 +- dev/api/Files/MeshWorker_8h.md | 2 +- dev/api/Files/MeshWrapper_8h.html | 2 +- dev/api/Files/MeshWrapper_8h.md | 2 +- dev/api/Files/Mesh_8h.html | 2 +- dev/api/Files/Mesh_8h.md | 2 +- dev/api/Files/MixedEffectsShapeMatrix_8h.html | 2 +- dev/api/Files/MixedEffectsShapeMatrix_8h.md | 2 +- dev/api/Files/Module_8dox.html | 2 +- dev/api/Files/Module_8dox.md | 2 +- dev/api/Files/NetworkAnalysisJob_8h.html | 2 +- dev/api/Files/NetworkAnalysisJob_8h.md | 2 +- dev/api/Files/ObjectReader_8h.html | 2 +- dev/api/Files/ObjectReader_8h.md | 2 +- dev/api/Files/ObjectWriter_8h.html | 2 +- dev/api/Files/ObjectWriter_8h.md | 2 +- dev/api/Files/Observer_8h.html | 2 +- dev/api/Files/Observer_8h.md | 2 +- dev/api/Files/OptimizationVisualizer_8h.html | 2 +- dev/api/Files/OptimizationVisualizer_8h.md | 2 +- dev/api/Files/OptimizeParameterFile_8h.html | 2 +- dev/api/Files/OptimizeParameterFile_8h.md | 2 +- dev/api/Files/OptimizeParameters_8h.html | 2 +- dev/api/Files/OptimizeParameters_8h.md | 2 +- dev/api/Files/OptimizeTool_8h.html | 2 +- dev/api/Files/OptimizeTool_8h.md | 2 +- dev/api/Files/Optimize_8h.html | 2 +- dev/api/Files/Optimize_8h.md | 2 +- dev/api/Files/PaintWidget_8h.html | 2 +- dev/api/Files/PaintWidget_8h.md | 2 +- dev/api/Files/Parameters_8h.html | 2 +- dev/api/Files/Parameters_8h.md | 2 +- dev/api/Files/ParticleAreaJob_8h.html | 2 +- dev/api/Files/ParticleAreaJob_8h.md | 2 +- dev/api/Files/ParticleAreaPanel_8h.html | 2 +- dev/api/Files/ParticleAreaPanel_8h.md | 2 +- dev/api/Files/ParticleArea_8h.html | 2 +- dev/api/Files/ParticleArea_8h.md | 2 +- dev/api/Files/ParticleColors_8h.html | 2 +- dev/api/Files/ParticleColors_8h.md | 2 +- dev/api/Files/ParticleDomain_8h.html | 2 +- dev/api/Files/ParticleDomain_8h.md | 2 +- dev/api/Files/ParticleEvents_8h.html | 2 +- dev/api/Files/ParticleEvents_8h.md | 2 +- dev/api/Files/ParticleFile_8h.html | 2 +- dev/api/Files/ParticleFile_8h.md | 2 +- .../Files/ParticleGaussianModeWriter_8h.html | 2 +- .../Files/ParticleGaussianModeWriter_8h.md | 2 +- .../Files/ParticleGoodBadAssessment_8h.html | 2 +- dev/api/Files/ParticleGoodBadAssessment_8h.md | 2 +- dev/api/Files/ParticleNeighborhood_8h.html | 2 +- dev/api/Files/ParticleNeighborhood_8h.md | 2 +- .../Files/ParticleNormalEvaluationJob_8h.html | 2 +- .../Files/ParticleNormalEvaluationJob_8h.md | 2 +- .../Files/ParticleNormalEvaluation_8h.html | 2 +- dev/api/Files/ParticleNormalEvaluation_8h.md | 2 +- dev/api/Files/ParticlePointIndexPair_8h.html | 2 +- dev/api/Files/ParticlePointIndexPair_8h.md | 2 +- dev/api/Files/ParticleRegionDomain_8h.html | 2 +- dev/api/Files/ParticleRegionDomain_8h.md | 2 +- .../Files/ParticleRegionNeighborhood_8h.html | 2 +- .../Files/ParticleRegionNeighborhood_8h.md | 2 +- dev/api/Files/ParticleShapeStatistics_8h.html | 2 +- dev/api/Files/ParticleShapeStatistics_8h.md | 2 +- .../Files/ParticleSurfaceNeighborhood_8h.html | 2 +- .../Files/ParticleSurfaceNeighborhood_8h.md | 2 +- .../Files/ParticleSystemEvaluation_8h.html | 2 +- dev/api/Files/ParticleSystemEvaluation_8h.md | 2 +- dev/api/Files/ParticleSystem_8h.html | 2 +- dev/api/Files/ParticleSystem_8h.md | 2 +- dev/api/Files/Particles_8h.html | 2 +- dev/api/Files/Particles_8h.md | 2 +- dev/api/Files/PlaneConstraint_8h.html | 2 +- dev/api/Files/PlaneConstraint_8h.md | 2 +- dev/api/Files/PlaneWidget_8h.html | 2 +- dev/api/Files/PlaneWidget_8h.md | 2 +- dev/api/Files/PowerOfTwoPointTree_8h.html | 2 +- dev/api/Files/PowerOfTwoPointTree_8h.md | 2 +- dev/api/Files/PreferencesWindow_8h.html | 2 +- dev/api/Files/PreferencesWindow_8h.md | 2 +- dev/api/Files/Preferences_8h.html | 2 +- dev/api/Files/Preferences_8h.md | 2 +- dev/api/Files/Procrustes3D_8h.html | 2 +- dev/api/Files/Procrustes3D_8h.md | 2 +- dev/api/Files/ProcrustesRegistration_8h.html | 2 +- dev/api/Files/ProcrustesRegistration_8h.md | 2 +- dev/api/Files/ProjectReader_8h.html | 2 +- dev/api/Files/ProjectReader_8h.md | 2 +- dev/api/Files/ProjectUtils_8h.html | 2 +- dev/api/Files/ProjectUtils_8h.md | 2 +- dev/api/Files/Project_8h.html | 2 +- dev/api/Files/Project_8h.md | 2 +- dev/api/Files/PythonAnalyze_8h.html | 2 +- dev/api/Files/PythonAnalyze_8h.md | 2 +- dev/api/Files/PythonWorker_8h.html | 2 +- dev/api/Files/PythonWorker_8h.md | 2 +- dev/api/Files/QMeshWarper_8h.html | 2 +- dev/api/Files/QMeshWarper_8h.md | 2 +- dev/api/Files/QOptimize_8h.html | 2 +- dev/api/Files/QOptimize_8h.md | 2 +- dev/api/Files/ReconstructSurface_8h.html | 2 +- dev/api/Files/ReconstructSurface_8h.md | 2 +- dev/api/Files/Reconstruction_8h.html | 2 +- dev/api/Files/Reconstruction_8h.md | 2 +- dev/api/Files/Region_8h.html | 2 +- dev/api/Files/Region_8h.md | 2 +- dev/api/Files/Sampler_8h.html | 2 +- dev/api/Files/Sampler_8h.md | 2 +- dev/api/Files/SamplingFunction_8h.html | 2 +- dev/api/Files/SamplingFunction_8h.md | 2 +- dev/api/Files/Session_8h.html | 2 +- dev/api/Files/Session_8h.md | 2 +- dev/api/Files/ShapeEvaluationJob_8h.html | 2 +- dev/api/Files/ShapeEvaluationJob_8h.md | 2 +- dev/api/Files/ShapeEvaluation_8h.html | 2 +- dev/api/Files/ShapeEvaluation_8h.md | 2 +- dev/api/Files/ShapeGradientMatrix_8h.html | 2 +- dev/api/Files/ShapeGradientMatrix_8h.md | 2 +- dev/api/Files/ShapeMatrix_8h.html | 2 +- dev/api/Files/ShapeMatrix_8h.md | 2 +- dev/api/Files/ShapeWorksStudioApp_8h.html | 2 +- dev/api/Files/ShapeWorksStudioApp_8h.md | 2 +- dev/api/Files/ShapeWorksWorker_8h.html | 2 +- dev/api/Files/ShapeWorksWorker_8h.md | 2 +- dev/api/Files/Shape_8h.html | 2 +- dev/api/Files/Shape_8h.md | 2 +- dev/api/Files/ShapeworksUtils_8h.html | 2 +- dev/api/Files/ShapeworksUtils_8h.md | 2 +- dev/api/Files/Shapeworks_8h.html | 2 +- dev/api/Files/Shapeworks_8h.md | 2 +- dev/api/Files/SharedCommandData_8h.html | 2 +- dev/api/Files/SharedCommandData_8h.md | 2 +- dev/api/Files/SliceView_8h.html | 2 +- dev/api/Files/SliceView_8h.md | 2 +- dev/api/Files/SplashScreen_8h.html | 2 +- dev/api/Files/SplashScreen_8h.md | 2 +- dev/api/Files/StackWalker_8h.html | 2 +- dev/api/Files/StackWalker_8h.md | 2 +- dev/api/Files/StatsGroupLDAJob_8h.html | 2 +- dev/api/Files/StatsGroupLDAJob_8h.md | 2 +- dev/api/Files/StatusBarWidget_8h.html | 2 +- dev/api/Files/StatusBarWidget_8h.md | 2 +- dev/api/Files/StringUtils_8h.html | 2 +- dev/api/Files/StringUtils_8h.md | 2 +- dev/api/Files/StudioEnums_8h.html | 2 +- dev/api/Files/StudioEnums_8h.md | 2 +- dev/api/Files/StudioHandleWidget_8h.html | 2 +- dev/api/Files/StudioHandleWidget_8h.md | 2 +- dev/api/Files/StudioInteractorStyle_8h.html | 2 +- dev/api/Files/StudioInteractorStyle_8h.md | 2 +- dev/api/Files/StudioLogger_8h.html | 2 +- dev/api/Files/StudioLogger_8h.md | 2 +- dev/api/Files/StudioMesh_8h.html | 2 +- dev/api/Files/StudioMesh_8h.md | 2 +- .../Files/StudioSliceInteractorStyle_8h.html | 2 +- .../Files/StudioSliceInteractorStyle_8h.md | 2 +- dev/api/Files/StudioUtils_8h.html | 2 +- dev/api/Files/StudioUtils_8h.md | 2 +- dev/api/Files/StudioVtkOutputWindow_8h.html | 2 +- dev/api/Files/StudioVtkOutputWindow_8h.md | 2 +- dev/api/Files/Style_8h.html | 2 +- dev/api/Files/Style_8h.md | 2 +- dev/api/Files/Subject_8h.html | 2 +- dev/api/Files/Subject_8h.md | 2 +- dev/api/Files/SurfaceReconstructor_8h.html | 2 +- dev/api/Files/SurfaceReconstructor_8h.md | 2 +- dev/api/Files/Telemetry_8h.html | 2 +- dev/api/Files/Telemetry_8h.md | 2 +- dev/api/Files/UpdateChecker_8h.html | 2 +- dev/api/Files/UpdateChecker_8h.md | 2 +- dev/api/Files/Utils_8h.html | 2 +- dev/api/Files/Utils_8h.md | 2 +- dev/api/Files/Variant_8h.html | 2 +- dev/api/Files/Variant_8h.md | 2 +- dev/api/Files/VectorFunction_8h.html | 2 +- dev/api/Files/VectorFunction_8h.md | 2 +- dev/api/Files/VectorImage_8h.html | 2 +- dev/api/Files/VectorImage_8h.md | 2 +- dev/api/Files/Viewer_8h.html | 2 +- dev/api/Files/Viewer_8h.md | 2 +- dev/api/Files/Visualizer_8h.html | 2 +- dev/api/Files/Visualizer_8h.md | 2 +- dev/api/Files/VtkMeshWrapper_8h.html | 2 +- dev/api/Files/VtkMeshWrapper_8h.md | 2 +- dev/api/Files/WheelEventForwarder_8h.html | 2 +- dev/api/Files/WheelEventForwarder_8h.md | 2 +- dev/api/Files/WindowsCrashHandler_8h.html | 2 +- dev/api/Files/WindowsCrashHandler_8h.md | 2 +- dev/api/Files/Worker_8h.html | 2 +- dev/api/Files/Worker_8h.md | 2 +- .../dir_0e4564af99249380ef1f30404400c0a3.html | 2 +- .../dir_0e4564af99249380ef1f30404400c0a3.md | 2 +- .../dir_18c9fb63c9ecb061d3bfcf14463b37a6.html | 2 +- .../dir_18c9fb63c9ecb061d3bfcf14463b37a6.md | 2 +- .../dir_2efd803177123288b92908ec296fe578.html | 2 +- .../dir_2efd803177123288b92908ec296fe578.md | 2 +- .../dir_36d0ece48b2c599ca7cdf3fcf70a4111.html | 2 +- .../dir_36d0ece48b2c599ca7cdf3fcf70a4111.md | 2 +- .../dir_37dfc33913c47c48c20c22cdbf1559c0.html | 2 +- .../dir_37dfc33913c47c48c20c22cdbf1559c0.md | 2 +- .../dir_3c387d8f52af5a1c9b80596228515621.html | 2 +- .../dir_3c387d8f52af5a1c9b80596228515621.md | 2 +- .../dir_409787ee32d93aa6a212981d92e6dc9a.html | 2 +- .../dir_409787ee32d93aa6a212981d92e6dc9a.md | 2 +- .../dir_4481568adb70067b4bb4b5ce096891b2.html | 2 +- .../dir_4481568adb70067b4bb4b5ce096891b2.md | 2 +- .../dir_48521012c292b6dfb1bd2f2ae5aacf6c.html | 2 +- .../dir_48521012c292b6dfb1bd2f2ae5aacf6c.md | 2 +- .../dir_486a45e6ebc11931a27093b877e14af3.html | 2 +- .../dir_486a45e6ebc11931a27093b877e14af3.md | 2 +- .../dir_4ea27a77bf632cd63100af8008b8abf4.html | 2 +- .../dir_4ea27a77bf632cd63100af8008b8abf4.md | 2 +- .../dir_645c19d7da098e01621cdebb663b8767.html | 2 +- .../dir_645c19d7da098e01621cdebb663b8767.md | 2 +- .../dir_6cd87311705ab44b460cce19838a0cf5.html | 2 +- .../dir_6cd87311705ab44b460cce19838a0cf5.md | 2 +- .../dir_6e6cb9563333489fde7459b1f95e59a5.html | 2 +- .../dir_6e6cb9563333489fde7459b1f95e59a5.md | 2 +- .../dir_73a09fceee206218e6d903b3c5deb969.html | 2 +- .../dir_73a09fceee206218e6d903b3c5deb969.md | 2 +- .../dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html | 2 +- .../dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md | 2 +- .../dir_85653c7ab6d0c0e003ea454a8b2baba9.html | 2 +- .../dir_85653c7ab6d0c0e003ea454a8b2baba9.md | 2 +- .../dir_8703d550aef9c899d5cf3c4cd311a554.html | 2 +- .../dir_8703d550aef9c899d5cf3c4cd311a554.md | 2 +- .../dir_8c1195e4829fa17630c4278c41da729a.html | 2 +- .../dir_8c1195e4829fa17630c4278c41da729a.md | 2 +- .../dir_9e4ba78685e6608cfdea07960abd189c.html | 2 +- .../dir_9e4ba78685e6608cfdea07960abd189c.md | 2 +- .../dir_9e99c41d3802fada2a0119d079df0956.html | 2 +- .../dir_9e99c41d3802fada2a0119d079df0956.md | 2 +- .../dir_a4bc8cdb2751c8604311dac5c98fb558.html | 2 +- .../dir_a4bc8cdb2751c8604311dac5c98fb558.md | 2 +- .../dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html | 2 +- .../dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md | 2 +- .../dir_b0b944fd4368961b4965dd28c72a00a2.html | 2 +- .../dir_b0b944fd4368961b4965dd28c72a00a2.md | 2 +- .../dir_b61e4180fa497c41c4b364a945b36efe.html | 2 +- .../dir_b61e4180fa497c41c4b364a945b36efe.md | 2 +- .../dir_b6c1f9d4f6080dc79a7a9d2c69150815.html | 2 +- .../dir_b6c1f9d4f6080dc79a7a9d2c69150815.md | 2 +- .../dir_b92c77c85671879e4c48e03051777b7e.html | 2 +- .../dir_b92c77c85671879e4c48e03051777b7e.md | 2 +- .../dir_baf8d66207f3fc39faf866e67ca98ce2.html | 2 +- .../dir_baf8d66207f3fc39faf866e67ca98ce2.md | 2 +- .../dir_c13ed27a749775eeb2d59234813cae48.html | 2 +- .../dir_c13ed27a749775eeb2d59234813cae48.md | 2 +- .../dir_c8a30dba58b805ee2d567ab327483fca.html | 2 +- .../dir_c8a30dba58b805ee2d567ab327483fca.md | 2 +- .../dir_c8ce71b7fc76205395f44c2291e69b75.html | 2 +- .../dir_c8ce71b7fc76205395f44c2291e69b75.md | 2 +- .../dir_cb8980ab440f994989990a6313097edf.html | 2 +- .../dir_cb8980ab440f994989990a6313097edf.md | 2 +- .../dir_d77cc112773b74d11448b7fad9142c8e.html | 2 +- .../dir_d77cc112773b74d11448b7fad9142c8e.md | 2 +- .../dir_e938d55d0d25a8e3889ca0b02966a6b3.html | 2 +- .../dir_e938d55d0d25a8e3889ca0b02966a6b3.md | 2 +- .../dir_f02d5d8e81e1edd3722111e50e18938d.html | 2 +- .../dir_f02d5d8e81e1edd3722111e50e18938d.md | 2 +- .../dir_f27aadd9c7f02e71212dbf7893d91496.html | 2 +- .../dir_f27aadd9c7f02e71212dbf7893d91496.md | 2 +- .../dir_f6c26397dfcef1d1f5f1786f8168e7dd.html | 2 +- .../dir_f6c26397dfcef1d1f5f1786f8168e7dd.md | 2 +- dev/api/Files/index_files.html | 2 +- dev/api/Files/index_files.md | 2 +- dev/api/Files/itkAdvancedTransform_8h.html | 2 +- dev/api/Files/itkAdvancedTransform_8h.md | 2 +- ...ySupportedRBFSparseKernelTransform_8h.html | 2 +- ...tlySupportedRBFSparseKernelTransform_8h.md | 2 +- dev/api/Files/itkKernelTransform2_8h.html | 2 +- dev/api/Files/itkKernelTransform2_8h.md | 2 +- .../itkMultiplyByConstantImageFilter_8h.html | 2 +- .../itkMultiplyByConstantImageFilter_8h.md | 2 +- .../Files/itkSparseKernelTransform_8h.html | 2 +- dev/api/Files/itkSparseKernelTransform_8h.md | 2 +- .../Files/itkTPGACLevelSetImageFilter_8h.html | 2 +- .../Files/itkTPGACLevelSetImageFilter_8h.md | 2 +- ...itkThinPlateSplineKernelTransform2_8h.html | 2 +- .../itkThinPlateSplineKernelTransform2_8h.md | 2 +- dev/api/Files/math3d_8h.html | 2 +- dev/api/Files/math3d_8h.md | 2 +- dev/api/Files/meshFIM_8h.html | 2 +- dev/api/Files/meshFIM_8h.md | 2 +- dev/api/Files/pybind__utils_8h.html | 2 +- dev/api/Files/pybind__utils_8h.md | 2 +- dev/api/Files/resource_8h.html | 2 +- dev/api/Files/resource_8h.md | 2 +- dev/api/Files/stdafx_8h.html | 2 +- dev/api/Files/stdafx_8h.md | 2 +- dev/api/Files/vtkPolyDataToImageData_8h.html | 2 +- dev/api/Files/vtkPolyDataToImageData_8h.md | 2 +- dev/api/Modules/group__Group-Common.html | 2 +- dev/api/Modules/group__Group-Common.md | 2 +- dev/api/Modules/group__Group-Constraint.html | 2 +- dev/api/Modules/group__Group-Constraint.md | 2 +- dev/api/Modules/group__Group-Image.html | 2 +- dev/api/Modules/group__Group-Image.md | 2 +- dev/api/Modules/group__Group-Mesh.html | 2 +- dev/api/Modules/group__Group-Mesh.md | 2 +- dev/api/Modules/index_groups.html | 2 +- dev/api/Modules/index_groups.md | 2 +- dev/api/Namespaces/index_namespaces.html | 2 +- dev/api/Namespaces/index_namespaces.md | 2 +- dev/api/Namespaces/namespaceUi.html | 2 +- dev/api/Namespaces/namespaceUi.md | 2 +- dev/api/Namespaces/namespacefmt.html | 2 +- dev/api/Namespaces/namespacefmt.md | 2 +- dev/api/Namespaces/namespaceitk.html | 2 +- dev/api/Namespaces/namespaceitk.md | 2 +- .../Namespaces/namespaceitk_1_1Functor.html | 2 +- dev/api/Namespaces/namespaceitk_1_1Functor.md | 2 +- dev/api/Namespaces/namespaceshapeworks.html | 2 +- dev/api/Namespaces/namespaceshapeworks.md | 2 +- .../namespaceshapeworks_1_1mesh.html | 2 +- .../Namespaces/namespaceshapeworks_1_1mesh.md | 2 +- .../namespaceshapeworks_1_1particles.html | 2 +- .../namespaceshapeworks_1_1particles.md | 2 +- .../namespaceshapeworks_1_1project.html | 2 +- .../namespaceshapeworks_1_1project.md | 2 +- ...paceshapeworks_1_1project_1_1prefixes.html | 2 +- ...espaceshapeworks_1_1project_1_1prefixes.md | 2 +- ...mespaceshapeworks_1_1project_1_1types.html | 2 +- ...namespaceshapeworks_1_1project_1_1types.md | 2 +- dev/api/Namespaces/namespacestd.html | 2 +- dev/api/Namespaces/namespacestd.md | 2 +- dev/api/Namespaces/namespaceutils.html | 2 +- dev/api/Namespaces/namespaceutils.md | 2 +- dev/python/python-api.html | 2 +- dev/search/search_index.json | 2 +- dev/sitemap.xml | 1216 ++++++++--------- dev/sitemap.xml.gz | Bin 5618 -> 5619 bytes 2048 files changed, 3260 insertions(+), 3260 deletions(-) diff --git a/6.5/api/Classes/classColorScheme.html b/6.5/api/Classes/classColorScheme.html index 8b65aa321a..27f9b581ee 100644 --- a/6.5/api/Classes/classColorScheme.html +++ b/6.5/api/Classes/classColorScheme.html @@ -2604,7 +2604,7 @@

variable alt

rgb alt;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classColorScheme.md b/6.5/api/Classes/classColorScheme.md index 8c247a2382..b3fe53dd9f 100644 --- a/6.5/api/Classes/classColorScheme.md +++ b/6.5/api/Classes/classColorScheme.md @@ -105,4 +105,4 @@ rgb alt; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classColorSchemes.html b/6.5/api/Classes/classColorSchemes.html index a6f8b03540..8716db85ef 100644 --- a/6.5/api/Classes/classColorSchemes.html +++ b/6.5/api/Classes/classColorSchemes.html @@ -2451,7 +2451,7 @@

function ~ColorSchemes

inline ~ColorSchemes()
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classColorSchemes.md b/6.5/api/Classes/classColorSchemes.md index e07268b356..f0d5ff1ff7 100644 --- a/6.5/api/Classes/classColorSchemes.md +++ b/6.5/api/Classes/classColorSchemes.md @@ -36,4 +36,4 @@ inline ~ColorSchemes() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classCustomSlider.html b/6.5/api/Classes/classCustomSlider.html index cccd1beb98..3ccab02186 100644 --- a/6.5/api/Classes/classCustomSlider.html +++ b/6.5/api/Classes/classCustomSlider.html @@ -2504,7 +2504,7 @@

function paintEvent

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classCustomSlider.md b/6.5/api/Classes/classCustomSlider.md index 151b4274e1..afec477cb6 100644 --- a/6.5/api/Classes/classCustomSlider.md +++ b/6.5/api/Classes/classCustomSlider.md @@ -58,4 +58,4 @@ virtual void paintEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classCustomSurfaceReconstructionFilter.html b/6.5/api/Classes/classCustomSurfaceReconstructionFilter.html index 099c401b5f..c72b49171d 100644 --- a/6.5/api/Classes/classCustomSurfaceReconstructionFilter.html +++ b/6.5/api/Classes/classCustomSurfaceReconstructionFilter.html @@ -2712,7 +2712,7 @@

variable SampleSpacing

double SampleSpacing;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classCustomSurfaceReconstructionFilter.md b/6.5/api/Classes/classCustomSurfaceReconstructionFilter.md index 39b63781b5..e1d0b7e07f 100644 --- a/6.5/api/Classes/classCustomSurfaceReconstructionFilter.md +++ b/6.5/api/Classes/classCustomSurfaceReconstructionFilter.md @@ -175,4 +175,4 @@ double SampleSpacing; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEAreaCoverage.html b/6.5/api/Classes/classFEAreaCoverage.html index 9014d61ad5..e4da8d0117 100644 --- a/6.5/api/Classes/classFEAreaCoverage.html +++ b/6.5/api/Classes/classFEAreaCoverage.html @@ -2763,7 +2763,7 @@

variable m_backSearchRadius

double m_backSearchRadius;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFEAreaCoverage.md b/6.5/api/Classes/classFEAreaCoverage.md index b81566916b..0ab7086c94 100644 --- a/6.5/api/Classes/classFEAreaCoverage.md +++ b/6.5/api/Classes/classFEAreaCoverage.md @@ -201,4 +201,4 @@ double m_backSearchRadius; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEAreaCoverage_1_1Surface.html b/6.5/api/Classes/classFEAreaCoverage_1_1Surface.html index ac45ec5283..e427263bf3 100644 --- a/6.5/api/Classes/classFEAreaCoverage_1_1Surface.html +++ b/6.5/api/Classes/classFEAreaCoverage_1_1Surface.html @@ -2624,7 +2624,7 @@

variable m_NLT

vector< vector< int > > m_NLT;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFEAreaCoverage_1_1Surface.md b/6.5/api/Classes/classFEAreaCoverage_1_1Surface.md index 7b4d77c88a..eff397a7a0 100644 --- a/6.5/api/Classes/classFEAreaCoverage_1_1Surface.md +++ b/6.5/api/Classes/classFEAreaCoverage_1_1Surface.md @@ -123,4 +123,4 @@ vector< vector< int > > m_NLT; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEAutoMesher.html b/6.5/api/Classes/classFEAutoMesher.html index 8149746e1b..0ccb7c4471 100644 --- a/6.5/api/Classes/classFEAutoMesher.html +++ b/6.5/api/Classes/classFEAutoMesher.html @@ -2670,7 +2670,7 @@

variable m_wsmooth

double m_wsmooth;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFEAutoMesher.md b/6.5/api/Classes/classFEAutoMesher.md index 595a96eb2c..df98185073 100644 --- a/6.5/api/Classes/classFEAutoMesher.md +++ b/6.5/api/Classes/classFEAutoMesher.md @@ -144,4 +144,4 @@ double m_wsmooth; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFECVDDecimationModifier.html b/6.5/api/Classes/classFECVDDecimationModifier.html index ced73292c3..5282b01b82 100644 --- a/6.5/api/Classes/classFECVDDecimationModifier.html +++ b/6.5/api/Classes/classFECVDDecimationModifier.html @@ -2556,7 +2556,7 @@

variable m_gradient

double m_gradient;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFECVDDecimationModifier.md b/6.5/api/Classes/classFECVDDecimationModifier.md index fe076f183c..68fac8f063 100644 --- a/6.5/api/Classes/classFECVDDecimationModifier.md +++ b/6.5/api/Classes/classFECVDDecimationModifier.md @@ -90,4 +90,4 @@ double m_gradient; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.html b/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.html index ecf0927a69..a4fd0f03ee 100644 --- a/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.html +++ b/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.html @@ -2524,7 +2524,7 @@

variable m_fid

vector< int > m_fid;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.md b/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.md index b1cac824eb..91e6740b3b 100644 --- a/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.md +++ b/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.md @@ -65,4 +65,4 @@ vector< int > m_fid; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.html b/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.html index 5bd98a5c1a..3b94f76d38 100644 --- a/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.html +++ b/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.html @@ -2572,7 +2572,7 @@

variable nc

int nc;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.md b/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.md index 9bb0886241..701df3b093 100644 --- a/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.md +++ b/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.md @@ -76,4 +76,4 @@ int nc; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFECoreMesh.html b/6.5/api/Classes/classFECoreMesh.html index 0acea3a363..92e3b83aca 100644 --- a/6.5/api/Classes/classFECoreMesh.html +++ b/6.5/api/Classes/classFECoreMesh.html @@ -2771,7 +2771,7 @@

variable m_Face

FE faces.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFECoreMesh.md b/6.5/api/Classes/classFECoreMesh.md index ad07dbbf80..23407c6123 100644 --- a/6.5/api/Classes/classFECoreMesh.md +++ b/6.5/api/Classes/classFECoreMesh.md @@ -236,4 +236,4 @@ FE faces. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEEdge.html b/6.5/api/Classes/classFEEdge.html index 295c60efc3..044fc8a537 100644 --- a/6.5/api/Classes/classFEEdge.html +++ b/6.5/api/Classes/classFEEdge.html @@ -2702,7 +2702,7 @@

variable m_nbr

the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1)


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFEEdge.md b/6.5/api/Classes/classFEEdge.md index e9cccda54a..a83813c2f5 100644 --- a/6.5/api/Classes/classFEEdge.md +++ b/6.5/api/Classes/classFEEdge.md @@ -136,4 +136,4 @@ the two adjacent edges (if there are more edges incident to a node, the neighbou ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEElement.html b/6.5/api/Classes/classFEElement.html index e690a0bac3..0fe676c7d5 100644 --- a/6.5/api/Classes/classFEElement.html +++ b/6.5/api/Classes/classFEElement.html @@ -2783,7 +2783,7 @@

function SetType

Set the element type.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classFEElement.md b/6.5/api/Classes/classFEElement.md index 5d8fe698ac..913739564c 100644 --- a/6.5/api/Classes/classFEElement.md +++ b/6.5/api/Classes/classFEElement.md @@ -152,4 +152,4 @@ Set the element type. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEElementData.html b/6.5/api/Classes/classFEElementData.html index 35b9e06098..d0a949d607 100644 --- a/6.5/api/Classes/classFEElementData.html +++ b/6.5/api/Classes/classFEElementData.html @@ -2595,7 +2595,7 @@

function FillRandomBox

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEElementData.md b/6.5/api/Classes/classFEElementData.md index 70ec980e42..5db2a77bc3 100644 --- a/6.5/api/Classes/classFEElementData.md +++ b/6.5/api/Classes/classFEElementData.md @@ -125,4 +125,4 @@ void FillRandomBox( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEElement__.html b/6.5/api/Classes/classFEElement__.html index c5b7bf7a47..e223c24232 100644 --- a/6.5/api/Classes/classFEElement__.html +++ b/6.5/api/Classes/classFEElement__.html @@ -3027,7 +3027,7 @@

variable m_nedges

nr of edges ( 0 for solids)


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEElement__.md b/6.5/api/Classes/classFEElement__.md index d10c00aa94..8b40bf9918 100644 --- a/6.5/api/Classes/classFEElement__.md +++ b/6.5/api/Classes/classFEElement__.md @@ -330,4 +330,4 @@ nr of edges ( 0 for solids) ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEFace.html b/6.5/api/Classes/classFEFace.html index e1af7858fb..09a746f8b3 100644 --- a/6.5/api/Classes/classFEFace.html +++ b/6.5/api/Classes/classFEFace.html @@ -2845,7 +2845,7 @@

variable m_elem

the elements to which this face belongs


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEFace.md b/6.5/api/Classes/classFEFace.md index 48ca938bc6..ee6e8c6b04 100644 --- a/6.5/api/Classes/classFEFace.md +++ b/6.5/api/Classes/classFEFace.md @@ -225,4 +225,4 @@ the elements to which this face belongs ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEFillHole.html b/6.5/api/Classes/classFEFillHole.html index 82678266f2..3bada673cc 100644 --- a/6.5/api/Classes/classFEFillHole.html +++ b/6.5/api/Classes/classFEFillHole.html @@ -2628,7 +2628,7 @@

variable insertNodes

bool insertNodes;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEFillHole.md b/6.5/api/Classes/classFEFillHole.md index cd5791b7e7..859c14c6dc 100644 --- a/6.5/api/Classes/classFEFillHole.md +++ b/6.5/api/Classes/classFEFillHole.md @@ -126,4 +126,4 @@ bool insertNodes; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEFillHole_1_1EdgeRing.html b/6.5/api/Classes/classFEFillHole_1_1EdgeRing.html index 8df7208ec0..303ae1d025 100644 --- a/6.5/api/Classes/classFEFillHole_1_1EdgeRing.html +++ b/6.5/api/Classes/classFEFillHole_1_1EdgeRing.html @@ -2668,7 +2668,7 @@

variable m_normal

vector< vec3d > m_normal;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEFillHole_1_1EdgeRing.md b/6.5/api/Classes/classFEFillHole_1_1EdgeRing.md index b733adf05a..12389d581d 100644 --- a/6.5/api/Classes/classFEFillHole_1_1EdgeRing.md +++ b/6.5/api/Classes/classFEFillHole_1_1EdgeRing.md @@ -155,4 +155,4 @@ vector< vec3d > m_normal; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEFixMesh.html b/6.5/api/Classes/classFEFixMesh.html index fea2ba1344..2a79a13231 100644 --- a/6.5/api/Classes/classFEFixMesh.html +++ b/6.5/api/Classes/classFEFixMesh.html @@ -2596,7 +2596,7 @@

function InterpolateShellThickness)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEFixMesh.md b/6.5/api/Classes/classFEFixMesh.md index 9f882a1dfb..d69629ff82 100644 --- a/6.5/api/Classes/classFEFixMesh.md +++ b/6.5/api/Classes/classFEFixMesh.md @@ -126,4 +126,4 @@ FEMesh * InterpolateShellThickness( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEItem.html b/6.5/api/Classes/classFEItem.html index 001f379b62..ba789a2ed4 100644 --- a/6.5/api/Classes/classFEItem.html +++ b/6.5/api/Classes/classFEItem.html @@ -2625,7 +2625,7 @@

variable m_nid

int m_nid;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEItem.md b/6.5/api/Classes/classFEItem.md index 24530a2983..0f7e3743b9 100644 --- a/6.5/api/Classes/classFEItem.md +++ b/6.5/api/Classes/classFEItem.md @@ -125,4 +125,4 @@ int m_nid; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEMesh.html b/6.5/api/Classes/classFEMesh.html index 90e037921b..2eb035f8ed 100644 --- a/6.5/api/Classes/classFEMesh.html +++ b/6.5/api/Classes/classFEMesh.html @@ -3815,7 +3815,7 @@

variable m_map

vector< FEElementData > m_map;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEMesh.md b/6.5/api/Classes/classFEMesh.md index 77b5f4a64b..0017eab166 100644 --- a/6.5/api/Classes/classFEMesh.md +++ b/6.5/api/Classes/classFEMesh.md @@ -837,4 +837,4 @@ vector< FEElementData > m_map; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEMeshSmoothingModifier.html b/6.5/api/Classes/classFEMeshSmoothingModifier.html index 7132a681c3..f23d2d6d95 100644 --- a/6.5/api/Classes/classFEMeshSmoothingModifier.html +++ b/6.5/api/Classes/classFEMeshSmoothingModifier.html @@ -2719,7 +2719,7 @@

variable m_method

int m_method;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEMeshSmoothingModifier.md b/6.5/api/Classes/classFEMeshSmoothingModifier.md index 4946b6b299..ccefa9c034 100644 --- a/6.5/api/Classes/classFEMeshSmoothingModifier.md +++ b/6.5/api/Classes/classFEMeshSmoothingModifier.md @@ -180,4 +180,4 @@ int m_method; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFENode.html b/6.5/api/Classes/classFENode.html index bce589bd03..7fb5923c51 100644 --- a/6.5/api/Classes/classFENode.html +++ b/6.5/api/Classes/classFENode.html @@ -2589,7 +2589,7 @@

variable m_ndata

double m_ndata;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFENode.md b/6.5/api/Classes/classFENode.md index 73dbc4a936..f11d5312da 100644 --- a/6.5/api/Classes/classFENode.md +++ b/6.5/api/Classes/classFENode.md @@ -84,4 +84,4 @@ double m_ndata; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFENodeElementList.html b/6.5/api/Classes/classFENodeElementList.html index 7aef700ee5..095cd9dfec 100644 --- a/6.5/api/Classes/classFENodeElementList.html +++ b/6.5/api/Classes/classFENodeElementList.html @@ -2587,7 +2587,7 @@

variable m_pelem

vector< FEElement * > m_pelem;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFENodeElementList.md b/6.5/api/Classes/classFENodeElementList.md index 17e9d4eb3f..6bee7e3730 100644 --- a/6.5/api/Classes/classFENodeElementList.md +++ b/6.5/api/Classes/classFENodeElementList.md @@ -104,4 +104,4 @@ vector< FEElement * > m_pelem; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFENodeFaceList.html b/6.5/api/Classes/classFENodeFaceList.html index 6ddb79254a..8a76ff1a5d 100644 --- a/6.5/api/Classes/classFENodeFaceList.html +++ b/6.5/api/Classes/classFENodeFaceList.html @@ -2712,7 +2712,7 @@

variable m_off

vector< int > m_off;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFENodeFaceList.md b/6.5/api/Classes/classFENodeFaceList.md index c4c5d033d9..a4bb1ec987 100644 --- a/6.5/api/Classes/classFENodeFaceList.md +++ b/6.5/api/Classes/classFENodeFaceList.md @@ -168,4 +168,4 @@ vector< int > m_off; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFENodeNodeList.html b/6.5/api/Classes/classFENodeNodeList.html index 5855999c0e..50983b3ad5 100644 --- a/6.5/api/Classes/classFENodeNodeList.html +++ b/6.5/api/Classes/classFENodeNodeList.html @@ -2587,7 +2587,7 @@

variable m_node

vector< int > m_node;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFENodeNodeList.md b/6.5/api/Classes/classFENodeNodeList.md index 31c84ef8f8..fe8c20663c 100644 --- a/6.5/api/Classes/classFENodeNodeList.md +++ b/6.5/api/Classes/classFENodeNodeList.md @@ -104,4 +104,4 @@ vector< int > m_node; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFETri3.html b/6.5/api/Classes/classFETri3.html index 754cf47559..6ea87ed3b6 100644 --- a/6.5/api/Classes/classFETri3.html +++ b/6.5/api/Classes/classFETri3.html @@ -2706,7 +2706,7 @@

function operator=

assignment operator


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFETri3.md b/6.5/api/Classes/classFETri3.md index b3d868e3b5..47def90e7b 100644 --- a/6.5/api/Classes/classFETri3.md +++ b/6.5/api/Classes/classFETri3.md @@ -124,4 +124,4 @@ assignment operator ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEVTKExport.html b/6.5/api/Classes/classFEVTKExport.html index 40dccfb7f7..64ec0a06e7 100644 --- a/6.5/api/Classes/classFEVTKExport.html +++ b/6.5/api/Classes/classFEVTKExport.html @@ -2532,7 +2532,7 @@

function ExportToVTK

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEVTKExport.md b/6.5/api/Classes/classFEVTKExport.md index 2dce1c4dd2..be6d51288f 100644 --- a/6.5/api/Classes/classFEVTKExport.md +++ b/6.5/api/Classes/classFEVTKExport.md @@ -86,4 +86,4 @@ vtkSmartPointer< vtkPolyData > ExportToVTK( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classFEVTKimport.html b/6.5/api/Classes/classFEVTKimport.html index 7a7a3deb8f..4f99ed1d37 100644 --- a/6.5/api/Classes/classFEVTKimport.html +++ b/6.5/api/Classes/classFEVTKimport.html @@ -2577,7 +2577,7 @@

function Close

void Close()
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classFEVTKimport.md b/6.5/api/Classes/classFEVTKimport.md index f424b6a7f7..e032c87396 100644 --- a/6.5/api/Classes/classFEVTKimport.md +++ b/6.5/api/Classes/classFEVTKimport.md @@ -100,4 +100,4 @@ void Close() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classGLCOLOR.html b/6.5/api/Classes/classGLCOLOR.html index 4e60669613..ec01a5e978 100644 --- a/6.5/api/Classes/classGLCOLOR.html +++ b/6.5/api/Classes/classGLCOLOR.html @@ -2575,7 +2575,7 @@

variable r

uchar r;
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classGLCOLOR.md b/6.5/api/Classes/classGLCOLOR.md index 8c6e82600f..33305de36c 100644 --- a/6.5/api/Classes/classGLCOLOR.md +++ b/6.5/api/Classes/classGLCOLOR.md @@ -98,4 +98,4 @@ uchar r; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classLegacyMeshGenerator.html b/6.5/api/Classes/classLegacyMeshGenerator.html index 64f0cabba3..a65c5a9df6 100644 --- a/6.5/api/Classes/classLegacyMeshGenerator.html +++ b/6.5/api/Classes/classLegacyMeshGenerator.html @@ -2530,7 +2530,7 @@

function buildMesh

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classLegacyMeshGenerator.md b/6.5/api/Classes/classLegacyMeshGenerator.md index f8d547fc81..d9a461d731 100644 --- a/6.5/api/Classes/classLegacyMeshGenerator.md +++ b/6.5/api/Classes/classLegacyMeshGenerator.md @@ -84,4 +84,4 @@ vtkSmartPointer< vtkPolyData > buildMesh( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classMeshSettings.html b/6.5/api/Classes/classMeshSettings.html index 702cd12ac9..860918be4e 100644 --- a/6.5/api/Classes/classMeshSettings.html +++ b/6.5/api/Classes/classMeshSettings.html @@ -2466,7 +2466,7 @@

function ~MeshSettings

Destructor.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classMeshSettings.md b/6.5/api/Classes/classMeshSettings.md index ccb37da00a..2350f04187 100644 --- a/6.5/api/Classes/classMeshSettings.md +++ b/6.5/api/Classes/classMeshSettings.md @@ -50,4 +50,4 @@ Destructor. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classObjectReader.html b/6.5/api/Classes/classObjectReader.html index 016a73425b..340008beb6 100644 --- a/6.5/api/Classes/classObjectReader.html +++ b/6.5/api/Classes/classObjectReader.html @@ -2627,7 +2627,7 @@

function ~ObjectReader

inline virtual ~ObjectReader()
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classObjectReader.md b/6.5/api/Classes/classObjectReader.md index 77b3f5de71..b4f3054fcb 100644 --- a/6.5/api/Classes/classObjectReader.md +++ b/6.5/api/Classes/classObjectReader.md @@ -133,4 +133,4 @@ inline virtual ~ObjectReader() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classObjectWriter.html b/6.5/api/Classes/classObjectWriter.html index 6d9b8a6e6b..4e74ed69f6 100644 --- a/6.5/api/Classes/classObjectWriter.html +++ b/6.5/api/Classes/classObjectWriter.html @@ -2615,7 +2615,7 @@

function ~ObjectWriter

inline virtual ~ObjectWriter()
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classObjectWriter.md b/6.5/api/Classes/classObjectWriter.md index c480a313d4..d6f54f5281 100644 --- a/6.5/api/Classes/classObjectWriter.md +++ b/6.5/api/Classes/classObjectWriter.md @@ -127,4 +127,4 @@ inline virtual ~ObjectWriter() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleEvent_1_1_01Parent.html b/6.5/api/Classes/classParticleEvent_1_1_01Parent.html index 998a10e0c2..719ac5e7f4 100644 --- a/6.5/api/Classes/classParticleEvent_1_1_01Parent.html +++ b/6.5/api/Classes/classParticleEvent_1_1_01Parent.html @@ -2406,7 +2406,7 @@

Detailed Description

all Particle events.

Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:27 +0000

diff --git a/6.5/api/Classes/classParticleEvent_1_1_01Parent.md b/6.5/api/Classes/classParticleEvent_1_1_01Parent.md index c4f4442b95..ba80eef1af 100644 --- a/6.5/api/Classes/classParticleEvent_1_1_01Parent.md +++ b/6.5/api/Classes/classParticleEvent_1_1_01Parent.md @@ -22,4 +22,4 @@ Event that carries Position index and a Domain index information. This is used, ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.html b/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.html index c75245e087..4660d4b62e 100644 --- a/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.html +++ b/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.html @@ -2403,7 +2403,7 @@

Detailed Description

This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed).


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.md b/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.md index 2f113eaaae..5f9e441145 100644 --- a/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.md +++ b/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.md @@ -23,4 +23,4 @@ This class optimizes a list of particle system positions with respect to a speci ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleImageDomain.html b/6.5/api/Classes/classParticleImageDomain.html index 4c2f6e2482..0de9d3d888 100644 --- a/6.5/api/Classes/classParticleImageDomain.html +++ b/6.5/api/Classes/classParticleImageDomain.html @@ -2403,7 +2403,7 @@

Detailed Description

A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleImageDomain.md b/6.5/api/Classes/classParticleImageDomain.md index 662a3908c4..6dcc523b06 100644 --- a/6.5/api/Classes/classParticleImageDomain.md +++ b/6.5/api/Classes/classParticleImageDomain.md @@ -23,4 +23,4 @@ A bounding-box region domain that sets its bounding box according to the origin, ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleImageDomainWithCurvature.html b/6.5/api/Classes/classParticleImageDomainWithCurvature.html index 112c411557..6820014725 100644 --- a/6.5/api/Classes/classParticleImageDomainWithCurvature.html +++ b/6.5/api/Classes/classParticleImageDomainWithCurvature.html @@ -2409,7 +2409,7 @@

Detailed Description

An image domain that extends ParticleImageDomainWithGradN with curvature information.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleImageDomainWithCurvature.md b/6.5/api/Classes/classParticleImageDomainWithCurvature.md index dda5300c01..8ee969360c 100644 --- a/6.5/api/Classes/classParticleImageDomainWithCurvature.md +++ b/6.5/api/Classes/classParticleImageDomainWithCurvature.md @@ -30,4 +30,4 @@ An image domain that extends [ParticleImageDomainWithGradN](../Classes/classPart ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleImageDomainWithGradN.html b/6.5/api/Classes/classParticleImageDomainWithGradN.html index b85c070f03..a6d23511ce 100644 --- a/6.5/api/Classes/classParticleImageDomainWithGradN.html +++ b/6.5/api/Classes/classParticleImageDomainWithGradN.html @@ -2409,7 +2409,7 @@

Detailed Description

An image domain that extends ParticleImageDomainWithGradients with gradient of normals information.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleImageDomainWithGradN.md b/6.5/api/Classes/classParticleImageDomainWithGradN.md index d6477280c2..efe679507c 100644 --- a/6.5/api/Classes/classParticleImageDomainWithGradN.md +++ b/6.5/api/Classes/classParticleImageDomainWithGradN.md @@ -30,4 +30,4 @@ An image domain that extends [ParticleImageDomainWithGradients](../Classes/class ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleImageDomainWithGradients.html b/6.5/api/Classes/classParticleImageDomainWithGradients.html index 76ccbce1d0..a7a798ba6c 100644 --- a/6.5/api/Classes/classParticleImageDomainWithGradients.html +++ b/6.5/api/Classes/classParticleImageDomainWithGradients.html @@ -2409,7 +2409,7 @@

Detailed Description

An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleImageDomainWithGradients.md b/6.5/api/Classes/classParticleImageDomainWithGradients.md index 1505192361..9e3d1cdc1e 100644 --- a/6.5/api/Classes/classParticleImageDomainWithGradients.md +++ b/6.5/api/Classes/classParticleImageDomainWithGradients.md @@ -30,4 +30,4 @@ An image domain that extends [ParticleImageDomainWithGradients](../Classes/class ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleImplicitSurfaceDomain.html b/6.5/api/Classes/classParticleImplicitSurfaceDomain.html index 77406e4121..355439a78b 100644 --- a/6.5/api/Classes/classParticleImplicitSurfaceDomain.html +++ b/6.5/api/Classes/classParticleImplicitSurfaceDomain.html @@ -2403,7 +2403,7 @@

Detailed Description

A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleImplicitSurfaceDomain.md b/6.5/api/Classes/classParticleImplicitSurfaceDomain.md index 9451ab76aa..53a601cad0 100644 --- a/6.5/api/Classes/classParticleImplicitSurfaceDomain.md +++ b/6.5/api/Classes/classParticleImplicitSurfaceDomain.md @@ -23,4 +23,4 @@ A 3D cartesian domain that constrains points so that they always lie an implicit ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleMeanCurvatureAttribute.html b/6.5/api/Classes/classParticleMeanCurvatureAttribute.html index 258286378f..a01956ade6 100644 --- a/6.5/api/Classes/classParticleMeanCurvatureAttribute.html +++ b/6.5/api/Classes/classParticleMeanCurvatureAttribute.html @@ -2382,7 +2382,7 @@

ParticleMeanCurvatureAttribute


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleMeanCurvatureAttribute.md b/6.5/api/Classes/classParticleMeanCurvatureAttribute.md index 918d877124..0c11b748d3 100644 --- a/6.5/api/Classes/classParticleMeanCurvatureAttribute.md +++ b/6.5/api/Classes/classParticleMeanCurvatureAttribute.md @@ -11,4 +11,4 @@ title: ParticleMeanCurvatureAttribute ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleProcrustesRegistration.html b/6.5/api/Classes/classParticleProcrustesRegistration.html index 0dfe33f103..52046406f6 100644 --- a/6.5/api/Classes/classParticleProcrustesRegistration.html +++ b/6.5/api/Classes/classParticleProcrustesRegistration.html @@ -2382,7 +2382,7 @@

ParticleProcrustesRegistration


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleProcrustesRegistration.md b/6.5/api/Classes/classParticleProcrustesRegistration.md index 2cb1e9fe5e..5f9bd3fbb6 100644 --- a/6.5/api/Classes/classParticleProcrustesRegistration.md +++ b/6.5/api/Classes/classParticleProcrustesRegistration.md @@ -11,4 +11,4 @@ title: ParticleProcrustesRegistration ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html b/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html index a1cbbf7889..fce8b81f62 100644 --- a/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html +++ b/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html @@ -2382,7 +2382,7 @@

ParticleShapeLinearRegressionMatrixAttribute


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md b/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md index 5d5f20894c..01c399000c 100644 --- a/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md +++ b/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md @@ -11,4 +11,4 @@ title: ParticleShapeLinearRegressionMatrixAttribute ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleShapeMatrixAttribute.html b/6.5/api/Classes/classParticleShapeMatrixAttribute.html index 8f3fec5392..849b2d4402 100644 --- a/6.5/api/Classes/classParticleShapeMatrixAttribute.html +++ b/6.5/api/Classes/classParticleShapeMatrixAttribute.html @@ -2404,7 +2404,7 @@

Detailed Description

Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!

Each column represents a single shape.


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleShapeMatrixAttribute.md b/6.5/api/Classes/classParticleShapeMatrixAttribute.md index 1bcf841a02..c40c390b0a 100644 --- a/6.5/api/Classes/classParticleShapeMatrixAttribute.md +++ b/6.5/api/Classes/classParticleShapeMatrixAttribute.md @@ -25,4 +25,4 @@ Each column represents a single shape. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html b/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html index cf6eaf5219..3d286b5c51 100644 --- a/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html +++ b/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html @@ -2382,7 +2382,7 @@

ParticleShapeMixedEffectsMatrixAttribute


-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md b/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md index 4fd5d7bedc..85fbb94b1f 100644 --- a/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md +++ b/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md @@ -11,4 +11,4 @@ title: ParticleShapeMixedEffectsMatrixAttribute ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classPreferences.html b/6.5/api/Classes/classPreferences.html index 777b8e3bc6..0efb21111e 100644 --- a/6.5/api/Classes/classPreferences.html +++ b/6.5/api/Classes/classPreferences.html @@ -3865,7 +3865,7 @@

function set_pending_telemetry_ev )
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classPreferences.md b/6.5/api/Classes/classPreferences.md index 6a9b639d42..2e8057aa20 100644 --- a/6.5/api/Classes/classPreferences.md +++ b/6.5/api/Classes/classPreferences.md @@ -834,4 +834,4 @@ void set_pending_telemetry_events( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classProcrustes3D.html b/6.5/api/Classes/classProcrustes3D.html index 0535ce48de..2e35f01218 100644 --- a/6.5/api/Classes/classProcrustes3D.html +++ b/6.5/api/Classes/classProcrustes3D.html @@ -2942,7 +2942,7 @@

function ComputeSumOfSquares

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classProcrustes3D.md b/6.5/api/Classes/classProcrustes3D.md index fe9c36b063..54d48c515d 100644 --- a/6.5/api/Classes/classProcrustes3D.md +++ b/6.5/api/Classes/classProcrustes3D.md @@ -321,4 +321,4 @@ static RealType ComputeSumOfSquares( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classReconstruction.html b/6.5/api/Classes/classReconstruction.html index 43be0f7486..2cc077e874 100644 --- a/6.5/api/Classes/classReconstruction.html +++ b/6.5/api/Classes/classReconstruction.html @@ -3153,7 +3153,7 @@

function DisablePa
inline void DisablePairwiseNormalsDifferencesForGoodBad()
 

-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classReconstruction.md b/6.5/api/Classes/classReconstruction.md index eed5e569bb..29cecedf0a 100644 --- a/6.5/api/Classes/classReconstruction.md +++ b/6.5/api/Classes/classReconstruction.md @@ -451,4 +451,4 @@ inline void DisablePairwiseNormalsDifferencesForGoodBad() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classStudioLogger.html b/6.5/api/Classes/classStudioLogger.html index 22727a4539..ac89747ad6 100644 --- a/6.5/api/Classes/classStudioLogger.html +++ b/6.5/api/Classes/classStudioLogger.html @@ -2693,7 +2693,7 @@

function handle_progress

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classStudioLogger.md b/6.5/api/Classes/classStudioLogger.md index 6a2991592a..3e71197676 100644 --- a/6.5/api/Classes/classStudioLogger.md +++ b/6.5/api/Classes/classStudioLogger.md @@ -177,4 +177,4 @@ void handle_progress( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classSurfaceReconstructor.html b/6.5/api/Classes/classSurfaceReconstructor.html index 9d8d4a50a9..9bf4953001 100644 --- a/6.5/api/Classes/classSurfaceReconstructor.html +++ b/6.5/api/Classes/classSurfaceReconstructor.html @@ -2629,7 +2629,7 @@

function build_mesh

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classSurfaceReconstructor.md b/6.5/api/Classes/classSurfaceReconstructor.md index 6d7e1fdb02..b0dd19b0d3 100644 --- a/6.5/api/Classes/classSurfaceReconstructor.md +++ b/6.5/api/Classes/classSurfaceReconstructor.md @@ -147,4 +147,4 @@ vtkSmartPointer< vtkPolyData > build_mesh( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classUtils.html b/6.5/api/Classes/classUtils.html index 1b2088b8e4..9762a8a015 100644 --- a/6.5/api/Classes/classUtils.html +++ b/6.5/api/Classes/classUtils.html @@ -2930,7 +2930,7 @@

function averageThetaArc

)
-

Updated on 2023-10-24 at 22:16:02 +0000

+

Updated on 2023-10-25 at 15:40:28 +0000

diff --git a/6.5/api/Classes/classUtils.md b/6.5/api/Classes/classUtils.md index d7778f9960..acd4c914b1 100644 --- a/6.5/api/Classes/classUtils.md +++ b/6.5/api/Classes/classUtils.md @@ -382,4 +382,4 @@ static double averageThetaArc( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1AdvancedTransform.html b/6.5/api/Classes/classitk_1_1AdvancedTransform.html index 79d5f922ac..0d729348d8 100644 --- a/6.5/api/Classes/classitk_1_1AdvancedTransform.html +++ b/6.5/api/Classes/classitk_1_1AdvancedTransform.html @@ -3365,7 +3365,7 @@

variable m_HasNonZeroJaco
bool m_HasNonZeroJacobianOfSpatialHessian;
 

-

Updated on 2023-10-24 at 22:16:01 +0000

+

Updated on 2023-10-25 at 15:40:26 +0000

diff --git a/6.5/api/Classes/classitk_1_1AdvancedTransform.md b/6.5/api/Classes/classitk_1_1AdvancedTransform.md index ff496c3a52..4a2523b848 100644 --- a/6.5/api/Classes/classitk_1_1AdvancedTransform.md +++ b/6.5/api/Classes/classitk_1_1AdvancedTransform.md @@ -636,4 +636,4 @@ bool m_HasNonZeroJacobianOfSpatialHessian; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html b/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html index 100e09d490..bb8c1d875e 100644 --- a/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html +++ b/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html @@ -2404,7 +2404,7 @@

Detailed Description

class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents;
-

Updated on 2023-10-24 at 22:16:01 +0000

+

Updated on 2023-10-25 at 15:40:26 +0000

diff --git a/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md b/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md index d1ef559dc7..15ff53ddb2 100644 --- a/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md +++ b/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md @@ -21,4 +21,4 @@ class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html b/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html index 537927008a..400fa80216 100644 --- a/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html +++ b/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html @@ -3212,7 +3212,7 @@

function ComputeDeformationCont

Reimplements: itk::SparseKernelTransform::ComputeDeformationContribution

Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space


-

Updated on 2023-10-24 at 22:16:01 +0000

+

Updated on 2023-10-25 at 15:40:26 +0000

diff --git a/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md b/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md index 869ac495f9..a9c8e1404b 100644 --- a/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md +++ b/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md @@ -392,4 +392,4 @@ Compute the contribution of the landmarks weighted by the kernel funcion to the ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html b/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html index 1e173154d8..f65de4ff61 100644 --- a/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html +++ b/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html @@ -2588,7 +2588,7 @@

variable m_Constant

TConstant m_Constant;
 

-

Updated on 2023-10-24 at 22:16:01 +0000

+

Updated on 2023-10-25 at 15:40:26 +0000

diff --git a/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md b/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md index 10474d2ee4..0f087c7266 100644 --- a/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md +++ b/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md @@ -106,4 +106,4 @@ TConstant m_Constant; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1KernelTransform2.html b/6.5/api/Classes/classitk_1_1KernelTransform2.html index 6df1ecc60e..44b641fd5d 100644 --- a/6.5/api/Classes/classitk_1_1KernelTransform2.html +++ b/6.5/api/Classes/classitk_1_1KernelTransform2.html @@ -4566,7 +4566,7 @@

variable m_FastComputationPossible

The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS.


-

Updated on 2023-10-24 at 22:16:01 +0000

+

Updated on 2023-10-25 at 15:40:26 +0000

diff --git a/6.5/api/Classes/classitk_1_1KernelTransform2.md b/6.5/api/Classes/classitk_1_1KernelTransform2.md index 8346a39acd..3c34a6d780 100644 --- a/6.5/api/Classes/classitk_1_1KernelTransform2.md +++ b/6.5/api/Classes/classitk_1_1KernelTransform2.md @@ -1439,4 +1439,4 @@ The Jacobian can be computed much faster for some of the derived kerbel transfor ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html b/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html index 09d5721cf5..800fc8ca56 100644 --- a/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html +++ b/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html @@ -2675,7 +2675,7 @@

function PrintSelf

) const
-

Updated on 2023-10-24 at 22:16:01 +0000

+

Updated on 2023-10-25 at 15:40:26 +0000

diff --git a/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md b/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md index 4b4e469b3f..f00c12cfe6 100644 --- a/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md +++ b/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md @@ -168,4 +168,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1SparseKernelTransform.html b/6.5/api/Classes/classitk_1_1SparseKernelTransform.html index 1765abdcf8..ca8e709e9a 100644 --- a/6.5/api/Classes/classitk_1_1SparseKernelTransform.html +++ b/6.5/api/Classes/classitk_1_1SparseKernelTransform.html @@ -3830,7 +3830,7 @@

variable m_I

Identity matrix.


-

Updated on 2023-10-24 at 22:16:01 +0000

+

Updated on 2023-10-25 at 15:40:26 +0000

diff --git a/6.5/api/Classes/classitk_1_1SparseKernelTransform.md b/6.5/api/Classes/classitk_1_1SparseKernelTransform.md index 1be44e0658..3d14cfffd6 100644 --- a/6.5/api/Classes/classitk_1_1SparseKernelTransform.md +++ b/6.5/api/Classes/classitk_1_1SparseKernelTransform.md @@ -980,4 +980,4 @@ Identity matrix. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html b/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html index d4e2f26ca1..d0fe61344b 100644 --- a/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html +++ b/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html @@ -2778,7 +2778,7 @@

function CalculateUpdateValue

  • surface flow under certain conditions.

  • -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md b/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md index 901df052ea..17bde1acd3 100644 --- a/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md +++ b/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md @@ -221,4 +221,4 @@ Overridden from the parent class to indroduce a constraint on ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html b/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html index 6823a045c4..e8a59aaa13 100644 --- a/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html +++ b/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html @@ -3528,7 +3528,7 @@

    function ComputeDeformationCont

    Reimplements: itk::KernelTransform2::ComputeDeformationContribution

    Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md b/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md index 16ef307721..2787bf07a2 100644 --- a/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md +++ b/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md @@ -479,4 +479,4 @@ Compute the contribution of the landmarks weighted by the kernel function to the ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classmat3d.html b/6.5/api/Classes/classmat3d.html index 1082cb766f..2deb3c213d 100644 --- a/6.5/api/Classes/classmat3d.html +++ b/6.5/api/Classes/classmat3d.html @@ -2719,7 +2719,7 @@

    variable m_data

    double m_data;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classmat3d.md b/6.5/api/Classes/classmat3d.md index 1e1da62b4d..09a861a650 100644 --- a/6.5/api/Classes/classmat3d.md +++ b/6.5/api/Classes/classmat3d.md @@ -188,4 +188,4 @@ double m_data; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classmatrix.html b/6.5/api/Classes/classmatrix.html index 34ed779f70..41716ee12a 100644 --- a/6.5/api/Classes/classmatrix.html +++ b/6.5/api/Classes/classmatrix.html @@ -2598,7 +2598,7 @@

    function mult_transpose_self

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classmatrix.md b/6.5/api/Classes/classmatrix.md index 4b6a48a272..b900ff5efa 100644 --- a/6.5/api/Classes/classmatrix.md +++ b/6.5/api/Classes/classmatrix.md @@ -128,4 +128,4 @@ void mult_transpose_self( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classmeshFIM.html b/6.5/api/Classes/classmeshFIM.html index f9be2c7c16..60cec44ffc 100644 --- a/6.5/api/Classes/classmeshFIM.html +++ b/6.5/api/Classes/classmeshFIM.html @@ -2933,7 +2933,7 @@

    variable colors

    std::vector< Color > colors;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classmeshFIM.md b/6.5/api/Classes/classmeshFIM.md index 7c0288508f..2e86c617f3 100644 --- a/6.5/api/Classes/classmeshFIM.md +++ b/6.5/api/Classes/classmeshFIM.md @@ -281,4 +281,4 @@ std::vector< Color > colors; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classobject__reader.html b/6.5/api/Classes/classobject__reader.html index 7ef62cdf4f..a62dd2ece5 100644 --- a/6.5/api/Classes/classobject__reader.html +++ b/6.5/api/Classes/classobject__reader.html @@ -2403,7 +2403,7 @@

    Detailed Description

    Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classobject__reader.md b/6.5/api/Classes/classobject__reader.md index 840b878d6d..3cf0d9b56c 100644 --- a/6.5/api/Classes/classobject__reader.md +++ b/6.5/api/Classes/classobject__reader.md @@ -23,4 +23,4 @@ Reads a std::vector of c++ objects. The first integer in the file is assumed to ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classobject__writer.html b/6.5/api/Classes/classobject__writer.html index f8573b4932..85f47b1f15 100644 --- a/6.5/api/Classes/classobject__writer.html +++ b/6.5/api/Classes/classobject__writer.html @@ -2382,7 +2382,7 @@

    object_writer


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classobject__writer.md b/6.5/api/Classes/classobject__writer.md index b7c325d28b..1d87ce0c4f 100644 --- a/6.5/api/Classes/classobject__writer.md +++ b/6.5/api/Classes/classobject__writer.md @@ -11,4 +11,4 @@ title: object_writer ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classquatd.html b/6.5/api/Classes/classquatd.html index ba4662ec62..63508a7b62 100644 --- a/6.5/api/Classes/classquatd.html +++ b/6.5/api/Classes/classquatd.html @@ -2969,7 +2969,7 @@

    variable w

    double w;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classquatd.md b/6.5/api/Classes/classquatd.md index 5a86f11e86..9da949bfc0 100644 --- a/6.5/api/Classes/classquatd.md +++ b/6.5/api/Classes/classquatd.md @@ -342,4 +342,4 @@ double w; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1AnalysisTool.html b/6.5/api/Classes/classshapeworks_1_1AnalysisTool.html index 1fa4b441ba..9b86296f79 100644 --- a/6.5/api/Classes/classshapeworks_1_1AnalysisTool.html +++ b/6.5/api/Classes/classshapeworks_1_1AnalysisTool.html @@ -3939,7 +3939,7 @@

    variable MODE_REGRESSION_C

    static const std::string MODE_REGRESSION_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1AnalysisTool.md b/6.5/api/Classes/classshapeworks_1_1AnalysisTool.md index bac5f94d17..9b08ede850 100644 --- a/6.5/api/Classes/classshapeworks_1_1AnalysisTool.md +++ b/6.5/api/Classes/classshapeworks_1_1AnalysisTool.md @@ -846,4 +846,4 @@ static const std::string MODE_REGRESSION_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.html b/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.html index 741697fc17..9961344f75 100644 --- a/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.html @@ -2439,7 +2439,7 @@

    function get_local_particle_system)
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.md b/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.md index a45a72f775..1167626566 100644 --- a/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.md @@ -29,4 +29,4 @@ static ParticleSystemEvaluation get_local_particle_system( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Analyze.html b/6.5/api/Classes/classshapeworks_1_1Analyze.html index 44dbbec46a..948b7a2387 100644 --- a/6.5/api/Classes/classshapeworks_1_1Analyze.html +++ b/6.5/api/Classes/classshapeworks_1_1Analyze.html @@ -2775,7 +2775,7 @@

    function get_local_particle_system)
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Analyze.md b/6.5/api/Classes/classshapeworks_1_1Analyze.md index 4427d486b1..3ee387368c 100644 --- a/6.5/api/Classes/classshapeworks_1_1Analyze.md +++ b/6.5/api/Classes/classshapeworks_1_1Analyze.md @@ -222,4 +222,4 @@ ParticleSystemEvaluation get_local_particle_system( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html b/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html index ca6281c7da..b9d5fa6898 100644 --- a/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html +++ b/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md b/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md index 22abedf125..b1bb876562 100644 --- a/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md +++ b/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ColorMap.html b/6.5/api/Classes/classshapeworks_1_1ColorMap.html index 4468d0918f..79e7310320 100644 --- a/6.5/api/Classes/classshapeworks_1_1ColorMap.html +++ b/6.5/api/Classes/classshapeworks_1_1ColorMap.html @@ -2546,7 +2546,7 @@

    variable color_series_

    vtkSmartPointer< vtkColorSeries > color_series_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ColorMap.md b/6.5/api/Classes/classshapeworks_1_1ColorMap.md index 994fdb6256..73e23ff208 100644 --- a/6.5/api/Classes/classshapeworks_1_1ColorMap.md +++ b/6.5/api/Classes/classshapeworks_1_1ColorMap.md @@ -81,4 +81,4 @@ vtkSmartPointer< vtkColorSeries > color_series_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ColorMaps.html b/6.5/api/Classes/classshapeworks_1_1ColorMaps.html index 8017f0035e..adf1282b3d 100644 --- a/6.5/api/Classes/classshapeworks_1_1ColorMaps.html +++ b/6.5/api/Classes/classshapeworks_1_1ColorMaps.html @@ -2469,7 +2469,7 @@

    function get_color_map

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ColorMaps.md b/6.5/api/Classes/classshapeworks_1_1ColorMaps.md index e8bf7872e5..67ab928865 100644 --- a/6.5/api/Classes/classshapeworks_1_1ColorMaps.md +++ b/6.5/api/Classes/classshapeworks_1_1ColorMaps.md @@ -48,4 +48,4 @@ inline ColorMap get_color_map( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Command.html b/6.5/api/Classes/classshapeworks_1_1Command.html index 6695759a89..8129bf4863 100644 --- a/6.5/api/Classes/classshapeworks_1_1Command.html +++ b/6.5/api/Classes/classshapeworks_1_1Command.html @@ -2606,7 +2606,7 @@

    variable parser

    optparse::OptionParser parser;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Command.md b/6.5/api/Classes/classshapeworks_1_1Command.md index 699059c78a..baf58e083d 100644 --- a/6.5/api/Classes/classshapeworks_1_1Command.md +++ b/6.5/api/Classes/classshapeworks_1_1Command.md @@ -107,4 +107,4 @@ optparse::OptionParser parser; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1CompareSettings.html b/6.5/api/Classes/classshapeworks_1_1CompareSettings.html index f187dc1338..2a80c1999e 100644 --- a/6.5/api/Classes/classshapeworks_1_1CompareSettings.html +++ b/6.5/api/Classes/classshapeworks_1_1CompareSettings.html @@ -2580,7 +2580,7 @@

    variable opacity_

    float opacity_ = 1.0;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1CompareSettings.md b/6.5/api/Classes/classshapeworks_1_1CompareSettings.md index 15fe24058a..ca315b540e 100644 --- a/6.5/api/Classes/classshapeworks_1_1CompareSettings.md +++ b/6.5/api/Classes/classshapeworks_1_1CompareSettings.md @@ -97,4 +97,4 @@ float opacity_ = 1.0; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1CompareWidget.html b/6.5/api/Classes/classshapeworks_1_1CompareWidget.html index fb1f0e7d72..7125f18fa0 100644 --- a/6.5/api/Classes/classshapeworks_1_1CompareWidget.html +++ b/6.5/api/Classes/classshapeworks_1_1CompareWidget.html @@ -2560,7 +2560,7 @@

    function check_any_available

    bool check_any_available()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1CompareWidget.md b/6.5/api/Classes/classshapeworks_1_1CompareWidget.md index a746fa260f..b6bed9a326 100644 --- a/6.5/api/Classes/classshapeworks_1_1CompareWidget.md +++ b/6.5/api/Classes/classshapeworks_1_1CompareWidget.md @@ -90,4 +90,4 @@ bool check_any_available() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Constraint.html b/6.5/api/Classes/classshapeworks_1_1Constraint.html index 32fa033ac2..4ab89c7f97 100644 --- a/6.5/api/Classes/classshapeworks_1_1Constraint.html +++ b/6.5/api/Classes/classshapeworks_1_1Constraint.html @@ -2689,7 +2689,7 @@

    variable mus_

    Mu is the lagrangian momentum term.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Constraint.md b/6.5/api/Classes/classshapeworks_1_1Constraint.md index c562c63b78..9393529634 100644 --- a/6.5/api/Classes/classshapeworks_1_1Constraint.md +++ b/6.5/api/Classes/classshapeworks_1_1Constraint.md @@ -177,4 +177,4 @@ Mu is the lagrangian momentum term. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Constraints.html b/6.5/api/Classes/classshapeworks_1_1Constraints.html index dae1458494..e0a16fd7d6 100644 --- a/6.5/api/Classes/classshapeworks_1_1Constraints.html +++ b/6.5/api/Classes/classshapeworks_1_1Constraints.html @@ -2831,7 +2831,7 @@

    function clipMesh

    Clips the mesh that has been passed into it by the constraints stored in this object.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Constraints.md b/6.5/api/Classes/classshapeworks_1_1Constraints.md index 94e08e66f9..6307503944 100644 --- a/6.5/api/Classes/classshapeworks_1_1Constraints.md +++ b/6.5/api/Classes/classshapeworks_1_1Constraints.md @@ -270,4 +270,4 @@ Clips the mesh that has been passed into it by the constraints stored in this ob ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ContourDomain.html b/6.5/api/Classes/classshapeworks_1_1ContourDomain.html index b3ba91a8dd..037c88c8ce 100644 --- a/6.5/api/Classes/classshapeworks_1_1ContourDomain.html +++ b/6.5/api/Classes/classshapeworks_1_1ContourDomain.html @@ -3028,7 +3028,7 @@

    function GetPositionAfterSplit

    Reimplements: shapeworks::ParticleDomain::GetPositionAfterSplit


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ContourDomain.md b/6.5/api/Classes/classshapeworks_1_1ContourDomain.md index edb224da7a..2c28e1689a 100644 --- a/6.5/api/Classes/classshapeworks_1_1ContourDomain.md +++ b/6.5/api/Classes/classshapeworks_1_1ContourDomain.md @@ -438,4 +438,4 @@ virtual PointType GetPositionAfterSplit( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.html b/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.html index 4a96263e9c..992b09bc19 100644 --- a/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.html +++ b/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.html @@ -3646,7 +3646,7 @@

    variable num_samples

    int num_samples;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.md b/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.md index 9ddf6a9a3f..8461e2293c 100644 --- a/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.md +++ b/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.md @@ -714,4 +714,4 @@ int num_samples; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html b/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html index 06bea03650..1e19e73f73 100644 --- a/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html +++ b/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html @@ -3548,7 +3548,7 @@

    variable m_MaxMoveFactor

    float m_MaxMoveFactor = 0;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md b/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md index 4c1beb8ff6..a21d93ffbb 100644 --- a/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md +++ b/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md @@ -623,4 +623,4 @@ float m_MaxMoveFactor = 0; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1DataTool.html b/6.5/api/Classes/classshapeworks_1_1DataTool.html index 23848622d5..679480f29c 100644 --- a/6.5/api/Classes/classshapeworks_1_1DataTool.html +++ b/6.5/api/Classes/classshapeworks_1_1DataTool.html @@ -2819,7 +2819,7 @@

    function store_data

    void store_data()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1DataTool.md b/6.5/api/Classes/classshapeworks_1_1DataTool.md index d6907a5d98..74bbc051dc 100644 --- a/6.5/api/Classes/classshapeworks_1_1DataTool.md +++ b/6.5/api/Classes/classshapeworks_1_1DataTool.md @@ -228,4 +228,4 @@ void store_data() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.html b/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.html index 1a20485835..9756ff75cb 100644 --- a/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.html +++ b/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.html @@ -2756,7 +2756,7 @@

    function get_list

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.md b/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.md index 4c2138b82e..59b0ddb95c 100644 --- a/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.md +++ b/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.md @@ -177,4 +177,4 @@ std::vector< std::string > get_list( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.html b/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.html index fb2675d130..30ab691671 100644 --- a/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.html +++ b/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.html @@ -3032,7 +3032,7 @@

    variable DEEPSSM_SAMPLER_KDE_C

    static const std::string DEEPSSM_SAMPLER_KDE_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.md b/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.md index f474e14b9c..b699b7ec71 100644 --- a/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.md +++ b/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.md @@ -369,4 +369,4 @@ static const std::string DEEPSSM_SAMPLER_KDE_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.html b/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.html index 409050274a..8a801fbc63 100644 --- a/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.html +++ b/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.html @@ -2905,7 +2905,7 @@

    function get_display_feature

    std::string get_display_feature()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.md b/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.md index 11e490acd2..09ba072b80 100644 --- a/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.md +++ b/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.md @@ -259,4 +259,4 @@ std::string get_display_feature() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html b/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html index 568e89d9e7..d3379bb49b 100644 --- a/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html +++ b/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html @@ -3542,7 +3542,7 @@

    variable m_Shape_PointsUpdate

    shared_vnl_matrix_array_type m_Shape_PointsUpdate;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md b/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md index 8a155cf78f..8b04b6b727 100644 --- a/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md +++ b/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md @@ -654,4 +654,4 @@ shared_vnl_matrix_array_type m_Shape_PointsUpdate; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.html b/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.html index 01ca782fd5..591799b852 100644 --- a/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.html +++ b/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.html @@ -3485,7 +3485,7 @@

    variable m_FunctionB

    VectorFunction::Pointer m_FunctionB;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.md b/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.md index 921f12f180..323bea4aff 100644 --- a/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.md +++ b/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.md @@ -648,4 +648,4 @@ VectorFunction::Pointer m_FunctionB; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1EigenUtils.html b/6.5/api/Classes/classshapeworks_1_1EigenUtils.html index 6511e2a7fc..7952562633 100644 --- a/6.5/api/Classes/classshapeworks_1_1EigenUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1EigenUtils.html @@ -2439,7 +2439,7 @@

    function compute_mean_and_stddev

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1EigenUtils.md b/6.5/api/Classes/classshapeworks_1_1EigenUtils.md index 34ad6293e8..a3aff30989 100644 --- a/6.5/api/Classes/classshapeworks_1_1EigenUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1EigenUtils.md @@ -29,4 +29,4 @@ static std::pair< double, double > compute_mean_and_stddev( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.html b/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.html index 8c3951a9cf..d749175fe4 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.html +++ b/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.html @@ -2623,7 +2623,7 @@

    function get_multi_parameters

    Reimplements: shapeworks::ProjectReader::get_multi_parameters


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.md b/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.md index 27279b6381..9ab0850892 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.md +++ b/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.md @@ -128,4 +128,4 @@ virtual StringMultiMap get_multi_parameters( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.html b/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.html index 1e9939de87..ff9c312279 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.html +++ b/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.html @@ -2453,7 +2453,7 @@

    function write_project

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.md b/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.md index bda4a3c262..49c2f3d198 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.md +++ b/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.md @@ -43,4 +43,4 @@ static bool write_project( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Executable.html b/6.5/api/Classes/classshapeworks_1_1Executable.html index b3fe82851c..73e68a63d2 100644 --- a/6.5/api/Classes/classshapeworks_1_1Executable.html +++ b/6.5/api/Classes/classshapeworks_1_1Executable.html @@ -2469,7 +2469,7 @@

    function run

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Executable.md b/6.5/api/Classes/classshapeworks_1_1Executable.md index 63dd2ef233..497b78756c 100644 --- a/6.5/api/Classes/classshapeworks_1_1Executable.md +++ b/6.5/api/Classes/classshapeworks_1_1Executable.md @@ -47,4 +47,4 @@ int run( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.html b/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.html index af92f052a8..8906e771fc 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.html +++ b/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.html @@ -2456,7 +2456,7 @@

    function ExportImageDialog

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.md b/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.md index 1685b71025..a9668ae0d1 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.md +++ b/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.md @@ -46,4 +46,4 @@ ExportImageDialog( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ExportUtils.html b/6.5/api/Classes/classshapeworks_1_1ExportUtils.html index 0adfd40b49..49979d3c2a 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExportUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1ExportUtils.html @@ -2496,7 +2496,7 @@

    function write_particle_scalars

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ExportUtils.md b/6.5/api/Classes/classshapeworks_1_1ExportUtils.md index a786385939..1d08f9d5d1 100644 --- a/6.5/api/Classes/classshapeworks_1_1ExportUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1ExportUtils.md @@ -70,4 +70,4 @@ static bool write_particle_scalars( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.html b/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.html index 744a617696..f197e9a3ee 100644 --- a/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.html +++ b/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.html @@ -2875,7 +2875,7 @@

    function convertLegacyFFC

    Convert legacy FFC to new format.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.md b/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.md index dbe3d433cb..25467c29a5 100644 --- a/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.md +++ b/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.md @@ -308,4 +308,4 @@ Convert legacy FFC to new format. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1GenericContainer.html b/6.5/api/Classes/classshapeworks_1_1GenericContainer.html index 8b99557429..8d3c96c3e1 100644 --- a/6.5/api/Classes/classshapeworks_1_1GenericContainer.html +++ b/6.5/api/Classes/classshapeworks_1_1GenericContainer.html @@ -2716,7 +2716,7 @@

    function ~GenericContainer

    inline virtual ~GenericContainer()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1GenericContainer.md b/6.5/api/Classes/classshapeworks_1_1GenericContainer.md index 5122abc4c7..cabcc2ba4d 100644 --- a/6.5/api/Classes/classshapeworks_1_1GenericContainer.md +++ b/6.5/api/Classes/classshapeworks_1_1GenericContainer.md @@ -191,4 +191,4 @@ inline virtual ~GenericContainer() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.html b/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.html index 9a17528ae6..10d0b1ced8 100644 --- a/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.html +++ b/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.html @@ -2819,7 +2819,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.md b/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.md index e35f279af4..f5bc8e2ff9 100644 --- a/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.md +++ b/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.md @@ -235,4 +235,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html b/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html index b1fc3b77fa..03bbe0dac7 100644 --- a/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html +++ b/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html @@ -3193,7 +3193,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md b/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md index f5c5802824..fe1b073539 100644 --- a/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md +++ b/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md @@ -497,4 +497,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Groom.html b/6.5/api/Classes/classshapeworks_1_1Groom.html index 8d6ddf013a..1c47918544 100644 --- a/6.5/api/Classes/classshapeworks_1_1Groom.html +++ b/6.5/api/Classes/classshapeworks_1_1Groom.html @@ -2607,7 +2607,7 @@

    variable progress_counter_

    std::atomic< int > progress_counter_ = 0;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Groom.md b/6.5/api/Classes/classshapeworks_1_1Groom.md index 60d3534013..c09dbb790c 100644 --- a/6.5/api/Classes/classshapeworks_1_1Groom.md +++ b/6.5/api/Classes/classshapeworks_1_1Groom.md @@ -124,4 +124,4 @@ std::atomic< int > progress_counter_ = 0; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.html b/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.html index 33e332b48b..85022c1012 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.html +++ b/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.md b/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.md index 7a2383e819..7ec28ca24d 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.md +++ b/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1GroomParameters.html b/6.5/api/Classes/classshapeworks_1_1GroomParameters.html index c1b744617c..c5b16e986e 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroomParameters.html +++ b/6.5/api/Classes/classshapeworks_1_1GroomParameters.html @@ -3720,7 +3720,7 @@

    variable GROOM_ALIGNMENT_LANDMARK_C
    static const std::string GROOM_ALIGNMENT_LANDMARK_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1GroomParameters.md b/6.5/api/Classes/classshapeworks_1_1GroomParameters.md index 6fb3f8add7..1596e75e07 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroomParameters.md +++ b/6.5/api/Classes/classshapeworks_1_1GroomParameters.md @@ -786,4 +786,4 @@ static const std::string GROOM_ALIGNMENT_LANDMARK_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1GroomTool.html b/6.5/api/Classes/classshapeworks_1_1GroomTool.html index 9ff6e2e906..4285220eb6 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroomTool.html +++ b/6.5/api/Classes/classshapeworks_1_1GroomTool.html @@ -2930,7 +2930,7 @@

    function shutdown_threads

    shut down any running threads


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1GroomTool.md b/6.5/api/Classes/classshapeworks_1_1GroomTool.md index 6eaaa8bcaa..e96d826903 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroomTool.md +++ b/6.5/api/Classes/classshapeworks_1_1GroomTool.md @@ -303,4 +303,4 @@ shut down any running threads ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.html b/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.html index b57c723084..1981ce02ee 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.html +++ b/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.html @@ -2563,7 +2563,7 @@

    function get_group_pvalues

    Eigen::VectorXf get_group_pvalues()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.md b/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.md index b2d4222a4c..03b66c6aef 100644 --- a/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.md +++ b/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.md @@ -87,4 +87,4 @@ Eigen::VectorXf get_group_pvalues() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Image.html b/6.5/api/Classes/classshapeworks_1_1Image.html index e9357b1bb4..7b25c880f1 100644 --- a/6.5/api/Classes/classshapeworks_1_1Image.html +++ b/6.5/api/Classes/classshapeworks_1_1Image.html @@ -4064,7 +4064,7 @@

    friend SharedCommandData

    );
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Image.md b/6.5/api/Classes/classshapeworks_1_1Image.md index 5e75f123f8..608325ee0f 100644 --- a/6.5/api/Classes/classshapeworks_1_1Image.md +++ b/6.5/api/Classes/classshapeworks_1_1Image.md @@ -1054,4 +1054,4 @@ friend struct SharedCommandData( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImageCommand.html b/6.5/api/Classes/classshapeworks_1_1ImageCommand.html index 542846204b..42e7bf9d69 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageCommand.html +++ b/6.5/api/Classes/classshapeworks_1_1ImageCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImageCommand.md b/6.5/api/Classes/classshapeworks_1_1ImageCommand.md index e76a25d44a..6cb1b1b53a 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageCommand.md +++ b/6.5/api/Classes/classshapeworks_1_1ImageCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomain.html b/6.5/api/Classes/classshapeworks_1_1ImageDomain.html index d0bae218fa..f93a42b6f9 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomain.html +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomain.html @@ -3045,7 +3045,7 @@

    function ToVDBCoord

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomain.md b/6.5/api/Classes/classshapeworks_1_1ImageDomain.md index 5ce02a917f..f80ab1fd27 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomain.md +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomain.md @@ -334,4 +334,4 @@ inline openvdb::Vec3R ToVDBCoord( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html index 87a08df8c3..57c4961322 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html @@ -3167,7 +3167,7 @@

    function ~ImageDomainWithCurvature<
    inline virtual ~ImageDomainWithCurvature()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md index 146d435105..2cab0bb678 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md @@ -325,4 +325,4 @@ inline virtual ~ImageDomainWithCurvature() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html index 22fe0ee5ca..a74cf0da2c 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html @@ -3084,7 +3084,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md index f3cb64191c..d7c0e1224e 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md @@ -302,4 +302,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html index ed947c1518..8ec93c5ef9 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html @@ -3040,7 +3040,7 @@

    function GetVDBGradient

    inline openvdb::VectorGrid::Ptr GetVDBGradient()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md index 11123b21d0..715db2458a 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md +++ b/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md @@ -294,4 +294,4 @@ inline openvdb::VectorGrid::Ptr GetVDBGradient() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImageLabel.html b/6.5/api/Classes/classshapeworks_1_1ImageLabel.html index 3b6ccd631d..7bf05bfbc1 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageLabel.html +++ b/6.5/api/Classes/classshapeworks_1_1ImageLabel.html @@ -2505,7 +2505,7 @@

    function resizeEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImageLabel.md b/6.5/api/Classes/classshapeworks_1_1ImageLabel.md index 493c61ebd6..15e6cb6c03 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageLabel.md +++ b/6.5/api/Classes/classshapeworks_1_1ImageLabel.md @@ -61,4 +61,4 @@ void resizeEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImageUtils.html b/6.5/api/Classes/classshapeworks_1_1ImageUtils.html index 787a337ee7..e31262dffe 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1ImageUtils.html @@ -2525,7 +2525,7 @@

    function createWarpTransform

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImageUtils.md b/6.5/api/Classes/classshapeworks_1_1ImageUtils.md index 262ec9a414..5ee8f9bce4 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImageUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1ImageUtils.md @@ -74,4 +74,4 @@ static TPSTransform::Pointer createWarpTransform( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html b/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html index 2952cccaa4..adb1f0e6ec 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html +++ b/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html @@ -3192,7 +3192,7 @@

    function ~ImplicitSurfaceDomain

    inline virtual ~ImplicitSurfaceDomain()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md b/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md index 1b3fef84a7..dd935a9088 100644 --- a/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md +++ b/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md @@ -342,4 +342,4 @@ inline virtual ~ImplicitSurfaceDomain() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1IndexRegion.html b/6.5/api/Classes/classshapeworks_1_1IndexRegion.html index 8125df4008..c2ab3bfe69 100644 --- a/6.5/api/Classes/classshapeworks_1_1IndexRegion.html +++ b/6.5/api/Classes/classshapeworks_1_1IndexRegion.html @@ -2623,7 +2623,7 @@

    variable max

    Coord max {-1000000000, -1000000000, -1000000000};
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1IndexRegion.md b/6.5/api/Classes/classshapeworks_1_1IndexRegion.md index 5f64f23c81..1ef51096a5 100644 --- a/6.5/api/Classes/classshapeworks_1_1IndexRegion.md +++ b/6.5/api/Classes/classshapeworks_1_1IndexRegion.md @@ -130,4 +130,4 @@ Coord max {-1000000000, -1000000000, -1000000000}; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Job.html b/6.5/api/Classes/classshapeworks_1_1Job.html index 4149609a8b..f0d63e2a49 100644 --- a/6.5/api/Classes/classshapeworks_1_1Job.html +++ b/6.5/api/Classes/classshapeworks_1_1Job.html @@ -2668,7 +2668,7 @@

    function is_aborted

    was the job aborted?


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Job.md b/6.5/api/Classes/classshapeworks_1_1Job.md index 6b75d61992..9ae13c2243 100644 --- a/6.5/api/Classes/classshapeworks_1_1Job.md +++ b/6.5/api/Classes/classshapeworks_1_1Job.md @@ -161,4 +161,4 @@ was the job aborted? ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.html b/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.html index 523d1ab99d..6c64e87103 100644 --- a/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.html +++ b/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.html @@ -2623,7 +2623,7 @@

    function get_multi_parameters

    Reimplements: shapeworks::ProjectReader::get_multi_parameters


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.md b/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.md index 23ad7d57f9..21f9212345 100644 --- a/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.md +++ b/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.md @@ -128,4 +128,4 @@ virtual StringMultiMap get_multi_parameters( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.html b/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.html index 05c5399433..a2f13b5caa 100644 --- a/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.html +++ b/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.html @@ -2453,7 +2453,7 @@

    function write_project

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.md b/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.md index d100e8f8c6..061770595a 100644 --- a/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.md +++ b/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.md @@ -43,4 +43,4 @@ static bool write_project( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.html b/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.html index 5aa3e7ac1a..b9abf926be 100644 --- a/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.html +++ b/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.html @@ -2468,7 +2468,7 @@

    function ~KeyboardShortcuts

    destructor


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.md b/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.md index 58908e3a8a..f41a2f8b8e 100644 --- a/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.md +++ b/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.md @@ -52,4 +52,4 @@ destructor ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.html b/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.html index 441345b8c0..64c809e6a4 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.html +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.html @@ -2522,7 +2522,7 @@

    variable comment_

    std::string comment_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.md b/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.md index f9ab2d60a3..e3c2055b8a 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.md +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.md @@ -78,4 +78,4 @@ std::string comment_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html b/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html index 0ca58a56bf..c1943a1404 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html @@ -2625,7 +2625,7 @@

    function set_model

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md b/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md index 7192d72dc4..2a80f1457f 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md @@ -137,4 +137,4 @@ void set_model( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.html b/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.html index c09ebd08b8..e45121d71f 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.html +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.html @@ -2805,7 +2805,7 @@

    function flags

    QAbstractTableModel::flags implementation.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.md b/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.md index 1eba8619a7..8996543869 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.md +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.md @@ -251,4 +251,4 @@ QAbstractTableModel::flags implementation. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.html b/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.html index 56f46f5b66..0c7dc98f99 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.html +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.html @@ -2522,7 +2522,7 @@

    function clear_landmark_handles

    void clear_landmark_handles()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.md b/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.md index 4ffa4cb163..2e6112396f 100644 --- a/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.md +++ b/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.md @@ -82,4 +82,4 @@ void clear_landmark_handles() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html b/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html index 1c673b754c..f1e63ea9d4 100644 --- a/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html +++ b/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html @@ -3431,7 +3431,7 @@

    variable m_InverseCovMatrix

    std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md b/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md index 38a075b12f..bd7415d008 100644 --- a/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md +++ b/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md @@ -586,4 +586,4 @@ std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html b/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html index d49cf1cb3a..95e4a3815a 100644 --- a/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html +++ b/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html @@ -2963,7 +2963,7 @@

    variable m_DomainsPerShape

    int m_DomainsPerShape;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md b/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md index 3e9c49973e..067587784d 100644 --- a/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md +++ b/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md @@ -321,4 +321,4 @@ int m_DomainsPerShape; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Lightbox.html b/6.5/api/Classes/classshapeworks_1_1Lightbox.html index 85c80b0ae5..e574f398d3 100644 --- a/6.5/api/Classes/classshapeworks_1_1Lightbox.html +++ b/6.5/api/Classes/classshapeworks_1_1Lightbox.html @@ -3015,7 +3015,7 @@

    function get_render_window

    vtkRenderWindow * get_render_window()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Lightbox.md b/6.5/api/Classes/classshapeworks_1_1Lightbox.md index eb938c7d72..e4423d88fc 100644 --- a/6.5/api/Classes/classshapeworks_1_1Lightbox.md +++ b/6.5/api/Classes/classshapeworks_1_1Lightbox.md @@ -358,4 +358,4 @@ vtkRenderWindow * get_render_window() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html b/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html index 618a44c8fc..ab14b07ee1 100644 --- a/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html +++ b/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html @@ -3178,7 +3178,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md b/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md index 8bda56c3c5..772e67a0fd 100644 --- a/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md +++ b/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md @@ -443,4 +443,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1LogWindow.html b/6.5/api/Classes/classshapeworks_1_1LogWindow.html index ca40415a44..f4e7158748 100644 --- a/6.5/api/Classes/classshapeworks_1_1LogWindow.html +++ b/6.5/api/Classes/classshapeworks_1_1LogWindow.html @@ -2471,7 +2471,7 @@

    function add_message

    add a message to the history


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1LogWindow.md b/6.5/api/Classes/classshapeworks_1_1LogWindow.md index a4ec91a56d..ea6cdbfc64 100644 --- a/6.5/api/Classes/classshapeworks_1_1LogWindow.md +++ b/6.5/api/Classes/classshapeworks_1_1LogWindow.md @@ -56,4 +56,4 @@ add a message to the history ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Logging.html b/6.5/api/Classes/classshapeworks_1_1Logging.html index 03888c24c7..0ca0fdd4f7 100644 --- a/6.5/api/Classes/classshapeworks_1_1Logging.html +++ b/6.5/api/Classes/classshapeworks_1_1Logging.html @@ -2791,7 +2791,7 @@

    function set_progress_callback

    Set a progress callback function to be called whenever a progress update is posted.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Logging.md b/6.5/api/Classes/classshapeworks_1_1Logging.md index f1cfdc686e..741bfab248 100644 --- a/6.5/api/Classes/classshapeworks_1_1Logging.md +++ b/6.5/api/Classes/classshapeworks_1_1Logging.md @@ -298,4 +298,4 @@ Set a progress callback function to be called whenever a progress update is post ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MatrixContainer.html b/6.5/api/Classes/classshapeworks_1_1MatrixContainer.html index 13f4da240e..8b16d0fb8e 100644 --- a/6.5/api/Classes/classshapeworks_1_1MatrixContainer.html +++ b/6.5/api/Classes/classshapeworks_1_1MatrixContainer.html @@ -2436,7 +2436,7 @@

    variable matrix_

    Eigen::MatrixXd matrix_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MatrixContainer.md b/6.5/api/Classes/classshapeworks_1_1MatrixContainer.md index 4108a15a6c..d2cd67efe4 100644 --- a/6.5/api/Classes/classshapeworks_1_1MatrixContainer.md +++ b/6.5/api/Classes/classshapeworks_1_1MatrixContainer.md @@ -26,4 +26,4 @@ Eigen::MatrixXd matrix_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html b/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html index d5ace5fcef..e84a748ccc 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html +++ b/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html @@ -2994,7 +2994,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md b/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md index ae6e890240..a642c5c924 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md +++ b/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md @@ -322,4 +322,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Mesh.html b/6.5/api/Classes/classshapeworks_1_1Mesh.html index 4971f6854e..30702935ff 100644 --- a/6.5/api/Classes/classshapeworks_1_1Mesh.html +++ b/6.5/api/Classes/classshapeworks_1_1Mesh.html @@ -4013,7 +4013,7 @@

    friend SharedCommandData

    );
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Mesh.md b/6.5/api/Classes/classshapeworks_1_1Mesh.md index 5d1750b5d8..7107b06912 100644 --- a/6.5/api/Classes/classshapeworks_1_1Mesh.md +++ b/6.5/api/Classes/classshapeworks_1_1Mesh.md @@ -972,4 +972,4 @@ friend struct SharedCommandData( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshCache.html b/6.5/api/Classes/classshapeworks_1_1MeshCache.html index 537cc4d31a..bd912a48ff 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshCache.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshCache.html @@ -2529,7 +2529,7 @@

    function clear

    void clear()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshCache.md b/6.5/api/Classes/classshapeworks_1_1MeshCache.md index 413ccd9bf3..31405aecf0 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshCache.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshCache.md @@ -89,4 +89,4 @@ void clear() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshCommand.html b/6.5/api/Classes/classshapeworks_1_1MeshCommand.html index 74b5c20c68..c83cfdf7c2 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshCommand.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshCommand.md b/6.5/api/Classes/classshapeworks_1_1MeshCommand.md index 258ec9986a..2b8abb7abd 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshCommand.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshDomain.html b/6.5/api/Classes/classshapeworks_1_1MeshDomain.html index 9fe3034f4b..c61b0eaea8 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshDomain.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshDomain.html @@ -3032,7 +3032,7 @@

    function UpdateZeroCrossingPoint

    Reimplements: shapeworks::ParticleDomain::UpdateZeroCrossingPoint


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshDomain.md b/6.5/api/Classes/classshapeworks_1_1MeshDomain.md index 6b58e7ae4f..f3c26ee2a2 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshDomain.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshDomain.md @@ -440,4 +440,4 @@ inline virtual void UpdateZeroCrossingPoint() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshGenerator.html b/6.5/api/Classes/classshapeworks_1_1MeshGenerator.html index 748271afcd..d21cd11e4b 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshGenerator.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshGenerator.html @@ -2637,7 +2637,7 @@

    variable RECONSTRUCTION_MESH_WARP
    static const std::string RECONSTRUCTION_MESH_WARPER_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshGenerator.md b/6.5/api/Classes/classshapeworks_1_1MeshGenerator.md index 0cb015ac39..1ba4406856 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshGenerator.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshGenerator.md @@ -136,4 +136,4 @@ static const std::string RECONSTRUCTION_MESH_WARPER_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshGroup.html b/6.5/api/Classes/classshapeworks_1_1MeshGroup.html index 7715a2ff58..1cca94fea8 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshGroup.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshGroup.html @@ -2557,7 +2557,7 @@

    function get_combined_poly_data

    Return polydata of all meshes, combined.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshGroup.md b/6.5/api/Classes/classshapeworks_1_1MeshGroup.md index 47849f7e5c..743ede3e66 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshGroup.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshGroup.md @@ -105,4 +105,4 @@ Return polydata of all meshes, combined. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshManager.html b/6.5/api/Classes/classshapeworks_1_1MeshManager.html index 77fee3884b..eafe6c36b3 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshManager.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshManager.html @@ -2808,7 +2808,7 @@

    function clear_cache

    clear the cache


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshManager.md b/6.5/api/Classes/classshapeworks_1_1MeshManager.md index 4feaf2dcaf..18d49bf58f 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshManager.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshManager.md @@ -241,4 +241,4 @@ clear the cache ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshReader.html b/6.5/api/Classes/classshapeworks_1_1MeshReader.html index 3307f833f2..340d5d9556 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshReader.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshReader.html @@ -2384,7 +2384,7 @@

    shapeworks::MeshReader

    reads mesh (used only by one of the Mesh constructors)

    #include <Mesh.h>


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshReader.md b/6.5/api/Classes/classshapeworks_1_1MeshReader.md index c1e141b852..953b9c3196 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshReader.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshReader.md @@ -15,4 +15,4 @@ reads mesh (used only by one of the [Mesh](../Classes/classshapeworks_1_1Mesh.md ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.html b/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.html index 1d7dd49441..f99ebe557e 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.html @@ -2450,7 +2450,7 @@

    variable mesh_warpers_

    std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.md b/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.md index d0ea299fab..42b1ff8929 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.md @@ -34,4 +34,4 @@ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshSlice.html b/6.5/api/Classes/classshapeworks_1_1MeshSlice.html index 5a8517df2b..29e29166af 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshSlice.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshSlice.html @@ -2526,7 +2526,7 @@

    function handle_key

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshSlice.md b/6.5/api/Classes/classshapeworks_1_1MeshSlice.md index 7394ef63cf..5f3e0cb48f 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshSlice.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshSlice.md @@ -86,4 +86,4 @@ void handle_key( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshUtils.html b/6.5/api/Classes/classshapeworks_1_1MeshUtils.html index d5635334ea..cdfb272cce 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshUtils.html @@ -2669,7 +2669,7 @@

    function getArrow

    Used as an auxiliary function for vector field visualizations.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshUtils.md b/6.5/api/Classes/classshapeworks_1_1MeshUtils.md index 2afaee4bb9..b0dd4858ef 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshUtils.md @@ -187,4 +187,4 @@ Used as an auxiliary function for vector field visualizations. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWarper.html b/6.5/api/Classes/classshapeworks_1_1MeshWarper.html index cb195fd4f1..56d40680aa 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWarper.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshWarper.html @@ -2707,7 +2707,7 @@

    function update_progress

    For overriding to handle progress updates.

    Reimplemented by: shapeworks::QMeshWarper::update_progress


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWarper.md b/6.5/api/Classes/classshapeworks_1_1MeshWarper.md index 67cee6638d..1f80025c59 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWarper.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshWarper.md @@ -192,4 +192,4 @@ For overriding to handle progress updates. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.html b/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.html index 02b591ae38..1f533b97ff 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.html @@ -2548,7 +2548,7 @@

    friend operator==

    );
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.md b/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.md index 4a83753dd7..4c3dab16cd 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.md @@ -85,4 +85,4 @@ friend bool operator==( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.html b/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.html index 296d63332c..59bb663d83 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.html @@ -2586,7 +2586,7 @@

    function size

    int size()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.md b/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.md index a5206a4e81..4d2efef8b9 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.md @@ -103,4 +103,4 @@ int size() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWorker.html b/6.5/api/Classes/classshapeworks_1_1MeshWorker.html index aabc6525b3..5bf0497b8d 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWorker.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshWorker.html @@ -2531,7 +2531,7 @@

    function run

    void run()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWorker.md b/6.5/api/Classes/classshapeworks_1_1MeshWorker.md index a925c0cede..708d228082 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWorker.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshWorker.md @@ -73,4 +73,4 @@ void run() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWrapper.html b/6.5/api/Classes/classshapeworks_1_1MeshWrapper.html index 118899ffcd..27a0164b98 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWrapper.html +++ b/6.5/api/Classes/classshapeworks_1_1MeshWrapper.html @@ -2709,7 +2709,7 @@

    function GetPolydata

    Reimplemented by: shapeworks::VtkMeshWrapper::GetPolydata


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MeshWrapper.md b/6.5/api/Classes/classshapeworks_1_1MeshWrapper.md index 869ed2537a..f826fdb64d 100644 --- a/6.5/api/Classes/classshapeworks_1_1MeshWrapper.md +++ b/6.5/api/Classes/classshapeworks_1_1MeshWrapper.md @@ -215,4 +215,4 @@ virtual vtkSmartPointer< vtkPolyData > GetPolydata() const =0 ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html b/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html index 16b5ec7b64..62e5bd6f14 100644 --- a/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html +++ b/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html @@ -3236,7 +3236,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md b/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md index 3cbbb07bc8..b5dea883f3 100644 --- a/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md +++ b/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md @@ -477,4 +477,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html b/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html index f39bd854a9..43cd272d77 100644 --- a/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html +++ b/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html @@ -2627,7 +2627,7 @@

    function get_spm_values

    Eigen::VectorXf get_spm_values()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md b/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md index 289fe0d52b..93ea4a75f7 100644 --- a/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md +++ b/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md @@ -127,4 +127,4 @@ Eigen::VectorXf get_spm_values() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Observer.html b/6.5/api/Classes/classshapeworks_1_1Observer.html index 8c4fa294fd..e1bb9843c0 100644 --- a/6.5/api/Classes/classshapeworks_1_1Observer.html +++ b/6.5/api/Classes/classshapeworks_1_1Observer.html @@ -2833,7 +2833,7 @@

    variable m_DefinedCallbacks

    DefinedCallbacksStruct m_DefinedCallbacks;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Observer.md b/6.5/api/Classes/classshapeworks_1_1Observer.md index b200ef7024..6abec72f9b 100644 --- a/6.5/api/Classes/classshapeworks_1_1Observer.md +++ b/6.5/api/Classes/classshapeworks_1_1Observer.md @@ -250,4 +250,4 @@ DefinedCallbacksStruct m_DefinedCallbacks; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.html b/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.html index 9bf66d74c5..19ebb76d1f 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.html +++ b/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.html @@ -2516,7 +2516,7 @@

    function ~OptimizationVisualizer

    inline ~OptimizationVisualizer()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.md b/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.md index a307cc3490..f8eca5a13c 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.md +++ b/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.md @@ -76,4 +76,4 @@ inline ~OptimizationVisualizer() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Optimize.html b/6.5/api/Classes/classshapeworks_1_1Optimize.html index 9e61706e39..6a9eff78d3 100644 --- a/6.5/api/Classes/classshapeworks_1_1Optimize.html +++ b/6.5/api/Classes/classshapeworks_1_1Optimize.html @@ -5939,7 +5939,7 @@

    variable m_remaining_time_message

    std::string m_remaining_time_message;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Optimize.md b/6.5/api/Classes/classshapeworks_1_1Optimize.md index 0364f366fb..d5807fcf83 100644 --- a/6.5/api/Classes/classshapeworks_1_1Optimize.md +++ b/6.5/api/Classes/classshapeworks_1_1Optimize.md @@ -2133,4 +2133,4 @@ std::string m_remaining_time_message; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html b/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html index 02477bb830..03ca0011d3 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md b/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md index 3b204701eb..ea204a7d74 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.html b/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.html index b1dbba8c74..8dcc86ee9f 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.html +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.html @@ -2469,7 +2469,7 @@

    function load_parameter_file

    Load a parameter file and set the values on an Optimize object.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.md b/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.md index 8b30ecb483..dd1dc16a35 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.md +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.md @@ -55,4 +55,4 @@ Load a parameter file and set the values on an [Optimize](../Classes/classshapew ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.html b/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.html index 8a6332e309..4f1907278b 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.html +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.html @@ -3549,7 +3549,7 @@

    function set_particle_format

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.md b/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.md index ffc46f7d11..4be94014ac 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.md +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.md @@ -700,4 +700,4 @@ void set_particle_format( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeTool.html b/6.5/api/Classes/classshapeworks_1_1OptimizeTool.html index 35143ceb36..4cce77080c 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeTool.html +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeTool.html @@ -2835,7 +2835,7 @@

    function shutdown_threads

    shut down any running threads


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1OptimizeTool.md b/6.5/api/Classes/classshapeworks_1_1OptimizeTool.md index 48f5dc51c4..dd3c519166 100644 --- a/6.5/api/Classes/classshapeworks_1_1OptimizeTool.md +++ b/6.5/api/Classes/classshapeworks_1_1OptimizeTool.md @@ -244,4 +244,4 @@ shut down any running threads ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PaintWidget.html b/6.5/api/Classes/classshapeworks_1_1PaintWidget.html index 805407e263..dde038e145 100644 --- a/6.5/api/Classes/classshapeworks_1_1PaintWidget.html +++ b/6.5/api/Classes/classshapeworks_1_1PaintWidget.html @@ -3085,7 +3085,7 @@

    variable viewer_

    Viewer * viewer_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PaintWidget.md b/6.5/api/Classes/classshapeworks_1_1PaintWidget.md index 77b218daf9..c6d80e5538 100644 --- a/6.5/api/Classes/classshapeworks_1_1PaintWidget.md +++ b/6.5/api/Classes/classshapeworks_1_1PaintWidget.md @@ -377,4 +377,4 @@ Viewer * viewer_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Parameters.html b/6.5/api/Classes/classshapeworks_1_1Parameters.html index 8b872475c8..b2e90554c3 100644 --- a/6.5/api/Classes/classshapeworks_1_1Parameters.html +++ b/6.5/api/Classes/classshapeworks_1_1Parameters.html @@ -2701,7 +2701,7 @@

    variable DEEPSSM_PARAMS

    static constexpr const char * DEEPSSM_PARAMS = "deepssm";
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Parameters.md b/6.5/api/Classes/classshapeworks_1_1Parameters.md index 8dea24463e..c70184f613 100644 --- a/6.5/api/Classes/classshapeworks_1_1Parameters.md +++ b/6.5/api/Classes/classshapeworks_1_1Parameters.md @@ -182,4 +182,4 @@ static constexpr const char * DEEPSSM_PARAMS = "deepssm"; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleArea.html b/6.5/api/Classes/classshapeworks_1_1ParticleArea.html index db996125bc..46a246b214 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleArea.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleArea.html @@ -2511,7 +2511,7 @@

    function compute_particle_tria

    compute the area assigned to each particle


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleArea.md b/6.5/api/Classes/classshapeworks_1_1ParticleArea.md index a181121f38..e5243ae35f 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleArea.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleArea.md @@ -77,4 +77,4 @@ compute the area assigned to each particle ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.html b/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.html index 9ba48122ea..8c969a328b 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.html @@ -2577,7 +2577,7 @@

    function get_stddev_areas

    inline const Eigen::VectorXf & get_stddev_areas() const
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.md b/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.md index cafe23243e..8f04d5c931 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.md @@ -95,4 +95,4 @@ inline const Eigen::VectorXf & get_stddev_areas() const ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.html b/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.html index ac518dbbfb..af313bbc7d 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.html @@ -2676,7 +2676,7 @@

    function get_computed_value_name

    std::string get_computed_value_name() const
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.md b/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.md index e54aa87e2f..41b6db09b5 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.md @@ -145,4 +145,4 @@ std::string get_computed_value_name() const ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleColors.html b/6.5/api/Classes/classshapeworks_1_1ParticleColors.html index 5b3921195f..14dd3dcf85 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleColors.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleColors.html @@ -2532,7 +2532,7 @@

    function construct_distinct

    static vtkSmartPointer< vtkLookupTable > construct_distinct()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleColors.md b/6.5/api/Classes/classshapeworks_1_1ParticleColors.md index d6d0d73248..73eb4e201b 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleColors.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleColors.md @@ -70,4 +70,4 @@ static vtkSmartPointer< vtkLookupTable > construct_distinct() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleDomain.html b/6.5/api/Classes/classshapeworks_1_1ParticleDomain.html index e386225092..250f6034d4 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleDomain.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleDomain.html @@ -3160,7 +3160,7 @@

    variable constraints

    std::shared_ptr< shapeworks::Constraints > constraints;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleDomain.md b/6.5/api/Classes/classshapeworks_1_1ParticleDomain.md index d2f1658a66..ad6305f043 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleDomain.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleDomain.md @@ -528,4 +528,4 @@ std::shared_ptr< shapeworks::Constraints > constraints; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleEvent.html b/6.5/api/Classes/classshapeworks_1_1ParticleEvent.html index 8d74188fb2..3b95d87cf8 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleEvent.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleEvent.html @@ -2637,7 +2637,7 @@

    function GetDomainIndex

    inline int GetDomainIndex() const
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleEvent.md b/6.5/api/Classes/classshapeworks_1_1ParticleEvent.md index 3c1c617c2b..113f6ca2c7 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleEvent.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleEvent.md @@ -145,4 +145,4 @@ inline int GetDomainIndex() const ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html b/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html index 071ea4e792..04066eed97 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html @@ -2966,7 +2966,7 @@

    variable m_FileName

    std::string m_FileName;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md b/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md index e7dc461e34..fd32a8f86a 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md @@ -325,4 +325,4 @@ std::string m_FileName; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html b/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html index f3b0fe11c1..7a96b395a4 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html @@ -2519,7 +2519,7 @@

    function run_assessment

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md b/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md index 035df0a217..9af6698ed0 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md @@ -68,4 +68,4 @@ std::vector< std::vector< int > > run_assessment( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.html b/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.html index 6782a343b9..68c242411c 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.html @@ -2983,7 +2983,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.md b/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.md index 617ba8b6f4..4517e69841 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.md @@ -385,4 +385,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html index b8da4f3a78..64456ff5d1 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html @@ -2474,7 +2474,7 @@

    function compute_particle_normals

    Compute normals at particle positions.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md index a9e393442d..b6f6f3fc83 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md @@ -52,4 +52,4 @@ Compute normals at particle positions. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html index 22c7a43ac5..b8579a9f87 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html @@ -2612,7 +2612,7 @@

    function get_good_bad

    std::vector< bool > get_good_bad()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md index dd1405876b..4a10e6f19f 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md @@ -105,4 +105,4 @@ std::vector< bool > get_good_bad() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.html b/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.html index 1c9897c502..7f1ac11aa9 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.html @@ -2866,7 +2866,7 @@

    function IsInsideBuffer

    Check whether the point p may be sampled in this domain.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.md b/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.md index 186dc50e37..13343a5a88 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.md @@ -227,4 +227,4 @@ Check whether the point p may be sampled in this domain. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html b/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html index bf31854626..4fd93d2bf1 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html @@ -3111,7 +3111,7 @@

    variable m_TreeLevels

    unsigned int m_TreeLevels;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md b/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md index 6cb5fc6c0c..7ca9cd4478 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md @@ -397,4 +397,4 @@ unsigned int m_TreeLevels; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html b/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html index 8a18885dd0..451904307f 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html @@ -3312,7 +3312,7 @@

    variable VDimension

    static constexpr static int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md b/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md index 3d2273e60e..22925a781a 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md @@ -558,4 +558,4 @@ static constexpr static int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html b/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html index c93d400d28..26ad7823c5 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html @@ -3103,7 +3103,7 @@

    function ~ParticleSurfaceNeighbo
    inline virtual ~ParticleSurfaceNeighborhood()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md b/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md index 38055a2012..358baf7962 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md @@ -380,4 +380,4 @@ inline virtual ~ParticleSurfaceNeighborhood() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSystem.html b/6.5/api/Classes/classshapeworks_1_1ParticleSystem.html index b9edfa5801..d83904eff4 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSystem.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSystem.html @@ -4119,7 +4119,7 @@

    variable VDimension

    static constexpr int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSystem.md b/6.5/api/Classes/classshapeworks_1_1ParticleSystem.md index fec5cc41af..3da289e631 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSystem.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSystem.md @@ -1163,4 +1163,4 @@ static constexpr int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.html b/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.html index 03276e64a8..649113da89 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.md b/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.md index 6e352f13d2..a047150425 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html b/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html index 24affc4749..ca5716377a 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html @@ -2609,7 +2609,7 @@

    friend SharedCommandData

    );
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md b/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md index 221838887a..b6452914c5 100644 --- a/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md +++ b/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md @@ -120,4 +120,4 @@ friend struct SharedCommandData( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Particles.html b/6.5/api/Classes/classshapeworks_1_1Particles.html index d51af6ac8f..e0250252fa 100644 --- a/6.5/api/Classes/classshapeworks_1_1Particles.html +++ b/6.5/api/Classes/classshapeworks_1_1Particles.html @@ -2769,7 +2769,7 @@

    function save_particles_file

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Particles.md b/6.5/api/Classes/classshapeworks_1_1Particles.md index 45bf3d9119..8b502652a9 100644 --- a/6.5/api/Classes/classshapeworks_1_1Particles.md +++ b/6.5/api/Classes/classshapeworks_1_1Particles.md @@ -239,4 +239,4 @@ static void save_particles_file( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.html b/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.html index 2f10db7bba..301152523c 100644 --- a/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.html +++ b/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.html @@ -2658,7 +2658,7 @@

    variable max

    Point max;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.md b/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.md index 23c4a43f7a..97214599aa 100644 --- a/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.md +++ b/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.md @@ -153,4 +153,4 @@ Point max; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PickResult.html b/6.5/api/Classes/classshapeworks_1_1PickResult.html index aeb6f72c14..f397c97f59 100644 --- a/6.5/api/Classes/classshapeworks_1_1PickResult.html +++ b/6.5/api/Classes/classshapeworks_1_1PickResult.html @@ -2464,7 +2464,7 @@

    variable subject_

    int subject_ = -1;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PickResult.md b/6.5/api/Classes/classshapeworks_1_1PickResult.md index 79cc1d62fc..f880f819c1 100644 --- a/6.5/api/Classes/classshapeworks_1_1PickResult.md +++ b/6.5/api/Classes/classshapeworks_1_1PickResult.md @@ -42,4 +42,4 @@ int subject_ = -1; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.html b/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.html index dc62962495..3442bd6076 100644 --- a/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.html +++ b/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.html @@ -2725,7 +2725,7 @@

    function getVTKPlane

    Return this plane as a vtkPlane.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.md b/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.md index 0d07309f82..761b26b2a7 100644 --- a/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.md +++ b/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.md @@ -204,4 +204,4 @@ Return this plane as a vtkPlane. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PlaneWidget.html b/6.5/api/Classes/classshapeworks_1_1PlaneWidget.html index 03b05a7512..261004236e 100644 --- a/6.5/api/Classes/classshapeworks_1_1PlaneWidget.html +++ b/6.5/api/Classes/classshapeworks_1_1PlaneWidget.html @@ -2636,7 +2636,7 @@

    function finalize_plane_offset

    Finalize the offset for a given plane.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PlaneWidget.md b/6.5/api/Classes/classshapeworks_1_1PlaneWidget.md index cc988db3cf..a7aa1fcf72 100644 --- a/6.5/api/Classes/classshapeworks_1_1PlaneWidget.md +++ b/6.5/api/Classes/classshapeworks_1_1PlaneWidget.md @@ -160,4 +160,4 @@ Finalize the offset for a given plane. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html index 857de3e1ae..edad965e68 100644 --- a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html +++ b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html @@ -3061,7 +3061,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md index 21c5486a4d..ff760626ac 100644 --- a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md +++ b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md @@ -426,4 +426,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html index 1ca099ba6b..50b5d87fee 100644 --- a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html +++ b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html @@ -3000,7 +3000,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md index a9be0d2943..54f7fe9f75 100644 --- a/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md +++ b/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md @@ -371,4 +371,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.html b/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.html index a1030ad963..4dcb441ee1 100644 --- a/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.html +++ b/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.html @@ -2744,7 +2744,7 @@

    function closeEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.md b/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.md index 60ace7c4ea..9cf639ea87 100644 --- a/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.md +++ b/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.md @@ -195,4 +195,4 @@ void closeEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.html b/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.html index 1195982d84..f959aa5c31 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.html +++ b/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.html @@ -2663,7 +2663,7 @@

    function SetRotationTranslation

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.md b/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.md index 2c54af9634..c8f5f909d9 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.md +++ b/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.md @@ -152,4 +152,4 @@ inline void SetRotationTranslation( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Project.html b/6.5/api/Classes/classshapeworks_1_1Project.html index df91e62a71..6b4d50e2a8 100644 --- a/6.5/api/Classes/classshapeworks_1_1Project.html +++ b/6.5/api/Classes/classshapeworks_1_1Project.html @@ -3152,7 +3152,7 @@

    function set_groomed_domain_types

    Get the groomed domain types.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Project.md b/6.5/api/Classes/classshapeworks_1_1Project.md index 0c2c0da323..02620d9782 100644 --- a/6.5/api/Classes/classshapeworks_1_1Project.md +++ b/6.5/api/Classes/classshapeworks_1_1Project.md @@ -465,4 +465,4 @@ Get the groomed domain types. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.html b/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.html index 1f9d300ced..8ef9d062bf 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.html +++ b/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.md b/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.md index c793590561..d5284405bb 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.md +++ b/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ProjectReader.html b/6.5/api/Classes/classshapeworks_1_1ProjectReader.html index 284981ede4..70af82ec8f 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProjectReader.html +++ b/6.5/api/Classes/classshapeworks_1_1ProjectReader.html @@ -2784,7 +2784,7 @@

    variable project_

    Project & project_;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ProjectReader.md b/6.5/api/Classes/classshapeworks_1_1ProjectReader.md index 30e902e39c..b47307a2d5 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProjectReader.md +++ b/6.5/api/Classes/classshapeworks_1_1ProjectReader.md @@ -216,4 +216,4 @@ Project & project_; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ProjectUtils.html b/6.5/api/Classes/classshapeworks_1_1ProjectUtils.html index 4879c48fae..7bc3061d01 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProjectUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1ProjectUtils.html @@ -2771,7 +2771,7 @@

    function convert_subject_to_map

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ProjectUtils.md b/6.5/api/Classes/classshapeworks_1_1ProjectUtils.md index f6535b4ed0..e2d19815c2 100644 --- a/6.5/api/Classes/classshapeworks_1_1ProjectUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1ProjectUtils.md @@ -228,4 +228,4 @@ static StringMap convert_subject_to_map( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1PythonWorker.html b/6.5/api/Classes/classshapeworks_1_1PythonWorker.html index f8beb9c51a..02444a5403 100644 --- a/6.5/api/Classes/classshapeworks_1_1PythonWorker.html +++ b/6.5/api/Classes/classshapeworks_1_1PythonWorker.html @@ -2725,7 +2725,7 @@

    variable python_api_version

    static constexpr static const char * python_api_version = "6.5";
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1PythonWorker.md b/6.5/api/Classes/classshapeworks_1_1PythonWorker.md index c327ba9a76..de9cafdcfd 100644 --- a/6.5/api/Classes/classshapeworks_1_1PythonWorker.md +++ b/6.5/api/Classes/classshapeworks_1_1PythonWorker.md @@ -163,4 +163,4 @@ static constexpr static const char * python_api_version = "6.5"; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1QMeshWarper.html b/6.5/api/Classes/classshapeworks_1_1QMeshWarper.html index 1e4033c2ec..4ee4c87c62 100644 --- a/6.5/api/Classes/classshapeworks_1_1QMeshWarper.html +++ b/6.5/api/Classes/classshapeworks_1_1QMeshWarper.html @@ -2626,7 +2626,7 @@

    function update_progress

    For overriding to handle progress updates.

    Reimplements: shapeworks::MeshWarper::update_progress


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1QMeshWarper.md b/6.5/api/Classes/classshapeworks_1_1QMeshWarper.md index d5bdcd42a6..f03c7ae700 100644 --- a/6.5/api/Classes/classshapeworks_1_1QMeshWarper.md +++ b/6.5/api/Classes/classshapeworks_1_1QMeshWarper.md @@ -100,4 +100,4 @@ For overriding to handle progress updates. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1QOptimize.html b/6.5/api/Classes/classshapeworks_1_1QOptimize.html index 3061271507..366613a326 100644 --- a/6.5/api/Classes/classshapeworks_1_1QOptimize.html +++ b/6.5/api/Classes/classshapeworks_1_1QOptimize.html @@ -3570,7 +3570,7 @@

    function IterateCallback

    Reimplements: shapeworks::Optimize::IterateCallback


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1QOptimize.md b/6.5/api/Classes/classshapeworks_1_1QOptimize.md index 4bbf0530ca..9fe0e3e3e7 100644 --- a/6.5/api/Classes/classshapeworks_1_1QOptimize.md +++ b/6.5/api/Classes/classshapeworks_1_1QOptimize.md @@ -388,4 +388,4 @@ virtual void IterateCallback( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.html b/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.html index b68b8cce3b..6f8a16e8b7 100644 --- a/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.html +++ b/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.html @@ -3034,7 +3034,7 @@

    function setMaxAngleDegrees

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.md b/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.md index e2197931e8..072bb7a6d2 100644 --- a/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.md +++ b/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.md @@ -390,4 +390,4 @@ inline void setMaxAngleDegrees( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Sampler.html b/6.5/api/Classes/classshapeworks_1_1Sampler.html index bf51843055..d04abb4f5d 100644 --- a/6.5/api/Classes/classshapeworks_1_1Sampler.html +++ b/6.5/api/Classes/classshapeworks_1_1Sampler.html @@ -3771,7 +3771,7 @@

    variable Dimension

    static constexpr unsigned int Dimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Sampler.md b/6.5/api/Classes/classshapeworks_1_1Sampler.md index f9dfde491b..4d610e6176 100644 --- a/6.5/api/Classes/classshapeworks_1_1Sampler.md +++ b/6.5/api/Classes/classshapeworks_1_1Sampler.md @@ -808,4 +808,4 @@ static constexpr unsigned int Dimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1SamplingFunction.html b/6.5/api/Classes/classshapeworks_1_1SamplingFunction.html index 54a049b3e4..af34802298 100644 --- a/6.5/api/Classes/classshapeworks_1_1SamplingFunction.html +++ b/6.5/api/Classes/classshapeworks_1_1SamplingFunction.html @@ -3336,7 +3336,7 @@

    variable m_SpatialSigmaCache

    SigmaCacheType::Pointer m_SpatialSigmaCache;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1SamplingFunction.md b/6.5/api/Classes/classshapeworks_1_1SamplingFunction.md index 695e120114..6192301b97 100644 --- a/6.5/api/Classes/classshapeworks_1_1SamplingFunction.md +++ b/6.5/api/Classes/classshapeworks_1_1SamplingFunction.md @@ -568,4 +568,4 @@ SigmaCacheType::Pointer m_SpatialSigmaCache; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Session.html b/6.5/api/Classes/classshapeworks_1_1Session.html index 04f4298a9a..da27564bd0 100644 --- a/6.5/api/Classes/classshapeworks_1_1Session.html +++ b/6.5/api/Classes/classshapeworks_1_1Session.html @@ -4414,7 +4414,7 @@

    variable DEEPSSM_C

    static const std::string DEEPSSM_C;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Session.md b/6.5/api/Classes/classshapeworks_1_1Session.md index 1d86c9e98d..aeb8f423c5 100644 --- a/6.5/api/Classes/classshapeworks_1_1Session.md +++ b/6.5/api/Classes/classshapeworks_1_1Session.md @@ -1180,4 +1180,4 @@ static const std::string DEEPSSM_C; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Shape.html b/6.5/api/Classes/classshapeworks_1_1Shape.html index b56fc658bd..13b6257453 100644 --- a/6.5/api/Classes/classshapeworks_1_1Shape.html +++ b/6.5/api/Classes/classshapeworks_1_1Shape.html @@ -3435,7 +3435,7 @@

    function get_groomed_mesh_wrappers
    std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Shape.md b/6.5/api/Classes/classshapeworks_1_1Shape.md index 5175a121ba..41e430e2ad 100644 --- a/6.5/api/Classes/classshapeworks_1_1Shape.md +++ b/6.5/api/Classes/classshapeworks_1_1Shape.md @@ -633,4 +633,4 @@ std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.html b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.html index 248738840f..137562ba21 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.html @@ -2587,7 +2587,7 @@

    variable VDimension

    static const unsigned VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.md b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.md index 894f2c3800..3dfc0227bf 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.md @@ -110,4 +110,4 @@ static const unsigned VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html index 76dbfdf2d9..3e4a6bfdfe 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html @@ -2686,7 +2686,7 @@

    function name

    get the name of the job

    Reimplements: shapeworks::Job::name


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md index 7b27e3975b..1a6eb92fe8 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md @@ -128,4 +128,4 @@ get the name of the job ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html b/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html index f458c4856e..d89cc665c5 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html @@ -3053,7 +3053,7 @@

    variable m_DomainsPerShape

    int m_DomainsPerShape;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md b/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md index 7dd1993b46..f507055f76 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md @@ -371,4 +371,4 @@ int m_DomainsPerShape; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.html b/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.html index f450b76051..ef5f332dca 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.html @@ -3069,7 +3069,7 @@

    variable m_DomainsPerShape

    int m_DomainsPerShape;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.md b/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.md index 970da5b4f5..5c6163557f 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.md @@ -385,4 +385,4 @@ int m_DomainsPerShape; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html b/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html index 6157cb4056..29c3b652cb 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html @@ -3718,7 +3718,7 @@

    function dropEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md b/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md index 47286d1a40..50eb30f1bb 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md @@ -761,4 +761,4 @@ void dropEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.html b/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.html index b1714494be..38a38dcb36 100644 --- a/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.html +++ b/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.html @@ -2534,7 +2534,7 @@

    variable z

    double z;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.md b/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.md index e49cfbdbbc..c872c9b0a0 100644 --- a/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.md +++ b/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.md @@ -73,4 +73,4 @@ double z; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.html b/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.html index 1144c14b1f..ad2baa99be 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.md b/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.md index 48e1539126..c949335a91 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.html b/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.html index ac89dcd91c..b4f5f329b0 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.html @@ -2570,7 +2570,7 @@

    function getOffset

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.md b/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.md index ddb881546c..8594392189 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.md @@ -112,4 +112,4 @@ static Vector3 getOffset( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.html b/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.html index e8fac03971..c0b4c93985 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.html +++ b/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.html @@ -2650,7 +2650,7 @@

    function ~ShapeworksWorker

    ~ShapeworksWorker()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.md b/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.md index f07fd330ca..555b024f8f 100644 --- a/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.md +++ b/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.md @@ -110,4 +110,4 @@ ShapeworksWorker( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1SliceView.html b/6.5/api/Classes/classshapeworks_1_1SliceView.html index 5d2dac3ae5..26d266f561 100644 --- a/6.5/api/Classes/classshapeworks_1_1SliceView.html +++ b/6.5/api/Classes/classshapeworks_1_1SliceView.html @@ -2760,7 +2760,7 @@

    function should_point_show

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1SliceView.md b/6.5/api/Classes/classshapeworks_1_1SliceView.md index a7ae35b428..d504607c2b 100644 --- a/6.5/api/Classes/classshapeworks_1_1SliceView.md +++ b/6.5/api/Classes/classshapeworks_1_1SliceView.md @@ -207,4 +207,4 @@ bool should_point_show( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1SplashScreen.html b/6.5/api/Classes/classshapeworks_1_1SplashScreen.html index b532153868..f8209b77c3 100644 --- a/6.5/api/Classes/classshapeworks_1_1SplashScreen.html +++ b/6.5/api/Classes/classshapeworks_1_1SplashScreen.html @@ -2518,7 +2518,7 @@

    function ~SplashScreen

    destructor


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1SplashScreen.md b/6.5/api/Classes/classshapeworks_1_1SplashScreen.md index 3c8ad4aef4..1455ad8be2 100644 --- a/6.5/api/Classes/classshapeworks_1_1SplashScreen.md +++ b/6.5/api/Classes/classshapeworks_1_1SplashScreen.md @@ -71,4 +71,4 @@ destructor ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html b/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html index d29b56f43a..4a97785606 100644 --- a/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html +++ b/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html @@ -2595,7 +2595,7 @@

    function plot

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md b/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md index c82e530891..c507ed9809 100644 --- a/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md +++ b/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md @@ -107,4 +107,4 @@ void plot( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.html b/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.html index 38fe724f4a..ac1b8077cd 100644 --- a/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.html +++ b/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.html @@ -2548,7 +2548,7 @@

    function resizeEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.md b/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.md index 7d0bcbf2f6..9d2bd45d28 100644 --- a/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.md +++ b/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.md @@ -90,4 +90,4 @@ void resizeEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StringUtils.html b/6.5/api/Classes/classshapeworks_1_1StringUtils.html index f629e7239a..ebb98e9e21 100644 --- a/6.5/api/Classes/classshapeworks_1_1StringUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1StringUtils.html @@ -2590,7 +2590,7 @@

    function replace_string

    Replace a search string with a replacement.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StringUtils.md b/6.5/api/Classes/classshapeworks_1_1StringUtils.md index 36dedf914b..a9b8528af1 100644 --- a/6.5/api/Classes/classshapeworks_1_1StringUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1StringUtils.md @@ -128,4 +128,4 @@ Replace a search string with a replacement. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.html b/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.html index dd6242bbac..e51e6e1ba9 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.html +++ b/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.html @@ -2727,7 +2727,7 @@

    variable start_y_

    int start_y_ = 0;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.md b/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.md index 275ec70eb6..c1920b8755 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.md +++ b/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.md @@ -178,4 +178,4 @@ int start_y_ = 0; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.html b/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.html index 412b245722..bf93eea2f3 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.html +++ b/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.html @@ -2672,7 +2672,7 @@

    function Dolly

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.md b/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.md index d874f0c8e7..c2e214d50e 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.md +++ b/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.md @@ -154,4 +154,4 @@ void Dolly( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StudioMesh.html b/6.5/api/Classes/classshapeworks_1_1StudioMesh.html index 8ec7bbf12d..70d3cadfac 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioMesh.html +++ b/6.5/api/Classes/classshapeworks_1_1StudioMesh.html @@ -2698,7 +2698,7 @@

    variable FFC_PAINT

    static constexpr const char *const FFC_PAINT = "ffc_paint";
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StudioMesh.md b/6.5/api/Classes/classshapeworks_1_1StudioMesh.md index 293564d5a5..f7202781d1 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioMesh.md +++ b/6.5/api/Classes/classshapeworks_1_1StudioMesh.md @@ -186,4 +186,4 @@ static constexpr const char *const FFC_PAINT = "ffc_paint"; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html b/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html index 4a8814b0cc..35c2790945 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html +++ b/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html @@ -2554,7 +2554,7 @@

    function WindowLevel

    void WindowLevel() override
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md b/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md index 776c0e92e8..150c6ef552 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md +++ b/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md @@ -97,4 +97,4 @@ void WindowLevel() override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StudioUtils.html b/6.5/api/Classes/classshapeworks_1_1StudioUtils.html index 48772cc2c7..5b42b5b589 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioUtils.html +++ b/6.5/api/Classes/classshapeworks_1_1StudioUtils.html @@ -2525,7 +2525,7 @@

    function add_viewport_border

    add a color border to a viewport


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StudioUtils.md b/6.5/api/Classes/classshapeworks_1_1StudioUtils.md index 710567396f..4cfb6fa834 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioUtils.md +++ b/6.5/api/Classes/classshapeworks_1_1StudioUtils.md @@ -87,4 +87,4 @@ add a color border to a viewport ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html b/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html index 0a98db5e94..2f3421516a 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html +++ b/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html @@ -2534,7 +2534,7 @@

    function DisplayDebugText

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md b/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md index bf96642e28..3aabc803e1 100644 --- a/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md +++ b/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md @@ -91,4 +91,4 @@ void DisplayDebugText( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Style.html b/6.5/api/Classes/classshapeworks_1_1Style.html index b3196e8822..b83bfc58d7 100644 --- a/6.5/api/Classes/classshapeworks_1_1Style.html +++ b/6.5/api/Classes/classshapeworks_1_1Style.html @@ -2468,7 +2468,7 @@

    function apply_abort_button_style

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Style.md b/6.5/api/Classes/classshapeworks_1_1Style.md index 10e5a83737..1fe8efb92b 100644 --- a/6.5/api/Classes/classshapeworks_1_1Style.md +++ b/6.5/api/Classes/classshapeworks_1_1Style.md @@ -46,4 +46,4 @@ static void apply_abort_button_style( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Subject.html b/6.5/api/Classes/classshapeworks_1_1Subject.html index 238545fb62..afa145a1f4 100644 --- a/6.5/api/Classes/classshapeworks_1_1Subject.html +++ b/6.5/api/Classes/classshapeworks_1_1Subject.html @@ -3037,7 +3037,7 @@

    function set_fixed

    Set if this subject is fixed or not.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Subject.md b/6.5/api/Classes/classshapeworks_1_1Subject.md index a9d71b977d..4988cc75e2 100644 --- a/6.5/api/Classes/classshapeworks_1_1Subject.md +++ b/6.5/api/Classes/classshapeworks_1_1Subject.md @@ -392,4 +392,4 @@ Set if this subject is fixed or not. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Telemetry.html b/6.5/api/Classes/classshapeworks_1_1Telemetry.html index ce4642f25e..47300454f7 100644 --- a/6.5/api/Classes/classshapeworks_1_1Telemetry.html +++ b/6.5/api/Classes/classshapeworks_1_1Telemetry.html @@ -2504,7 +2504,7 @@

    function record_event

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Telemetry.md b/6.5/api/Classes/classshapeworks_1_1Telemetry.md index 04439d18e2..0041ba91ff 100644 --- a/6.5/api/Classes/classshapeworks_1_1Telemetry.md +++ b/6.5/api/Classes/classshapeworks_1_1Telemetry.md @@ -58,4 +58,4 @@ void record_event( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1UpdateChecker.html b/6.5/api/Classes/classshapeworks_1_1UpdateChecker.html index 7d613511e5..0aeaf72c87 100644 --- a/6.5/api/Classes/classshapeworks_1_1UpdateChecker.html +++ b/6.5/api/Classes/classshapeworks_1_1UpdateChecker.html @@ -2544,7 +2544,7 @@

    function run_manual_update_check

    void run_manual_update_check()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1UpdateChecker.md b/6.5/api/Classes/classshapeworks_1_1UpdateChecker.md index 97658c9717..580cc9b56b 100644 --- a/6.5/api/Classes/classshapeworks_1_1UpdateChecker.md +++ b/6.5/api/Classes/classshapeworks_1_1UpdateChecker.md @@ -86,4 +86,4 @@ void run_manual_update_check() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Variant.html b/6.5/api/Classes/classshapeworks_1_1Variant.html index 33889680a5..b0f34d40c2 100644 --- a/6.5/api/Classes/classshapeworks_1_1Variant.html +++ b/6.5/api/Classes/classshapeworks_1_1Variant.html @@ -2762,7 +2762,7 @@

    function operator std::vector<
    operator std::vector< std::string >() const
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Variant.md b/6.5/api/Classes/classshapeworks_1_1Variant.md index 7d9f9b8af7..8e08b583f5 100644 --- a/6.5/api/Classes/classshapeworks_1_1Variant.md +++ b/6.5/api/Classes/classshapeworks_1_1Variant.md @@ -226,4 +226,4 @@ operator std::vector< std::string >() const ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1VectorFunction.html b/6.5/api/Classes/classshapeworks_1_1VectorFunction.html index de9b1a9819..26ce245550 100644 --- a/6.5/api/Classes/classshapeworks_1_1VectorFunction.html +++ b/6.5/api/Classes/classshapeworks_1_1VectorFunction.html @@ -3014,7 +3014,7 @@

    variable m_DomainNumber

    unsigned int m_DomainNumber;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1VectorFunction.md b/6.5/api/Classes/classshapeworks_1_1VectorFunction.md index 0eba3b5444..e3ecbddc93 100644 --- a/6.5/api/Classes/classshapeworks_1_1VectorFunction.md +++ b/6.5/api/Classes/classshapeworks_1_1VectorFunction.md @@ -385,4 +385,4 @@ unsigned int m_DomainNumber; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1VectorImage.html b/6.5/api/Classes/classshapeworks_1_1VectorImage.html index f306fd2227..a1a966570a 100644 --- a/6.5/api/Classes/classshapeworks_1_1VectorImage.html +++ b/6.5/api/Classes/classshapeworks_1_1VectorImage.html @@ -2588,7 +2588,7 @@

    function iterator

    ImageIterator iterator()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1VectorImage.md b/6.5/api/Classes/classshapeworks_1_1VectorImage.md index 7a46a39120..406f872426 100644 --- a/6.5/api/Classes/classshapeworks_1_1VectorImage.md +++ b/6.5/api/Classes/classshapeworks_1_1VectorImage.md @@ -107,4 +107,4 @@ ImageIterator iterator() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Viewer.html b/6.5/api/Classes/classshapeworks_1_1Viewer.html index c1632736fa..d412e5226c 100644 --- a/6.5/api/Classes/classshapeworks_1_1Viewer.html +++ b/6.5/api/Classes/classshapeworks_1_1Viewer.html @@ -3271,7 +3271,7 @@

    function is_reverse

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Viewer.md b/6.5/api/Classes/classshapeworks_1_1Viewer.md index c5e018bbd3..19ae983308 100644 --- a/6.5/api/Classes/classshapeworks_1_1Viewer.md +++ b/6.5/api/Classes/classshapeworks_1_1Viewer.md @@ -531,4 +531,4 @@ static bool is_reverse( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Visualizer.html b/6.5/api/Classes/classshapeworks_1_1Visualizer.html index 6a99730243..5f330f4df0 100644 --- a/6.5/api/Classes/classshapeworks_1_1Visualizer.html +++ b/6.5/api/Classes/classshapeworks_1_1Visualizer.html @@ -3349,7 +3349,7 @@

    function get_render_size

    Return render window size.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Visualizer.md b/6.5/api/Classes/classshapeworks_1_1Visualizer.md index c91b6442ba..516dc45ec0 100644 --- a/6.5/api/Classes/classshapeworks_1_1Visualizer.md +++ b/6.5/api/Classes/classshapeworks_1_1Visualizer.md @@ -585,4 +585,4 @@ Return render window size. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.html b/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.html index db22f06118..418a95a4c5 100644 --- a/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.html +++ b/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.html @@ -2754,7 +2754,7 @@

    function GetPolydata

    Reimplements: shapeworks::MeshWrapper::GetPolydata


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.md b/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.md index f1979d1a50..3c03ac136e 100644 --- a/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.md +++ b/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.md @@ -240,4 +240,4 @@ inline virtual vtkSmartPointer< vtkPolyData > GetPolydata() const override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.html b/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.html index f65fd34134..ac9c347d27 100644 --- a/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.html +++ b/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.html @@ -2470,7 +2470,7 @@

    function eventFilter

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.md b/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.md index 8fe0cfdad4..f235c49337 100644 --- a/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.md +++ b/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.md @@ -49,4 +49,4 @@ bool eventFilter( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1Worker.html b/6.5/api/Classes/classshapeworks_1_1Worker.html index 3eff511bdc..de8f63b306 100644 --- a/6.5/api/Classes/classshapeworks_1_1Worker.html +++ b/6.5/api/Classes/classshapeworks_1_1Worker.html @@ -2637,7 +2637,7 @@

    function create_worker

    static Worker * create_worker()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1Worker.md b/6.5/api/Classes/classshapeworks_1_1Worker.md index 54a7e2bb45..791886b18a 100644 --- a/6.5/api/Classes/classshapeworks_1_1Worker.md +++ b/6.5/api/Classes/classshapeworks_1_1Worker.md @@ -124,4 +124,4 @@ static Worker * create_worker() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.html b/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.html index aef73a09b8..b00ff44f4c 100644 --- a/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.html +++ b/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.html @@ -2455,7 +2455,7 @@

    function shapeworks_exception

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.md b/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.md index 6b058eecdc..602055d7c0 100644 --- a/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.md +++ b/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.md @@ -40,4 +40,4 @@ shapeworks_exception( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classvec2d.html b/6.5/api/Classes/classvec2d.html index d0966ff09a..8a108df191 100644 --- a/6.5/api/Classes/classvec2d.html +++ b/6.5/api/Classes/classvec2d.html @@ -2635,7 +2635,7 @@

    variable y

    double y;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classvec2d.md b/6.5/api/Classes/classvec2d.md index 67a24aa100..5f1a864aed 100644 --- a/6.5/api/Classes/classvec2d.md +++ b/6.5/api/Classes/classvec2d.md @@ -134,4 +134,4 @@ double y; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classvec3d.html b/6.5/api/Classes/classvec3d.html index a03f8a604d..b91d5c8eb5 100644 --- a/6.5/api/Classes/classvec3d.html +++ b/6.5/api/Classes/classvec3d.html @@ -2776,7 +2776,7 @@

    variable z

    double z;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classvec3d.md b/6.5/api/Classes/classvec3d.md index 8b596ce570..1da5a33b51 100644 --- a/6.5/api/Classes/classvec3d.md +++ b/6.5/api/Classes/classvec3d.md @@ -221,4 +221,4 @@ double z; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classvec6d.html b/6.5/api/Classes/classvec6d.html index 068e922680..3dcee9dab5 100644 --- a/6.5/api/Classes/classvec6d.html +++ b/6.5/api/Classes/classvec6d.html @@ -2552,7 +2552,7 @@

    variable xz

    double xz;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classvec6d.md b/6.5/api/Classes/classvec6d.md index 4002db5fab..186f41c9f6 100644 --- a/6.5/api/Classes/classvec6d.md +++ b/6.5/api/Classes/classvec6d.md @@ -81,4 +81,4 @@ double xz; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/classvtkPolyDataToImageData.html b/6.5/api/Classes/classvtkPolyDataToImageData.html index 96f8201303..9da579c945 100644 --- a/6.5/api/Classes/classvtkPolyDataToImageData.html +++ b/6.5/api/Classes/classvtkPolyDataToImageData.html @@ -2772,7 +2772,7 @@

    function RequestUpdateExtent

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/classvtkPolyDataToImageData.md b/6.5/api/Classes/classvtkPolyDataToImageData.md index 10dd84a7a7..91ab94a790 100644 --- a/6.5/api/Classes/classvtkPolyDataToImageData.md +++ b/6.5/api/Classes/classvtkPolyDataToImageData.md @@ -230,4 +230,4 @@ virtual int RequestUpdateExtent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/index_classes.html b/6.5/api/Classes/index_classes.html index da286cfdd1..f9f2f4a18e 100644 --- a/6.5/api/Classes/index_classes.html +++ b/6.5/api/Classes/index_classes.html @@ -2689,7 +2689,7 @@

    Classes

  • class vtkPolyDataToImageData

  • -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/index_classes.md b/6.5/api/Classes/index_classes.md index d58a0e2622..7b6b2e537c 100644 --- a/6.5/api/Classes/index_classes.md +++ b/6.5/api/Classes/index_classes.md @@ -278,4 +278,4 @@ title: Classes ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Classes/structColorScheme_1_1rgb.html b/6.5/api/Classes/structColorScheme_1_1rgb.html index 29b161ae81..08e0928ba0 100644 --- a/6.5/api/Classes/structColorScheme_1_1rgb.html +++ b/6.5/api/Classes/structColorScheme_1_1rgb.html @@ -2528,7 +2528,7 @@

    variable b

    float b;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structColorScheme_1_1rgb.md b/6.5/api/Classes/structColorScheme_1_1rgb.md index ca0279050e..36e95688aa 100644 --- a/6.5/api/Classes/structColorScheme_1_1rgb.md +++ b/6.5/api/Classes/structColorScheme_1_1rgb.md @@ -69,4 +69,4 @@ float b; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.html b/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.html index 6d538b9bd4..023da6d44b 100644 --- a/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.html +++ b/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.html @@ -2450,7 +2450,7 @@

    variable node

    int node;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.md b/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.md index e784af3ba0..4f574d9231 100644 --- a/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.md +++ b/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.md @@ -34,4 +34,4 @@ int node; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structFEFillHole_1_1FACE.html b/6.5/api/Classes/structFEFillHole_1_1FACE.html index 924677edd0..b1d05cd3ce 100644 --- a/6.5/api/Classes/structFEFillHole_1_1FACE.html +++ b/6.5/api/Classes/structFEFillHole_1_1FACE.html @@ -2450,7 +2450,7 @@

    variable n

    int n;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Classes/structFEFillHole_1_1FACE.md b/6.5/api/Classes/structFEFillHole_1_1FACE.md index 91d87d1090..871b93ac46 100644 --- a/6.5/api/Classes/structFEFillHole_1_1FACE.md +++ b/6.5/api/Classes/structFEFillHole_1_1FACE.md @@ -34,4 +34,4 @@ int n; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structIntersection.html b/6.5/api/Classes/structIntersection.html index edfb04ae03..6772e4fa94 100644 --- a/6.5/api/Classes/structIntersection.html +++ b/6.5/api/Classes/structIntersection.html @@ -2478,7 +2478,7 @@

    variable m_faceIndex

    int m_faceIndex;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structIntersection.md b/6.5/api/Classes/structIntersection.md index 998bd94741..23000605ee 100644 --- a/6.5/api/Classes/structIntersection.md +++ b/6.5/api/Classes/structIntersection.md @@ -50,4 +50,4 @@ int m_faceIndex; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structQuad.html b/6.5/api/Classes/structQuad.html index 96542e36f0..4f57e07493 100644 --- a/6.5/api/Classes/structQuad.html +++ b/6.5/api/Classes/structQuad.html @@ -2478,7 +2478,7 @@

    variable r3

    vec3d r3;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structQuad.md b/6.5/api/Classes/structQuad.md index ace5c44a45..7518b586af 100644 --- a/6.5/api/Classes/structQuad.md +++ b/6.5/api/Classes/structQuad.md @@ -50,4 +50,4 @@ vec3d r3; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structRay.html b/6.5/api/Classes/structRay.html index 0b21e2b0fd..482a4f63f1 100644 --- a/6.5/api/Classes/structRay.html +++ b/6.5/api/Classes/structRay.html @@ -2450,7 +2450,7 @@

    variable direction

    vec3d direction;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structRay.md b/6.5/api/Classes/structRay.md index ffad951535..7d1f02918f 100644 --- a/6.5/api/Classes/structRay.md +++ b/6.5/api/Classes/structRay.md @@ -34,4 +34,4 @@ vec3d direction; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structSimilarityTransform3D.html b/6.5/api/Classes/structSimilarityTransform3D.html index d2bbfd77fa..794779e89c 100644 --- a/6.5/api/Classes/structSimilarityTransform3D.html +++ b/6.5/api/Classes/structSimilarityTransform3D.html @@ -2464,7 +2464,7 @@

    variable translation

    vnl_vector_fixed< double, 3 > translation;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structSimilarityTransform3D.md b/6.5/api/Classes/structSimilarityTransform3D.md index 91ac70d23d..1611c7b983 100644 --- a/6.5/api/Classes/structSimilarityTransform3D.md +++ b/6.5/api/Classes/structSimilarityTransform3D.md @@ -42,4 +42,4 @@ vnl_vector_fixed< double, 3 > translation; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structTriangle.html b/6.5/api/Classes/structTriangle.html index 1509f374d1..b1e94b339a 100644 --- a/6.5/api/Classes/structTriangle.html +++ b/6.5/api/Classes/structTriangle.html @@ -2478,7 +2478,7 @@

    variable fn

    vec3d fn;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structTriangle.md b/6.5/api/Classes/structTriangle.md index 1a0e60dd87..e33f3a74b7 100644 --- a/6.5/api/Classes/structTriangle.md +++ b/6.5/api/Classes/structTriangle.md @@ -50,4 +50,4 @@ vec3d fn; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structVTKEXPORT.html b/6.5/api/Classes/structVTKEXPORT.html index 73f7ca572b..0f91ac49de 100644 --- a/6.5/api/Classes/structVTKEXPORT.html +++ b/6.5/api/Classes/structVTKEXPORT.html @@ -2450,7 +2450,7 @@

    variable bscalar_data

    bool bscalar_data;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structVTKEXPORT.md b/6.5/api/Classes/structVTKEXPORT.md index bd905b4b85..b90b064b15 100644 --- a/6.5/api/Classes/structVTKEXPORT.md +++ b/6.5/api/Classes/structVTKEXPORT.md @@ -34,4 +34,4 @@ bool bscalar_data; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html b/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html index c60d7616af..e26a5dd742 100644 --- a/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html +++ b/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html @@ -2456,7 +2456,7 @@

    function format

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md b/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md index 60c2a83cb6..c2d297713b 100644 --- a/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md +++ b/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md @@ -40,4 +40,4 @@ inline auto format( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html b/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html index a3eb6b8ef7..ab2fc57154 100644 --- a/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html +++ b/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html @@ -2529,7 +2529,7 @@

    variable dom

    int dom;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md b/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md index 737dc3afa3..70db71f1fb 100644 --- a/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md +++ b/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md @@ -70,4 +70,4 @@ int dom; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.html b/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.html index b749e16c3f..f3a3ae1adf 100644 --- a/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.html +++ b/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.html @@ -2633,7 +2633,7 @@

    variable data_full

    std::array< Eigen::VectorXd, 3 > data_full;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.md b/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.md index 0925e91efe..62b095a8b4 100644 --- a/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.md +++ b/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.md @@ -109,4 +109,4 @@ std::array< Eigen::VectorXd, 3 > data_full; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html b/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html index d6af4d9fa8..f6181caa87 100644 --- a/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html +++ b/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html @@ -2557,7 +2557,7 @@

    variable dist

    boost::normal_distribution dist;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md b/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md index 3c3c66c8a6..9086e6eb62 100644 --- a/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md +++ b/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md @@ -86,4 +86,4 @@ boost::normal_distribution dist; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html b/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html index 812f85daf0..6c4b924a77 100644 --- a/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html +++ b/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html @@ -2579,7 +2579,7 @@

    variable PositionRemoveEvent

    bool PositionRemoveEvent;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md b/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md index bec023b301..94c9649006 100644 --- a/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md +++ b/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md @@ -101,4 +101,4 @@ bool PositionRemoveEvent; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html b/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html index 0cdba736f8..67ac08311c 100644 --- a/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html +++ b/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html @@ -2604,7 +2604,7 @@

    variable Index

    unsigned int Index;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md b/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md index f11b356fd4..903ed889f0 100644 --- a/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md +++ b/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md @@ -107,4 +107,4 @@ unsigned int Index; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html b/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html index 84f958d1aa..6cf562de5c 100644 --- a/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html +++ b/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html @@ -2632,7 +2632,7 @@

    variable NodePointer

    NodePointerType NodePointer;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md b/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md index e1fc900a2e..1ef4527605 100644 --- a/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md +++ b/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md @@ -123,4 +123,4 @@ NodePointerType NodePointer; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1Reconstruction.html b/6.5/api/Classes/structshapeworks_1_1Reconstruction.html index 973b926540..829389ec32 100644 --- a/6.5/api/Classes/structshapeworks_1_1Reconstruction.html +++ b/6.5/api/Classes/structshapeworks_1_1Reconstruction.html @@ -2464,7 +2464,7 @@

    variable rec

    Eigen::MatrixXd rec;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1Reconstruction.md b/6.5/api/Classes/structshapeworks_1_1Reconstruction.md index a584bb6b7b..ef740e06c0 100644 --- a/6.5/api/Classes/structshapeworks_1_1Reconstruction.md +++ b/6.5/api/Classes/structshapeworks_1_1Reconstruction.md @@ -42,4 +42,4 @@ Eigen::MatrixXd rec; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html index 14e9b6ab4b..13fafde0f1 100644 --- a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html +++ b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html @@ -2477,7 +2477,7 @@

    variable c

    vnl_vector_fixed< double, 3 > c;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md index 17e3be9a63..380c98c792 100644 --- a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md +++ b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md @@ -54,4 +54,4 @@ vnl_vector_fixed< double, 3 > c; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html index b75ee8796c..fc955e6688 100644 --- a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html +++ b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html @@ -2463,7 +2463,7 @@

    variable radius

    double radius;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md index f80769d8b1..0d1bb803fd 100644 --- a/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md +++ b/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md @@ -46,4 +46,4 @@ double radius; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1SharedCommandData.html b/6.5/api/Classes/structshapeworks_1_1SharedCommandData.html index 09ecef50d7..e86cc89d01 100644 --- a/6.5/api/Classes/structshapeworks_1_1SharedCommandData.html +++ b/6.5/api/Classes/structshapeworks_1_1SharedCommandData.html @@ -2566,7 +2566,7 @@

    variable field

    Field field;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1SharedCommandData.md b/6.5/api/Classes/structshapeworks_1_1SharedCommandData.md index 34266b0182..ee5e01994f 100644 --- a/6.5/api/Classes/structshapeworks_1_1SharedCommandData.md +++ b/6.5/api/Classes/structshapeworks_1_1SharedCommandData.md @@ -89,4 +89,4 @@ Field field; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1powstruct.html b/6.5/api/Classes/structshapeworks_1_1powstruct.html index 7981ced970..7210981133 100644 --- a/6.5/api/Classes/structshapeworks_1_1powstruct.html +++ b/6.5/api/Classes/structshapeworks_1_1powstruct.html @@ -2451,7 +2451,7 @@

    variable c

    static const int c = a * powstruct<a, b - 1>::c;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1powstruct.md b/6.5/api/Classes/structshapeworks_1_1powstruct.md index fbf6a04440..36b3cd2a31 100644 --- a/6.5/api/Classes/structshapeworks_1_1powstruct.md +++ b/6.5/api/Classes/structshapeworks_1_1powstruct.md @@ -40,4 +40,4 @@ static const int c = a * powstruct::c; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html b/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html index 89462b7d62..758560cd7c 100644 --- a/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html +++ b/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html @@ -2448,7 +2448,7 @@

    variable c

    static const int c = 1;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md b/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md index fa214c3be2..8eae3e45e1 100644 --- a/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md +++ b/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md @@ -33,4 +33,4 @@ static const int c = 1; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Files/AnalysisTool_8h.html b/6.5/api/Files/AnalysisTool_8h.html index e556865e8c..8af03397da 100644 --- a/6.5/api/Files/AnalysisTool_8h.html +++ b/6.5/api/Files/AnalysisTool_8h.html @@ -2710,7 +2710,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/AnalysisTool_8h.md b/6.5/api/Files/AnalysisTool_8h.md index ed24b10f48..e34c8f4f15 100644 --- a/6.5/api/Files/AnalysisTool_8h.md +++ b/6.5/api/Files/AnalysisTool_8h.md @@ -299,4 +299,4 @@ class AnalysisTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/AnalysisUtils_8h.html b/6.5/api/Files/AnalysisUtils_8h.html index dcb38a20d5..a3308809f3 100644 --- a/6.5/api/Files/AnalysisUtils_8h.html +++ b/6.5/api/Files/AnalysisUtils_8h.html @@ -2458,7 +2458,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/AnalysisUtils_8h.md b/6.5/api/Files/AnalysisUtils_8h.md index 15f526830d..6efb663d64 100644 --- a/6.5/api/Files/AnalysisUtils_8h.md +++ b/6.5/api/Files/AnalysisUtils_8h.md @@ -47,4 +47,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Analyze_8h.html b/6.5/api/Files/Analyze_8h.html index e067894ca1..1aafc5a3e2 100644 --- a/6.5/api/Files/Analyze_8h.html +++ b/6.5/api/Files/Analyze_8h.html @@ -2518,7 +2518,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Analyze_8h.md b/6.5/api/Files/Analyze_8h.md index 446c2eacea..a257372aac 100644 --- a/6.5/api/Files/Analyze_8h.md +++ b/6.5/api/Files/Analyze_8h.md @@ -107,4 +107,4 @@ class Analyze { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ColorMap_8h.html b/6.5/api/Files/ColorMap_8h.html index 8f09775547..a700d4df24 100644 --- a/6.5/api/Files/ColorMap_8h.html +++ b/6.5/api/Files/ColorMap_8h.html @@ -2501,7 +2501,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ColorMap_8h.md b/6.5/api/Files/ColorMap_8h.md index 06759db9fb..f7bfe7324b 100644 --- a/6.5/api/Files/ColorMap_8h.md +++ b/6.5/api/Files/ColorMap_8h.md @@ -87,4 +87,4 @@ class ColorMaps : public std::vector { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ColorSchemes_8h.html b/6.5/api/Files/ColorSchemes_8h.html index af146039d6..cd53dd407e 100644 --- a/6.5/api/Files/ColorSchemes_8h.html +++ b/6.5/api/Files/ColorSchemes_8h.html @@ -2551,7 +2551,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ColorSchemes_8h.md b/6.5/api/Files/ColorSchemes_8h.md index 517daaccf1..6c6d77577d 100644 --- a/6.5/api/Files/ColorSchemes_8h.md +++ b/6.5/api/Files/ColorSchemes_8h.md @@ -148,4 +148,4 @@ class ColorSchemes : public std::vector { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Command_8h.html b/6.5/api/Files/Command_8h.html index deaeae5585..6a1e369abd 100644 --- a/6.5/api/Files/Command_8h.html +++ b/6.5/api/Files/Command_8h.html @@ -2695,7 +2695,7 @@

    Source code

    std::ostream& operator<<(std::ostream& os, const shapeworks::Command &cmd);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Command_8h.md b/6.5/api/Files/Command_8h.md index 9fcbb2f874..718ae03de4 100644 --- a/6.5/api/Files/Command_8h.md +++ b/6.5/api/Files/Command_8h.md @@ -198,4 +198,4 @@ std::ostream& operator<<(std::ostream& os, const shapeworks::Command &cmd); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Commands_8h.html b/6.5/api/Files/Commands_8h.html index e8b5514569..6a152a8102 100644 --- a/6.5/api/Files/Commands_8h.html +++ b/6.5/api/Files/Commands_8h.html @@ -2524,7 +2524,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Commands_8h.md b/6.5/api/Files/Commands_8h.md index 55aaad0eeb..83f22ec5df 100644 --- a/6.5/api/Files/Commands_8h.md +++ b/6.5/api/Files/Commands_8h.md @@ -129,4 +129,4 @@ COMMAND_DECLARE(ConvertProjectCommand, ProjectCommandGroup); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/CompareWidget_8h.html b/6.5/api/Files/CompareWidget_8h.html index 9c046fb850..c805c9b404 100644 --- a/6.5/api/Files/CompareWidget_8h.html +++ b/6.5/api/Files/CompareWidget_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/CompareWidget_8h.md b/6.5/api/Files/CompareWidget_8h.md index f5d6462b07..bf741f2347 100644 --- a/6.5/api/Files/CompareWidget_8h.md +++ b/6.5/api/Files/CompareWidget_8h.md @@ -65,4 +65,4 @@ class CompareWidget : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ConstraintType_8h.html b/6.5/api/Files/ConstraintType_8h.html index 2c4e9ce9bb..e448b61fd0 100644 --- a/6.5/api/Files/ConstraintType_8h.html +++ b/6.5/api/Files/ConstraintType_8h.html @@ -2475,7 +2475,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ConstraintType_8h.md b/6.5/api/Files/ConstraintType_8h.md index c5aaef9a13..3b1bb7715d 100644 --- a/6.5/api/Files/ConstraintType_8h.md +++ b/6.5/api/Files/ConstraintType_8h.md @@ -49,4 +49,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Constraint_8h.html b/6.5/api/Files/Constraint_8h.html index 629ea0cd02..71ddff469e 100644 --- a/6.5/api/Files/Constraint_8h.html +++ b/6.5/api/Files/Constraint_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Constraint_8h.md b/6.5/api/Files/Constraint_8h.md index b21b42cab3..e5968060b3 100644 --- a/6.5/api/Files/Constraint_8h.md +++ b/6.5/api/Files/Constraint_8h.md @@ -67,4 +67,4 @@ class Constraint { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Constraints_8h.html b/6.5/api/Files/Constraints_8h.html index 848e052aa0..745aff7d0a 100644 --- a/6.5/api/Files/Constraints_8h.html +++ b/6.5/api/Files/Constraints_8h.html @@ -2551,7 +2551,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Constraints_8h.md b/6.5/api/Files/Constraints_8h.md index bbc3d9ecd5..f1204518c0 100644 --- a/6.5/api/Files/Constraints_8h.md +++ b/6.5/api/Files/Constraints_8h.md @@ -140,4 +140,4 @@ class Constraints { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ContourDomain_8h.html b/6.5/api/Files/ContourDomain_8h.html index 388972997b..039990a3aa 100644 --- a/6.5/api/Files/ContourDomain_8h.html +++ b/6.5/api/Files/ContourDomain_8h.html @@ -2583,7 +2583,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ContourDomain_8h.md b/6.5/api/Files/ContourDomain_8h.md index 55622a6b92..c6c1580797 100644 --- a/6.5/api/Files/ContourDomain_8h.md +++ b/6.5/api/Files/ContourDomain_8h.md @@ -172,4 +172,4 @@ class ContourDomain : public ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/CorrespondenceFunction_8h.html b/6.5/api/Files/CorrespondenceFunction_8h.html index a4d8b1e9a2..13c7f07850 100644 --- a/6.5/api/Files/CorrespondenceFunction_8h.html +++ b/6.5/api/Files/CorrespondenceFunction_8h.html @@ -2635,7 +2635,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/CorrespondenceFunction_8h.md b/6.5/api/Files/CorrespondenceFunction_8h.md index 3234d3ad26..7cd3076425 100644 --- a/6.5/api/Files/CorrespondenceFunction_8h.md +++ b/6.5/api/Files/CorrespondenceFunction_8h.md @@ -224,4 +224,4 @@ class CorrespondenceFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/CorrespondenceMode_8h.html b/6.5/api/Files/CorrespondenceMode_8h.html index 361a2760f6..9c6fee0729 100644 --- a/6.5/api/Files/CorrespondenceMode_8h.html +++ b/6.5/api/Files/CorrespondenceMode_8h.html @@ -2434,7 +2434,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/CorrespondenceMode_8h.md b/6.5/api/Files/CorrespondenceMode_8h.md index 085c6bdaff..672624ba07 100644 --- a/6.5/api/Files/CorrespondenceMode_8h.md +++ b/6.5/api/Files/CorrespondenceMode_8h.md @@ -39,4 +39,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/CurvatureSamplingFunction_8h.html b/6.5/api/Files/CurvatureSamplingFunction_8h.html index 270f995811..0822f45b36 100644 --- a/6.5/api/Files/CurvatureSamplingFunction_8h.html +++ b/6.5/api/Files/CurvatureSamplingFunction_8h.html @@ -2578,7 +2578,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/CurvatureSamplingFunction_8h.md b/6.5/api/Files/CurvatureSamplingFunction_8h.md index 9fd2d49a55..d66a27dada 100644 --- a/6.5/api/Files/CurvatureSamplingFunction_8h.md +++ b/6.5/api/Files/CurvatureSamplingFunction_8h.md @@ -167,4 +167,4 @@ class CurvatureSamplingFunction : public SamplingFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/CustomSlider_8h.html b/6.5/api/Files/CustomSlider_8h.html index b9aebf119b..469929323b 100644 --- a/6.5/api/Files/CustomSlider_8h.html +++ b/6.5/api/Files/CustomSlider_8h.html @@ -2435,7 +2435,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/CustomSlider_8h.md b/6.5/api/Files/CustomSlider_8h.md index b7b02ce639..9f004efd67 100644 --- a/6.5/api/Files/CustomSlider_8h.md +++ b/6.5/api/Files/CustomSlider_8h.md @@ -38,4 +38,4 @@ class CustomSlider : public QSlider { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.html b/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.html index 18ab0eee05..73a63088df 100644 --- a/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.html +++ b/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.html @@ -2498,7 +2498,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.md b/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.md index 29442f5104..c633715a22 100644 --- a/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.md +++ b/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.md @@ -101,4 +101,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/DataTool_8h.html b/6.5/api/Files/DataTool_8h.html index ebf3c6654e..cf91fd3b90 100644 --- a/6.5/api/Files/DataTool_8h.html +++ b/6.5/api/Files/DataTool_8h.html @@ -2525,7 +2525,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/DataTool_8h.md b/6.5/api/Files/DataTool_8h.md index f5c0ec7c7d..c947b458ec 100644 --- a/6.5/api/Files/DataTool_8h.md +++ b/6.5/api/Files/DataTool_8h.md @@ -114,4 +114,4 @@ class DataTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/DeepSSMJob_8h.html b/6.5/api/Files/DeepSSMJob_8h.html index 4c7d4b6c6e..57750b3c2f 100644 --- a/6.5/api/Files/DeepSSMJob_8h.html +++ b/6.5/api/Files/DeepSSMJob_8h.html @@ -2489,7 +2489,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/DeepSSMJob_8h.md b/6.5/api/Files/DeepSSMJob_8h.md index e4a0a6b444..cf26030e3d 100644 --- a/6.5/api/Files/DeepSSMJob_8h.md +++ b/6.5/api/Files/DeepSSMJob_8h.md @@ -78,4 +78,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/DeepSSMParameters_8h.html b/6.5/api/Files/DeepSSMParameters_8h.html index e56f11649b..719dfa7227 100644 --- a/6.5/api/Files/DeepSSMParameters_8h.html +++ b/6.5/api/Files/DeepSSMParameters_8h.html @@ -2524,7 +2524,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/DeepSSMParameters_8h.md b/6.5/api/Files/DeepSSMParameters_8h.md index 721835b3e5..634e690875 100644 --- a/6.5/api/Files/DeepSSMParameters_8h.md +++ b/6.5/api/Files/DeepSSMParameters_8h.md @@ -113,4 +113,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/DeepSSMTool_8h.html b/6.5/api/Files/DeepSSMTool_8h.html index d321a71515..1cd8d841a6 100644 --- a/6.5/api/Files/DeepSSMTool_8h.html +++ b/6.5/api/Files/DeepSSMTool_8h.html @@ -2546,7 +2546,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/DeepSSMTool_8h.md b/6.5/api/Files/DeepSSMTool_8h.md index d02fa047ef..9ab7481a50 100644 --- a/6.5/api/Files/DeepSSMTool_8h.md +++ b/6.5/api/Files/DeepSSMTool_8h.md @@ -135,4 +135,4 @@ class DeepSSMTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/DisentangledCorrespondenceFunction_8h.html b/6.5/api/Files/DisentangledCorrespondenceFunction_8h.html index 4de0cdfab1..283a6ec22e 100644 --- a/6.5/api/Files/DisentangledCorrespondenceFunction_8h.html +++ b/6.5/api/Files/DisentangledCorrespondenceFunction_8h.html @@ -2638,7 +2638,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/DisentangledCorrespondenceFunction_8h.md b/6.5/api/Files/DisentangledCorrespondenceFunction_8h.md index 1337a500fa..6b9fa9b3ea 100644 --- a/6.5/api/Files/DisentangledCorrespondenceFunction_8h.md +++ b/6.5/api/Files/DisentangledCorrespondenceFunction_8h.md @@ -227,4 +227,4 @@ class DisentangledCorrespondenceFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/DomainType_8h.html b/6.5/api/Files/DomainType_8h.html index bba5bfe1ce..f73c83dec9 100644 --- a/6.5/api/Files/DomainType_8h.html +++ b/6.5/api/Files/DomainType_8h.html @@ -2476,7 +2476,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/DomainType_8h.md b/6.5/api/Files/DomainType_8h.md index bfd085ac53..f549b59645 100644 --- a/6.5/api/Files/DomainType_8h.md +++ b/6.5/api/Files/DomainType_8h.md @@ -50,4 +50,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/DualVectorFunction_8h.html b/6.5/api/Files/DualVectorFunction_8h.html index 9c50cc3fc7..15e512b77a 100644 --- a/6.5/api/Files/DualVectorFunction_8h.html +++ b/6.5/api/Files/DualVectorFunction_8h.html @@ -2808,7 +2808,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/DualVectorFunction_8h.md b/6.5/api/Files/DualVectorFunction_8h.md index 32bb5285d9..8fe5ec2200 100644 --- a/6.5/api/Files/DualVectorFunction_8h.md +++ b/6.5/api/Files/DualVectorFunction_8h.md @@ -397,4 +397,4 @@ class DualVectorFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/EigenUtils_8h.html b/6.5/api/Files/EigenUtils_8h.html index bf582fc6e0..738485bd1b 100644 --- a/6.5/api/Files/EigenUtils_8h.html +++ b/6.5/api/Files/EigenUtils_8h.html @@ -2506,7 +2506,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/EigenUtils_8h.md b/6.5/api/Files/EigenUtils_8h.md index 3a9e54fde0..0e28223430 100644 --- a/6.5/api/Files/EigenUtils_8h.md +++ b/6.5/api/Files/EigenUtils_8h.md @@ -95,4 +95,4 @@ class EigenUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/EvaluationUtil_8h.html b/6.5/api/Files/EvaluationUtil_8h.html index 96b0b4a84f..74d1854635 100644 --- a/6.5/api/Files/EvaluationUtil_8h.html +++ b/6.5/api/Files/EvaluationUtil_8h.html @@ -2522,7 +2522,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/EvaluationUtil_8h.md b/6.5/api/Files/EvaluationUtil_8h.md index c49f8fb23e..a7cb1b1dc7 100644 --- a/6.5/api/Files/EvaluationUtil_8h.md +++ b/6.5/api/Files/EvaluationUtil_8h.md @@ -108,4 +108,4 @@ void SaveReconstructions(std::vector &reconstructions, const std ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ExcelProjectReader_8h.html b/6.5/api/Files/ExcelProjectReader_8h.html index cb4096cae3..51c195e03f 100644 --- a/6.5/api/Files/ExcelProjectReader_8h.html +++ b/6.5/api/Files/ExcelProjectReader_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ExcelProjectReader_8h.md b/6.5/api/Files/ExcelProjectReader_8h.md index 22d53a9d16..9035ab8c60 100644 --- a/6.5/api/Files/ExcelProjectReader_8h.md +++ b/6.5/api/Files/ExcelProjectReader_8h.md @@ -55,4 +55,4 @@ class ExcelProjectReader : public ProjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ExcelProjectWriter_8h.html b/6.5/api/Files/ExcelProjectWriter_8h.html index fb7befe8c2..5c45414939 100644 --- a/6.5/api/Files/ExcelProjectWriter_8h.html +++ b/6.5/api/Files/ExcelProjectWriter_8h.html @@ -2455,7 +2455,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ExcelProjectWriter_8h.md b/6.5/api/Files/ExcelProjectWriter_8h.md index cd042fc92c..00f435e8d9 100644 --- a/6.5/api/Files/ExcelProjectWriter_8h.md +++ b/6.5/api/Files/ExcelProjectWriter_8h.md @@ -44,4 +44,4 @@ class ExcelProjectWriter { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Exception_8h.html b/6.5/api/Files/Exception_8h.html index 48babe752e..92a8fb23f6 100644 --- a/6.5/api/Files/Exception_8h.html +++ b/6.5/api/Files/Exception_8h.html @@ -2456,7 +2456,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Exception_8h.md b/6.5/api/Files/Exception_8h.md index df328ff9a1..0bc4daa10e 100644 --- a/6.5/api/Files/Exception_8h.md +++ b/6.5/api/Files/Exception_8h.md @@ -45,4 +45,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Executable_8h.html b/6.5/api/Files/Executable_8h.html index c2e88bebff..679a9f4d84 100644 --- a/6.5/api/Files/Executable_8h.html +++ b/6.5/api/Files/Executable_8h.html @@ -2469,7 +2469,7 @@

    Source code

    }; // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Executable_8h.md b/6.5/api/Files/Executable_8h.md index ef4b4dafc2..d6125b7a2c 100644 --- a/6.5/api/Files/Executable_8h.md +++ b/6.5/api/Files/Executable_8h.md @@ -58,4 +58,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ExportImageDialog_8h.html b/6.5/api/Files/ExportImageDialog_8h.html index d181c3990d..406945fbd9 100644 --- a/6.5/api/Files/ExportImageDialog_8h.html +++ b/6.5/api/Files/ExportImageDialog_8h.html @@ -2487,7 +2487,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ExportImageDialog_8h.md b/6.5/api/Files/ExportImageDialog_8h.md index 919a3f3799..5c91912f80 100644 --- a/6.5/api/Files/ExportImageDialog_8h.md +++ b/6.5/api/Files/ExportImageDialog_8h.md @@ -76,4 +76,4 @@ class ExportImageDialog : public QDialog { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ExportUtils_8h.html b/6.5/api/Files/ExportUtils_8h.html index c304930808..176eaddd18 100644 --- a/6.5/api/Files/ExportUtils_8h.html +++ b/6.5/api/Files/ExportUtils_8h.html @@ -2464,7 +2464,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ExportUtils_8h.md b/6.5/api/Files/ExportUtils_8h.md index 5b81873967..299a2d9f35 100644 --- a/6.5/api/Files/ExportUtils_8h.md +++ b/6.5/api/Files/ExportUtils_8h.md @@ -54,4 +54,4 @@ class ExportUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEAreaCoverage_8h.html b/6.5/api/Files/FEAreaCoverage_8h.html index c34fbf86e0..29b97b9dca 100644 --- a/6.5/api/Files/FEAreaCoverage_8h.html +++ b/6.5/api/Files/FEAreaCoverage_8h.html @@ -2513,7 +2513,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEAreaCoverage_8h.md b/6.5/api/Files/FEAreaCoverage_8h.md index 7f83757138..30bc58b292 100644 --- a/6.5/api/Files/FEAreaCoverage_8h.md +++ b/6.5/api/Files/FEAreaCoverage_8h.md @@ -102,4 +102,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEAutoMesher_8h.html b/6.5/api/Files/FEAutoMesher_8h.html index 544bb6b964..6e6ddb4ce4 100644 --- a/6.5/api/Files/FEAutoMesher_8h.html +++ b/6.5/api/Files/FEAutoMesher_8h.html @@ -2451,7 +2451,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEAutoMesher_8h.md b/6.5/api/Files/FEAutoMesher_8h.md index 2db27d2b4e..1d4f8faa0e 100644 --- a/6.5/api/Files/FEAutoMesher_8h.md +++ b/6.5/api/Files/FEAutoMesher_8h.md @@ -54,4 +54,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FECVDDecimationModifier_8h.html b/6.5/api/Files/FECVDDecimationModifier_8h.html index 94c86a5c86..fbb9e805c7 100644 --- a/6.5/api/Files/FECVDDecimationModifier_8h.html +++ b/6.5/api/Files/FECVDDecimationModifier_8h.html @@ -2498,7 +2498,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FECVDDecimationModifier_8h.md b/6.5/api/Files/FECVDDecimationModifier_8h.md index 5a3a68f33a..4465a5b999 100644 --- a/6.5/api/Files/FECVDDecimationModifier_8h.md +++ b/6.5/api/Files/FECVDDecimationModifier_8h.md @@ -101,4 +101,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FECoreMesh_8h.html b/6.5/api/Files/FECoreMesh_8h.html index 71c5f0fd0e..2d3f5a5379 100644 --- a/6.5/api/Files/FECoreMesh_8h.html +++ b/6.5/api/Files/FECoreMesh_8h.html @@ -2464,7 +2464,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FECoreMesh_8h.md b/6.5/api/Files/FECoreMesh_8h.md index 855f929bcb..8c5b1e4a41 100644 --- a/6.5/api/Files/FECoreMesh_8h.md +++ b/6.5/api/Files/FECoreMesh_8h.md @@ -67,4 +67,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEElement_8h.html b/6.5/api/Files/FEElement_8h.html index 99640c42f5..6b00f7b637 100644 --- a/6.5/api/Files/FEElement_8h.html +++ b/6.5/api/Files/FEElement_8h.html @@ -2969,7 +2969,7 @@

    Source code

    #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_)
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEElement_8h.md b/6.5/api/Files/FEElement_8h.md index 6a438a571c..17d570fdc5 100644 --- a/6.5/api/Files/FEElement_8h.md +++ b/6.5/api/Files/FEElement_8h.md @@ -433,4 +433,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEFillHole_8h.html b/6.5/api/Files/FEFillHole_8h.html index 1fa82d5dc4..06cbae6e41 100644 --- a/6.5/api/Files/FEFillHole_8h.html +++ b/6.5/api/Files/FEFillHole_8h.html @@ -2514,7 +2514,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEFillHole_8h.md b/6.5/api/Files/FEFillHole_8h.md index 9d942991f5..eaea6427eb 100644 --- a/6.5/api/Files/FEFillHole_8h.md +++ b/6.5/api/Files/FEFillHole_8h.md @@ -111,4 +111,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEFixMesh_8h.html b/6.5/api/Files/FEFixMesh_8h.html index 01d09795d8..948e0d4bf1 100644 --- a/6.5/api/Files/FEFixMesh_8h.html +++ b/6.5/api/Files/FEFixMesh_8h.html @@ -2449,7 +2449,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEFixMesh_8h.md b/6.5/api/Files/FEFixMesh_8h.md index 0dfd348968..91c2a00776 100644 --- a/6.5/api/Files/FEFixMesh_8h.md +++ b/6.5/api/Files/FEFixMesh_8h.md @@ -52,4 +52,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEMeshSmoothingModifier_8h.html b/6.5/api/Files/FEMeshSmoothingModifier_8h.html index 672e361446..d7c6e52638 100644 --- a/6.5/api/Files/FEMeshSmoothingModifier_8h.html +++ b/6.5/api/Files/FEMeshSmoothingModifier_8h.html @@ -2451,7 +2451,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEMeshSmoothingModifier_8h.md b/6.5/api/Files/FEMeshSmoothingModifier_8h.md index e220663fdf..d5a2010929 100644 --- a/6.5/api/Files/FEMeshSmoothingModifier_8h.md +++ b/6.5/api/Files/FEMeshSmoothingModifier_8h.md @@ -54,4 +54,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEMesh_8h.html b/6.5/api/Files/FEMesh_8h.html index c69f0a8004..4fbe630a25 100644 --- a/6.5/api/Files/FEMesh_8h.html +++ b/6.5/api/Files/FEMesh_8h.html @@ -2856,7 +2856,7 @@

    Source code

    #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_)
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEMesh_8h.md b/6.5/api/Files/FEMesh_8h.md index 988c930787..7e8193b145 100644 --- a/6.5/api/Files/FEMesh_8h.md +++ b/6.5/api/Files/FEMesh_8h.md @@ -346,4 +346,4 @@ double area_triangle(vec3d r[3]); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FENodeElementList_8h.html b/6.5/api/Files/FENodeElementList_8h.html index 263f9bac0b..2361489618 100644 --- a/6.5/api/Files/FENodeElementList_8h.html +++ b/6.5/api/Files/FENodeElementList_8h.html @@ -2446,7 +2446,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FENodeElementList_8h.md b/6.5/api/Files/FENodeElementList_8h.md index 123c60a5a1..6ed5774f10 100644 --- a/6.5/api/Files/FENodeElementList_8h.md +++ b/6.5/api/Files/FENodeElementList_8h.md @@ -49,4 +49,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FENodeFaceList_8h.html b/6.5/api/Files/FENodeFaceList_8h.html index 578d9452da..aa6be7b652 100644 --- a/6.5/api/Files/FENodeFaceList_8h.html +++ b/6.5/api/Files/FENodeFaceList_8h.html @@ -2455,7 +2455,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FENodeFaceList_8h.md b/6.5/api/Files/FENodeFaceList_8h.md index 929de49cbd..6f1cc8b59f 100644 --- a/6.5/api/Files/FENodeFaceList_8h.md +++ b/6.5/api/Files/FENodeFaceList_8h.md @@ -58,4 +58,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FENodeNodeList_8h.html b/6.5/api/Files/FENodeNodeList_8h.html index 730f1ba6ab..96dbc4e5e8 100644 --- a/6.5/api/Files/FENodeNodeList_8h.html +++ b/6.5/api/Files/FENodeNodeList_8h.html @@ -2446,7 +2446,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FENodeNodeList_8h.md b/6.5/api/Files/FENodeNodeList_8h.md index 4146a4bc5d..3aac60e278 100644 --- a/6.5/api/Files/FENodeNodeList_8h.md +++ b/6.5/api/Files/FENodeNodeList_8h.md @@ -49,4 +49,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEVTKExport_8h.html b/6.5/api/Files/FEVTKExport_8h.html index 4a495117ed..ce48448617 100644 --- a/6.5/api/Files/FEVTKExport_8h.html +++ b/6.5/api/Files/FEVTKExport_8h.html @@ -2458,7 +2458,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEVTKExport_8h.md b/6.5/api/Files/FEVTKExport_8h.md index 57a4ad8560..6cb7acc4cf 100644 --- a/6.5/api/Files/FEVTKExport_8h.md +++ b/6.5/api/Files/FEVTKExport_8h.md @@ -58,4 +58,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FEVTKImport_8h.html b/6.5/api/Files/FEVTKImport_8h.html index faf7887649..143310013c 100644 --- a/6.5/api/Files/FEVTKImport_8h.html +++ b/6.5/api/Files/FEVTKImport_8h.html @@ -2453,7 +2453,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FEVTKImport_8h.md b/6.5/api/Files/FEVTKImport_8h.md index bd4f1bf118..45f246dbdd 100644 --- a/6.5/api/Files/FEVTKImport_8h.md +++ b/6.5/api/Files/FEVTKImport_8h.md @@ -56,4 +56,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/FreeFormConstraint_8h.html b/6.5/api/Files/FreeFormConstraint_8h.html index 9af50a0878..2c9b77c5ad 100644 --- a/6.5/api/Files/FreeFormConstraint_8h.html +++ b/6.5/api/Files/FreeFormConstraint_8h.html @@ -2522,7 +2522,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/FreeFormConstraint_8h.md b/6.5/api/Files/FreeFormConstraint_8h.md index d50df44b51..99ab366b36 100644 --- a/6.5/api/Files/FreeFormConstraint_8h.md +++ b/6.5/api/Files/FreeFormConstraint_8h.md @@ -111,4 +111,4 @@ class FreeFormConstraint : public Constraint { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/GenericContainerArray_8h.html b/6.5/api/Files/GenericContainerArray_8h.html index 1250ac9471..43ab72c76a 100644 --- a/6.5/api/Files/GenericContainerArray_8h.html +++ b/6.5/api/Files/GenericContainerArray_8h.html @@ -2505,7 +2505,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/GenericContainerArray_8h.md b/6.5/api/Files/GenericContainerArray_8h.md index c5fdddbef5..4bc3cd1cd4 100644 --- a/6.5/api/Files/GenericContainerArray_8h.md +++ b/6.5/api/Files/GenericContainerArray_8h.md @@ -94,4 +94,4 @@ class GenericContainerArray : public std::vector::P ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/GenericContainer_8h.html b/6.5/api/Files/GenericContainer_8h.html index 2e282e038d..aa8e741f74 100644 --- a/6.5/api/Files/GenericContainer_8h.html +++ b/6.5/api/Files/GenericContainer_8h.html @@ -2492,7 +2492,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/GenericContainer_8h.md b/6.5/api/Files/GenericContainer_8h.md index b9a27a8e9e..0f8abafb34 100644 --- a/6.5/api/Files/GenericContainer_8h.md +++ b/6.5/api/Files/GenericContainer_8h.md @@ -81,4 +81,4 @@ class GenericContainer : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/GradientDescentOptimizer_8h.html b/6.5/api/Files/GradientDescentOptimizer_8h.html index d41ac85db9..89d954793a 100644 --- a/6.5/api/Files/GradientDescentOptimizer_8h.html +++ b/6.5/api/Files/GradientDescentOptimizer_8h.html @@ -2552,7 +2552,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/GradientDescentOptimizer_8h.md b/6.5/api/Files/GradientDescentOptimizer_8h.md index 43b90cb7cf..a00ac209a1 100644 --- a/6.5/api/Files/GradientDescentOptimizer_8h.md +++ b/6.5/api/Files/GradientDescentOptimizer_8h.md @@ -141,4 +141,4 @@ class GradientDescentOptimizer : public itk::Object { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/GroomParameters_8h.html b/6.5/api/Files/GroomParameters_8h.html index 28112d9254..aba29e6c9f 100644 --- a/6.5/api/Files/GroomParameters_8h.html +++ b/6.5/api/Files/GroomParameters_8h.html @@ -2581,7 +2581,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/GroomParameters_8h.md b/6.5/api/Files/GroomParameters_8h.md index da1248dead..50029e2d92 100644 --- a/6.5/api/Files/GroomParameters_8h.md +++ b/6.5/api/Files/GroomParameters_8h.md @@ -170,4 +170,4 @@ class GroomParameters { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/GroomTool_8h.html b/6.5/api/Files/GroomTool_8h.html index 43a8a2fc25..494ef43db6 100644 --- a/6.5/api/Files/GroomTool_8h.html +++ b/6.5/api/Files/GroomTool_8h.html @@ -2543,7 +2543,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/GroomTool_8h.md b/6.5/api/Files/GroomTool_8h.md index 7c5069c4e1..a05d205d47 100644 --- a/6.5/api/Files/GroomTool_8h.md +++ b/6.5/api/Files/GroomTool_8h.md @@ -132,4 +132,4 @@ class GroomTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Groom_8h.html b/6.5/api/Files/Groom_8h.html index 62b08b26f4..7771f4d97a 100644 --- a/6.5/api/Files/Groom_8h.html +++ b/6.5/api/Files/Groom_8h.html @@ -2523,7 +2523,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Groom_8h.md b/6.5/api/Files/Groom_8h.md index b4c6a46101..7553a5f1a5 100644 --- a/6.5/api/Files/Groom_8h.md +++ b/6.5/api/Files/Groom_8h.md @@ -112,4 +112,4 @@ class Groom { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/GroupPvalueJob_8h.html b/6.5/api/Files/GroupPvalueJob_8h.html index e66483cda2..e2f5c3e65b 100644 --- a/6.5/api/Files/GroupPvalueJob_8h.html +++ b/6.5/api/Files/GroupPvalueJob_8h.html @@ -2465,7 +2465,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/GroupPvalueJob_8h.md b/6.5/api/Files/GroupPvalueJob_8h.md index 324b612f10..c2846c2fff 100644 --- a/6.5/api/Files/GroupPvalueJob_8h.md +++ b/6.5/api/Files/GroupPvalueJob_8h.md @@ -54,4 +54,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ImageDomainWithCurvature_8h.html b/6.5/api/Files/ImageDomainWithCurvature_8h.html index 5508ce497f..46e4de4fdf 100644 --- a/6.5/api/Files/ImageDomainWithCurvature_8h.html +++ b/6.5/api/Files/ImageDomainWithCurvature_8h.html @@ -2548,7 +2548,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ImageDomainWithCurvature_8h.md b/6.5/api/Files/ImageDomainWithCurvature_8h.md index 33f64cbb65..05c1fedfb8 100644 --- a/6.5/api/Files/ImageDomainWithCurvature_8h.md +++ b/6.5/api/Files/ImageDomainWithCurvature_8h.md @@ -137,4 +137,4 @@ class ImageDomainWithCurvature : public ImageDomainWithGradN { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ImageDomainWithGradN_8h.html b/6.5/api/Files/ImageDomainWithGradN_8h.html index feb43605fe..696061fb2a 100644 --- a/6.5/api/Files/ImageDomainWithGradN_8h.html +++ b/6.5/api/Files/ImageDomainWithGradN_8h.html @@ -2519,7 +2519,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ImageDomainWithGradN_8h.md b/6.5/api/Files/ImageDomainWithGradN_8h.md index c2e6e36463..4984cf0b7c 100644 --- a/6.5/api/Files/ImageDomainWithGradN_8h.md +++ b/6.5/api/Files/ImageDomainWithGradN_8h.md @@ -108,4 +108,4 @@ class ImageDomainWithGradN : public ImageDomainWithGradients { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ImageDomainWithGradients_8h.html b/6.5/api/Files/ImageDomainWithGradients_8h.html index 4b6235eebd..282f99144d 100644 --- a/6.5/api/Files/ImageDomainWithGradients_8h.html +++ b/6.5/api/Files/ImageDomainWithGradients_8h.html @@ -2526,7 +2526,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ImageDomainWithGradients_8h.md b/6.5/api/Files/ImageDomainWithGradients_8h.md index 0e208f1570..d2a5f17055 100644 --- a/6.5/api/Files/ImageDomainWithGradients_8h.md +++ b/6.5/api/Files/ImageDomainWithGradients_8h.md @@ -115,4 +115,4 @@ class ImageDomainWithGradients : public ImageDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ImageDomain_8h.html b/6.5/api/Files/ImageDomain_8h.html index e2a51202fe..293e25268e 100644 --- a/6.5/api/Files/ImageDomain_8h.html +++ b/6.5/api/Files/ImageDomain_8h.html @@ -2689,7 +2689,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ImageDomain_8h.md b/6.5/api/Files/ImageDomain_8h.md index 8186bd8aa8..5e7f08a375 100644 --- a/6.5/api/Files/ImageDomain_8h.md +++ b/6.5/api/Files/ImageDomain_8h.md @@ -278,4 +278,4 @@ class ImageDomain : public ParticleRegionDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ImageLabel_8h.html b/6.5/api/Files/ImageLabel_8h.html index 63490d8a1e..a7fbc576ba 100644 --- a/6.5/api/Files/ImageLabel_8h.html +++ b/6.5/api/Files/ImageLabel_8h.html @@ -2464,7 +2464,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ImageLabel_8h.md b/6.5/api/Files/ImageLabel_8h.md index cfa4ec877b..6af94c4782 100644 --- a/6.5/api/Files/ImageLabel_8h.md +++ b/6.5/api/Files/ImageLabel_8h.md @@ -53,4 +53,4 @@ class ImageLabel : public QLabel { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ImageUtils_8h.html b/6.5/api/Files/ImageUtils_8h.html index 658abbe217..0878f94aaa 100644 --- a/6.5/api/Files/ImageUtils_8h.html +++ b/6.5/api/Files/ImageUtils_8h.html @@ -2467,7 +2467,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ImageUtils_8h.md b/6.5/api/Files/ImageUtils_8h.md index 073d1d7791..02a3cf4795 100644 --- a/6.5/api/Files/ImageUtils_8h.md +++ b/6.5/api/Files/ImageUtils_8h.md @@ -56,4 +56,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Image_8h.html b/6.5/api/Files/Image_8h.html index b4ee22f17a..b76993ff1a 100644 --- a/6.5/api/Files/Image_8h.html +++ b/6.5/api/Files/Image_8h.html @@ -2674,7 +2674,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Image_8h.md b/6.5/api/Files/Image_8h.md index 453a53f693..593b636e7f 100644 --- a/6.5/api/Files/Image_8h.md +++ b/6.5/api/Files/Image_8h.md @@ -263,4 +263,4 @@ Image& operator/=(Image& img, const double x); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ImplicitSurfaceDomain_8h.html b/6.5/api/Files/ImplicitSurfaceDomain_8h.html index 1747295626..b5751d283d 100644 --- a/6.5/api/Files/ImplicitSurfaceDomain_8h.html +++ b/6.5/api/Files/ImplicitSurfaceDomain_8h.html @@ -2546,7 +2546,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ImplicitSurfaceDomain_8h.md b/6.5/api/Files/ImplicitSurfaceDomain_8h.md index f0193346d2..2079326069 100644 --- a/6.5/api/Files/ImplicitSurfaceDomain_8h.md +++ b/6.5/api/Files/ImplicitSurfaceDomain_8h.md @@ -135,4 +135,4 @@ class ImplicitSurfaceDomain : public ImageDomainWithCurvature { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Intersect_8h.html b/6.5/api/Files/Intersect_8h.html index 6be61dda93..6cd7506efd 100644 --- a/6.5/api/Files/Intersect_8h.html +++ b/6.5/api/Files/Intersect_8h.html @@ -2566,7 +2566,7 @@

    Source code

    bool FastIntersectQuad(const Ray& ray, const Quad& quad, Intersection& q);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Intersect_8h.md b/6.5/api/Files/Intersect_8h.md index 3c3c6e75f9..12807f5bc0 100644 --- a/6.5/api/Files/Intersect_8h.md +++ b/6.5/api/Files/Intersect_8h.md @@ -117,4 +117,4 @@ bool FastIntersectQuad(const Ray& ray, const Quad& quad, Intersection& q); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ItkToVtk_8h.html b/6.5/api/Files/ItkToVtk_8h.html index f962bb447e..3f9965f20b 100644 --- a/6.5/api/Files/ItkToVtk_8h.html +++ b/6.5/api/Files/ItkToVtk_8h.html @@ -2469,7 +2469,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ItkToVtk_8h.md b/6.5/api/Files/ItkToVtk_8h.md index 48e43695d3..faf701981f 100644 --- a/6.5/api/Files/ItkToVtk_8h.md +++ b/6.5/api/Files/ItkToVtk_8h.md @@ -59,4 +59,4 @@ void ConnectPipelines(ITK_Exporter exporter, VTK_Importer* importer) ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Job_8h.html b/6.5/api/Files/Job_8h.html index da2ff24d08..612ce691dc 100644 --- a/6.5/api/Files/Job_8h.html +++ b/6.5/api/Files/Job_8h.html @@ -2488,7 +2488,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Job_8h.md b/6.5/api/Files/Job_8h.md index fb84528d52..cfdf81aa47 100644 --- a/6.5/api/Files/Job_8h.md +++ b/6.5/api/Files/Job_8h.md @@ -77,4 +77,4 @@ class Job : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/JsonProjectReader_8h.html b/6.5/api/Files/JsonProjectReader_8h.html index 6fc161c41a..c54b45eb54 100644 --- a/6.5/api/Files/JsonProjectReader_8h.html +++ b/6.5/api/Files/JsonProjectReader_8h.html @@ -2465,7 +2465,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/JsonProjectReader_8h.md b/6.5/api/Files/JsonProjectReader_8h.md index 23292d0089..0fc82c4c6d 100644 --- a/6.5/api/Files/JsonProjectReader_8h.md +++ b/6.5/api/Files/JsonProjectReader_8h.md @@ -54,4 +54,4 @@ class JsonProjectReader : public ProjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/JsonProjectWriter_8h.html b/6.5/api/Files/JsonProjectWriter_8h.html index 2e74bc04ca..5b5e0bf021 100644 --- a/6.5/api/Files/JsonProjectWriter_8h.html +++ b/6.5/api/Files/JsonProjectWriter_8h.html @@ -2455,7 +2455,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/JsonProjectWriter_8h.md b/6.5/api/Files/JsonProjectWriter_8h.md index 7d20da4517..3259017443 100644 --- a/6.5/api/Files/JsonProjectWriter_8h.md +++ b/6.5/api/Files/JsonProjectWriter_8h.md @@ -44,4 +44,4 @@ class JsonProjectWriter { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/KeyboardShortcuts_8h.html b/6.5/api/Files/KeyboardShortcuts_8h.html index 8a3d8b6667..b2e6d578d6 100644 --- a/6.5/api/Files/KeyboardShortcuts_8h.html +++ b/6.5/api/Files/KeyboardShortcuts_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // end namespace
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/KeyboardShortcuts_8h.md b/6.5/api/Files/KeyboardShortcuts_8h.md index 0d07246621..25a71be0f3 100644 --- a/6.5/api/Files/KeyboardShortcuts_8h.md +++ b/6.5/api/Files/KeyboardShortcuts_8h.md @@ -55,4 +55,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LandmarkItemDelegate_8h.html b/6.5/api/Files/LandmarkItemDelegate_8h.html index 409719cf9d..6410bbc36b 100644 --- a/6.5/api/Files/LandmarkItemDelegate_8h.html +++ b/6.5/api/Files/LandmarkItemDelegate_8h.html @@ -2487,7 +2487,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LandmarkItemDelegate_8h.md b/6.5/api/Files/LandmarkItemDelegate_8h.md index ec4cb7818a..11d6f64eda 100644 --- a/6.5/api/Files/LandmarkItemDelegate_8h.md +++ b/6.5/api/Files/LandmarkItemDelegate_8h.md @@ -76,4 +76,4 @@ class LandmarkItemDelegate : public QStyledItemDelegate { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LandmarkTableModel_8h.html b/6.5/api/Files/LandmarkTableModel_8h.html index 8ab5890cf8..e7857cfe04 100644 --- a/6.5/api/Files/LandmarkTableModel_8h.html +++ b/6.5/api/Files/LandmarkTableModel_8h.html @@ -2529,7 +2529,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LandmarkTableModel_8h.md b/6.5/api/Files/LandmarkTableModel_8h.md index 198a751f3e..e21e4d0e0a 100644 --- a/6.5/api/Files/LandmarkTableModel_8h.md +++ b/6.5/api/Files/LandmarkTableModel_8h.md @@ -118,4 +118,4 @@ class LandmarkTableModel : public QAbstractTableModel { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LandmarkWidget_8h.html b/6.5/api/Files/LandmarkWidget_8h.html index 84c82ff43e..e246968b5a 100644 --- a/6.5/api/Files/LandmarkWidget_8h.html +++ b/6.5/api/Files/LandmarkWidget_8h.html @@ -2500,7 +2500,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LandmarkWidget_8h.md b/6.5/api/Files/LandmarkWidget_8h.md index 8c04fb0d60..89b9324c03 100644 --- a/6.5/api/Files/LandmarkWidget_8h.md +++ b/6.5/api/Files/LandmarkWidget_8h.md @@ -90,4 +90,4 @@ class LandmarkWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LegacyCorrespondenceFunction_8h.html b/6.5/api/Files/LegacyCorrespondenceFunction_8h.html index 340005ce07..947a63946d 100644 --- a/6.5/api/Files/LegacyCorrespondenceFunction_8h.html +++ b/6.5/api/Files/LegacyCorrespondenceFunction_8h.html @@ -2590,7 +2590,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LegacyCorrespondenceFunction_8h.md b/6.5/api/Files/LegacyCorrespondenceFunction_8h.md index e0880997b4..6a51311a5a 100644 --- a/6.5/api/Files/LegacyCorrespondenceFunction_8h.md +++ b/6.5/api/Files/LegacyCorrespondenceFunction_8h.md @@ -179,4 +179,4 @@ class LegacyCorrespondenceFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LegacyMeshGenerator_8h.html b/6.5/api/Files/LegacyMeshGenerator_8h.html index 68249570df..1b8501ebdb 100644 --- a/6.5/api/Files/LegacyMeshGenerator_8h.html +++ b/6.5/api/Files/LegacyMeshGenerator_8h.html @@ -2496,7 +2496,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LegacyMeshGenerator_8h.md b/6.5/api/Files/LegacyMeshGenerator_8h.md index b5387fb804..abd0d0f22d 100644 --- a/6.5/api/Files/LegacyMeshGenerator_8h.md +++ b/6.5/api/Files/LegacyMeshGenerator_8h.md @@ -95,4 +95,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LegacyShapeMatrix_8h.html b/6.5/api/Files/LegacyShapeMatrix_8h.html index b3b9f7790a..be81842ae4 100644 --- a/6.5/api/Files/LegacyShapeMatrix_8h.html +++ b/6.5/api/Files/LegacyShapeMatrix_8h.html @@ -2579,7 +2579,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LegacyShapeMatrix_8h.md b/6.5/api/Files/LegacyShapeMatrix_8h.md index 9f15a6af21..ee5186bd59 100644 --- a/6.5/api/Files/LegacyShapeMatrix_8h.md +++ b/6.5/api/Files/LegacyShapeMatrix_8h.md @@ -168,4 +168,4 @@ class LegacyShapeMatrix : public vnl_matrix, public Observer { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Lightbox_8h.html b/6.5/api/Files/Lightbox_8h.html index ad512493c4..f66d9b0b2d 100644 --- a/6.5/api/Files/Lightbox_8h.html +++ b/6.5/api/Files/Lightbox_8h.html @@ -2592,7 +2592,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Lightbox_8h.md b/6.5/api/Files/Lightbox_8h.md index 303095ec86..6fdcad3a5b 100644 --- a/6.5/api/Files/Lightbox_8h.md +++ b/6.5/api/Files/Lightbox_8h.md @@ -181,4 +181,4 @@ class Lightbox : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LinearRegressionShapeMatrix_8h.html b/6.5/api/Files/LinearRegressionShapeMatrix_8h.html index 480b51dd72..e91ae2129d 100644 --- a/6.5/api/Files/LinearRegressionShapeMatrix_8h.html +++ b/6.5/api/Files/LinearRegressionShapeMatrix_8h.html @@ -2688,7 +2688,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LinearRegressionShapeMatrix_8h.md b/6.5/api/Files/LinearRegressionShapeMatrix_8h.md index a964ee91b2..89e2ee3c4d 100644 --- a/6.5/api/Files/LinearRegressionShapeMatrix_8h.md +++ b/6.5/api/Files/LinearRegressionShapeMatrix_8h.md @@ -277,4 +277,4 @@ class LinearRegressionShapeMatrix : public LegacyShapeMatrix { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/LogWindow_8h.html b/6.5/api/Files/LogWindow_8h.html index 9f7d86db03..0329f6e437 100644 --- a/6.5/api/Files/LogWindow_8h.html +++ b/6.5/api/Files/LogWindow_8h.html @@ -2469,7 +2469,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/LogWindow_8h.md b/6.5/api/Files/LogWindow_8h.md index 23d3279f53..2010653f64 100644 --- a/6.5/api/Files/LogWindow_8h.md +++ b/6.5/api/Files/LogWindow_8h.md @@ -58,4 +58,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Logging_8h.html b/6.5/api/Files/Logging_8h.html index ca4161c06f..623a1430b0 100644 --- a/6.5/api/Files/Logging_8h.html +++ b/6.5/api/Files/Logging_8h.html @@ -2803,7 +2803,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Logging_8h.md b/6.5/api/Files/Logging_8h.md index 90605e62f1..af11a230ed 100644 --- a/6.5/api/Files/Logging_8h.md +++ b/6.5/api/Files/Logging_8h.md @@ -298,4 +298,4 @@ class Logging { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeanCurvatureContainer_8h.html b/6.5/api/Files/MeanCurvatureContainer_8h.html index 28d6255358..4228fb37e2 100644 --- a/6.5/api/Files/MeanCurvatureContainer_8h.html +++ b/6.5/api/Files/MeanCurvatureContainer_8h.html @@ -2530,7 +2530,7 @@

    Source code

    #include "MeanCurvatureContainer.txx"
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeanCurvatureContainer_8h.md b/6.5/api/Files/MeanCurvatureContainer_8h.md index 2847814146..c03c56bccc 100644 --- a/6.5/api/Files/MeanCurvatureContainer_8h.md +++ b/6.5/api/Files/MeanCurvatureContainer_8h.md @@ -119,4 +119,4 @@ class MeanCurvatureContainer : public GenericContainerArray { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MemoryUsage_8h.html b/6.5/api/Files/MemoryUsage_8h.html index 5d553c7a82..311fb4a4c8 100644 --- a/6.5/api/Files/MemoryUsage_8h.html +++ b/6.5/api/Files/MemoryUsage_8h.html @@ -2455,7 +2455,7 @@

    Source code

    void process_mem_usage(double& vm_usage, double& resident_set);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MemoryUsage_8h.md b/6.5/api/Files/MemoryUsage_8h.md index 9ba14c4a2d..2e117a6c24 100644 --- a/6.5/api/Files/MemoryUsage_8h.md +++ b/6.5/api/Files/MemoryUsage_8h.md @@ -43,4 +43,4 @@ void process_mem_usage(double& vm_usage, double& resident_set); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshCache_8h.html b/6.5/api/Files/MeshCache_8h.html index c0a1ee32b2..8afcf6160d 100644 --- a/6.5/api/Files/MeshCache_8h.html +++ b/6.5/api/Files/MeshCache_8h.html @@ -2501,7 +2501,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshCache_8h.md b/6.5/api/Files/MeshCache_8h.md index 0593eb06c8..96609b1a8f 100644 --- a/6.5/api/Files/MeshCache_8h.md +++ b/6.5/api/Files/MeshCache_8h.md @@ -90,4 +90,4 @@ class MeshCache { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshComputeThickness_8h.html b/6.5/api/Files/MeshComputeThickness_8h.html index bae5d2bb18..b699ac9268 100644 --- a/6.5/api/Files/MeshComputeThickness_8h.html +++ b/6.5/api/Files/MeshComputeThickness_8h.html @@ -2433,7 +2433,7 @@

    Source code

    } // namespace shapeworks::mesh
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshComputeThickness_8h.md b/6.5/api/Files/MeshComputeThickness_8h.md index 1c2a86bd9e..e55d4f7f03 100644 --- a/6.5/api/Files/MeshComputeThickness_8h.md +++ b/6.5/api/Files/MeshComputeThickness_8h.md @@ -36,4 +36,4 @@ void compute_thickness(Mesh &mesh, Image &image, Image *dt, double max_dist, dou ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshDomain_8h.html b/6.5/api/Files/MeshDomain_8h.html index 1f617541cb..a0037cbb9f 100644 --- a/6.5/api/Files/MeshDomain_8h.html +++ b/6.5/api/Files/MeshDomain_8h.html @@ -2563,7 +2563,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshDomain_8h.md b/6.5/api/Files/MeshDomain_8h.md index c396be6d96..8ffbd8d6d0 100644 --- a/6.5/api/Files/MeshDomain_8h.md +++ b/6.5/api/Files/MeshDomain_8h.md @@ -152,4 +152,4 @@ class MeshDomain : public ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshGenerator_8h.html b/6.5/api/Files/MeshGenerator_8h.html index 08b8fbf02c..f56ea217bd 100644 --- a/6.5/api/Files/MeshGenerator_8h.html +++ b/6.5/api/Files/MeshGenerator_8h.html @@ -2508,7 +2508,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshGenerator_8h.md b/6.5/api/Files/MeshGenerator_8h.md index 69e76eb088..7b89bbcb60 100644 --- a/6.5/api/Files/MeshGenerator_8h.md +++ b/6.5/api/Files/MeshGenerator_8h.md @@ -90,4 +90,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshGeoEntry_8h.html b/6.5/api/Files/MeshGeoEntry_8h.html index 5b7f1cf8a9..aba46abe0f 100644 --- a/6.5/api/Files/MeshGeoEntry_8h.html +++ b/6.5/api/Files/MeshGeoEntry_8h.html @@ -2493,7 +2493,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshGeoEntry_8h.md b/6.5/api/Files/MeshGeoEntry_8h.md index 7c1dfa1c19..c4c4c226b0 100644 --- a/6.5/api/Files/MeshGeoEntry_8h.md +++ b/6.5/api/Files/MeshGeoEntry_8h.md @@ -82,4 +82,4 @@ struct MeshGeoEntry { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshGroup_8h.html b/6.5/api/Files/MeshGroup_8h.html index c6244ad2b0..1e295ca853 100644 --- a/6.5/api/Files/MeshGroup_8h.html +++ b/6.5/api/Files/MeshGroup_8h.html @@ -2470,7 +2470,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshGroup_8h.md b/6.5/api/Files/MeshGroup_8h.md index 564bb9ef5c..401bdd177d 100644 --- a/6.5/api/Files/MeshGroup_8h.md +++ b/6.5/api/Files/MeshGroup_8h.md @@ -59,4 +59,4 @@ class MeshGroup { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshManager_8h.html b/6.5/api/Files/MeshManager_8h.html index 2aa831ad43..c9c33b94d0 100644 --- a/6.5/api/Files/MeshManager_8h.html +++ b/6.5/api/Files/MeshManager_8h.html @@ -2527,7 +2527,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshManager_8h.md b/6.5/api/Files/MeshManager_8h.md index 8aae998eb4..c5b955c1cc 100644 --- a/6.5/api/Files/MeshManager_8h.md +++ b/6.5/api/Files/MeshManager_8h.md @@ -116,4 +116,4 @@ class MeshManager : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshSettings_8h.html b/6.5/api/Files/MeshSettings_8h.html index 240e90a275..b8b91fb6bd 100644 --- a/6.5/api/Files/MeshSettings_8h.html +++ b/6.5/api/Files/MeshSettings_8h.html @@ -2492,7 +2492,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshSettings_8h.md b/6.5/api/Files/MeshSettings_8h.md index a3b845e5c2..29bed402e7 100644 --- a/6.5/api/Files/MeshSettings_8h.md +++ b/6.5/api/Files/MeshSettings_8h.md @@ -64,4 +64,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshSlice_8h.html b/6.5/api/Files/MeshSlice_8h.html index 09b5ad6e7c..cee7b0cde4 100644 --- a/6.5/api/Files/MeshSlice_8h.html +++ b/6.5/api/Files/MeshSlice_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshSlice_8h.md b/6.5/api/Files/MeshSlice_8h.md index 90d9e0624b..adc280bf4a 100644 --- a/6.5/api/Files/MeshSlice_8h.md +++ b/6.5/api/Files/MeshSlice_8h.md @@ -67,4 +67,4 @@ class MeshSlice { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshUtils_8h.html b/6.5/api/Files/MeshUtils_8h.html index d94172626c..70527540b3 100644 --- a/6.5/api/Files/MeshUtils_8h.html +++ b/6.5/api/Files/MeshUtils_8h.html @@ -2490,7 +2490,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshUtils_8h.md b/6.5/api/Files/MeshUtils_8h.md index 91f48a8dcb..bf35555bd6 100644 --- a/6.5/api/Files/MeshUtils_8h.md +++ b/6.5/api/Files/MeshUtils_8h.md @@ -79,4 +79,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshWarper_8h.html b/6.5/api/Files/MeshWarper_8h.html index 62e40c329a..185287712b 100644 --- a/6.5/api/Files/MeshWarper_8h.html +++ b/6.5/api/Files/MeshWarper_8h.html @@ -2538,7 +2538,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshWarper_8h.md b/6.5/api/Files/MeshWarper_8h.md index a3fec56a1a..8860cf8d0c 100644 --- a/6.5/api/Files/MeshWarper_8h.md +++ b/6.5/api/Files/MeshWarper_8h.md @@ -123,4 +123,4 @@ class MeshWarper { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshWorkQueue_8h.html b/6.5/api/Files/MeshWorkQueue_8h.html index b7ff5d0267..2048542931 100644 --- a/6.5/api/Files/MeshWorkQueue_8h.html +++ b/6.5/api/Files/MeshWorkQueue_8h.html @@ -2552,7 +2552,7 @@

    Source code

    Q_DECLARE_METATYPE(shapeworks::MeshWorkItem);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshWorkQueue_8h.md b/6.5/api/Files/MeshWorkQueue_8h.md index fa32cdc2c0..01d9dd2f12 100644 --- a/6.5/api/Files/MeshWorkQueue_8h.md +++ b/6.5/api/Files/MeshWorkQueue_8h.md @@ -107,4 +107,4 @@ Q_DECLARE_METATYPE(shapeworks::MeshWorkItem); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshWorker_8h.html b/6.5/api/Files/MeshWorker_8h.html index 988eb7e432..e95021a32d 100644 --- a/6.5/api/Files/MeshWorker_8h.html +++ b/6.5/api/Files/MeshWorker_8h.html @@ -2533,7 +2533,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshWorker_8h.md b/6.5/api/Files/MeshWorker_8h.md index 3a1d3de2ba..507964551f 100644 --- a/6.5/api/Files/MeshWorker_8h.md +++ b/6.5/api/Files/MeshWorker_8h.md @@ -87,4 +87,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MeshWrapper_8h.html b/6.5/api/Files/MeshWrapper_8h.html index d00ff1ab3f..275644c4dc 100644 --- a/6.5/api/Files/MeshWrapper_8h.html +++ b/6.5/api/Files/MeshWrapper_8h.html @@ -2492,7 +2492,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MeshWrapper_8h.md b/6.5/api/Files/MeshWrapper_8h.md index bf96ac7e66..7d9bd7fbf4 100644 --- a/6.5/api/Files/MeshWrapper_8h.md +++ b/6.5/api/Files/MeshWrapper_8h.md @@ -81,4 +81,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Mesh_8h.html b/6.5/api/Files/Mesh_8h.html index afb6aae7c5..46921c8b16 100644 --- a/6.5/api/Files/Mesh_8h.html +++ b/6.5/api/Files/Mesh_8h.html @@ -2687,7 +2687,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Mesh_8h.md b/6.5/api/Files/Mesh_8h.md index 16296b37e0..8868a23d07 100644 --- a/6.5/api/Files/Mesh_8h.md +++ b/6.5/api/Files/Mesh_8h.md @@ -273,4 +273,4 @@ class MeshReader { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/MixedEffectsShapeMatrix_8h.html b/6.5/api/Files/MixedEffectsShapeMatrix_8h.html index 6c4f289b94..b2b256ed2a 100644 --- a/6.5/api/Files/MixedEffectsShapeMatrix_8h.html +++ b/6.5/api/Files/MixedEffectsShapeMatrix_8h.html @@ -2810,7 +2810,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/MixedEffectsShapeMatrix_8h.md b/6.5/api/Files/MixedEffectsShapeMatrix_8h.md index 309d2e39e9..0fc7c7761e 100644 --- a/6.5/api/Files/MixedEffectsShapeMatrix_8h.md +++ b/6.5/api/Files/MixedEffectsShapeMatrix_8h.md @@ -399,4 +399,4 @@ class MixedEffectsShapeMatrix : public LegacyShapeMatrix { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Module_8dox.html b/6.5/api/Files/Module_8dox.html index 5941f10aea..9d5bd54005 100644 --- a/6.5/api/Files/Module_8dox.html +++ b/6.5/api/Files/Module_8dox.html @@ -2382,7 +2382,7 @@

    Module.dox


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Module_8dox.md b/6.5/api/Files/Module_8dox.md index 9b1374a572..f9e7a23290 100644 --- a/6.5/api/Files/Module_8dox.md +++ b/6.5/api/Files/Module_8dox.md @@ -14,4 +14,4 @@ title: Module.dox ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/NetworkAnalysisJob_8h.html b/6.5/api/Files/NetworkAnalysisJob_8h.html index c980abf92b..cf62ae14a1 100644 --- a/6.5/api/Files/NetworkAnalysisJob_8h.html +++ b/6.5/api/Files/NetworkAnalysisJob_8h.html @@ -2476,7 +2476,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/NetworkAnalysisJob_8h.md b/6.5/api/Files/NetworkAnalysisJob_8h.md index bf6e198d6c..c6b8f65745 100644 --- a/6.5/api/Files/NetworkAnalysisJob_8h.md +++ b/6.5/api/Files/NetworkAnalysisJob_8h.md @@ -65,4 +65,4 @@ class NetworkAnalysisJob : public Job { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ObjectReader_8h.html b/6.5/api/Files/ObjectReader_8h.html index d54165ab48..3a8f8b16cb 100644 --- a/6.5/api/Files/ObjectReader_8h.html +++ b/6.5/api/Files/ObjectReader_8h.html @@ -2474,7 +2474,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ObjectReader_8h.md b/6.5/api/Files/ObjectReader_8h.md index 1e08c06e8b..6ffed938b7 100644 --- a/6.5/api/Files/ObjectReader_8h.md +++ b/6.5/api/Files/ObjectReader_8h.md @@ -77,4 +77,4 @@ class ObjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ObjectWriter_8h.html b/6.5/api/Files/ObjectWriter_8h.html index 0f4f2d1cfa..fdeb714f7b 100644 --- a/6.5/api/Files/ObjectWriter_8h.html +++ b/6.5/api/Files/ObjectWriter_8h.html @@ -2476,7 +2476,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ObjectWriter_8h.md b/6.5/api/Files/ObjectWriter_8h.md index bf138d1410..18ff9e90ef 100644 --- a/6.5/api/Files/ObjectWriter_8h.md +++ b/6.5/api/Files/ObjectWriter_8h.md @@ -79,4 +79,4 @@ class ObjectWriter { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Observer_8h.html b/6.5/api/Files/Observer_8h.html index 3df1855fa6..30e40de851 100644 --- a/6.5/api/Files/Observer_8h.html +++ b/6.5/api/Files/Observer_8h.html @@ -2505,7 +2505,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Observer_8h.md b/6.5/api/Files/Observer_8h.md index a3045547ab..8b06b08aad 100644 --- a/6.5/api/Files/Observer_8h.md +++ b/6.5/api/Files/Observer_8h.md @@ -91,4 +91,4 @@ class Observer : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/OptimizationVisualizer_8h.html b/6.5/api/Files/OptimizationVisualizer_8h.html index d76b5edaff..f5cea9a0f9 100644 --- a/6.5/api/Files/OptimizationVisualizer_8h.html +++ b/6.5/api/Files/OptimizationVisualizer_8h.html @@ -2505,7 +2505,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/OptimizationVisualizer_8h.md b/6.5/api/Files/OptimizationVisualizer_8h.md index 7fa133bfdd..2f85d8c469 100644 --- a/6.5/api/Files/OptimizationVisualizer_8h.md +++ b/6.5/api/Files/OptimizationVisualizer_8h.md @@ -94,4 +94,4 @@ class OptimizationVisualizer { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/OptimizeParameterFile_8h.html b/6.5/api/Files/OptimizeParameterFile_8h.html index e78d237e73..68b52461c5 100644 --- a/6.5/api/Files/OptimizeParameterFile_8h.html +++ b/6.5/api/Files/OptimizeParameterFile_8h.html @@ -2499,7 +2499,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/OptimizeParameterFile_8h.md b/6.5/api/Files/OptimizeParameterFile_8h.md index 253dd605a0..a2484167cf 100644 --- a/6.5/api/Files/OptimizeParameterFile_8h.md +++ b/6.5/api/Files/OptimizeParameterFile_8h.md @@ -88,4 +88,4 @@ class OptimizeParameterFile { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/OptimizeParameters_8h.html b/6.5/api/Files/OptimizeParameters_8h.html index a7099d247a..f298d0fb78 100644 --- a/6.5/api/Files/OptimizeParameters_8h.html +++ b/6.5/api/Files/OptimizeParameters_8h.html @@ -2581,7 +2581,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/OptimizeParameters_8h.md b/6.5/api/Files/OptimizeParameters_8h.md index edaf69b463..37d8fa720c 100644 --- a/6.5/api/Files/OptimizeParameters_8h.md +++ b/6.5/api/Files/OptimizeParameters_8h.md @@ -170,4 +170,4 @@ class OptimizeParameters { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/OptimizeTool_8h.html b/6.5/api/Files/OptimizeTool_8h.html index 21cceb83fc..09fe52dd3f 100644 --- a/6.5/api/Files/OptimizeTool_8h.html +++ b/6.5/api/Files/OptimizeTool_8h.html @@ -2531,7 +2531,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/OptimizeTool_8h.md b/6.5/api/Files/OptimizeTool_8h.md index c61efccd2d..1e02eaf170 100644 --- a/6.5/api/Files/OptimizeTool_8h.md +++ b/6.5/api/Files/OptimizeTool_8h.md @@ -120,4 +120,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Optimize_8h.html b/6.5/api/Files/Optimize_8h.html index a2dcde171b..dc68e7eb6f 100644 --- a/6.5/api/Files/Optimize_8h.html +++ b/6.5/api/Files/Optimize_8h.html @@ -2812,7 +2812,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Optimize_8h.md b/6.5/api/Files/Optimize_8h.md index d0d14ae759..426da1212e 100644 --- a/6.5/api/Files/Optimize_8h.md +++ b/6.5/api/Files/Optimize_8h.md @@ -398,4 +398,4 @@ class Optimize { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/PaintWidget_8h.html b/6.5/api/Files/PaintWidget_8h.html index 94279969e3..4972d8fa16 100644 --- a/6.5/api/Files/PaintWidget_8h.html +++ b/6.5/api/Files/PaintWidget_8h.html @@ -2552,7 +2552,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/PaintWidget_8h.md b/6.5/api/Files/PaintWidget_8h.md index fcaae6eabb..a37e71753e 100644 --- a/6.5/api/Files/PaintWidget_8h.md +++ b/6.5/api/Files/PaintWidget_8h.md @@ -141,4 +141,4 @@ class PaintWidget : public vtkAbstractWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Parameters_8h.html b/6.5/api/Files/Parameters_8h.html index 5bf9acda1e..adc45c0b57 100644 --- a/6.5/api/Files/Parameters_8h.html +++ b/6.5/api/Files/Parameters_8h.html @@ -2485,7 +2485,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Parameters_8h.md b/6.5/api/Files/Parameters_8h.md index 659c9709d6..33a4a467fd 100644 --- a/6.5/api/Files/Parameters_8h.md +++ b/6.5/api/Files/Parameters_8h.md @@ -74,4 +74,4 @@ class Parameters { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleAreaJob_8h.html b/6.5/api/Files/ParticleAreaJob_8h.html index 2b26bc3897..11d5571f5f 100644 --- a/6.5/api/Files/ParticleAreaJob_8h.html +++ b/6.5/api/Files/ParticleAreaJob_8h.html @@ -2471,7 +2471,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleAreaJob_8h.md b/6.5/api/Files/ParticleAreaJob_8h.md index f8534d2a22..50a6be7b3b 100644 --- a/6.5/api/Files/ParticleAreaJob_8h.md +++ b/6.5/api/Files/ParticleAreaJob_8h.md @@ -60,4 +60,4 @@ class ParticleAreaJob : public Job { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleAreaPanel_8h.html b/6.5/api/Files/ParticleAreaPanel_8h.html index 63dd47b19d..64a8b37aa0 100644 --- a/6.5/api/Files/ParticleAreaPanel_8h.html +++ b/6.5/api/Files/ParticleAreaPanel_8h.html @@ -2509,7 +2509,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleAreaPanel_8h.md b/6.5/api/Files/ParticleAreaPanel_8h.md index 849d3ba427..404673d0cf 100644 --- a/6.5/api/Files/ParticleAreaPanel_8h.md +++ b/6.5/api/Files/ParticleAreaPanel_8h.md @@ -98,4 +98,4 @@ class ParticleAreaPanel : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleArea_8h.html b/6.5/api/Files/ParticleArea_8h.html index 116a214ae1..779d797828 100644 --- a/6.5/api/Files/ParticleArea_8h.html +++ b/6.5/api/Files/ParticleArea_8h.html @@ -2468,7 +2468,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleArea_8h.md b/6.5/api/Files/ParticleArea_8h.md index 560b157d98..4e7035c23f 100644 --- a/6.5/api/Files/ParticleArea_8h.md +++ b/6.5/api/Files/ParticleArea_8h.md @@ -57,4 +57,4 @@ class ParticleArea { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleColors_8h.html b/6.5/api/Files/ParticleColors_8h.html index 0d980c508c..fd5b821c1e 100644 --- a/6.5/api/Files/ParticleColors_8h.html +++ b/6.5/api/Files/ParticleColors_8h.html @@ -2461,7 +2461,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleColors_8h.md b/6.5/api/Files/ParticleColors_8h.md index cfe2fb9832..9343014c73 100644 --- a/6.5/api/Files/ParticleColors_8h.md +++ b/6.5/api/Files/ParticleColors_8h.md @@ -50,4 +50,4 @@ class ParticleColors : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleDomain_8h.html b/6.5/api/Files/ParticleDomain_8h.html index 156edac982..1b3eac68ee 100644 --- a/6.5/api/Files/ParticleDomain_8h.html +++ b/6.5/api/Files/ParticleDomain_8h.html @@ -2550,7 +2550,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleDomain_8h.md b/6.5/api/Files/ParticleDomain_8h.md index ba498e01fc..1f2ed19e1a 100644 --- a/6.5/api/Files/ParticleDomain_8h.md +++ b/6.5/api/Files/ParticleDomain_8h.md @@ -139,4 +139,4 @@ class ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleEvents_8h.html b/6.5/api/Files/ParticleEvents_8h.html index 4499ab3dbc..f9809fd8d4 100644 --- a/6.5/api/Files/ParticleEvents_8h.html +++ b/6.5/api/Files/ParticleEvents_8h.html @@ -2491,7 +2491,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleEvents_8h.md b/6.5/api/Files/ParticleEvents_8h.md index 99ea61cdac..2b3a1a9c30 100644 --- a/6.5/api/Files/ParticleEvents_8h.md +++ b/6.5/api/Files/ParticleEvents_8h.md @@ -80,4 +80,4 @@ itkEventMacro(ParticlePositionRemoveEvent, ParticleEvent); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleFile_8h.html b/6.5/api/Files/ParticleFile_8h.html index 8faffe3abc..4920e3b362 100644 --- a/6.5/api/Files/ParticleFile_8h.html +++ b/6.5/api/Files/ParticleFile_8h.html @@ -2447,7 +2447,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleFile_8h.md b/6.5/api/Files/ParticleFile_8h.md index fb2d44a0c1..f9b6aa0702 100644 --- a/6.5/api/Files/ParticleFile_8h.md +++ b/6.5/api/Files/ParticleFile_8h.md @@ -50,4 +50,4 @@ void write_particles_from_vector(std::string filename, std::vectorSource code #include "ParticleGaussianModeWriter.txx"
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleGaussianModeWriter_8h.md b/6.5/api/Files/ParticleGaussianModeWriter_8h.md index bb37cc6d1a..b2af2aa7ae 100644 --- a/6.5/api/Files/ParticleGaussianModeWriter_8h.md +++ b/6.5/api/Files/ParticleGaussianModeWriter_8h.md @@ -88,4 +88,4 @@ class ParticleGaussianModeWriter : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleGoodBadAssessment_8h.html b/6.5/api/Files/ParticleGoodBadAssessment_8h.html index 781ff113e7..e4c16c41bc 100644 --- a/6.5/api/Files/ParticleGoodBadAssessment_8h.html +++ b/6.5/api/Files/ParticleGoodBadAssessment_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleGoodBadAssessment_8h.md b/6.5/api/Files/ParticleGoodBadAssessment_8h.md index f99f49c080..0469db96ad 100644 --- a/6.5/api/Files/ParticleGoodBadAssessment_8h.md +++ b/6.5/api/Files/ParticleGoodBadAssessment_8h.md @@ -55,4 +55,4 @@ class ParticleGoodBadAssessment { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleNeighborhood_8h.html b/6.5/api/Files/ParticleNeighborhood_8h.html index 0fc2ff8984..72c0cdf486 100644 --- a/6.5/api/Files/ParticleNeighborhood_8h.html +++ b/6.5/api/Files/ParticleNeighborhood_8h.html @@ -2520,7 +2520,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleNeighborhood_8h.md b/6.5/api/Files/ParticleNeighborhood_8h.md index 872d00419a..ebc1da304a 100644 --- a/6.5/api/Files/ParticleNeighborhood_8h.md +++ b/6.5/api/Files/ParticleNeighborhood_8h.md @@ -109,4 +109,4 @@ class ParticleNeighborhood : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleNormalEvaluationJob_8h.html b/6.5/api/Files/ParticleNormalEvaluationJob_8h.html index cf29d71de3..e274f9a110 100644 --- a/6.5/api/Files/ParticleNormalEvaluationJob_8h.html +++ b/6.5/api/Files/ParticleNormalEvaluationJob_8h.html @@ -2470,7 +2470,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleNormalEvaluationJob_8h.md b/6.5/api/Files/ParticleNormalEvaluationJob_8h.md index c33bcc6351..3ef6858ed3 100644 --- a/6.5/api/Files/ParticleNormalEvaluationJob_8h.md +++ b/6.5/api/Files/ParticleNormalEvaluationJob_8h.md @@ -59,4 +59,4 @@ Q_SIGNALS: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleNormalEvaluation_8h.html b/6.5/api/Files/ParticleNormalEvaluation_8h.html index 3936f34845..6239f1ee8c 100644 --- a/6.5/api/Files/ParticleNormalEvaluation_8h.html +++ b/6.5/api/Files/ParticleNormalEvaluation_8h.html @@ -2465,7 +2465,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleNormalEvaluation_8h.md b/6.5/api/Files/ParticleNormalEvaluation_8h.md index 675e40027e..b046a767ae 100644 --- a/6.5/api/Files/ParticleNormalEvaluation_8h.md +++ b/6.5/api/Files/ParticleNormalEvaluation_8h.md @@ -54,4 +54,4 @@ class ParticleNormalEvaluation { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticlePointIndexPair_8h.html b/6.5/api/Files/ParticlePointIndexPair_8h.html index fd7d6f61ca..9406ddf96c 100644 --- a/6.5/api/Files/ParticlePointIndexPair_8h.html +++ b/6.5/api/Files/ParticlePointIndexPair_8h.html @@ -2463,7 +2463,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticlePointIndexPair_8h.md b/6.5/api/Files/ParticlePointIndexPair_8h.md index 2630d82111..3dae835083 100644 --- a/6.5/api/Files/ParticlePointIndexPair_8h.md +++ b/6.5/api/Files/ParticlePointIndexPair_8h.md @@ -52,4 +52,4 @@ struct ParticlePointIndexPair { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleRegionDomain_8h.html b/6.5/api/Files/ParticleRegionDomain_8h.html index 4b81424efd..931f782549 100644 --- a/6.5/api/Files/ParticleRegionDomain_8h.html +++ b/6.5/api/Files/ParticleRegionDomain_8h.html @@ -2500,7 +2500,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleRegionDomain_8h.md b/6.5/api/Files/ParticleRegionDomain_8h.md index 7a4a8c6913..9235205074 100644 --- a/6.5/api/Files/ParticleRegionDomain_8h.md +++ b/6.5/api/Files/ParticleRegionDomain_8h.md @@ -89,4 +89,4 @@ class ParticleRegionDomain : public ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleRegionNeighborhood_8h.html b/6.5/api/Files/ParticleRegionNeighborhood_8h.html index 9943edb8b4..a2988e92d5 100644 --- a/6.5/api/Files/ParticleRegionNeighborhood_8h.html +++ b/6.5/api/Files/ParticleRegionNeighborhood_8h.html @@ -2531,7 +2531,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleRegionNeighborhood_8h.md b/6.5/api/Files/ParticleRegionNeighborhood_8h.md index 2e386b04d0..43c4d943b8 100644 --- a/6.5/api/Files/ParticleRegionNeighborhood_8h.md +++ b/6.5/api/Files/ParticleRegionNeighborhood_8h.md @@ -120,4 +120,4 @@ class ParticleRegionNeighborhood : public ParticleNeighborhood { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleShapeStatistics_8h.html b/6.5/api/Files/ParticleShapeStatistics_8h.html index a499ab3963..65e4e7b420 100644 --- a/6.5/api/Files/ParticleShapeStatistics_8h.html +++ b/6.5/api/Files/ParticleShapeStatistics_8h.html @@ -2605,7 +2605,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleShapeStatistics_8h.md b/6.5/api/Files/ParticleShapeStatistics_8h.md index 73b6a14694..338e4be688 100644 --- a/6.5/api/Files/ParticleShapeStatistics_8h.md +++ b/6.5/api/Files/ParticleShapeStatistics_8h.md @@ -194,4 +194,4 @@ class ParticleShapeStatistics { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleSurfaceNeighborhood_8h.html b/6.5/api/Files/ParticleSurfaceNeighborhood_8h.html index ce58db246f..1ece6c492d 100644 --- a/6.5/api/Files/ParticleSurfaceNeighborhood_8h.html +++ b/6.5/api/Files/ParticleSurfaceNeighborhood_8h.html @@ -2502,7 +2502,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleSurfaceNeighborhood_8h.md b/6.5/api/Files/ParticleSurfaceNeighborhood_8h.md index d6291e942e..80618d89ff 100644 --- a/6.5/api/Files/ParticleSurfaceNeighborhood_8h.md +++ b/6.5/api/Files/ParticleSurfaceNeighborhood_8h.md @@ -91,4 +91,4 @@ class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleSystemEvaluation_8h.html b/6.5/api/Files/ParticleSystemEvaluation_8h.html index 672df20f1d..b8020303fd 100644 --- a/6.5/api/Files/ParticleSystemEvaluation_8h.html +++ b/6.5/api/Files/ParticleSystemEvaluation_8h.html @@ -2479,7 +2479,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleSystemEvaluation_8h.md b/6.5/api/Files/ParticleSystemEvaluation_8h.md index d157f23f6d..020ca61052 100644 --- a/6.5/api/Files/ParticleSystemEvaluation_8h.md +++ b/6.5/api/Files/ParticleSystemEvaluation_8h.md @@ -68,4 +68,4 @@ class ParticleSystemEvaluation { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ParticleSystem_8h.html b/6.5/api/Files/ParticleSystem_8h.html index d4a1916ea5..d45b268c0f 100644 --- a/6.5/api/Files/ParticleSystem_8h.html +++ b/6.5/api/Files/ParticleSystem_8h.html @@ -2734,7 +2734,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ParticleSystem_8h.md b/6.5/api/Files/ParticleSystem_8h.md index 040bc8e991..3b120d9239 100644 --- a/6.5/api/Files/ParticleSystem_8h.md +++ b/6.5/api/Files/ParticleSystem_8h.md @@ -323,4 +323,4 @@ class ParticleSystem : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Particles_8h.html b/6.5/api/Files/Particles_8h.html index ac6e29f4b8..abf9b63d56 100644 --- a/6.5/api/Files/Particles_8h.html +++ b/6.5/api/Files/Particles_8h.html @@ -2510,7 +2510,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Particles_8h.md b/6.5/api/Files/Particles_8h.md index 3bb7e7a484..a760d474ff 100644 --- a/6.5/api/Files/Particles_8h.md +++ b/6.5/api/Files/Particles_8h.md @@ -99,4 +99,4 @@ class Particles { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/PlaneConstraint_8h.html b/6.5/api/Files/PlaneConstraint_8h.html index e5c45bd61a..13820734c2 100644 --- a/6.5/api/Files/PlaneConstraint_8h.html +++ b/6.5/api/Files/PlaneConstraint_8h.html @@ -2488,7 +2488,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/PlaneConstraint_8h.md b/6.5/api/Files/PlaneConstraint_8h.md index f2b816cc13..5fd33eff96 100644 --- a/6.5/api/Files/PlaneConstraint_8h.md +++ b/6.5/api/Files/PlaneConstraint_8h.md @@ -77,4 +77,4 @@ class PlaneConstraint : public Constraint { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/PlaneWidget_8h.html b/6.5/api/Files/PlaneWidget_8h.html index 8f2c573c97..260657a2d3 100644 --- a/6.5/api/Files/PlaneWidget_8h.html +++ b/6.5/api/Files/PlaneWidget_8h.html @@ -2516,7 +2516,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/PlaneWidget_8h.md b/6.5/api/Files/PlaneWidget_8h.md index 82b9328885..3fc2b22047 100644 --- a/6.5/api/Files/PlaneWidget_8h.md +++ b/6.5/api/Files/PlaneWidget_8h.md @@ -106,4 +106,4 @@ class PlaneWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/PowerOfTwoPointTree_8h.html b/6.5/api/Files/PowerOfTwoPointTree_8h.html index a1fac8313d..7a142cf033 100644 --- a/6.5/api/Files/PowerOfTwoPointTree_8h.html +++ b/6.5/api/Files/PowerOfTwoPointTree_8h.html @@ -2627,7 +2627,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/PowerOfTwoPointTree_8h.md b/6.5/api/Files/PowerOfTwoPointTree_8h.md index 78aad0f77a..5cd0864799 100644 --- a/6.5/api/Files/PowerOfTwoPointTree_8h.md +++ b/6.5/api/Files/PowerOfTwoPointTree_8h.md @@ -207,4 +207,4 @@ class PowerOfTwoPointTree : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/PreferencesWindow_8h.html b/6.5/api/Files/PreferencesWindow_8h.html index e6613d974d..1dbad4164f 100644 --- a/6.5/api/Files/PreferencesWindow_8h.html +++ b/6.5/api/Files/PreferencesWindow_8h.html @@ -2492,7 +2492,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/PreferencesWindow_8h.md b/6.5/api/Files/PreferencesWindow_8h.md index a899842d43..8c4c3a9f89 100644 --- a/6.5/api/Files/PreferencesWindow_8h.md +++ b/6.5/api/Files/PreferencesWindow_8h.md @@ -81,4 +81,4 @@ class PreferencesWindow : public QDialog { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Preferences_8h.html b/6.5/api/Files/Preferences_8h.html index c048f975a4..392700c811 100644 --- a/6.5/api/Files/Preferences_8h.html +++ b/6.5/api/Files/Preferences_8h.html @@ -2567,7 +2567,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Preferences_8h.md b/6.5/api/Files/Preferences_8h.md index 9ba66f5406..10818b8516 100644 --- a/6.5/api/Files/Preferences_8h.md +++ b/6.5/api/Files/Preferences_8h.md @@ -170,4 +170,4 @@ class Preferences : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Procrustes3D_8h.html b/6.5/api/Files/Procrustes3D_8h.html index 7219828a08..4e894bdc4a 100644 --- a/6.5/api/Files/Procrustes3D_8h.html +++ b/6.5/api/Files/Procrustes3D_8h.html @@ -2512,7 +2512,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Procrustes3D_8h.md b/6.5/api/Files/Procrustes3D_8h.md index f145061a97..3546c67919 100644 --- a/6.5/api/Files/Procrustes3D_8h.md +++ b/6.5/api/Files/Procrustes3D_8h.md @@ -112,4 +112,4 @@ class Procrustes3D { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ProcrustesRegistration_8h.html b/6.5/api/Files/ProcrustesRegistration_8h.html index c384a4c609..fa6908f381 100644 --- a/6.5/api/Files/ProcrustesRegistration_8h.html +++ b/6.5/api/Files/ProcrustesRegistration_8h.html @@ -2479,7 +2479,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ProcrustesRegistration_8h.md b/6.5/api/Files/ProcrustesRegistration_8h.md index 09ff9729f2..2d8110d11b 100644 --- a/6.5/api/Files/ProcrustesRegistration_8h.md +++ b/6.5/api/Files/ProcrustesRegistration_8h.md @@ -68,4 +68,4 @@ class ProcrustesRegistration { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ProjectReader_8h.html b/6.5/api/Files/ProjectReader_8h.html index 239a63aa8d..f8a373a819 100644 --- a/6.5/api/Files/ProjectReader_8h.html +++ b/6.5/api/Files/ProjectReader_8h.html @@ -2482,7 +2482,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ProjectReader_8h.md b/6.5/api/Files/ProjectReader_8h.md index b71b1bb375..e324895aaa 100644 --- a/6.5/api/Files/ProjectReader_8h.md +++ b/6.5/api/Files/ProjectReader_8h.md @@ -71,4 +71,4 @@ class ProjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ProjectUtils_8h.html b/6.5/api/Files/ProjectUtils_8h.html index 2fe267eb5f..68c37141d5 100644 --- a/6.5/api/Files/ProjectUtils_8h.html +++ b/6.5/api/Files/ProjectUtils_8h.html @@ -2546,7 +2546,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ProjectUtils_8h.md b/6.5/api/Files/ProjectUtils_8h.md index b15da30cb9..da68a30dcf 100644 --- a/6.5/api/Files/ProjectUtils_8h.md +++ b/6.5/api/Files/ProjectUtils_8h.md @@ -129,4 +129,4 @@ class ProjectUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Project_8h.html b/6.5/api/Files/Project_8h.html index cf7868f008..b7d3bfb379 100644 --- a/6.5/api/Files/Project_8h.html +++ b/6.5/api/Files/Project_8h.html @@ -2598,7 +2598,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Project_8h.md b/6.5/api/Files/Project_8h.md index 5c87fa97bf..ccd0ff1c31 100644 --- a/6.5/api/Files/Project_8h.md +++ b/6.5/api/Files/Project_8h.md @@ -184,4 +184,4 @@ class Project { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/PythonAnalyze_8h.html b/6.5/api/Files/PythonAnalyze_8h.html index 80b0513956..011f16619e 100644 --- a/6.5/api/Files/PythonAnalyze_8h.html +++ b/6.5/api/Files/PythonAnalyze_8h.html @@ -2452,7 +2452,7 @@

    Source code

    void define_python_analyze(pybind11::module_ m);
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/PythonAnalyze_8h.md b/6.5/api/Files/PythonAnalyze_8h.md index 9de03843bc..fadb7bcd32 100644 --- a/6.5/api/Files/PythonAnalyze_8h.md +++ b/6.5/api/Files/PythonAnalyze_8h.md @@ -40,4 +40,4 @@ void define_python_analyze(pybind11::module_ m); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/PythonWorker_8h.html b/6.5/api/Files/PythonWorker_8h.html index e949839b0b..d1a704a652 100644 --- a/6.5/api/Files/PythonWorker_8h.html +++ b/6.5/api/Files/PythonWorker_8h.html @@ -2503,7 +2503,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/PythonWorker_8h.md b/6.5/api/Files/PythonWorker_8h.md index e1d5fd92c6..9d2f8b0b99 100644 --- a/6.5/api/Files/PythonWorker_8h.md +++ b/6.5/api/Files/PythonWorker_8h.md @@ -92,4 +92,4 @@ class PythonWorker : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/QMeshWarper_8h.html b/6.5/api/Files/QMeshWarper_8h.html index ca0bb6ac84..1b95e761ba 100644 --- a/6.5/api/Files/QMeshWarper_8h.html +++ b/6.5/api/Files/QMeshWarper_8h.html @@ -2470,7 +2470,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/QMeshWarper_8h.md b/6.5/api/Files/QMeshWarper_8h.md index 311deca9ec..f0a08b46bf 100644 --- a/6.5/api/Files/QMeshWarper_8h.md +++ b/6.5/api/Files/QMeshWarper_8h.md @@ -59,4 +59,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/QOptimize_8h.html b/6.5/api/Files/QOptimize_8h.html index e8309bdf47..ab5f1bd589 100644 --- a/6.5/api/Files/QOptimize_8h.html +++ b/6.5/api/Files/QOptimize_8h.html @@ -2486,7 +2486,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/QOptimize_8h.md b/6.5/api/Files/QOptimize_8h.md index 49ea65ee31..1da189e1c3 100644 --- a/6.5/api/Files/QOptimize_8h.md +++ b/6.5/api/Files/QOptimize_8h.md @@ -75,4 +75,4 @@ class QOptimize : public QObject, public Optimize { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ReconstructSurface_8h.html b/6.5/api/Files/ReconstructSurface_8h.html index 7f795701ad..9b747c573b 100644 --- a/6.5/api/Files/ReconstructSurface_8h.html +++ b/6.5/api/Files/ReconstructSurface_8h.html @@ -2566,7 +2566,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ReconstructSurface_8h.md b/6.5/api/Files/ReconstructSurface_8h.md index 2fc2865374..1b80622614 100644 --- a/6.5/api/Files/ReconstructSurface_8h.md +++ b/6.5/api/Files/ReconstructSurface_8h.md @@ -155,4 +155,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Reconstruction_8h.html b/6.5/api/Files/Reconstruction_8h.html index c6a07c69fa..68aef9eea1 100644 --- a/6.5/api/Files/Reconstruction_8h.html +++ b/6.5/api/Files/Reconstruction_8h.html @@ -2655,7 +2655,7 @@

    Source code

    #endif // !__RECONSTRUCTION_H__
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Reconstruction_8h.md b/6.5/api/Files/Reconstruction_8h.md index e0319ff5cf..b99c429a25 100644 --- a/6.5/api/Files/Reconstruction_8h.md +++ b/6.5/api/Files/Reconstruction_8h.md @@ -241,4 +241,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Region_8h.html b/6.5/api/Files/Region_8h.html index 1d6c94aef0..04a11c8caa 100644 --- a/6.5/api/Files/Region_8h.html +++ b/6.5/api/Files/Region_8h.html @@ -2545,7 +2545,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Region_8h.md b/6.5/api/Files/Region_8h.md index 1f65c9f9eb..f3e5ee867a 100644 --- a/6.5/api/Files/Region_8h.md +++ b/6.5/api/Files/Region_8h.md @@ -131,4 +131,4 @@ std::ostream &operator<<(std::ostream &os, const PhysicalRegion ®ion); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Sampler_8h.html b/6.5/api/Files/Sampler_8h.html index 27a9fb53df..c9036c8aa7 100644 --- a/6.5/api/Files/Sampler_8h.html +++ b/6.5/api/Files/Sampler_8h.html @@ -2795,7 +2795,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Sampler_8h.md b/6.5/api/Files/Sampler_8h.md index 22c852f086..7a0474548b 100644 --- a/6.5/api/Files/Sampler_8h.md +++ b/6.5/api/Files/Sampler_8h.md @@ -378,4 +378,4 @@ class Sampler { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/SamplingFunction_8h.html b/6.5/api/Files/SamplingFunction_8h.html index 4cc6afa47b..878e92beea 100644 --- a/6.5/api/Files/SamplingFunction_8h.html +++ b/6.5/api/Files/SamplingFunction_8h.html @@ -2548,7 +2548,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/SamplingFunction_8h.md b/6.5/api/Files/SamplingFunction_8h.md index 713bc8418d..63f2ddda98 100644 --- a/6.5/api/Files/SamplingFunction_8h.md +++ b/6.5/api/Files/SamplingFunction_8h.md @@ -137,4 +137,4 @@ class SamplingFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Session_8h.html b/6.5/api/Files/Session_8h.html index 1e9f21ab56..f1cc9093b9 100644 --- a/6.5/api/Files/Session_8h.html +++ b/6.5/api/Files/Session_8h.html @@ -2751,7 +2751,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Session_8h.md b/6.5/api/Files/Session_8h.md index b9d2e64d0d..724222ee29 100644 --- a/6.5/api/Files/Session_8h.md +++ b/6.5/api/Files/Session_8h.md @@ -337,4 +337,4 @@ class Session : public QObject, public QEnableSharedFromThis { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ShapeEvaluationJob_8h.html b/6.5/api/Files/ShapeEvaluationJob_8h.html index a73c7b411c..8e6c1d198d 100644 --- a/6.5/api/Files/ShapeEvaluationJob_8h.html +++ b/6.5/api/Files/ShapeEvaluationJob_8h.html @@ -2545,7 +2545,7 @@

    Source code

    Q_DECLARE_METATYPE(shapeworks::ShapeEvaluationJob::JobType);
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ShapeEvaluationJob_8h.md b/6.5/api/Files/ShapeEvaluationJob_8h.md index 44b28344c1..d2d5f2632f 100644 --- a/6.5/api/Files/ShapeEvaluationJob_8h.md +++ b/6.5/api/Files/ShapeEvaluationJob_8h.md @@ -97,4 +97,4 @@ Q_DECLARE_METATYPE(shapeworks::ShapeEvaluationJob::JobType); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ShapeEvaluation_8h.html b/6.5/api/Files/ShapeEvaluation_8h.html index d4c6605e06..80283b8bc3 100644 --- a/6.5/api/Files/ShapeEvaluation_8h.html +++ b/6.5/api/Files/ShapeEvaluation_8h.html @@ -2475,7 +2475,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ShapeEvaluation_8h.md b/6.5/api/Files/ShapeEvaluation_8h.md index 788e71fae1..9b9e705074 100644 --- a/6.5/api/Files/ShapeEvaluation_8h.md +++ b/6.5/api/Files/ShapeEvaluation_8h.md @@ -64,4 +64,4 @@ class ShapeEvaluation { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ShapeGradientMatrix_8h.html b/6.5/api/Files/ShapeGradientMatrix_8h.html index 99ca89e5b1..746137ca26 100644 --- a/6.5/api/Files/ShapeGradientMatrix_8h.html +++ b/6.5/api/Files/ShapeGradientMatrix_8h.html @@ -2584,7 +2584,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ShapeGradientMatrix_8h.md b/6.5/api/Files/ShapeGradientMatrix_8h.md index 45db6ab090..e49730a180 100644 --- a/6.5/api/Files/ShapeGradientMatrix_8h.md +++ b/6.5/api/Files/ShapeGradientMatrix_8h.md @@ -173,4 +173,4 @@ class ShapeGradientMatrix : public vnl_matrix, public Observer { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ShapeMatrix_8h.html b/6.5/api/Files/ShapeMatrix_8h.html index cb0a245d4d..6f4f6b20d3 100644 --- a/6.5/api/Files/ShapeMatrix_8h.html +++ b/6.5/api/Files/ShapeMatrix_8h.html @@ -2667,7 +2667,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ShapeMatrix_8h.md b/6.5/api/Files/ShapeMatrix_8h.md index 81f31adfea..60a332ad8f 100644 --- a/6.5/api/Files/ShapeMatrix_8h.md +++ b/6.5/api/Files/ShapeMatrix_8h.md @@ -256,4 +256,4 @@ class ShapeMatrix : public vnl_matrix, public Observer { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ShapeWorksStudioApp_8h.html b/6.5/api/Files/ShapeWorksStudioApp_8h.html index 3279c28b3a..97d5a0b81f 100644 --- a/6.5/api/Files/ShapeWorksStudioApp_8h.html +++ b/6.5/api/Files/ShapeWorksStudioApp_8h.html @@ -2711,7 +2711,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ShapeWorksStudioApp_8h.md b/6.5/api/Files/ShapeWorksStudioApp_8h.md index 927328f711..f2f7320ecd 100644 --- a/6.5/api/Files/ShapeWorksStudioApp_8h.md +++ b/6.5/api/Files/ShapeWorksStudioApp_8h.md @@ -300,4 +300,4 @@ class ShapeWorksStudioApp : public QMainWindow { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ShapeWorksWorker_8h.html b/6.5/api/Files/ShapeWorksWorker_8h.html index 1649ad271a..18a7c8cbdb 100644 --- a/6.5/api/Files/ShapeWorksWorker_8h.html +++ b/6.5/api/Files/ShapeWorksWorker_8h.html @@ -2490,7 +2490,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ShapeWorksWorker_8h.md b/6.5/api/Files/ShapeWorksWorker_8h.md index 47a7016f72..3f559262f7 100644 --- a/6.5/api/Files/ShapeWorksWorker_8h.md +++ b/6.5/api/Files/ShapeWorksWorker_8h.md @@ -79,4 +79,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Shape_8h.html b/6.5/api/Files/Shape_8h.html index da6ba84ec0..82690a5fcc 100644 --- a/6.5/api/Files/Shape_8h.html +++ b/6.5/api/Files/Shape_8h.html @@ -2640,7 +2640,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Shape_8h.md b/6.5/api/Files/Shape_8h.md index 30fde0560f..a649adee4b 100644 --- a/6.5/api/Files/Shape_8h.md +++ b/6.5/api/Files/Shape_8h.md @@ -226,4 +226,4 @@ class Shape { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/ShapeworksUtils_8h.html b/6.5/api/Files/ShapeworksUtils_8h.html index faf93f42f7..abd613d00a 100644 --- a/6.5/api/Files/ShapeworksUtils_8h.html +++ b/6.5/api/Files/ShapeworksUtils_8h.html @@ -2485,7 +2485,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/ShapeworksUtils_8h.md b/6.5/api/Files/ShapeworksUtils_8h.md index 57181a5bb6..86339f9937 100644 --- a/6.5/api/Files/ShapeworksUtils_8h.md +++ b/6.5/api/Files/ShapeworksUtils_8h.md @@ -74,4 +74,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Shapeworks_8h.html b/6.5/api/Files/Shapeworks_8h.html index 1dc01ed23d..9df0e107cf 100644 --- a/6.5/api/Files/Shapeworks_8h.html +++ b/6.5/api/Files/Shapeworks_8h.html @@ -2693,7 +2693,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Shapeworks_8h.md b/6.5/api/Files/Shapeworks_8h.md index fa32906a59..a79add3c5e 100644 --- a/6.5/api/Files/Shapeworks_8h.md +++ b/6.5/api/Files/Shapeworks_8h.md @@ -298,4 +298,4 @@ T clamp(T value, T min, T max) { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/SharedCommandData_8h.html b/6.5/api/Files/SharedCommandData_8h.html index dbc3a4d09d..e006c0df00 100644 --- a/6.5/api/Files/SharedCommandData_8h.html +++ b/6.5/api/Files/SharedCommandData_8h.html @@ -2467,7 +2467,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/SharedCommandData_8h.md b/6.5/api/Files/SharedCommandData_8h.md index 81c18c8ddd..44809c0404 100644 --- a/6.5/api/Files/SharedCommandData_8h.md +++ b/6.5/api/Files/SharedCommandData_8h.md @@ -56,4 +56,4 @@ struct SharedCommandData ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/SliceView_8h.html b/6.5/api/Files/SliceView_8h.html index f04140dcf2..fd13d8eb5c 100644 --- a/6.5/api/Files/SliceView_8h.html +++ b/6.5/api/Files/SliceView_8h.html @@ -2529,7 +2529,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/SliceView_8h.md b/6.5/api/Files/SliceView_8h.md index e7a447dec3..f013428cf7 100644 --- a/6.5/api/Files/SliceView_8h.md +++ b/6.5/api/Files/SliceView_8h.md @@ -118,4 +118,4 @@ class SliceView { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/SplashScreen_8h.html b/6.5/api/Files/SplashScreen_8h.html index 764f76905a..1e52d1d11b 100644 --- a/6.5/api/Files/SplashScreen_8h.html +++ b/6.5/api/Files/SplashScreen_8h.html @@ -2491,7 +2491,7 @@

    Source code

    } // end namespace
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/SplashScreen_8h.md b/6.5/api/Files/SplashScreen_8h.md index 70cfc37a0b..805ebe3498 100644 --- a/6.5/api/Files/SplashScreen_8h.md +++ b/6.5/api/Files/SplashScreen_8h.md @@ -80,4 +80,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StackWalker_8h.html b/6.5/api/Files/StackWalker_8h.html index ffd636b52a..7f7fd002e5 100644 --- a/6.5/api/Files/StackWalker_8h.html +++ b/6.5/api/Files/StackWalker_8h.html @@ -2617,7 +2617,7 @@

    Source code

    #endif // win32
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StackWalker_8h.md b/6.5/api/Files/StackWalker_8h.md index 67685af566..fa6585212d 100644 --- a/6.5/api/Files/StackWalker_8h.md +++ b/6.5/api/Files/StackWalker_8h.md @@ -237,4 +237,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StatsGroupLDAJob_8h.html b/6.5/api/Files/StatsGroupLDAJob_8h.html index 83044ecbf7..44805467fd 100644 --- a/6.5/api/Files/StatsGroupLDAJob_8h.html +++ b/6.5/api/Files/StatsGroupLDAJob_8h.html @@ -2469,7 +2469,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StatsGroupLDAJob_8h.md b/6.5/api/Files/StatsGroupLDAJob_8h.md index 6353bda746..94cd2fa7c4 100644 --- a/6.5/api/Files/StatsGroupLDAJob_8h.md +++ b/6.5/api/Files/StatsGroupLDAJob_8h.md @@ -58,4 +58,4 @@ class StatsGroupLDAJob : public Job { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StatusBarWidget_8h.html b/6.5/api/Files/StatusBarWidget_8h.html index f23006eddb..c0882cd35b 100644 --- a/6.5/api/Files/StatusBarWidget_8h.html +++ b/6.5/api/Files/StatusBarWidget_8h.html @@ -2480,7 +2480,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StatusBarWidget_8h.md b/6.5/api/Files/StatusBarWidget_8h.md index 6907ebc220..9cacbf980d 100644 --- a/6.5/api/Files/StatusBarWidget_8h.md +++ b/6.5/api/Files/StatusBarWidget_8h.md @@ -69,4 +69,4 @@ class StatusBarWidget : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StringUtils_8h.html b/6.5/api/Files/StringUtils_8h.html index 6d71b4b594..680b35e2c9 100644 --- a/6.5/api/Files/StringUtils_8h.html +++ b/6.5/api/Files/StringUtils_8h.html @@ -2467,7 +2467,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StringUtils_8h.md b/6.5/api/Files/StringUtils_8h.md index d33227f3a4..e44d7e94b5 100644 --- a/6.5/api/Files/StringUtils_8h.md +++ b/6.5/api/Files/StringUtils_8h.md @@ -56,4 +56,4 @@ class StringUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioEnums_8h.html b/6.5/api/Files/StudioEnums_8h.html index c49889c29c..303e037adb 100644 --- a/6.5/api/Files/StudioEnums_8h.html +++ b/6.5/api/Files/StudioEnums_8h.html @@ -2435,7 +2435,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioEnums_8h.md b/6.5/api/Files/StudioEnums_8h.md index 6704eca4a2..e03c7a787c 100644 --- a/6.5/api/Files/StudioEnums_8h.md +++ b/6.5/api/Files/StudioEnums_8h.md @@ -40,4 +40,4 @@ DisplayMode string_to_display_mode(std::string str); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioHandleWidget_8h.html b/6.5/api/Files/StudioHandleWidget_8h.html index 07477c16cd..8214856d5e 100644 --- a/6.5/api/Files/StudioHandleWidget_8h.html +++ b/6.5/api/Files/StudioHandleWidget_8h.html @@ -2474,7 +2474,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioHandleWidget_8h.md b/6.5/api/Files/StudioHandleWidget_8h.md index 5becd4fd64..898928d125 100644 --- a/6.5/api/Files/StudioHandleWidget_8h.md +++ b/6.5/api/Files/StudioHandleWidget_8h.md @@ -63,4 +63,4 @@ class StudioHandleWidget : public vtkHandleWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioInteractorStyle_8h.html b/6.5/api/Files/StudioInteractorStyle_8h.html index c63f40fe1a..cc296468cd 100644 --- a/6.5/api/Files/StudioInteractorStyle_8h.html +++ b/6.5/api/Files/StudioInteractorStyle_8h.html @@ -2487,7 +2487,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioInteractorStyle_8h.md b/6.5/api/Files/StudioInteractorStyle_8h.md index 70e159330c..8d95cfe1dd 100644 --- a/6.5/api/Files/StudioInteractorStyle_8h.md +++ b/6.5/api/Files/StudioInteractorStyle_8h.md @@ -76,4 +76,4 @@ class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioLogger_8h.html b/6.5/api/Files/StudioLogger_8h.html index 0fe5c8d0bc..7ec3e785fd 100644 --- a/6.5/api/Files/StudioLogger_8h.html +++ b/6.5/api/Files/StudioLogger_8h.html @@ -2450,7 +2450,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioLogger_8h.md b/6.5/api/Files/StudioLogger_8h.md index 0b28a0d213..1944a2337a 100644 --- a/6.5/api/Files/StudioLogger_8h.md +++ b/6.5/api/Files/StudioLogger_8h.md @@ -53,4 +53,4 @@ class StudioLogger : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioMesh_8h.html b/6.5/api/Files/StudioMesh_8h.html index 3e4cef99c3..99ea12bee9 100644 --- a/6.5/api/Files/StudioMesh_8h.html +++ b/6.5/api/Files/StudioMesh_8h.html @@ -2563,7 +2563,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioMesh_8h.md b/6.5/api/Files/StudioMesh_8h.md index fc5c681c31..d491039244 100644 --- a/6.5/api/Files/StudioMesh_8h.md +++ b/6.5/api/Files/StudioMesh_8h.md @@ -115,4 +115,4 @@ class StudioMesh { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioSliceInteractorStyle_8h.html b/6.5/api/Files/StudioSliceInteractorStyle_8h.html index d482279524..c0f2916cb9 100644 --- a/6.5/api/Files/StudioSliceInteractorStyle_8h.html +++ b/6.5/api/Files/StudioSliceInteractorStyle_8h.html @@ -2488,7 +2488,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioSliceInteractorStyle_8h.md b/6.5/api/Files/StudioSliceInteractorStyle_8h.md index 6ebe25ee62..100655a5af 100644 --- a/6.5/api/Files/StudioSliceInteractorStyle_8h.md +++ b/6.5/api/Files/StudioSliceInteractorStyle_8h.md @@ -77,4 +77,4 @@ class StudioSliceInteractorStyle : public vtkInteractorStyleImage { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioUtils_8h.html b/6.5/api/Files/StudioUtils_8h.html index d8dffba403..6413138104 100644 --- a/6.5/api/Files/StudioUtils_8h.html +++ b/6.5/api/Files/StudioUtils_8h.html @@ -2474,7 +2474,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioUtils_8h.md b/6.5/api/Files/StudioUtils_8h.md index 7110bb4b84..cc499362c5 100644 --- a/6.5/api/Files/StudioUtils_8h.md +++ b/6.5/api/Files/StudioUtils_8h.md @@ -63,4 +63,4 @@ class StudioUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/StudioVtkOutputWindow_8h.html b/6.5/api/Files/StudioVtkOutputWindow_8h.html index 2ebd4f302d..1911d734c2 100644 --- a/6.5/api/Files/StudioVtkOutputWindow_8h.html +++ b/6.5/api/Files/StudioVtkOutputWindow_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/StudioVtkOutputWindow_8h.md b/6.5/api/Files/StudioVtkOutputWindow_8h.md index 5f6ada0fee..d268679b45 100644 --- a/6.5/api/Files/StudioVtkOutputWindow_8h.md +++ b/6.5/api/Files/StudioVtkOutputWindow_8h.md @@ -55,4 +55,4 @@ class StudioVtkOutputWindow : public QObject, public vtkOutputWindow { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Style_8h.html b/6.5/api/Files/Style_8h.html index 2926a81f24..2953776a0f 100644 --- a/6.5/api/Files/Style_8h.html +++ b/6.5/api/Files/Style_8h.html @@ -2458,7 +2458,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Style_8h.md b/6.5/api/Files/Style_8h.md index 0a073a4f56..ef1650b423 100644 --- a/6.5/api/Files/Style_8h.md +++ b/6.5/api/Files/Style_8h.md @@ -47,4 +47,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Subject_8h.html b/6.5/api/Files/Subject_8h.html index ed07b7872b..b6f2d19823 100644 --- a/6.5/api/Files/Subject_8h.html +++ b/6.5/api/Files/Subject_8h.html @@ -2530,7 +2530,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Subject_8h.md b/6.5/api/Files/Subject_8h.md index 485c5ac761..4f4bb53c85 100644 --- a/6.5/api/Files/Subject_8h.md +++ b/6.5/api/Files/Subject_8h.md @@ -119,4 +119,4 @@ class Subject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/SurfaceReconstructor_8h.html b/6.5/api/Files/SurfaceReconstructor_8h.html index 1d315537d3..69c5d82166 100644 --- a/6.5/api/Files/SurfaceReconstructor_8h.html +++ b/6.5/api/Files/SurfaceReconstructor_8h.html @@ -2489,7 +2489,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/SurfaceReconstructor_8h.md b/6.5/api/Files/SurfaceReconstructor_8h.md index e8771d226e..796115bbca 100644 --- a/6.5/api/Files/SurfaceReconstructor_8h.md +++ b/6.5/api/Files/SurfaceReconstructor_8h.md @@ -88,4 +88,4 @@ class SurfaceReconstructor { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Telemetry_8h.html b/6.5/api/Files/Telemetry_8h.html index f8d85ef145..a6c225c714 100644 --- a/6.5/api/Files/Telemetry_8h.html +++ b/6.5/api/Files/Telemetry_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Telemetry_8h.md b/6.5/api/Files/Telemetry_8h.md index 429e23a0fe..84c6182bd4 100644 --- a/6.5/api/Files/Telemetry_8h.md +++ b/6.5/api/Files/Telemetry_8h.md @@ -67,4 +67,4 @@ class Telemetry : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/UpdateChecker_8h.html b/6.5/api/Files/UpdateChecker_8h.html index 30cd15806f..14487056c6 100644 --- a/6.5/api/Files/UpdateChecker_8h.html +++ b/6.5/api/Files/UpdateChecker_8h.html @@ -2483,7 +2483,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/UpdateChecker_8h.md b/6.5/api/Files/UpdateChecker_8h.md index edcba6aa23..4bc35fbdda 100644 --- a/6.5/api/Files/UpdateChecker_8h.md +++ b/6.5/api/Files/UpdateChecker_8h.md @@ -70,4 +70,4 @@ class UpdateChecker : public QDialog { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Utils_8h.html b/6.5/api/Files/Utils_8h.html index 2febcfd69e..ead3ddeae6 100644 --- a/6.5/api/Files/Utils_8h.html +++ b/6.5/api/Files/Utils_8h.html @@ -2683,7 +2683,7 @@

    Source code

    #endif // UTILS_H
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Utils_8h.md b/6.5/api/Files/Utils_8h.md index 5aad5bd440..88ab441e4a 100644 --- a/6.5/api/Files/Utils_8h.md +++ b/6.5/api/Files/Utils_8h.md @@ -217,4 +217,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Variant_8h.html b/6.5/api/Files/Variant_8h.html index 2692b1dc54..9b1ef594f8 100644 --- a/6.5/api/Files/Variant_8h.html +++ b/6.5/api/Files/Variant_8h.html @@ -2502,7 +2502,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Variant_8h.md b/6.5/api/Files/Variant_8h.md index 6c8eba2f99..e0fcea4cf2 100644 --- a/6.5/api/Files/Variant_8h.md +++ b/6.5/api/Files/Variant_8h.md @@ -91,4 +91,4 @@ class Variant { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/VectorFunction_8h.html b/6.5/api/Files/VectorFunction_8h.html index b3cf6a1a04..5f1cc5ad3b 100644 --- a/6.5/api/Files/VectorFunction_8h.html +++ b/6.5/api/Files/VectorFunction_8h.html @@ -2504,7 +2504,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/VectorFunction_8h.md b/6.5/api/Files/VectorFunction_8h.md index c3a3afe303..64fb4beb7b 100644 --- a/6.5/api/Files/VectorFunction_8h.md +++ b/6.5/api/Files/VectorFunction_8h.md @@ -93,4 +93,4 @@ class VectorFunction : public itk::LightObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/VectorImage_8h.html b/6.5/api/Files/VectorImage_8h.html index 4c05e80cc7..fb1a959159 100644 --- a/6.5/api/Files/VectorImage_8h.html +++ b/6.5/api/Files/VectorImage_8h.html @@ -2470,7 +2470,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/VectorImage_8h.md b/6.5/api/Files/VectorImage_8h.md index 5f6bbdcecc..7de69a0e99 100644 --- a/6.5/api/Files/VectorImage_8h.md +++ b/6.5/api/Files/VectorImage_8h.md @@ -59,4 +59,4 @@ class VectorImage { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Viewer_8h.html b/6.5/api/Files/Viewer_8h.html index e2bcd28403..d12dcedf07 100644 --- a/6.5/api/Files/Viewer_8h.html +++ b/6.5/api/Files/Viewer_8h.html @@ -2695,7 +2695,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Viewer_8h.md b/6.5/api/Files/Viewer_8h.md index 553c08b8df..6337940cb2 100644 --- a/6.5/api/Files/Viewer_8h.md +++ b/6.5/api/Files/Viewer_8h.md @@ -281,4 +281,4 @@ class Viewer { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Visualizer_8h.html b/6.5/api/Files/Visualizer_8h.html index cd9b4e78c0..0ee3a42d6b 100644 --- a/6.5/api/Files/Visualizer_8h.html +++ b/6.5/api/Files/Visualizer_8h.html @@ -2605,7 +2605,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Visualizer_8h.md b/6.5/api/Files/Visualizer_8h.md index 93d5443339..612634fc51 100644 --- a/6.5/api/Files/Visualizer_8h.md +++ b/6.5/api/Files/Visualizer_8h.md @@ -194,4 +194,4 @@ class Visualizer : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/VtkMeshWrapper_8h.html b/6.5/api/Files/VtkMeshWrapper_8h.html index 596f0208a8..8d908c603b 100644 --- a/6.5/api/Files/VtkMeshWrapper_8h.html +++ b/6.5/api/Files/VtkMeshWrapper_8h.html @@ -2626,7 +2626,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/VtkMeshWrapper_8h.md b/6.5/api/Files/VtkMeshWrapper_8h.md index 44c4393d7f..b39efdcbf5 100644 --- a/6.5/api/Files/VtkMeshWrapper_8h.md +++ b/6.5/api/Files/VtkMeshWrapper_8h.md @@ -215,4 +215,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/WheelEventForwarder_8h.html b/6.5/api/Files/WheelEventForwarder_8h.html index d359cfaa58..5a6d2610fb 100644 --- a/6.5/api/Files/WheelEventForwarder_8h.html +++ b/6.5/api/Files/WheelEventForwarder_8h.html @@ -2462,7 +2462,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/WheelEventForwarder_8h.md b/6.5/api/Files/WheelEventForwarder_8h.md index 6bce3e5a7b..7a0a019721 100644 --- a/6.5/api/Files/WheelEventForwarder_8h.md +++ b/6.5/api/Files/WheelEventForwarder_8h.md @@ -51,4 +51,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/WindowsCrashHandler_8h.html b/6.5/api/Files/WindowsCrashHandler_8h.html index be58254264..ef36926525 100644 --- a/6.5/api/Files/WindowsCrashHandler_8h.html +++ b/6.5/api/Files/WindowsCrashHandler_8h.html @@ -2446,7 +2446,7 @@

    Source code

    int init_crash_handler();
     

    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/WindowsCrashHandler_8h.md b/6.5/api/Files/WindowsCrashHandler_8h.md index 42d83aee3e..f6a762175d 100644 --- a/6.5/api/Files/WindowsCrashHandler_8h.md +++ b/6.5/api/Files/WindowsCrashHandler_8h.md @@ -34,4 +34,4 @@ int init_crash_handler(); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/Worker_8h.html b/6.5/api/Files/Worker_8h.html index 3a25d11c29..1ad3cda8ba 100644 --- a/6.5/api/Files/Worker_8h.html +++ b/6.5/api/Files/Worker_8h.html @@ -2475,7 +2475,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/Worker_8h.md b/6.5/api/Files/Worker_8h.md index a3f5c6cb7d..b03017a78c 100644 --- a/6.5/api/Files/Worker_8h.md +++ b/6.5/api/Files/Worker_8h.md @@ -64,4 +64,4 @@ class Worker : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html b/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html index 2673d66944..ea70fc00bd 100644 --- a/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html +++ b/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html @@ -2428,7 +2428,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md b/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md index 7d954a0576..713a33ba19 100644 --- a/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md +++ b/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md @@ -26,4 +26,4 @@ title: Libs/Optimize/Function ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html b/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html index b15981294c..82fdd1fcf0 100644 --- a/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html +++ b/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md b/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md index 0172e6a3d8..cca23c0792 100644 --- a/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md +++ b/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md @@ -24,4 +24,4 @@ title: Libs/Optimize/Matrix ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.html b/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.html index 75dfc58cac..2d50dbb9ef 100644 --- a/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.html +++ b/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.md b/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.md index 5c4d8293fd..4834c5b86c 100644 --- a/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.md +++ b/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.md @@ -22,4 +22,4 @@ title: Studio/Analysis ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html b/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html index 24ceecdc3e..56bb93d2ac 100644 --- a/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html +++ b/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html @@ -2445,7 +2445,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md b/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md index bf072dc367..4f2d1b630b 100644 --- a/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md +++ b/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md @@ -31,4 +31,4 @@ title: Libs/Mesh ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html b/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html index 3f2d02ec49..5d2b2cdba1 100644 --- a/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html +++ b/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md b/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md index eb9de52cf8..9c73f107d5 100644 --- a/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md +++ b/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md @@ -24,4 +24,4 @@ title: Libs/Optimize/Neighborhood ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html b/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html index 3c1a89deed..8c279ab0d9 100644 --- a/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html +++ b/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md b/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md index 503a859fd4..9ebd1206d5 100644 --- a/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md +++ b/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md @@ -24,4 +24,4 @@ title: Libs/Alignment/Transforms ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html b/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html index 2f55070724..e7a6e79cde 100644 --- a/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html +++ b/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html @@ -2458,7 +2458,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md b/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md index 2bfac31be8..bc33a66b44 100644 --- a/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md +++ b/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md @@ -36,4 +36,4 @@ title: Libs/Mesh/PreviewMeshQC ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html b/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html index 025cc3cf12..a9a9112db6 100644 --- a/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html +++ b/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html @@ -2410,7 +2410,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md b/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md index e8edf3f7d0..66ffe09ad8 100644 --- a/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md +++ b/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md @@ -20,4 +20,4 @@ title: Studio/Groom ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html b/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html index 9537f7144a..7ea846eff9 100644 --- a/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html +++ b/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html @@ -2410,7 +2410,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md b/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md index b71ef93dc3..1717a027fa 100644 --- a/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md +++ b/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md @@ -20,4 +20,4 @@ title: Studio/Python ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html b/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html index d5734d8b8a..945645123f 100644 --- a/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html +++ b/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html @@ -2419,7 +2419,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md b/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md index 51fee228f3..5a5404e46f 100644 --- a/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md +++ b/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md @@ -23,4 +23,4 @@ title: Applications/shapeworks ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html b/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html index 9322aa16b3..6c5f845909 100644 --- a/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html +++ b/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html @@ -2437,7 +2437,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md b/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md index ab93c1b22a..b1f8e09de8 100644 --- a/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md +++ b/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md @@ -29,4 +29,4 @@ title: Libs/Project ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.html b/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.html index dc5f760e81..4b859a03be 100644 --- a/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.html +++ b/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.md b/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.md index 2ae4076bc8..8cf8e857a9 100644 --- a/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.md +++ b/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.md @@ -24,4 +24,4 @@ title: Studio/Utils ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html b/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html index 75432ab47a..010dffbd6a 100644 --- a/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html +++ b/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html @@ -2413,7 +2413,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md b/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md index e9707e3431..3dde7f942f 100644 --- a/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md +++ b/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md @@ -21,4 +21,4 @@ title: Libs/Python ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html b/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html index 6d686e0a73..a6dd2afd8c 100644 --- a/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html +++ b/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html @@ -2440,7 +2440,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md b/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md index 56aae86055..9934e01a86 100644 --- a/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md +++ b/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md @@ -30,4 +30,4 @@ title: Libs ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html b/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html index eabc8506f2..14a4a192c0 100644 --- a/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html +++ b/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md b/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md index c5d34cbf73..c42d9838b6 100644 --- a/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md +++ b/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md @@ -22,4 +22,4 @@ title: Libs/Utils ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html b/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html index d7edfc5ee1..a29da2c03a 100644 --- a/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html +++ b/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html @@ -2425,7 +2425,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md b/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md index 0ccfd50070..79ba92cf8f 100644 --- a/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md +++ b/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md @@ -25,4 +25,4 @@ title: Studio/Job ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html b/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html index 8ca0ef282a..0ce2e97bdd 100644 --- a/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html +++ b/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html @@ -2425,7 +2425,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md b/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md index 19be1b35f9..1e2bc85372 100644 --- a/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md +++ b/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md @@ -25,4 +25,4 @@ title: Libs/Optimize/Utils ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html b/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html index 883731b767..e2a00a2b68 100644 --- a/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html +++ b/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md b/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md index 0d15565665..5e022d990f 100644 --- a/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md +++ b/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md @@ -22,4 +22,4 @@ title: Libs/Optimize/Container ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html b/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html index 403158a8c1..38a6b558ae 100644 --- a/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html +++ b/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html @@ -2410,7 +2410,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md b/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md index 8a7b01bcbc..802aa0e270 100644 --- a/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md +++ b/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md @@ -20,4 +20,4 @@ title: Applications ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html b/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html index 0ebd3a9be3..8639766d7d 100644 --- a/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html +++ b/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html @@ -2419,7 +2419,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md b/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md index df9cca690c..fcd5cedb27 100644 --- a/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md +++ b/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md @@ -23,4 +23,4 @@ title: Libs/Image ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html b/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html index 0cb440a05a..2301030854 100644 --- a/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html +++ b/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html @@ -2413,7 +2413,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md b/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md index 373b973b08..45e118df15 100644 --- a/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md +++ b/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md @@ -21,4 +21,4 @@ title: Studio/Optimize ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html b/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html index 2d9f7b60e5..58becb2019 100644 --- a/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html +++ b/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html @@ -2410,7 +2410,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md b/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md index 28ce215976..dee33af430 100644 --- a/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md +++ b/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md @@ -20,4 +20,4 @@ title: Studio/Resources ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html b/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html index 8b74bbfa3d..4e0aea304f 100644 --- a/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html +++ b/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md b/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md index 4d53908e55..6b4278193b 100644 --- a/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md +++ b/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md @@ -24,4 +24,4 @@ title: Libs/Optimize/Constraints ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html b/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html index be683231b0..af385dc51c 100644 --- a/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html +++ b/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html @@ -2440,7 +2440,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md b/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md index f63346c4b0..cf6175bc88 100644 --- a/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md +++ b/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md @@ -30,4 +30,4 @@ title: Studio/Data ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html b/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html index 330e408dab..0510e70289 100644 --- a/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html +++ b/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html @@ -2382,7 +2382,7 @@

    Documentation/Doxygen


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md b/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md index c06a7f1a1e..582ee22950 100644 --- a/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md +++ b/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md @@ -14,4 +14,4 @@ title: Documentation/Doxygen ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html b/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html index a11768d289..727aa32575 100644 --- a/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html +++ b/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html @@ -2452,7 +2452,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md b/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md index e61e1422c0..76db87e007 100644 --- a/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md +++ b/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md @@ -34,4 +34,4 @@ title: Studio/Visualization ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html b/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html index f826371031..9abc746274 100644 --- a/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html +++ b/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html @@ -2446,7 +2446,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md b/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md index 0a172c00cc..67b76b564c 100644 --- a/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md +++ b/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md @@ -32,4 +32,4 @@ title: Libs/Optimize/Domain ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html b/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html index c56593b41f..9e7528f93a 100644 --- a/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html +++ b/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html @@ -2440,7 +2440,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md b/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md index cfac37dad3..cdffdbe457 100644 --- a/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md +++ b/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md @@ -30,4 +30,4 @@ title: Studio ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html b/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html index 57676264df..26982ebda7 100644 --- a/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html +++ b/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md b/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md index f56a922c62..7e0907dd49 100644 --- a/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md +++ b/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md @@ -24,4 +24,4 @@ title: Libs/Common ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html b/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html index ebac985176..0dc1a753ab 100644 --- a/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html +++ b/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html @@ -2430,7 +2430,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md b/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md index 954694cdeb..b4d11ed718 100644 --- a/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md +++ b/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md @@ -26,4 +26,4 @@ title: Libs/Alignment ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html b/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html index 8eb74c8152..5076f9d4fd 100644 --- a/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html +++ b/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html @@ -2413,7 +2413,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md b/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md index f139e58364..cef9f97464 100644 --- a/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md +++ b/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md @@ -21,4 +21,4 @@ title: Libs/Groom ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.html b/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.html index 49a6645447..84b15e3f36 100644 --- a/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.html +++ b/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.html @@ -2410,7 +2410,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.md b/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.md index e23d145b81..145522a53b 100644 --- a/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.md +++ b/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.md @@ -20,4 +20,4 @@ title: Documentation ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html b/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html index 46c4ea725c..bb87c31004 100644 --- a/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html +++ b/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html @@ -2464,7 +2464,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md b/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md index d7e88a426c..71d62b392a 100644 --- a/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md +++ b/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md @@ -38,4 +38,4 @@ title: Libs/Analyze ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html b/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html index ca9992733d..a1155626e0 100644 --- a/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html +++ b/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md b/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md index e6425e2113..dbaf779c0e 100644 --- a/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md +++ b/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md @@ -22,4 +22,4 @@ title: Studio/DeepSSM ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html b/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html index 13aa327cb5..a85a643f54 100644 --- a/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html +++ b/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html @@ -2475,7 +2475,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md b/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md index b23a3d6e9d..a649720726 100644 --- a/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md +++ b/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md @@ -41,4 +41,4 @@ title: Libs/Optimize ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html b/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html index 052ea12537..cfde51eedc 100644 --- a/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html +++ b/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html @@ -2443,7 +2443,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md b/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md index e77754d699..5d855876f9 100644 --- a/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md +++ b/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md @@ -31,4 +31,4 @@ title: Studio/Interface ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html b/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html index 22db6e28c6..52334e75e1 100644 --- a/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html +++ b/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html @@ -2428,7 +2428,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md b/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md index dceffa6c66..3429aa83e5 100644 --- a/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md +++ b/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md @@ -26,4 +26,4 @@ title: Libs/Particles ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/index_files.html b/6.5/api/Files/index_files.html index fd74d7b568..7726e8f630 100644 --- a/6.5/api/Files/index_files.html +++ b/6.5/api/Files/index_files.html @@ -2705,7 +2705,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/index_files.md b/6.5/api/Files/index_files.md index f5018689bb..db07b6275b 100644 --- a/6.5/api/Files/index_files.md +++ b/6.5/api/Files/index_files.md @@ -250,4 +250,4 @@ title: Files ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/itkAdvancedTransform_8h.html b/6.5/api/Files/itkAdvancedTransform_8h.html index 283e6bb834..bfbdee8522 100644 --- a/6.5/api/Files/itkAdvancedTransform_8h.html +++ b/6.5/api/Files/itkAdvancedTransform_8h.html @@ -2628,7 +2628,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/itkAdvancedTransform_8h.md b/6.5/api/Files/itkAdvancedTransform_8h.md index 0d61428090..55480dc223 100644 --- a/6.5/api/Files/itkAdvancedTransform_8h.md +++ b/6.5/api/Files/itkAdvancedTransform_8h.md @@ -217,4 +217,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html b/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html index 1d2dbc660d..fbbf5bd067 100644 --- a/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html +++ b/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html @@ -2528,7 +2528,7 @@

    Source code

    #endif // __itkCompactlySupportedRBFSparseKernelTransform_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md b/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md index dcaba85079..768f712bff 100644 --- a/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md +++ b/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md @@ -117,4 +117,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/itkKernelTransform2_8h.html b/6.5/api/Files/itkKernelTransform2_8h.html index 906d700e34..36678a7a25 100644 --- a/6.5/api/Files/itkKernelTransform2_8h.html +++ b/6.5/api/Files/itkKernelTransform2_8h.html @@ -2804,7 +2804,7 @@

    Source code

    #endif // __itkKernelTransform2_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/itkKernelTransform2_8h.md b/6.5/api/Files/itkKernelTransform2_8h.md index cb88bfe974..3c645905df 100644 --- a/6.5/api/Files/itkKernelTransform2_8h.md +++ b/6.5/api/Files/itkKernelTransform2_8h.md @@ -393,4 +393,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.html b/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.html index e446b698f7..cd17e2eae6 100644 --- a/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.html +++ b/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.html @@ -2572,7 +2572,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.md b/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.md index 6127c51154..8d0d7ac08c 100644 --- a/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.md +++ b/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.md @@ -156,4 +156,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/itkSparseKernelTransform_8h.html b/6.5/api/Files/itkSparseKernelTransform_8h.html index 9dcc2b5eb7..7481c8524c 100644 --- a/6.5/api/Files/itkSparseKernelTransform_8h.html +++ b/6.5/api/Files/itkSparseKernelTransform_8h.html @@ -2683,7 +2683,7 @@

    Source code

    #endif // __itkSparseKernelTransform_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/itkSparseKernelTransform_8h.md b/6.5/api/Files/itkSparseKernelTransform_8h.md index 3d8698baa0..df07035fbc 100644 --- a/6.5/api/Files/itkSparseKernelTransform_8h.md +++ b/6.5/api/Files/itkSparseKernelTransform_8h.md @@ -272,4 +272,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.html b/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.html index 67c2ae5998..70662da777 100644 --- a/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.html +++ b/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.html @@ -2880,7 +2880,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.md b/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.md index a9c7da6148..a8de43d4ce 100644 --- a/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.md +++ b/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.md @@ -438,4 +438,4 @@ TPGACLevelSetImageFilter ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.html b/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.html index 9ce5db810c..36a9aee002 100644 --- a/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.html +++ b/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.html @@ -2545,7 +2545,7 @@

    Source code

    #endif // __itkThinPlateSplineKernelTransform2_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.md b/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.md index 76d6ba86a4..da66f86600 100644 --- a/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.md +++ b/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.md @@ -134,4 +134,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/math3d_8h.html b/6.5/api/Files/math3d_8h.html index 3cad73e3dc..56c13fe326 100644 --- a/6.5/api/Files/math3d_8h.html +++ b/6.5/api/Files/math3d_8h.html @@ -3091,7 +3091,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/math3d_8h.md b/6.5/api/Files/math3d_8h.md index ff94e41f84..31d52a3e31 100644 --- a/6.5/api/Files/math3d_8h.md +++ b/6.5/api/Files/math3d_8h.md @@ -614,4 +614,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/meshFIM_8h.html b/6.5/api/Files/meshFIM_8h.html index c608500dd0..aeef51b8c6 100644 --- a/6.5/api/Files/meshFIM_8h.html +++ b/6.5/api/Files/meshFIM_8h.html @@ -2740,7 +2740,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/meshFIM_8h.md b/6.5/api/Files/meshFIM_8h.md index 6a145274e5..9261ff5d61 100644 --- a/6.5/api/Files/meshFIM_8h.md +++ b/6.5/api/Files/meshFIM_8h.md @@ -294,4 +294,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/pybind__utils_8h.html b/6.5/api/Files/pybind__utils_8h.html index 346be4fb20..0c3b2c4c87 100644 --- a/6.5/api/Files/pybind__utils_8h.html +++ b/6.5/api/Files/pybind__utils_8h.html @@ -2685,7 +2685,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/pybind__utils_8h.md b/6.5/api/Files/pybind__utils_8h.md index 80f18db5c8..7ec00779bc 100644 --- a/6.5/api/Files/pybind__utils_8h.md +++ b/6.5/api/Files/pybind__utils_8h.md @@ -290,4 +290,4 @@ py::array arrToPy(Array& array, ArrayTransferOptions xfer = COPY_ARRAY) { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/resource_8h.html b/6.5/api/Files/resource_8h.html index 33cf144db5..6447776382 100644 --- a/6.5/api/Files/resource_8h.html +++ b/6.5/api/Files/resource_8h.html @@ -2461,7 +2461,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/resource_8h.md b/6.5/api/Files/resource_8h.md index 559d7b3f9d..977dadca49 100644 --- a/6.5/api/Files/resource_8h.md +++ b/6.5/api/Files/resource_8h.md @@ -49,4 +49,4 @@ title: Studio/Resources/resource.h ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/stdafx_8h.html b/6.5/api/Files/stdafx_8h.html index fe00f4c9d2..d44456576e 100644 --- a/6.5/api/Files/stdafx_8h.html +++ b/6.5/api/Files/stdafx_8h.html @@ -2410,7 +2410,7 @@

    Source code

    // TODO: reference additional headers your program requires here
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/stdafx_8h.md b/6.5/api/Files/stdafx_8h.md index f049d431f5..8531af755e 100644 --- a/6.5/api/Files/stdafx_8h.md +++ b/6.5/api/Files/stdafx_8h.md @@ -29,4 +29,4 @@ title: Libs/Mesh/PreviewMeshQC/stdafx.h ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Files/vtkPolyDataToImageData_8h.html b/6.5/api/Files/vtkPolyDataToImageData_8h.html index d70407242a..738689766d 100644 --- a/6.5/api/Files/vtkPolyDataToImageData_8h.html +++ b/6.5/api/Files/vtkPolyDataToImageData_8h.html @@ -2509,7 +2509,7 @@

    Source code

    #endif // ifndef __vtkPolyDataToImageData_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Files/vtkPolyDataToImageData_8h.md b/6.5/api/Files/vtkPolyDataToImageData_8h.md index 2ae933cc61..6e08fbbf97 100644 --- a/6.5/api/Files/vtkPolyDataToImageData_8h.md +++ b/6.5/api/Files/vtkPolyDataToImageData_8h.md @@ -112,4 +112,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Modules/group__Group-Common.html b/6.5/api/Modules/group__Group-Common.html index b24380da71..bdeeaad1a5 100644 --- a/6.5/api/Modules/group__Group-Common.html +++ b/6.5/api/Modules/group__Group-Common.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Modules/group__Group-Common.md b/6.5/api/Modules/group__Group-Common.md index 95f8b317d8..283c1a7ef9 100644 --- a/6.5/api/Modules/group__Group-Common.md +++ b/6.5/api/Modules/group__Group-Common.md @@ -20,4 +20,4 @@ title: Common Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Modules/group__Group-Constraint.html b/6.5/api/Modules/group__Group-Constraint.html index 79f40ead1e..d063d9970f 100644 --- a/6.5/api/Modules/group__Group-Constraint.html +++ b/6.5/api/Modules/group__Group-Constraint.html @@ -2382,7 +2382,7 @@

    Constraint Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Modules/group__Group-Constraint.md b/6.5/api/Modules/group__Group-Constraint.md index ff292cc7ae..037a268a39 100644 --- a/6.5/api/Modules/group__Group-Constraint.md +++ b/6.5/api/Modules/group__Group-Constraint.md @@ -14,4 +14,4 @@ title: Constraint Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Modules/group__Group-Image.html b/6.5/api/Modules/group__Group-Image.html index c87b8c0eb3..b91121aa65 100644 --- a/6.5/api/Modules/group__Group-Image.html +++ b/6.5/api/Modules/group__Group-Image.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Modules/group__Group-Image.md b/6.5/api/Modules/group__Group-Image.md index f49ccff726..7750a4f7da 100644 --- a/6.5/api/Modules/group__Group-Image.md +++ b/6.5/api/Modules/group__Group-Image.md @@ -20,4 +20,4 @@ title: Image Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Modules/group__Group-Mesh.html b/6.5/api/Modules/group__Group-Mesh.html index e1207b21a9..d916fc7bd4 100644 --- a/6.5/api/Modules/group__Group-Mesh.html +++ b/6.5/api/Modules/group__Group-Mesh.html @@ -2420,7 +2420,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Modules/group__Group-Mesh.md b/6.5/api/Modules/group__Group-Mesh.md index f546d2bb6b..d107dfa78c 100644 --- a/6.5/api/Modules/group__Group-Mesh.md +++ b/6.5/api/Modules/group__Group-Mesh.md @@ -22,4 +22,4 @@ title: Mesh Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/6.5/api/Modules/index_groups.html b/6.5/api/Modules/index_groups.html index 8f723ec155..a5f3949f55 100644 --- a/6.5/api/Modules/index_groups.html +++ b/6.5/api/Modules/index_groups.html @@ -2400,7 +2400,7 @@

    Modules

  • group Mesh Classes

  • -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Modules/index_groups.md b/6.5/api/Modules/index_groups.md index d940aa07ab..c831a84696 100644 --- a/6.5/api/Modules/index_groups.md +++ b/6.5/api/Modules/index_groups.md @@ -17,4 +17,4 @@ title: Modules ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Namespaces/index_namespaces.html b/6.5/api/Namespaces/index_namespaces.html index 64a294d3d3..00c2bd75fd 100644 --- a/6.5/api/Namespaces/index_namespaces.html +++ b/6.5/api/Namespaces/index_namespaces.html @@ -2414,7 +2414,7 @@

    Namespaces

  • namespace utils

  • -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/6.5/api/Namespaces/index_namespaces.md b/6.5/api/Namespaces/index_namespaces.md index 8f52ee565f..d3c194d689 100644 --- a/6.5/api/Namespaces/index_namespaces.md +++ b/6.5/api/Namespaces/index_namespaces.md @@ -25,4 +25,4 @@ title: Namespaces ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/6.5/api/Namespaces/namespaceUi.html b/6.5/api/Namespaces/namespaceUi.html index 9e9965f2c1..1ca250328c 100644 --- a/6.5/api/Namespaces/namespaceUi.html +++ b/6.5/api/Namespaces/namespaceUi.html @@ -2382,7 +2382,7 @@

    Ui


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespaceUi.md b/6.5/api/Namespaces/namespaceUi.md index 4f07f43017..515e140e48 100644 --- a/6.5/api/Namespaces/namespaceUi.md +++ b/6.5/api/Namespaces/namespaceUi.md @@ -14,4 +14,4 @@ title: Ui ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespacefmt.html b/6.5/api/Namespaces/namespacefmt.html index 3b103e910b..1c035477f4 100644 --- a/6.5/api/Namespaces/namespacefmt.html +++ b/6.5/api/Namespaces/namespacefmt.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Namespaces/namespacefmt.md b/6.5/api/Namespaces/namespacefmt.md index 708588dd10..9bf9a222e9 100644 --- a/6.5/api/Namespaces/namespacefmt.md +++ b/6.5/api/Namespaces/namespacefmt.md @@ -20,4 +20,4 @@ title: fmt ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceitk.html b/6.5/api/Namespaces/namespaceitk.html index 827f54e785..fe05429cbd 100644 --- a/6.5/api/Namespaces/namespaceitk.html +++ b/6.5/api/Namespaces/namespaceitk.html @@ -2691,7 +2691,7 @@

    variable nbh26Table

    };
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Namespaces/namespaceitk.md b/6.5/api/Namespaces/namespaceitk.md index 35956cc1a5..07a3c190da 100644 --- a/6.5/api/Namespaces/namespaceitk.md +++ b/6.5/api/Namespaces/namespaceitk.md @@ -184,4 +184,4 @@ static int nbh26Table = { ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceitk_1_1Functor.html b/6.5/api/Namespaces/namespaceitk_1_1Functor.html index 9f05475629..4ee4b4f0a2 100644 --- a/6.5/api/Namespaces/namespaceitk_1_1Functor.html +++ b/6.5/api/Namespaces/namespaceitk_1_1Functor.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Namespaces/namespaceitk_1_1Functor.md b/6.5/api/Namespaces/namespaceitk_1_1Functor.md index a346af84ed..971229d780 100644 --- a/6.5/api/Namespaces/namespaceitk_1_1Functor.md +++ b/6.5/api/Namespaces/namespaceitk_1_1Functor.md @@ -20,4 +20,4 @@ title: itk::Functor ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceshapeworks.html b/6.5/api/Namespaces/namespaceshapeworks.html index 780ae16ac9..b23f8f47e5 100644 --- a/6.5/api/Namespaces/namespaceshapeworks.html +++ b/6.5/api/Namespaces/namespaceshapeworks.html @@ -7114,7 +7114,7 @@

    variable Pi

    pi that doesn't depend on deprecated or non-std lib defines


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/6.5/api/Namespaces/namespaceshapeworks.md b/6.5/api/Namespaces/namespaceshapeworks.md index 89daf00e30..edbf1c69bb 100644 --- a/6.5/api/Namespaces/namespaceshapeworks.md +++ b/6.5/api/Namespaces/namespaceshapeworks.md @@ -2594,4 +2594,4 @@ pi that doesn't depend on deprecated or non-std lib defines ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.html b/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.html index 89bc65f339..d321155b4f 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.html +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.html @@ -2444,7 +2444,7 @@

    function compute_thickness

    Compute the cortical thickness of a mesh and image (e.g. CT)


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.md b/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.md index 53e8e0fb67..78eae5efe4 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.md +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.md @@ -37,4 +37,4 @@ Compute the cortical thickness of a mesh and image (e.g. CT) ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1particles.html b/6.5/api/Namespaces/namespaceshapeworks_1_1particles.html index 924e971b59..b28935605f 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1particles.html +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1particles.html @@ -2488,7 +2488,7 @@

    function write_particles_from_vect )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1particles.md b/6.5/api/Namespaces/namespaceshapeworks_1_1particles.md index 7637462267..c3ba6d121e 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1particles.md +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1particles.md @@ -63,4 +63,4 @@ void write_particles_from_vector( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1project.html b/6.5/api/Namespaces/namespaceshapeworks_1_1project.html index 2a45ffeb95..7c0cf37d66 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1project.html +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1project.html @@ -2413,7 +2413,7 @@

    Namespaces


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1project.md b/6.5/api/Namespaces/namespaceshapeworks_1_1project.md index 1866f69fe5..931297189a 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1project.md +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1project.md @@ -21,4 +21,4 @@ title: shapeworks::project ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html index 63764f2a2c..4a7b57ff4e 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html @@ -2660,7 +2660,7 @@

    variable WORLD_PARTICLES_PREFIX

    static constexpr const char * WORLD_PARTICLES_PREFIX = "world_particles_";
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md index cd36faace9..47b985313f 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md @@ -157,4 +157,4 @@ static constexpr const char * WORLD_PARTICLES_PREFIX = "world_particles_"; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html index a8fe72317a..282184137e 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html @@ -2478,7 +2478,7 @@

    using StringMultiMap

    using shapeworks::project::types::StringMultiMap = typedef std::map<std::string, StringMap>;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md index 8864c238b8..c3bd2ac60a 100644 --- a/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md +++ b/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md @@ -53,4 +53,4 @@ using shapeworks::project::types::StringMultiMap = typedef std::mapstd
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespacestd.md b/6.5/api/Namespaces/namespacestd.md index 06dafe50e6..3ee28e287a 100644 --- a/6.5/api/Namespaces/namespacestd.md +++ b/6.5/api/Namespaces/namespacestd.md @@ -14,4 +14,4 @@ title: std ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/api/Namespaces/namespaceutils.html b/6.5/api/Namespaces/namespaceutils.html index e9c59ede0a..2b103e911b 100644 --- a/6.5/api/Namespaces/namespaceutils.html +++ b/6.5/api/Namespaces/namespaceutils.html @@ -2382,7 +2382,7 @@

    utils


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/6.5/api/Namespaces/namespaceutils.md b/6.5/api/Namespaces/namespaceutils.md index f186ff5bea..866dd477a8 100644 --- a/6.5/api/Namespaces/namespaceutils.md +++ b/6.5/api/Namespaces/namespaceutils.md @@ -14,4 +14,4 @@ title: utils ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/6.5/python/python-api.html b/6.5/python/python-api.html index 2f2b7e1314..410e779aa8 100644 --- a/6.5/python/python-api.html +++ b/6.5/python/python-api.html @@ -16161,7 +16161,7 @@

    -

    seed(seed: int = 1698185790239257) -> None

    +

    seed(seed: int = 1698248459365377) -> None

    sets the seed for random number generation (internal use)

    diff --git a/6.5/search/search_index.json b/6.5/search/search_index.json index 5a83c9de07..7ee5ccd27c 100644 --- a/6.5/search/search_index.json +++ b/6.5/search/search_index.json @@ -1 +1 @@ -{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"Welcome to ShapeWorks! What is ShapeWorks? ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results. Latest & Greatest Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements. Why use ShapeWorks? ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages ShapeWorks Get-Togethers Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu . ShapeWorks Workshops & Webinars ShapeWorks @SB3C 2021 Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia ShapeWorks in Action! The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"Home"},{"location":"index.html#welcome-to-shapeworks","text":"","title":"Welcome to ShapeWorks!"},{"location":"index.html#what-is-shapeworks","text":"ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results.","title":"What is ShapeWorks?"},{"location":"index.html#latest-greatest","text":"Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements.","title":"Latest & Greatest"},{"location":"index.html#why-use-shapeworks","text":"ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages","title":"Why use ShapeWorks?"},{"location":"index.html#shapeworks-get-togethers","text":"Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu .","title":"ShapeWorks Get-Togethers"},{"location":"index.html#shapeworks-workshops-webinars","text":"","title":"ShapeWorks Workshops & Webinars"},{"location":"index.html#shapeworks-sb3c-2021","text":"Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia","title":"ShapeWorks @SB3C 2021"},{"location":"index.html#shapeworks-in-action","text":"The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"ShapeWorks in Action!"},{"location":"todo.html","text":"Documentation ToDo List To add/edit for docs index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal. To investigate for docs How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics? For ShapeWorks repo Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case Misc Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Documentation ToDo List"},{"location":"todo.html#documentation-todo-list","text":"","title":"Documentation ToDo List"},{"location":"todo.html#to-addedit-for-docs","text":"index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal.","title":"To add/edit for docs"},{"location":"todo.html#to-investigate-for-docs","text":"How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics?","title":"To investigate for docs"},{"location":"todo.html#for-shapeworks-repo","text":"Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case","title":"For ShapeWorks repo"},{"location":"todo.html#misc","text":"Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Misc"},{"location":"about/contact.html","text":"Contact Us Users Forum Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Users Mailing List Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu. Developers Mailing List You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Contact Us"},{"location":"about/contact.html#contact-us","text":"","title":"Contact Us"},{"location":"about/contact.html#users-forum","text":"Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community.","title":"Users Forum"},{"location":"about/contact.html#users-mailing-list","text":"Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu.","title":"Users Mailing List"},{"location":"about/contact.html#developers-mailing-list","text":"You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Developers Mailing List"},{"location":"about/license.html","text":"ShapeWorks License ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"about/license.html#shapeworks-license","text":"ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"ShapeWorks License"},{"location":"about/release-notes.html","text":"Release Notes ShapeWorks 6.4.2 - 2023-07-05 Fixes Fix python module versions preventing python import from working (#2104) ShapeWorks 6.4.1 - 2023-05-10 Fixes Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079) ShapeWorks 6.4.0 - 2023-05-05 What is new? ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944) ShapeWorks 6.3.2 - 2022-10-04 Fixes Fix install_shapeworks.sh on Linux (#1883) ShapeWorks 6.3.1 - 2022-07-22 Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) ShapeWorks 6.3.0 - 2022-06-09 What is new? ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation. Fixes Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank ShapeWorks 6.2.1 - 2022-01-07 What is new? ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint. Fixes Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes ShapeWorks 6.2 - 2021-11-16 What is new? ShapeWorks Back-end New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details. ShapeWorks Front-end Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details. User's Support Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details. Deep Learning DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details. Improvements ShapeWorks Back-end Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary. User's Support Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details. Fixes ShapeWorks Back-end Memory leak: Fixed memory leak issues in FEMesh operations ShapeWorks Front-end Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools. ShapeWorks 6.1 - 2021-06-28 What is new? ShapeWorks Back-end Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings. ShapeWorks Front-end Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example. User's Support Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively. Improvements ShapeWorks Back-end Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality. ShapeWorks Front-end Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers. Deep Learning & Shape Modeling Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU. User's Support Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import. Fixes ShapeWorks Back-end Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image. ShapeWorks Front-end Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved. Deep Learning & Shape Modeling DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command. ShapeWorks 6.0 - 2021-03-30 What's New User's Support New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort. ShapeWorks Back-end Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests. All-in-one Studio Front-end Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step. Deep Learning & Shape Modeling DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually. Improvements User's Support Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools. ShapeWorks Back-end Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups. All-in-one Studio Front-end Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems. Deep Learning & Shape Modeling More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding. Fixes ShapeWorks Back-end Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks. All-in-one Studio Front-end Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation. ShapeWorks 5.5.0 - 2020-10-15 What's New User's Support Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models. ShapeWorks Back-end ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details. All-in-one Studio Front-end Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet. Deep Learning & Shape Modeling New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details. Improvements User's Support Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming. ShapeWorks Back-end Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases. All-in-one Studio Front-end Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects. Fixes ShapeWorks Back-end Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints. ShapeWorks 5.4.1 - 2020-06-15 Fixes ShapeWorks Studio: Fixed crash when importing data on a new/blank project. ShapeWorks 5.4.0 - 2020-06-10 What's New New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases. Improvements Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models. Fixes Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare ShapeWorks 5.3.0 - 2020-02-20 What's New Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md) Improvements Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart ShapeWorks 5.2.2 - 2020-01-09 Fixes Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes ShapeWorks 5.2.1 - 2019-11-09 Fixes Fix examples, binaries ShapeWorks 5.2.0 - 2019-11-07 What's New Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically Improvements Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun Fixes Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Release Notes"},{"location":"about/release-notes.html#release-notes","text":"","title":"Release Notes"},{"location":"about/release-notes.html#shapeworks-642-2023-07-05","text":"","title":"ShapeWorks 6.4.2 - 2023-07-05"},{"location":"about/release-notes.html#fixes","text":"Fix python module versions preventing python import from working (#2104)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-641-2023-05-10","text":"","title":"ShapeWorks 6.4.1 - 2023-05-10"},{"location":"about/release-notes.html#fixes_1","text":"Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-640-2023-05-05","text":"","title":"ShapeWorks 6.4.0 - 2023-05-05"},{"location":"about/release-notes.html#what-is-new","text":"ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site","title":"What is new?"},{"location":"about/release-notes.html#fixes_2","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-632-2022-10-04","text":"","title":"ShapeWorks 6.3.2 - 2022-10-04"},{"location":"about/release-notes.html#fixes_3","text":"Fix install_shapeworks.sh on Linux (#1883)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-631-2022-07-22","text":"","title":"ShapeWorks 6.3.1 - 2022-07-22"},{"location":"about/release-notes.html#fixes_4","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-630-2022-06-09","text":"","title":"ShapeWorks 6.3.0 - 2022-06-09"},{"location":"about/release-notes.html#what-is-new_1","text":"ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation.","title":"What is new?"},{"location":"about/release-notes.html#fixes_5","text":"Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-621-2022-01-07","text":"","title":"ShapeWorks 6.2.1 - 2022-01-07"},{"location":"about/release-notes.html#what-is-new_2","text":"ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint.","title":"What is new?"},{"location":"about/release-notes.html#fixes_6","text":"Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-62-2021-11-16","text":"","title":"ShapeWorks 6.2 - 2021-11-16"},{"location":"about/release-notes.html#what-is-new_3","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end","text":"New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end","text":"Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support","text":"Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details.","title":"User's Support"},{"location":"about/release-notes.html#deep-learning","text":"DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details.","title":"Deep Learning"},{"location":"about/release-notes.html#improvements","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_1","text":"Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#users-support_1","text":"Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details.","title":"User's Support"},{"location":"about/release-notes.html#fixes_7","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_2","text":"Memory leak: Fixed memory leak issues in FEMesh operations","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_1","text":"Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#shapeworks-61-2021-06-28","text":"","title":"ShapeWorks 6.1 - 2021-06-28"},{"location":"about/release-notes.html#what-is-new_4","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end_3","text":"Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_2","text":"Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support_2","text":"Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively.","title":"User's Support"},{"location":"about/release-notes.html#improvements_1","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_4","text":"Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_3","text":"Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling","text":"Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#users-support_3","text":"Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import.","title":"User's Support"},{"location":"about/release-notes.html#fixes_8","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_5","text":"Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_4","text":"Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_1","text":"DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#shapeworks-60-2021-03-30","text":"","title":"ShapeWorks 6.0 - 2021-03-30"},{"location":"about/release-notes.html#whats-new","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_4","text":"New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_6","text":"Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end","text":"Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_2","text":"DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_2","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_5","text":"Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_7","text":"Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_1","text":"Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_3","text":"More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#fixes_9","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_8","text":"Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_2","text":"Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#shapeworks-550-2020-10-15","text":"","title":"ShapeWorks 5.5.0 - 2020-10-15"},{"location":"about/release-notes.html#whats-new_1","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_6","text":"Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_9","text":"ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_3","text":"Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_4","text":"New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_3","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_7","text":"Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_10","text":"Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_4","text":"Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#fixes_10","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_11","text":"Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-541-2020-06-15","text":"","title":"ShapeWorks 5.4.1 - 2020-06-15"},{"location":"about/release-notes.html#fixes_11","text":"ShapeWorks Studio: Fixed crash when importing data on a new/blank project.","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-540-2020-06-10","text":"","title":"ShapeWorks 5.4.0 - 2020-06-10"},{"location":"about/release-notes.html#whats-new_2","text":"New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases.","title":"What's New"},{"location":"about/release-notes.html#improvements_4","text":"Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models.","title":"Improvements"},{"location":"about/release-notes.html#fixes_12","text":"Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-530-2020-02-20","text":"","title":"ShapeWorks 5.3.0 - 2020-02-20"},{"location":"about/release-notes.html#whats-new_3","text":"Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md)","title":"What's New"},{"location":"about/release-notes.html#improvements_5","text":"Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-522-2020-01-09","text":"","title":"ShapeWorks 5.2.2 - 2020-01-09"},{"location":"about/release-notes.html#fixes_13","text":"Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-521-2019-11-09","text":"","title":"ShapeWorks 5.2.1 - 2019-11-09"},{"location":"about/release-notes.html#fixes_14","text":"Fix examples, binaries","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-520-2019-11-07","text":"","title":"ShapeWorks 5.2.0 - 2019-11-07"},{"location":"about/release-notes.html#whats-new_4","text":"Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically","title":"What's New"},{"location":"about/release-notes.html#improvements_6","text":"Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun","title":"Improvements"},{"location":"about/release-notes.html#fixes_15","text":"Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Fixes"},{"location":"about/team.html","text":"Meet ShapeWorkers! Principal Investigators Shireen Elhabian Ross Whitaker Software Developers Alan Morris Cameron Christensen Archanasri Subramanian Researchers Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria Past Contributors Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Meet ShapeWorkers!"},{"location":"about/team.html#meet-shapeworkers","text":"","title":"Meet ShapeWorkers!"},{"location":"about/team.html#principal-investigators","text":"Shireen Elhabian Ross Whitaker","title":"Principal Investigators"},{"location":"about/team.html#software-developers","text":"Alan Morris Cameron Christensen Archanasri Subramanian","title":"Software Developers"},{"location":"about/team.html#researchers","text":"Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria","title":"Researchers"},{"location":"about/team.html#past-contributors","text":"Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Past Contributors"},{"location":"api/Classes/classColorScheme.html","text":"ColorScheme Public Classes Name struct rgb Public Functions Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme () Public Attributes Name rgb foreground rgb background rgb alt Public Functions Documentation function background_qcolor inline QColor background_qcolor ( int alpha ) function foreground_qcolor inline QColor foreground_qcolor () function get_text_color inline QColor get_text_color () function get_text_intensity inline double get_text_intensity () function ColorScheme inline ColorScheme () function ~ColorScheme inline ~ ColorScheme () Public Attributes Documentation variable foreground rgb foreground ; variable background rgb background ; variable alt rgb alt ; Updated on 2023-10-24 at 22:16:02 +0000","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#colorscheme","text":"","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-classes","text":"Name struct rgb","title":"Public Classes"},{"location":"api/Classes/classColorScheme.html#public-functions","text":"Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme ()","title":"Public Functions"},{"location":"api/Classes/classColorScheme.html#public-attributes","text":"Name rgb foreground rgb background rgb alt","title":"Public Attributes"},{"location":"api/Classes/classColorScheme.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorScheme.html#function-background_qcolor","text":"inline QColor background_qcolor ( int alpha )","title":"function background_qcolor"},{"location":"api/Classes/classColorScheme.html#function-foreground_qcolor","text":"inline QColor foreground_qcolor ()","title":"function foreground_qcolor"},{"location":"api/Classes/classColorScheme.html#function-get_text_color","text":"inline QColor get_text_color ()","title":"function get_text_color"},{"location":"api/Classes/classColorScheme.html#function-get_text_intensity","text":"inline double get_text_intensity ()","title":"function get_text_intensity"},{"location":"api/Classes/classColorScheme.html#function-colorscheme","text":"inline ColorScheme ()","title":"function ColorScheme"},{"location":"api/Classes/classColorScheme.html#function-colorscheme_1","text":"inline ~ ColorScheme ()","title":"function ~ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classColorScheme.html#variable-foreground","text":"rgb foreground ;","title":"variable foreground"},{"location":"api/Classes/classColorScheme.html#variable-background","text":"rgb background ;","title":"variable background"},{"location":"api/Classes/classColorScheme.html#variable-alt","text":"rgb alt ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable alt"},{"location":"api/Classes/classColorSchemes.html","text":"ColorSchemes Inherits from std::vector< ColorScheme > Public Functions Name ColorSchemes () ~ColorSchemes () Public Functions Documentation function ColorSchemes inline ColorSchemes () function ~ColorSchemes inline ~ ColorSchemes () Updated on 2023-10-24 at 22:16:02 +0000","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#colorschemes","text":"Inherits from std::vector< ColorScheme >","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#public-functions","text":"Name ColorSchemes () ~ColorSchemes ()","title":"Public Functions"},{"location":"api/Classes/classColorSchemes.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes","text":"inline ColorSchemes ()","title":"function ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes_1","text":"inline ~ ColorSchemes () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ColorSchemes"},{"location":"api/Classes/classCustomSlider.html","text":"CustomSlider Inherits from QSlider Public Functions Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr) Protected Functions Name virtual void paintEvent (QPaintEvent * ev) Public Functions Documentation function CustomSlider inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) function CustomSlider explicit CustomSlider ( QWidget * parent = nullptr ) Protected Functions Documentation function paintEvent virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-24 at 22:16:02 +0000","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#customslider","text":"Inherits from QSlider","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#public-functions","text":"Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr)","title":"Public Functions"},{"location":"api/Classes/classCustomSlider.html#protected-functions","text":"Name virtual void paintEvent (QPaintEvent * ev)","title":"Protected Functions"},{"location":"api/Classes/classCustomSlider.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-customslider","text":"inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#function-customslider_1","text":"explicit CustomSlider ( QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-paintevent","text":"virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function paintEvent"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html","text":"CustomSurfaceReconstructionFilter Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New () Protected Functions Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * ) Protected Attributes Name int NeighborhoodSize double SampleSpacing Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkGetMacro vtkGetMacro ( NeighborhoodSize , int ) function vtkSetMacro vtkSetMacro ( NeighborhoodSize , int ) function vtkGetMacro vtkGetMacro ( SampleSpacing , double ) function vtkSetMacro vtkSetMacro ( SampleSpacing , double ) function New static CustomSurfaceReconstructionFilter * New () Protected Functions Documentation function CustomSurfaceReconstructionFilter CustomSurfaceReconstructionFilter () function ~CustomSurfaceReconstructionFilter inline ~ CustomSurfaceReconstructionFilter () function RequestInformation virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function RequestData virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function FillInputPortInformation virtual int FillInputPortInformation ( int , vtkInformation * ) Protected Attributes Documentation variable NeighborhoodSize int NeighborhoodSize ; variable SampleSpacing double SampleSpacing ; Updated on 2023-10-24 at 22:16:02 +0000","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#customsurfacereconstructionfilter","text":"Inherits from vtkImageAlgorithm","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions","text":"Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New ()","title":"Public Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions","text":"Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * )","title":"Protected Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes","text":"Name int NeighborhoodSize double SampleSpacing","title":"Protected Attributes"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtktypemacro","text":"vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro","text":"vtkGetMacro ( NeighborhoodSize , int )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro","text":"vtkSetMacro ( NeighborhoodSize , int )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro_1","text":"vtkGetMacro ( SampleSpacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro_1","text":"vtkSetMacro ( SampleSpacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-new","text":"static CustomSurfaceReconstructionFilter * New ()","title":"function New"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter","text":"CustomSurfaceReconstructionFilter ()","title":"function CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter_1","text":"inline ~ CustomSurfaceReconstructionFilter ()","title":"function ~CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestData"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int , vtkInformation * )","title":"function FillInputPortInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-neighborhoodsize","text":"int NeighborhoodSize ;","title":"variable NeighborhoodSize"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-samplespacing","text":"double SampleSpacing ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable SampleSpacing"},{"location":"api/Classes/classFEAreaCoverage.html","text":"FEAreaCoverage Public Functions Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const Protected Functions Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q) Protected Attributes Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius Public Functions Documentation function FEAreaCoverage FEAreaCoverage () function SetSelection1 inline void SetSelection1 ( vector < int > & s ) function SetSelection2 inline void SetSelection2 ( vector < int > & s ) function Apply vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ) function AllowBackIntersection void AllowBackIntersection ( bool b ) function AllowBackIntersection bool AllowBackIntersection () const function SetAngleThreshold void SetAngleThreshold ( double w ) function GetAngleThreshold double GetAngleThreshold () const function SetBackSearchRadius void SetBackSearchRadius ( double R ) function GetBackSearchRadius double GetBackSearchRadius () const Protected Functions Documentation function UpdateSurface void UpdateSurface ( FEAreaCoverage :: Surface & s ) function intersect bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ) function faceIntersect bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ) Protected Attributes Documentation variable m_surf1 Surface m_surf1 ; variable m_surf2 Surface m_surf2 ; variable m_ballowBackIntersections bool m_ballowBackIntersections ; variable m_angleThreshold double m_angleThreshold ; variable m_backSearchRadius double m_backSearchRadius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#feareacoverage","text":"","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions","text":"Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions","text":"Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q)","title":"Protected Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes","text":"Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius","title":"Protected Attributes"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-feareacoverage","text":"FEAreaCoverage ()","title":"function FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection1","text":"inline void SetSelection1 ( vector < int > & s )","title":"function SetSelection1"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection2","text":"inline void SetSelection2 ( vector < int > & s )","title":"function SetSelection2"},{"location":"api/Classes/classFEAreaCoverage.html#function-apply","text":"vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 )","title":"function Apply"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection","text":"void AllowBackIntersection ( bool b )","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection_1","text":"bool AllowBackIntersection () const","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-setanglethreshold","text":"void SetAngleThreshold ( double w )","title":"function SetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-getanglethreshold","text":"double GetAngleThreshold () const","title":"function GetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-setbacksearchradius","text":"void SetBackSearchRadius ( double R )","title":"function SetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#function-getbacksearchradius","text":"double GetBackSearchRadius () const","title":"function GetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-updatesurface","text":"void UpdateSurface ( FEAreaCoverage :: Surface & s )","title":"function UpdateSurface"},{"location":"api/Classes/classFEAreaCoverage.html#function-intersect","text":"bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q )","title":"function intersect"},{"location":"api/Classes/classFEAreaCoverage.html#function-faceintersect","text":"bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q )","title":"function faceIntersect"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf1","text":"Surface m_surf1 ;","title":"variable m_surf1"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf2","text":"Surface m_surf2 ;","title":"variable m_surf2"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_ballowbackintersections","text":"bool m_ballowBackIntersections ;","title":"variable m_ballowBackIntersections"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_anglethreshold","text":"double m_angleThreshold ;","title":"variable m_angleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_backsearchradius","text":"double m_backSearchRadius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_backSearchRadius"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html","text":"FEAreaCoverage::Surface Public Functions Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes () Public Attributes Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT Public Functions Documentation function Surface inline Surface () function Faces inline int Faces () function Create void Create ( std :: shared_ptr < FEMesh > m ) function Nodes inline int Nodes () Public Attributes Documentation variable m_mesh std :: shared_ptr < FEMesh > m_mesh ; variable m_face vector < int > m_face ; variable m_node vector < int > m_node ; variable m_pos vector < vec3d > m_pos ; variable m_lnode vector < int > m_lnode ; variable m_norm vector < vec3d > m_norm ; variable m_fnorm vector < vec3d > m_fnorm ; variable m_NLT vector < vector < int > > m_NLT ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#feareacoveragesurface","text":"","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions","text":"Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes ()","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes","text":"Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT","title":"Public Attributes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-surface","text":"inline Surface ()","title":"function Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-faces","text":"inline int Faces ()","title":"function Faces"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-create","text":"void Create ( std :: shared_ptr < FEMesh > m )","title":"function Create"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_mesh","text":"std :: shared_ptr < FEMesh > m_mesh ;","title":"variable m_mesh"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_face","text":"vector < int > m_face ;","title":"variable m_face"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_pos","text":"vector < vec3d > m_pos ;","title":"variable m_pos"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_lnode","text":"vector < int > m_lnode ;","title":"variable m_lnode"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_norm","text":"vector < vec3d > m_norm ;","title":"variable m_norm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_fnorm","text":"vector < vec3d > m_fnorm ;","title":"variable m_fnorm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_nlt","text":"vector < vector < int > > m_NLT ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_NLT"},{"location":"api/Classes/classFEAutoMesher.html","text":"FEAutoMesher Public Functions Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle () Protected Functions Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m) Protected Attributes Name FEMesh * m_pm double m_wsmooth Public Functions Documentation function FEAutoMesher FEAutoMesher () function BuildMesh void BuildMesh ( FEMesh * pm ) function AutoPartitionSurface void AutoPartitionSurface ( FEMesh & m ) function AutoPartitionEdges void AutoPartitionEdges ( FEMesh & m ) function AutoPartitionNodes void AutoPartitionNodes ( FEMesh & m ) function Repartition void Repartition ( FEMesh & m ) function SetSmoothingAngle inline void SetSmoothingAngle ( double w ) function GetSmoothingAngle inline double GetSmoothingAngle () Protected Functions Documentation function BuildFaces void BuildFaces ( FEMesh & m ) function BuildEdges void BuildEdges ( FEMesh & m ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_wsmooth double m_wsmooth ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#feautomesher","text":"","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#public-functions","text":"Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle ()","title":"Public Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions","text":"Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m)","title":"Protected Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes","text":"Name FEMesh * m_pm double m_wsmooth","title":"Protected Attributes"},{"location":"api/Classes/classFEAutoMesher.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-feautomesher","text":"FEAutoMesher ()","title":"function FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#function-buildmesh","text":"void BuildMesh ( FEMesh * pm )","title":"function BuildMesh"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionsurface","text":"void AutoPartitionSurface ( FEMesh & m )","title":"function AutoPartitionSurface"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionedges","text":"void AutoPartitionEdges ( FEMesh & m )","title":"function AutoPartitionEdges"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionnodes","text":"void AutoPartitionNodes ( FEMesh & m )","title":"function AutoPartitionNodes"},{"location":"api/Classes/classFEAutoMesher.html#function-repartition","text":"void Repartition ( FEMesh & m )","title":"function Repartition"},{"location":"api/Classes/classFEAutoMesher.html#function-setsmoothingangle","text":"inline void SetSmoothingAngle ( double w )","title":"function SetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#function-getsmoothingangle","text":"inline double GetSmoothingAngle ()","title":"function GetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-buildfaces","text":"void BuildFaces ( FEMesh & m )","title":"function BuildFaces"},{"location":"api/Classes/classFEAutoMesher.html#function-buildedges","text":"void BuildEdges ( FEMesh & m )","title":"function BuildEdges"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_wsmooth","text":"double m_wsmooth ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_wsmooth"},{"location":"api/Classes/classFECVDDecimationModifier.html","text":"FECVDDecimationModifier More... #include Public Functions Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier. Public Attributes Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient Detailed Description class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FECVDDecimationModifier FECVDDecimationModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier. Public Attributes Documentation variable m_pct double m_pct ; percentage of target number of clusters/vertices variable m_bcvd bool m_bcvd ; variable m_sel_pct double m_sel_pct ; variable m_gradient double m_gradient ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#fecvddecimationmodifier","text":"More... #include ","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions","text":"Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier.","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes","text":"Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier.html#detailed-description","text":"class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-fecvddecimationmodifier","text":"FECVDDecimationModifier () Constructor.","title":"function FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier.","title":"function Apply"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_pct","text":"double m_pct ; percentage of target number of clusters/vertices","title":"variable m_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_bcvd","text":"bool m_bcvd ;","title":"variable m_bcvd"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_sel_pct","text":"double m_sel_pct ;","title":"variable m_sel_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_gradient","text":"double m_gradient ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_gradient"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html","text":"FECVDDecimationModifier::Cluster Public Functions Name Cluster () int faces () const Public Attributes Name vec3d m_sgamma double m_srho vector< int > m_fid Public Functions Documentation function Cluster inline Cluster () function faces inline int faces () const Public Attributes Documentation variable m_sgamma vec3d m_sgamma ; variable m_srho double m_srho ; variable m_fid vector < int > m_fid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#fecvddecimationmodifiercluster","text":"","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions","text":"Name Cluster () int faces () const","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes","text":"Name vec3d m_sgamma double m_srho vector< int > m_fid","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-cluster","text":"inline Cluster ()","title":"function Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-faces","text":"inline int faces () const","title":"function faces"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_sgamma","text":"vec3d m_sgamma ;","title":"variable m_sgamma"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_srho","text":"double m_srho ;","title":"variable m_srho"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_fid","text":"vector < int > m_fid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_fid"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html","text":"FECVDDecimationModifier::NODE Public Types Name enum @0 Public Functions Name NODE () bool AttachToCluster (int n) Public Attributes Name int c int nc Public Types Documentation enum @0 Enumerator Value Description MAX_CLUSTERS =23 Public Functions Documentation function NODE inline NODE () function AttachToCluster bool AttachToCluster ( int n ) Public Attributes Documentation variable c int c ; variable nc int nc ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#fecvddecimationmodifiernode","text":"","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types","text":"Name enum @0","title":"Public Types"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions","text":"Name NODE () bool AttachToCluster (int n)","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes","text":"Name int c int nc","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#enum-0","text":"Enumerator Value Description MAX_CLUSTERS =23","title":"enum @0"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-node","text":"inline NODE ()","title":"function NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-attachtocluster","text":"bool AttachToCluster ( int n )","title":"function AttachToCluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-c","text":"int c ;","title":"variable c"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-nc","text":"int nc ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable nc"},{"location":"api/Classes/classFECoreMesh.html","text":"FECoreMesh More... #include Inherited by FEMesh Public Functions Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Detailed Description class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data. Public Functions Documentation function FECoreMesh FECoreMesh () constructor function ~FECoreMesh virtual ~ FECoreMesh () destructor function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create function IsType bool IsType ( int ntype ) check the type of the mesh function Elements virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements function ElementRef virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef function ElementPtr virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr function Nodes inline int Nodes () const function Edges inline int Edges () const function Faces inline int Faces () const function Node inline FENode & Node ( int n ) function Edge inline FEEdge & Edge ( int n ) function Face inline FEFace & Face ( int n ) function NodePtr inline FENode * NodePtr ( int n = 0 ) function EdgePtr inline FEEdge * EdgePtr ( int n = 0 ) function FacePtr inline FEFace * FacePtr ( int n = 0 ) Protected Attributes Documentation variable m_Node std :: vector < FENode > m_Node ; FE nodes. variable m_Edge std :: vector < FEEdge > m_Edge ; FE edges. variable m_Face std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-24 at 22:16:02 +0000","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#fecoremesh","text":"More... #include Inherited by FEMesh","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#public-functions","text":"Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0)","title":"Public Functions"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes","text":"Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Protected Attributes"},{"location":"api/Classes/classFECoreMesh.html#detailed-description","text":"class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data.","title":"Detailed Description"},{"location":"api/Classes/classFECoreMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh","text":"FECoreMesh () constructor","title":"function FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh_1","text":"virtual ~ FECoreMesh () destructor","title":"function ~FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create","title":"function Create"},{"location":"api/Classes/classFECoreMesh.html#function-istype","text":"bool IsType ( int ntype ) check the type of the mesh","title":"function IsType"},{"location":"api/Classes/classFECoreMesh.html#function-elements","text":"virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFECoreMesh.html#function-elementref","text":"virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFECoreMesh.html#function-elementptr","text":"virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFECoreMesh.html#function-nodes","text":"inline int Nodes () const","title":"function Nodes"},{"location":"api/Classes/classFECoreMesh.html#function-edges","text":"inline int Edges () const","title":"function Edges"},{"location":"api/Classes/classFECoreMesh.html#function-faces","text":"inline int Faces () const","title":"function Faces"},{"location":"api/Classes/classFECoreMesh.html#function-node","text":"inline FENode & Node ( int n )","title":"function Node"},{"location":"api/Classes/classFECoreMesh.html#function-edge","text":"inline FEEdge & Edge ( int n )","title":"function Edge"},{"location":"api/Classes/classFECoreMesh.html#function-face","text":"inline FEFace & Face ( int n )","title":"function Face"},{"location":"api/Classes/classFECoreMesh.html#function-nodeptr","text":"inline FENode * NodePtr ( int n = 0 )","title":"function NodePtr"},{"location":"api/Classes/classFECoreMesh.html#function-edgeptr","text":"inline FEEdge * EdgePtr ( int n = 0 )","title":"function EdgePtr"},{"location":"api/Classes/classFECoreMesh.html#function-faceptr","text":"inline FEFace * FacePtr ( int n = 0 )","title":"function FacePtr"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFECoreMesh.html#variable-m_node","text":"std :: vector < FENode > m_Node ; FE nodes.","title":"variable m_Node"},{"location":"api/Classes/classFECoreMesh.html#variable-m_edge","text":"std :: vector < FEEdge > m_Edge ; FE edges.","title":"variable m_Edge"},{"location":"api/Classes/classFECoreMesh.html#variable-m_face","text":"std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_Face"},{"location":"api/Classes/classFEEdge.html","text":"FEEdge Inherits from FEItem Public Types Name enum @1 Public Functions Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node Public Attributes Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @1 Enumerator Value Description MAX_NODES 3 Public Functions Documentation function FEEdge FEEdge () constructor function operator== bool operator == ( const FEEdge & e ) edge comparison function Nodes inline int Nodes () return number of nodes function FindNode int FindNode ( int node ) find a node Public Attributes Documentation variable n int n ; edge nodes variable m_elem int m_elem ; the element to which this edge belongs (used only by beams) variable m_nbr int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#feedge","text":"Inherits from FEItem","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#public-types","text":"Name enum @1","title":"Public Types"},{"location":"api/Classes/classFEEdge.html#public-functions","text":"Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node","title":"Public Functions"},{"location":"api/Classes/classFEEdge.html#public-attributes","text":"Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1)","title":"Public Attributes"},{"location":"api/Classes/classFEEdge.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEEdge.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEEdge.html#enum-1","text":"Enumerator Value Description MAX_NODES 3","title":"enum @1"},{"location":"api/Classes/classFEEdge.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEEdge.html#function-feedge","text":"FEEdge () constructor","title":"function FEEdge"},{"location":"api/Classes/classFEEdge.html#function-operator","text":"bool operator == ( const FEEdge & e ) edge comparison","title":"function operator=="},{"location":"api/Classes/classFEEdge.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEEdge.html#function-findnode","text":"int FindNode ( int node ) find a node","title":"function FindNode"},{"location":"api/Classes/classFEEdge.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEEdge.html#variable-n","text":"int n ; edge nodes","title":"variable n"},{"location":"api/Classes/classFEEdge.html#variable-m_elem","text":"int m_elem ; the element to which this edge belongs (used only by beams)","title":"variable m_elem"},{"location":"api/Classes/classFEEdge.html#variable-m_nbr","text":"int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_nbr"},{"location":"api/Classes/classFEElement.html","text":"FEElement Inherits from FEElement_ , FEItem Public Types Name enum @3 Public Functions Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type. Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @3 Enumerator Value Description MAX_NODES 27 Public Functions Documentation function FEElement FEElement () constructor function FEElement FEElement ( const FEElement & el ) copy constructor function operator= FEElement & operator = ( const FEElement & el ) assignment operator function SetType void SetType ( int ntype ) Set the element type. Updated on 2023-10-24 at 22:16:02 +0000","title":"FEElement"},{"location":"api/Classes/classFEElement.html#feelement","text":"Inherits from FEElement_ , FEItem","title":"FEElement"},{"location":"api/Classes/classFEElement.html#public-types","text":"Name enum @3","title":"Public Types"},{"location":"api/Classes/classFEElement.html#public-functions","text":"Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type.","title":"Public Functions"},{"location":"api/Classes/classFEElement.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEElement.html#enum-3","text":"Enumerator Value Description MAX_NODES 27","title":"enum @3"},{"location":"api/Classes/classFEElement.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement.html#function-feelement","text":"FEElement () constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-feelement_1","text":"FEElement ( const FEElement & el ) copy constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-operator","text":"FEElement & operator = ( const FEElement & el ) assignment operator","title":"function operator="},{"location":"api/Classes/classFEElement.html#function-settype","text":"void SetType ( int ntype ) Set the element type. Updated on 2023-10-24 at 22:16:02 +0000","title":"function SetType"},{"location":"api/Classes/classFEElementData.html","text":"FEElementData Public Functions Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax) Public Functions Documentation function FEElementData FEElementData () function FEElementData FEElementData ( const FEElementData & d ) function operator= FEElementData & operator = ( const FEElementData & d ) function Create void Create ( FEMesh * pm , double v = 0.0 ) function Size inline int Size () function get inline double get ( int i ) function set inline void set ( int i , double v ) function operator[] inline double & operator []( int i ) function SetName void SetName ( const char * sz ) function GetName inline const char * GetName () function FillRandomBox void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#feelementdata","text":"","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#public-functions","text":"Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax)","title":"Public Functions"},{"location":"api/Classes/classFEElementData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElementData.html#function-feelementdata","text":"FEElementData ()","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-feelementdata_1","text":"FEElementData ( const FEElementData & d )","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-operator","text":"FEElementData & operator = ( const FEElementData & d )","title":"function operator="},{"location":"api/Classes/classFEElementData.html#function-create","text":"void Create ( FEMesh * pm , double v = 0.0 )","title":"function Create"},{"location":"api/Classes/classFEElementData.html#function-size","text":"inline int Size ()","title":"function Size"},{"location":"api/Classes/classFEElementData.html#function-get","text":"inline double get ( int i )","title":"function get"},{"location":"api/Classes/classFEElementData.html#function-set","text":"inline void set ( int i , double v )","title":"function set"},{"location":"api/Classes/classFEElementData.html#function-operator_1","text":"inline double & operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEElementData.html#function-setname","text":"void SetName ( const char * sz )","title":"function SetName"},{"location":"api/Classes/classFEElementData.html#function-getname","text":"inline const char * GetName ()","title":"function GetName"},{"location":"api/Classes/classFEElementData.html#function-fillrandombox","text":"void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function FillRandomBox"},{"location":"api/Classes/classFEElement__.html","text":"FEElement_ Inherits from FEItem Inherited by FEElement , FETri3 Public Functions Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions Name void copy (const FEElement_ & el) Public Attributes Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEElement_ FEElement_ () constructor function is_equal bool is_equal ( FEElement_ & e ) function GetType inline int GetType () const return the element type function IsType inline bool IsType ( int ntype ) const Is the element of this type. function Nodes inline int Nodes () const number of nodes function Faces inline int Faces () const Number of faces (shells have no faces) function Edges inline int Edges () const Number of edges (solids have no edges) function GetFace int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces) function GetFace FEFace GetFace ( int i ) Get the face i (only solids have faces) function GetShellFace FEFace GetShellFace () Get the face of a shell. function GetEdge FEEdge GetEdge ( int i ) Get the edge. function IsExterior bool IsExterior () Is this an exterior element. function IsSolid inline bool IsSolid () function IsShell inline bool IsShell () function IsBeam inline bool IsBeam () Protected Functions Documentation function copy void copy ( const FEElement_ & el ) Public Attributes Documentation variable m_node int * m_node ; pointer to node data variable m_nbr int * m_nbr ; neighbour elements variable m_face int * m_face ; faces (-1 for interior faces) variable m_h double * m_h ; element thickness (only used by shells) variable m_fiber vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section variable m_Q mat3d m_Q ; local material orientation variable m_Qactive bool m_Qactive ; active local material orientation variable m_a0 double m_a0 ; cross-sectional area (only used by truss elements) Protected Attributes Documentation variable m_ntype int m_ntype ; type of element variable m_nodes int m_nodes ; nr of nodes variable m_nfaces int m_nfaces ; nr of faces ( 0 for shells) variable m_nedges int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#feelement_","text":"Inherits from FEItem Inherited by FEElement , FETri3","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#public-functions","text":"Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam ()","title":"Public Functions"},{"location":"api/Classes/classFEElement__.html#protected-functions","text":"Name void copy (const FEElement_ & el)","title":"Protected Functions"},{"location":"api/Classes/classFEElement__.html#public-attributes","text":"Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements)","title":"Public Attributes"},{"location":"api/Classes/classFEElement__.html#protected-attributes","text":"Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids)","title":"Protected Attributes"},{"location":"api/Classes/classFEElement__.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement__.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-feelement_","text":"FEElement_ () constructor","title":"function FEElement_"},{"location":"api/Classes/classFEElement__.html#function-is_equal","text":"bool is_equal ( FEElement_ & e )","title":"function is_equal"},{"location":"api/Classes/classFEElement__.html#function-gettype","text":"inline int GetType () const return the element type","title":"function GetType"},{"location":"api/Classes/classFEElement__.html#function-istype","text":"inline bool IsType ( int ntype ) const Is the element of this type.","title":"function IsType"},{"location":"api/Classes/classFEElement__.html#function-nodes","text":"inline int Nodes () const number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEElement__.html#function-faces","text":"inline int Faces () const Number of faces (shells have no faces)","title":"function Faces"},{"location":"api/Classes/classFEElement__.html#function-edges","text":"inline int Edges () const Number of edges (solids have no edges)","title":"function Edges"},{"location":"api/Classes/classFEElement__.html#function-getface","text":"int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getface_1","text":"FEFace GetFace ( int i ) Get the face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getshellface","text":"FEFace GetShellFace () Get the face of a shell.","title":"function GetShellFace"},{"location":"api/Classes/classFEElement__.html#function-getedge","text":"FEEdge GetEdge ( int i ) Get the edge.","title":"function GetEdge"},{"location":"api/Classes/classFEElement__.html#function-isexterior","text":"bool IsExterior () Is this an exterior element.","title":"function IsExterior"},{"location":"api/Classes/classFEElement__.html#function-issolid","text":"inline bool IsSolid ()","title":"function IsSolid"},{"location":"api/Classes/classFEElement__.html#function-isshell","text":"inline bool IsShell ()","title":"function IsShell"},{"location":"api/Classes/classFEElement__.html#function-isbeam","text":"inline bool IsBeam ()","title":"function IsBeam"},{"location":"api/Classes/classFEElement__.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-copy","text":"void copy ( const FEElement_ & el )","title":"function copy"},{"location":"api/Classes/classFEElement__.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_node","text":"int * m_node ; pointer to node data","title":"variable m_node"},{"location":"api/Classes/classFEElement__.html#variable-m_nbr","text":"int * m_nbr ; neighbour elements","title":"variable m_nbr"},{"location":"api/Classes/classFEElement__.html#variable-m_face","text":"int * m_face ; faces (-1 for interior faces)","title":"variable m_face"},{"location":"api/Classes/classFEElement__.html#variable-m_h","text":"double * m_h ; element thickness (only used by shells)","title":"variable m_h"},{"location":"api/Classes/classFEElement__.html#variable-m_fiber","text":"vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section","title":"variable m_fiber"},{"location":"api/Classes/classFEElement__.html#variable-m_q","text":"mat3d m_Q ; local material orientation","title":"variable m_Q"},{"location":"api/Classes/classFEElement__.html#variable-m_qactive","text":"bool m_Qactive ; active local material orientation","title":"variable m_Qactive"},{"location":"api/Classes/classFEElement__.html#variable-m_a0","text":"double m_a0 ; cross-sectional area (only used by truss elements)","title":"variable m_a0"},{"location":"api/Classes/classFEElement__.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_ntype","text":"int m_ntype ; type of element","title":"variable m_ntype"},{"location":"api/Classes/classFEElement__.html#variable-m_nodes","text":"int m_nodes ; nr of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEElement__.html#variable-m_nfaces","text":"int m_nfaces ; nr of faces ( 0 for shells)","title":"variable m_nfaces"},{"location":"api/Classes/classFEElement__.html#variable-m_nedges","text":"int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_nedges"},{"location":"api/Classes/classFEFace.html","text":"FEFace Inherits from FEItem Public Types Name enum @2 Public Functions Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external. Public Attributes Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @2 Enumerator Value Description MAX_NODES 9 Public Functions Documentation function FEFace FEFace () constructor function operator== bool operator == ( const FEFace & f ) comparison operator function Nodes inline int Nodes () return number of nodes function Edges int Edges () return number of edges function GetEdgeNodes void GetEdgeNodes ( int i , int * n ) get the edge node numbers function HasEdge bool HasEdge ( int n1 , int n2 ) See if this face has an edge. function HasNode bool HasNode ( int i ) See if this face has node with ID i. function FindNode int FindNode ( int i ) Fine the array index of node with ID i. function IsExternal inline bool IsExternal () Is this face internal or external. Public Attributes Documentation variable n int n ; nodal ID's variable m_nodes int m_nodes ; number of nodes variable m_nbr int m_nbr ; neighbour faces variable m_fn vec3d m_fn ; face normal variable m_nn vec3d m_nn ; node normals variable m_sid int m_sid ; smoothing ID variable m_elem int m_elem ; the elements to which this face belongs Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFace"},{"location":"api/Classes/classFEFace.html#feface","text":"Inherits from FEItem","title":"FEFace"},{"location":"api/Classes/classFEFace.html#public-types","text":"Name enum @2","title":"Public Types"},{"location":"api/Classes/classFEFace.html#public-functions","text":"Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external.","title":"Public Functions"},{"location":"api/Classes/classFEFace.html#public-attributes","text":"Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs","title":"Public Attributes"},{"location":"api/Classes/classFEFace.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEFace.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEFace.html#enum-2","text":"Enumerator Value Description MAX_NODES 9","title":"enum @2"},{"location":"api/Classes/classFEFace.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFace.html#function-feface","text":"FEFace () constructor","title":"function FEFace"},{"location":"api/Classes/classFEFace.html#function-operator","text":"bool operator == ( const FEFace & f ) comparison operator","title":"function operator=="},{"location":"api/Classes/classFEFace.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEFace.html#function-edges","text":"int Edges () return number of edges","title":"function Edges"},{"location":"api/Classes/classFEFace.html#function-getedgenodes","text":"void GetEdgeNodes ( int i , int * n ) get the edge node numbers","title":"function GetEdgeNodes"},{"location":"api/Classes/classFEFace.html#function-hasedge","text":"bool HasEdge ( int n1 , int n2 ) See if this face has an edge.","title":"function HasEdge"},{"location":"api/Classes/classFEFace.html#function-hasnode","text":"bool HasNode ( int i ) See if this face has node with ID i.","title":"function HasNode"},{"location":"api/Classes/classFEFace.html#function-findnode","text":"int FindNode ( int i ) Fine the array index of node with ID i.","title":"function FindNode"},{"location":"api/Classes/classFEFace.html#function-isexternal","text":"inline bool IsExternal () Is this face internal or external.","title":"function IsExternal"},{"location":"api/Classes/classFEFace.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFace.html#variable-n","text":"int n ; nodal ID's","title":"variable n"},{"location":"api/Classes/classFEFace.html#variable-m_nodes","text":"int m_nodes ; number of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEFace.html#variable-m_nbr","text":"int m_nbr ; neighbour faces","title":"variable m_nbr"},{"location":"api/Classes/classFEFace.html#variable-m_fn","text":"vec3d m_fn ; face normal","title":"variable m_fn"},{"location":"api/Classes/classFEFace.html#variable-m_nn","text":"vec3d m_nn ; node normals","title":"variable m_nn"},{"location":"api/Classes/classFEFace.html#variable-m_sid","text":"int m_sid ; smoothing ID","title":"variable m_sid"},{"location":"api/Classes/classFEFace.html#variable-m_elem","text":"int m_elem ; the elements to which this face belongs Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_elem"},{"location":"api/Classes/classFEFillHole.html","text":"FEFillHole Public Classes Name class EdgeRing struct FACE Public Functions Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm) Public Attributes Name bool optimize bool insertNodes Public Functions Documentation function FEFillHole inline FEFillHole () function Apply FEMesh * Apply ( FEMesh * pm ) function AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list ) function newNode vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ) function DivideRing bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list ) function DivideRing1 bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list ) function FillAllHoles void FillAllHoles ( FEMesh * pm ) Public Attributes Documentation variable optimize bool optimize ; variable insertNodes bool insertNodes ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#fefillhole","text":"","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#public-classes","text":"Name class EdgeRing struct FACE","title":"Public Classes"},{"location":"api/Classes/classFEFillHole.html#public-functions","text":"Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole.html#public-attributes","text":"Name bool optimize bool insertNodes","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole.html#function-fefillhole","text":"inline FEFillHole ()","title":"function FEFillHole"},{"location":"api/Classes/classFEFillHole.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFillHole.html#function-afm","text":"bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list )","title":"function AFM"},{"location":"api/Classes/classFEFillHole.html#function-newnode","text":"vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave )","title":"function newNode"},{"location":"api/Classes/classFEFillHole.html#function-dividering","text":"bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing"},{"location":"api/Classes/classFEFillHole.html#function-dividering1","text":"bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing1"},{"location":"api/Classes/classFEFillHole.html#function-fillallholes","text":"void FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFillHole.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole.html#variable-optimize","text":"bool optimize ;","title":"variable optimize"},{"location":"api/Classes/classFEFillHole.html#variable-insertnodes","text":"bool insertNodes ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable insertNodes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html","text":"FEFillHole::EdgeRing Public Functions Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear) Public Attributes Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal Public Functions Documentation function EdgeRing inline EdgeRing () function EdgeRing inline EdgeRing ( const EdgeRing & ring ) function operator= inline void operator = ( const EdgeRing & ring ) function empty inline bool empty () function add inline void add ( int n , const vec3d & r , const vec3d & nn ) function clear inline void clear () function size inline int size () function operator[] inline int operator []( int i ) function GetLeftEar void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ) function GetRightEar void GetRightEar ( int n0 , int n1 , EdgeRing & ear ) Public Attributes Documentation variable m_r vector < vec3d > m_r ; variable m_node vector < int > m_node ; variable m_winding int m_winding ; variable m_normal vector < vec3d > m_normal ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#fefillholeedgering","text":"","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions","text":"Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes","text":"Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering","text":"inline EdgeRing ()","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering_1","text":"inline EdgeRing ( const EdgeRing & ring )","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator","text":"inline void operator = ( const EdgeRing & ring )","title":"function operator="},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-empty","text":"inline bool empty ()","title":"function empty"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-add","text":"inline void add ( int n , const vec3d & r , const vec3d & nn )","title":"function add"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-size","text":"inline int size ()","title":"function size"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator_1","text":"inline int operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getleftear","text":"void GetLeftEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetLeftEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getrightear","text":"void GetRightEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetRightEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_r","text":"vector < vec3d > m_r ;","title":"variable m_r"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_winding","text":"int m_winding ;","title":"variable m_winding"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_normal","text":"vector < vec3d > m_normal ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_normal"},{"location":"api/Classes/classFEFixMesh.html","text":"FEFixMesh Public Functions Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm) Public Functions Documentation function FEFixMesh inline FEFixMesh () function Apply FEMesh * Apply ( FEMesh * pm ) function SetTask void SetTask ( int n ) function SetThickness void SetThickness ( double m ) function RemoveDuplicateElements FEMesh * RemoveDuplicateElements ( FEMesh * pm ) function RemoveNonManifoldElements FEMesh * RemoveNonManifoldElements ( FEMesh * pm ) function FixElementWinding FEMesh * FixElementWinding ( FEMesh * pm ) function FillAllHoles FEMesh * FillAllHoles ( FEMesh * pm ) function FixinvertedElements FEMesh * FixinvertedElements ( FEMesh * pm ) function FixReferenceSurface FEMesh * FixReferenceSurface ( FEMesh * pm ) function InterpolateShellThickness FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#fefixmesh","text":"","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#public-functions","text":"Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFixMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFixMesh.html#function-fefixmesh","text":"inline FEFixMesh ()","title":"function FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFixMesh.html#function-settask","text":"void SetTask ( int n )","title":"function SetTask"},{"location":"api/Classes/classFEFixMesh.html#function-setthickness","text":"void SetThickness ( double m )","title":"function SetThickness"},{"location":"api/Classes/classFEFixMesh.html#function-removeduplicateelements","text":"FEMesh * RemoveDuplicateElements ( FEMesh * pm )","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEFixMesh.html#function-removenonmanifoldelements","text":"FEMesh * RemoveNonManifoldElements ( FEMesh * pm )","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixelementwinding","text":"FEMesh * FixElementWinding ( FEMesh * pm )","title":"function FixElementWinding"},{"location":"api/Classes/classFEFixMesh.html#function-fillallholes","text":"FEMesh * FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFixMesh.html#function-fixinvertedelements","text":"FEMesh * FixinvertedElements ( FEMesh * pm )","title":"function FixinvertedElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixreferencesurface","text":"FEMesh * FixReferenceSurface ( FEMesh * pm )","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEFixMesh.html#function-interpolateshellthickness","text":"FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEItem.html","text":"FEItem Inherited by FEEdge , FEElement_ , FEFace , FENode Public Functions Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEItem inline FEItem () function IsVisible inline bool IsVisible () const function IsSelected inline bool IsSelected () const function Select inline void Select () function UnSelect inline void UnSelect () function Show inline void Show () function Hide inline void Hide () function GetFEState inline unsigned int GetFEState () const function SetFEState inline void SetFEState ( unsigned int state ) Public Attributes Documentation variable m_ntag int m_ntag ; variable m_gid int m_gid ; variable m_nid int m_nid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEItem"},{"location":"api/Classes/classFEItem.html#feitem","text":"Inherited by FEEdge , FEElement_ , FEFace , FENode","title":"FEItem"},{"location":"api/Classes/classFEItem.html#public-functions","text":"Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state)","title":"Public Functions"},{"location":"api/Classes/classFEItem.html#public-attributes","text":"Name int m_ntag int m_gid int m_nid","title":"Public Attributes"},{"location":"api/Classes/classFEItem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEItem.html#function-feitem","text":"inline FEItem ()","title":"function FEItem"},{"location":"api/Classes/classFEItem.html#function-isvisible","text":"inline bool IsVisible () const","title":"function IsVisible"},{"location":"api/Classes/classFEItem.html#function-isselected","text":"inline bool IsSelected () const","title":"function IsSelected"},{"location":"api/Classes/classFEItem.html#function-select","text":"inline void Select ()","title":"function Select"},{"location":"api/Classes/classFEItem.html#function-unselect","text":"inline void UnSelect ()","title":"function UnSelect"},{"location":"api/Classes/classFEItem.html#function-show","text":"inline void Show ()","title":"function Show"},{"location":"api/Classes/classFEItem.html#function-hide","text":"inline void Hide ()","title":"function Hide"},{"location":"api/Classes/classFEItem.html#function-getfestate","text":"inline unsigned int GetFEState () const","title":"function GetFEState"},{"location":"api/Classes/classFEItem.html#function-setfestate","text":"inline void SetFEState ( unsigned int state )","title":"function SetFEState"},{"location":"api/Classes/classFEItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEItem.html#variable-m_ntag","text":"int m_ntag ;","title":"variable m_ntag"},{"location":"api/Classes/classFEItem.html#variable-m_gid","text":"int m_gid ;","title":"variable m_gid"},{"location":"api/Classes/classFEItem.html#variable-m_nid","text":"int m_nid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_nid"},{"location":"api/Classes/classFEMesh.html","text":"FEMesh Inherits from FECoreMesh Public Functions Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET) Protected Functions Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) Protected Attributes Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map Additional inherited members Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Public Functions Documentation function FEMesh FEMesh () function FEMesh FEMesh ( FEMesh & m ) function ~FEMesh virtual ~ FEMesh () function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create function ShallowCopy void ShallowCopy ( FEMesh * pm ) function Clear void Clear () \u2014 C L E A N U P \u2014 function DeleteEdges inline void DeleteEdges () function Elements inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements function Element inline FEElement & Element ( int n ) return element function ElementRef inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef function ElementPtr inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr function FindFace int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ) function FindNodesFromPart void FindNodesFromPart ( int gid , vector < int > & node ) function NodeArray inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array function FaceArray inline std :: vector < FEFace > & FaceArray () function ElementArray inline std :: vector < FEElement > & ElementArray () function GetElementValue inline double GetElementValue ( int n ) function SetElementValue inline void SetElementValue ( int n , double v ) function UpdateValueRange void UpdateValueRange () function GetValueRange void GetValueRange ( double & vmin , double & vmax ) function ProjectToSurface vec3d ProjectToSurface ( vec3d r , vec3d t ) function ProjectToFace vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ) function ProjectToEdge vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ) function FindIntersection bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ) function Update void Update () function UpdateElementNeighbors void UpdateElementNeighbors () function UpdateFaces void UpdateFaces () function UpdateEdges void UpdateEdges () function UpdateNodes void UpdateNodes () function AutoSmooth void AutoSmooth ( double w ) function UpdateNormals void UpdateNormals () function PartitionSelection void PartitionSelection () function RemoveIsolatedNodes void RemoveIsolatedNodes () function AddNode inline void AddNode ( FENode & n ) function DetachSelectedMesh FEMesh * DetachSelectedMesh () function DetachSelectedPart void DetachSelectedPart () function ExtractSelectedFaces FEMesh * ExtractSelectedFaces () function DeleteTaggedElements void DeleteTaggedElements ( int tag ) function DeleteTaggedFaces void DeleteTaggedFaces ( int tag ) function DeleteTaggedEdges void DeleteTaggedEdges ( int tag ) function FindDuplicateFaces void FindDuplicateFaces ( vector < int > & l ) function FindDuplicateEdges void FindDuplicateEdges ( vector < int > & l ) function DeleteSelectedElements void DeleteSelectedElements () function DeleteSelectedFaces void DeleteSelectedFaces () function DeleteSelectedNodes void DeleteSelectedNodes () function InvertTaggedElements void InvertTaggedElements ( int ntag ) function InvertSelectedElements void InvertSelectedElements () function ShellJacobian double ShellJacobian ( FEElement & el ) function RemoveDuplicateElements void RemoveDuplicateElements () function FixinvertedElements void FixinvertedElements () function FixReferenceSurface void FixReferenceSurface () function InterpolateShellThickness void InterpolateShellThickness ( double ) function RemoveNonManifoldElements void RemoveNonManifoldElements () function FixElementWinding void FixElementWinding () function FixElementWinding2 void FixElementWinding2 () function TagAllElements void TagAllElements ( int ntag ) function DataFields inline int DataFields () function AddDataField FEElementData * AddDataField ( const char * szname , double v = 0.0 ) function GetDataField inline FEElementData & GetDataField ( int i ) function ShortestEdge double ShortestEdge () function BuildNodeElementTable void BuildNodeElementTable ( vector < vector < int > > & NET ) function BuildNodeFaceTable void BuildNodeFaceTable ( vector < vector < int > > & NFT ) function BuildNodeEdgeTable void BuildNodeEdgeTable ( vector < vector < int > > & NET ) function BuildEdgeTable void BuildEdgeTable ( vector < pair < int , int > > & ET ) function BuildNodeNodeTable void BuildNodeNodeTable ( vector < set < int > > & NNT ) function BuildSurfaceNodeNodeTable void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT ) function BuildElementEdgeTable void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET ) function BuildFaceTable void BuildFaceTable ( vector < FEFace > & FT ) function BuildElementFaceTable void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT ) function BuildFaceEdgeTable void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET ) function BuildFaceFaceTable void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT ) function BuildEdgeEdgeTable void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET ) Protected Functions Documentation function IntersectTri bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) function IntersectQuad bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) Protected Attributes Documentation variable m_Elem std :: vector < FEElement > m_Elem ; FE elements. variable m_data std :: vector < double > m_data ; element values variable m_min double m_min ; variable m_max double m_max ; value range of element data variable m_map vector < FEElementData > m_map ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#femesh","text":"Inherits from FECoreMesh","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#public-functions","text":"Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET)","title":"Public Functions"},{"location":"api/Classes/classFEMesh.html#protected-functions","text":"Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g)","title":"Protected Functions"},{"location":"api/Classes/classFEMesh.html#protected-attributes","text":"Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map","title":"Protected Attributes"},{"location":"api/Classes/classFEMesh.html#additional-inherited-members","text":"Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Additional inherited members"},{"location":"api/Classes/classFEMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-femesh","text":"FEMesh ()","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_1","text":"FEMesh ( FEMesh & m )","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_2","text":"virtual ~ FEMesh ()","title":"function ~FEMesh"},{"location":"api/Classes/classFEMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create","title":"function Create"},{"location":"api/Classes/classFEMesh.html#function-shallowcopy","text":"void ShallowCopy ( FEMesh * pm )","title":"function ShallowCopy"},{"location":"api/Classes/classFEMesh.html#function-clear","text":"void Clear () \u2014 C L E A N U P \u2014","title":"function Clear"},{"location":"api/Classes/classFEMesh.html#function-deleteedges","text":"inline void DeleteEdges ()","title":"function DeleteEdges"},{"location":"api/Classes/classFEMesh.html#function-elements","text":"inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFEMesh.html#function-element","text":"inline FEElement & Element ( int n ) return element","title":"function Element"},{"location":"api/Classes/classFEMesh.html#function-elementref","text":"inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFEMesh.html#function-elementptr","text":"inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFEMesh.html#function-findface","text":"int FindFace ( FEElement * pe , FEFace & f , FEFace & fe )","title":"function FindFace"},{"location":"api/Classes/classFEMesh.html#function-findnodesfrompart","text":"void FindNodesFromPart ( int gid , vector < int > & node )","title":"function FindNodesFromPart"},{"location":"api/Classes/classFEMesh.html#function-nodearray","text":"inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array","title":"function NodeArray"},{"location":"api/Classes/classFEMesh.html#function-facearray","text":"inline std :: vector < FEFace > & FaceArray ()","title":"function FaceArray"},{"location":"api/Classes/classFEMesh.html#function-elementarray","text":"inline std :: vector < FEElement > & ElementArray ()","title":"function ElementArray"},{"location":"api/Classes/classFEMesh.html#function-getelementvalue","text":"inline double GetElementValue ( int n )","title":"function GetElementValue"},{"location":"api/Classes/classFEMesh.html#function-setelementvalue","text":"inline void SetElementValue ( int n , double v )","title":"function SetElementValue"},{"location":"api/Classes/classFEMesh.html#function-updatevaluerange","text":"void UpdateValueRange ()","title":"function UpdateValueRange"},{"location":"api/Classes/classFEMesh.html#function-getvaluerange","text":"void GetValueRange ( double & vmin , double & vmax )","title":"function GetValueRange"},{"location":"api/Classes/classFEMesh.html#function-projecttosurface","text":"vec3d ProjectToSurface ( vec3d r , vec3d t )","title":"function ProjectToSurface"},{"location":"api/Classes/classFEMesh.html#function-projecttoface","text":"vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s )","title":"function ProjectToFace"},{"location":"api/Classes/classFEMesh.html#function-projecttoedge","text":"vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r )","title":"function ProjectToEdge"},{"location":"api/Classes/classFEMesh.html#function-findintersection","text":"bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g )","title":"function FindIntersection"},{"location":"api/Classes/classFEMesh.html#function-update","text":"void Update ()","title":"function Update"},{"location":"api/Classes/classFEMesh.html#function-updateelementneighbors","text":"void UpdateElementNeighbors ()","title":"function UpdateElementNeighbors"},{"location":"api/Classes/classFEMesh.html#function-updatefaces","text":"void UpdateFaces ()","title":"function UpdateFaces"},{"location":"api/Classes/classFEMesh.html#function-updateedges","text":"void UpdateEdges ()","title":"function UpdateEdges"},{"location":"api/Classes/classFEMesh.html#function-updatenodes","text":"void UpdateNodes ()","title":"function UpdateNodes"},{"location":"api/Classes/classFEMesh.html#function-autosmooth","text":"void AutoSmooth ( double w )","title":"function AutoSmooth"},{"location":"api/Classes/classFEMesh.html#function-updatenormals","text":"void UpdateNormals ()","title":"function UpdateNormals"},{"location":"api/Classes/classFEMesh.html#function-partitionselection","text":"void PartitionSelection ()","title":"function PartitionSelection"},{"location":"api/Classes/classFEMesh.html#function-removeisolatednodes","text":"void RemoveIsolatedNodes ()","title":"function RemoveIsolatedNodes"},{"location":"api/Classes/classFEMesh.html#function-addnode","text":"inline void AddNode ( FENode & n )","title":"function AddNode"},{"location":"api/Classes/classFEMesh.html#function-detachselectedmesh","text":"FEMesh * DetachSelectedMesh ()","title":"function DetachSelectedMesh"},{"location":"api/Classes/classFEMesh.html#function-detachselectedpart","text":"void DetachSelectedPart ()","title":"function DetachSelectedPart"},{"location":"api/Classes/classFEMesh.html#function-extractselectedfaces","text":"FEMesh * ExtractSelectedFaces ()","title":"function ExtractSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedelements","text":"void DeleteTaggedElements ( int tag )","title":"function DeleteTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedfaces","text":"void DeleteTaggedFaces ( int tag )","title":"function DeleteTaggedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggededges","text":"void DeleteTaggedEdges ( int tag )","title":"function DeleteTaggedEdges"},{"location":"api/Classes/classFEMesh.html#function-findduplicatefaces","text":"void FindDuplicateFaces ( vector < int > & l )","title":"function FindDuplicateFaces"},{"location":"api/Classes/classFEMesh.html#function-findduplicateedges","text":"void FindDuplicateEdges ( vector < int > & l )","title":"function FindDuplicateEdges"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedelements","text":"void DeleteSelectedElements ()","title":"function DeleteSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedfaces","text":"void DeleteSelectedFaces ()","title":"function DeleteSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deleteselectednodes","text":"void DeleteSelectedNodes ()","title":"function DeleteSelectedNodes"},{"location":"api/Classes/classFEMesh.html#function-inverttaggedelements","text":"void InvertTaggedElements ( int ntag )","title":"function InvertTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-invertselectedelements","text":"void InvertSelectedElements ()","title":"function InvertSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-shelljacobian","text":"double ShellJacobian ( FEElement & el )","title":"function ShellJacobian"},{"location":"api/Classes/classFEMesh.html#function-removeduplicateelements","text":"void RemoveDuplicateElements ()","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEMesh.html#function-fixinvertedelements","text":"void FixinvertedElements ()","title":"function FixinvertedElements"},{"location":"api/Classes/classFEMesh.html#function-fixreferencesurface","text":"void FixReferenceSurface ()","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEMesh.html#function-interpolateshellthickness","text":"void InterpolateShellThickness ( double )","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEMesh.html#function-removenonmanifoldelements","text":"void RemoveNonManifoldElements ()","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding","text":"void FixElementWinding ()","title":"function FixElementWinding"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding2","text":"void FixElementWinding2 ()","title":"function FixElementWinding2"},{"location":"api/Classes/classFEMesh.html#function-tagallelements","text":"void TagAllElements ( int ntag )","title":"function TagAllElements"},{"location":"api/Classes/classFEMesh.html#function-datafields","text":"inline int DataFields ()","title":"function DataFields"},{"location":"api/Classes/classFEMesh.html#function-adddatafield","text":"FEElementData * AddDataField ( const char * szname , double v = 0.0 )","title":"function AddDataField"},{"location":"api/Classes/classFEMesh.html#function-getdatafield","text":"inline FEElementData & GetDataField ( int i )","title":"function GetDataField"},{"location":"api/Classes/classFEMesh.html#function-shortestedge","text":"double ShortestEdge ()","title":"function ShortestEdge"},{"location":"api/Classes/classFEMesh.html#function-buildnodeelementtable","text":"void BuildNodeElementTable ( vector < vector < int > > & NET )","title":"function BuildNodeElementTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodefacetable","text":"void BuildNodeFaceTable ( vector < vector < int > > & NFT )","title":"function BuildNodeFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodeedgetable","text":"void BuildNodeEdgeTable ( vector < vector < int > > & NET )","title":"function BuildNodeEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgetable","text":"void BuildEdgeTable ( vector < pair < int , int > > & ET )","title":"function BuildEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodenodetable","text":"void BuildNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildsurfacenodenodetable","text":"void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildSurfaceNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementedgetable","text":"void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET )","title":"function BuildElementEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacetable","text":"void BuildFaceTable ( vector < FEFace > & FT )","title":"function BuildFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementfacetable","text":"void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT )","title":"function BuildElementFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildfaceedgetable","text":"void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET )","title":"function BuildFaceEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacefacetable","text":"void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT )","title":"function BuildFaceFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgeedgetable","text":"void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET )","title":"function BuildEdgeEdgeTable"},{"location":"api/Classes/classFEMesh.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-intersecttri","text":"bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectTri"},{"location":"api/Classes/classFEMesh.html#function-intersectquad","text":"bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectQuad"},{"location":"api/Classes/classFEMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEMesh.html#variable-m_elem","text":"std :: vector < FEElement > m_Elem ; FE elements.","title":"variable m_Elem"},{"location":"api/Classes/classFEMesh.html#variable-m_data","text":"std :: vector < double > m_data ; element values","title":"variable m_data"},{"location":"api/Classes/classFEMesh.html#variable-m_min","text":"double m_min ;","title":"variable m_min"},{"location":"api/Classes/classFEMesh.html#variable-m_max","text":"double m_max ; value range of element data","title":"variable m_max"},{"location":"api/Classes/classFEMesh.html#variable-m_map","text":"vector < FEElementData > m_map ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_map"},{"location":"api/Classes/classFEMeshSmoothingModifier.html","text":"FEMeshSmoothingModifier More... #include Public Functions Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier. Protected Functions Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap) Public Attributes Name double m_threshold1 double m_threshold2 double m_iteration int m_method Detailed Description class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FEMeshSmoothingModifier FEMeshSmoothingModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier. Protected Functions Documentation function area_triangle double area_triangle ( vec3d r [ 3 ] ) function distance double distance ( vec3d x , vec3d y ) function random double random () function Laplacian_Smoothing void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Laplacian_Smoothing2 void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ) function Taubin_Smoothing void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Crease_Enhancing_Diffusion void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ) function Add_Noise void Add_Noise ( FEMesh * pm , vector < int > hashmap ) Public Attributes Documentation variable m_threshold1 double m_threshold1 ; variable m_threshold2 double m_threshold2 ; variable m_iteration double m_iteration ; variable m_method int m_method ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#femeshsmoothingmodifier","text":"More... #include ","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions","text":"Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier.","title":"Public Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions","text":"Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap)","title":"Protected Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes","text":"Name double m_threshold1 double m_threshold2 double m_iteration int m_method","title":"Public Attributes"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#detailed-description","text":"class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-femeshsmoothingmodifier","text":"FEMeshSmoothingModifier () Constructor.","title":"function FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier.","title":"function Apply"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-distance","text":"double distance ( vec3d x , vec3d y )","title":"function distance"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-random","text":"double random ()","title":"function random"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing","text":"void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing2","text":"void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-taubin_smoothing","text":"void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Taubin_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-crease_enhancing_diffusion","text":"void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap )","title":"function Crease_Enhancing_Diffusion"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-add_noise","text":"void Add_Noise ( FEMesh * pm , vector < int > hashmap )","title":"function Add_Noise"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold1","text":"double m_threshold1 ;","title":"variable m_threshold1"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold2","text":"double m_threshold2 ;","title":"variable m_threshold2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_iteration","text":"double m_iteration ;","title":"variable m_iteration"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_method","text":"int m_method ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_method"},{"location":"api/Classes/classFENode.html","text":"FENode Inherits from FEItem Public Functions Name FENode () Public Attributes Name vec3d r bool m_bext double m_ndata Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FENode inline FENode () Public Attributes Documentation variable r vec3d r ; variable m_bext bool m_bext ; variable m_ndata double m_ndata ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENode"},{"location":"api/Classes/classFENode.html#fenode","text":"Inherits from FEItem","title":"FENode"},{"location":"api/Classes/classFENode.html#public-functions","text":"Name FENode ()","title":"Public Functions"},{"location":"api/Classes/classFENode.html#public-attributes","text":"Name vec3d r bool m_bext double m_ndata","title":"Public Attributes"},{"location":"api/Classes/classFENode.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFENode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENode.html#function-fenode","text":"inline FENode ()","title":"function FENode"},{"location":"api/Classes/classFENode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFENode.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/classFENode.html#variable-m_bext","text":"bool m_bext ;","title":"variable m_bext"},{"location":"api/Classes/classFENode.html#variable-m_ndata","text":"double m_ndata ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_ndata"},{"location":"api/Classes/classFENodeElementList.html","text":"FENodeElementList Public Functions Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem Public Functions Documentation function FENodeElementList FENodeElementList ( FEMesh * pm ) function ~FENodeElementList ~ FENodeElementList () function Build void Build () function Valence inline int Valence ( int n ) function Element inline FEElement * Element ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_pelem vector < FEElement * > m_pelem ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#fenodeelementlist","text":"","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#public-functions","text":"Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem","title":"Protected Attributes"},{"location":"api/Classes/classFENodeElementList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist","text":"FENodeElementList ( FEMesh * pm )","title":"function FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist_1","text":"~ FENodeElementList ()","title":"function ~FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeElementList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeElementList.html#function-element","text":"inline FEElement * Element ( int n , int j )","title":"function Element"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeElementList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeElementList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pelem","text":"vector < FEElement * > m_pelem ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_pelem"},{"location":"api/Classes/classFENodeFaceList.html","text":"FENodeFaceList Public Functions Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf) Protected Functions Name void Sort (int node) Protected Attributes Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off Public Functions Documentation function FENodeFaceList FENodeFaceList ( FEMesh * pm ) function ~FENodeFaceList ~ FENodeFaceList ( void ) function Build void Build () function BuildSorted void BuildSorted () function Nodes inline int Nodes () function Node inline FENode & Node ( int i ) function Valence inline int Valence ( int i ) function Face inline FEFace * Face ( int n , int i ) function HasFace bool HasFace ( int n , FEFace * pf ) Protected Functions Documentation function Sort void Sort ( int node ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_node vector < int > m_node ; variable m_val vector < int > m_val ; variable m_pface vector < FEFace * > m_pface ; variable m_off vector < int > m_off ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#fenodefacelist","text":"","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#public-functions","text":"Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf)","title":"Public Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions","text":"Name void Sort (int node)","title":"Protected Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off","title":"Protected Attributes"},{"location":"api/Classes/classFENodeFaceList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist","text":"FENodeFaceList ( FEMesh * pm )","title":"function FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist_1","text":"~ FENodeFaceList ( void )","title":"function ~FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeFaceList.html#function-buildsorted","text":"void BuildSorted ()","title":"function BuildSorted"},{"location":"api/Classes/classFENodeFaceList.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFENodeFaceList.html#function-node","text":"inline FENode & Node ( int i )","title":"function Node"},{"location":"api/Classes/classFENodeFaceList.html#function-valence","text":"inline int Valence ( int i )","title":"function Valence"},{"location":"api/Classes/classFENodeFaceList.html#function-face","text":"inline FEFace * Face ( int n , int i )","title":"function Face"},{"location":"api/Classes/classFENodeFaceList.html#function-hasface","text":"bool HasFace ( int n , FEFace * pf )","title":"function HasFace"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-sort","text":"void Sort ( int node )","title":"function Sort"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pface","text":"vector < FEFace * > m_pface ;","title":"variable m_pface"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_off","text":"vector < int > m_off ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html","text":"FENodeNodeList Public Functions Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node Public Functions Documentation function FENodeNodeList FENodeNodeList ( FEMesh * pm ) function ~FENodeNodeList ~ FENodeNodeList () function Build void Build () function Valence inline int Valence ( int n ) function Node inline int Node ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_node vector < int > m_node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#fenodenodelist","text":"","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#public-functions","text":"Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node","title":"Protected Attributes"},{"location":"api/Classes/classFENodeNodeList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist","text":"FENodeNodeList ( FEMesh * pm )","title":"function FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist_1","text":"~ FENodeNodeList ()","title":"function ~FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeNodeList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeNodeList.html#function-node","text":"inline int Node ( int n , int j )","title":"function Node"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_node","text":"vector < int > m_node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_node"},{"location":"api/Classes/classFETri3.html","text":"FETri3 Inherits from FEElement_ , FEItem Public Functions Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FETri3 FETri3 () Constructor. function FETri3 FETri3 ( FETri3 & el ) copy constructor function operator= FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-24 at 22:16:02 +0000","title":"FETri3"},{"location":"api/Classes/classFETri3.html#fetri3","text":"Inherits from FEElement_ , FEItem","title":"FETri3"},{"location":"api/Classes/classFETri3.html#public-functions","text":"Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator","title":"Public Functions"},{"location":"api/Classes/classFETri3.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFETri3.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFETri3.html#function-fetri3","text":"FETri3 () Constructor.","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-fetri3_1","text":"FETri3 ( FETri3 & el ) copy constructor","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-operator","text":"FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-24 at 22:16:02 +0000","title":"function operator="},{"location":"api/Classes/classFEVTKExport.html","text":"FEVTKExport Public Functions Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh) Public Functions Documentation function FEVTKExport FEVTKExport () function ~FEVTKExport ~ FEVTKExport () = default function Export bool Export ( FEMesh & mesh , const char * szfile ) function ExportToString std :: string ExportToString ( FEMesh & mesh ) function ExportToStream bool ExportToStream ( FEMesh & mesh , std :: ostream & out ) function SetOptions inline void SetOptions ( VTKEXPORT o ) function ExportToVTK vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#fevtkexport","text":"","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#public-functions","text":"Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh)","title":"Public Functions"},{"location":"api/Classes/classFEVTKExport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport","text":"FEVTKExport ()","title":"function FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport_1","text":"~ FEVTKExport () = default","title":"function ~FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-export","text":"bool Export ( FEMesh & mesh , const char * szfile )","title":"function Export"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostring","text":"std :: string ExportToString ( FEMesh & mesh )","title":"function ExportToString"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostream","text":"bool ExportToStream ( FEMesh & mesh , std :: ostream & out )","title":"function ExportToStream"},{"location":"api/Classes/classFEVTKExport.html#function-setoptions","text":"inline void SetOptions ( VTKEXPORT o )","title":"function SetOptions"},{"location":"api/Classes/classFEVTKExport.html#function-exporttovtk","text":"vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function ExportToVTK"},{"location":"api/Classes/classFEVTKimport.html","text":"FEVTKimport Public Functions Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata) Protected Functions Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close () Public Functions Documentation function FEVTKimport FEVTKimport () function ~FEVTKimport ~ FEVTKimport ( void ) function Load FEMesh * Load ( const char * szfile ) function Load FEMesh * Load ( istream & stream ) function Load FEMesh * Load ( vtkPolyData * polydata ) Protected Functions Documentation function BuildMesh bool BuildMesh () function errf FEMesh * errf ( const char * sz , ... ) function Close void Close () Updated on 2023-10-24 at 22:16:02 +0000","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#fevtkimport","text":"","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#public-functions","text":"Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata)","title":"Public Functions"},{"location":"api/Classes/classFEVTKimport.html#protected-functions","text":"Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close ()","title":"Protected Functions"},{"location":"api/Classes/classFEVTKimport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport","text":"FEVTKimport ()","title":"function FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport_1","text":"~ FEVTKimport ( void )","title":"function ~FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-load","text":"FEMesh * Load ( const char * szfile )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_1","text":"FEMesh * Load ( istream & stream )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_2","text":"FEMesh * Load ( vtkPolyData * polydata )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-buildmesh","text":"bool BuildMesh ()","title":"function BuildMesh"},{"location":"api/Classes/classFEVTKimport.html#function-errf","text":"FEMesh * errf ( const char * sz , ... )","title":"function errf"},{"location":"api/Classes/classFEVTKimport.html#function-close","text":"void Close () Updated on 2023-10-24 at 22:16:02 +0000","title":"function Close"},{"location":"api/Classes/classGLCOLOR.html","text":"GLCOLOR Public Functions Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c) Public Attributes Name uchar a uchar b uchar g uchar r Public Functions Documentation function GLCOLOR inline GLCOLOR () function GLCOLOR inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) function operator* inline GLCOLOR operator * ( double f ) function operator+ inline GLCOLOR operator + ( GLCOLOR & c ) Public Attributes Documentation variable a uchar a ; variable b uchar b ; variable g uchar g ; variable r uchar r ; Updated on 2023-10-24 at 22:16:02 +0000","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#glcolor","text":"","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#public-functions","text":"Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c)","title":"Public Functions"},{"location":"api/Classes/classGLCOLOR.html#public-attributes","text":"Name uchar a uchar b uchar g uchar r","title":"Public Attributes"},{"location":"api/Classes/classGLCOLOR.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor","text":"inline GLCOLOR ()","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor_1","text":"inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 )","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-operator","text":"inline GLCOLOR operator * ( double f )","title":"function operator*"},{"location":"api/Classes/classGLCOLOR.html#function-operator_1","text":"inline GLCOLOR operator + ( GLCOLOR & c )","title":"function operator+"},{"location":"api/Classes/classGLCOLOR.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classGLCOLOR.html#variable-a","text":"uchar a ;","title":"variable a"},{"location":"api/Classes/classGLCOLOR.html#variable-b","text":"uchar b ;","title":"variable b"},{"location":"api/Classes/classGLCOLOR.html#variable-g","text":"uchar g ;","title":"variable g"},{"location":"api/Classes/classGLCOLOR.html#variable-r","text":"uchar r ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable r"},{"location":"api/Classes/classLegacyMeshGenerator.html","text":"LegacyMeshGenerator Public Functions Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape) Public Functions Documentation function LegacyMeshGenerator LegacyMeshGenerator () function ~LegacyMeshGenerator ~ LegacyMeshGenerator () function setNeighborhoodSize void setNeighborhoodSize ( int size ) function setSampleSpacing void setSampleSpacing ( double spacing ) function setUsePowerCrust void setUsePowerCrust ( bool enabled ) function setSmoothingAmount void setSmoothingAmount ( float amount ) function buildMesh vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#legacymeshgenerator","text":"","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions","text":"Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator","text":"LegacyMeshGenerator ()","title":"function LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator_1","text":"~ LegacyMeshGenerator ()","title":"function ~LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setneighborhoodsize","text":"void setNeighborhoodSize ( int size )","title":"function setNeighborhoodSize"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsamplespacing","text":"void setSampleSpacing ( double spacing )","title":"function setSampleSpacing"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setusepowercrust","text":"void setUsePowerCrust ( bool enabled )","title":"function setUsePowerCrust"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsmoothingamount","text":"void setSmoothingAmount ( float amount )","title":"function setSmoothingAmount"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-buildmesh","text":"vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function buildMesh"},{"location":"api/Classes/classMeshSettings.html","text":"MeshSettings Settings for creating a mesh. More... #include Public Functions Name MeshSettings () Constructor. ~MeshSettings () Destructor. Detailed Description class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh. Public Functions Documentation function MeshSettings MeshSettings () Constructor. function ~MeshSettings ~ MeshSettings () Destructor. Updated on 2023-10-24 at 22:16:02 +0000","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#meshsettings","text":"Settings for creating a mesh. More... #include ","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#public-functions","text":"Name MeshSettings () Constructor. ~MeshSettings () Destructor.","title":"Public Functions"},{"location":"api/Classes/classMeshSettings.html#detailed-description","text":"class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh.","title":"Detailed Description"},{"location":"api/Classes/classMeshSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings","text":"MeshSettings () Constructor.","title":"function MeshSettings"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings_1","text":"~ MeshSettings () Destructor. Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~MeshSettings"},{"location":"api/Classes/classObjectReader.html","text":"ObjectReader More... Public Types Name typedef ObjectReader Self typedef T ObjectType Public Functions Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader () Detailed Description template < class T > class ObjectReader ; Public Types Documentation typedef Self typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectReader < T >:: ObjectType ; Public Functions Documentation function GetOutput inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType. function GetOutput inline std :: vector < ObjectType > & GetOutput () function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Read inline void Read () Read the file. function Update inline void Update () function ObjectReader inline ObjectReader () function ~ObjectReader inline virtual ~ ObjectReader () Updated on 2023-10-24 at 22:16:02 +0000","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#objectreader","text":"More...","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#public-types","text":"Name typedef ObjectReader Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectReader.html#public-functions","text":"Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader ()","title":"Public Functions"},{"location":"api/Classes/classObjectReader.html#detailed-description","text":"template < class T > class ObjectReader ;","title":"Detailed Description"},{"location":"api/Classes/classObjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectReader.html#typedef-self","text":"typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectReader.html#typedef-objecttype","text":"typedef T ObjectReader < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectReader.html#function-getoutput","text":"inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType.","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-getoutput_1","text":"inline std :: vector < ObjectType > & GetOutput ()","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectReader.html#function-read","text":"inline void Read () Read the file.","title":"function Read"},{"location":"api/Classes/classObjectReader.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectReader.html#function-objectreader","text":"inline ObjectReader ()","title":"function ObjectReader"},{"location":"api/Classes/classObjectReader.html#function-objectreader_1","text":"inline virtual ~ ObjectReader () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ObjectReader"},{"location":"api/Classes/classObjectWriter.html","text":"ObjectWriter More... Public Types Name typedef ObjectWriter Self typedef T ObjectType Public Functions Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter () Detailed Description template < class T > class ObjectWriter ; Public Types Documentation typedef Self typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectWriter < T >:: ObjectType ; Public Functions Documentation function SetInput inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType. function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Write inline void Write () Write the file. function Update inline void Update () function ObjectWriter inline ObjectWriter () function ~ObjectWriter inline virtual ~ ObjectWriter () Updated on 2023-10-24 at 22:16:02 +0000","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#objectwriter","text":"More...","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#public-types","text":"Name typedef ObjectWriter Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectWriter.html#public-functions","text":"Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter ()","title":"Public Functions"},{"location":"api/Classes/classObjectWriter.html#detailed-description","text":"template < class T > class ObjectWriter ;","title":"Detailed Description"},{"location":"api/Classes/classObjectWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectWriter.html#typedef-self","text":"typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectWriter.html#typedef-objecttype","text":"typedef T ObjectWriter < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectWriter.html#function-setinput","text":"inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType.","title":"function SetInput"},{"location":"api/Classes/classObjectWriter.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectWriter.html#function-write","text":"inline void Write () Write the file.","title":"function Write"},{"location":"api/Classes/classObjectWriter.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter","text":"inline ObjectWriter ()","title":"function ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter_1","text":"inline virtual ~ ObjectWriter () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ObjectWriter"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html","text":"title: ParticleEvent:: Parent ParticleEvent:: Parent More... Detailed Description class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-24 at 22:16:02 +0000","title":"classParticleEvent 1 1 01Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#particleevent-parent","text":"More...","title":"ParticleEvent:: Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#detailed-description","text":"class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html","text":"ParticleGradientDescentPositionOptimizer More... #include Detailed Description class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#particlegradientdescentpositionoptimizer","text":"More... #include ","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#detailed-description","text":"class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomain.html","text":"ParticleImageDomain More... #include Detailed Description class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#particleimagedomain","text":"More... #include ","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#detailed-description","text":"class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html","text":"ParticleImageDomainWithCurvature More... #include Detailed Description class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#particleimagedomainwithcurvature","text":"More... #include ","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#detailed-description","text":"class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradN.html","text":"ParticleImageDomainWithGradN More... #include Detailed Description class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#particleimagedomainwithgradn","text":"More... #include ","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#detailed-description","text":"class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradients.html","text":"ParticleImageDomainWithGradients More... #include Detailed Description class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#particleimagedomainwithgradients","text":"More... #include ","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#detailed-description","text":"class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html","text":"ParticleImplicitSurfaceDomain More... #include Detailed Description class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#particleimplicitsurfacedomain","text":"More... #include ","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#detailed-description","text":"class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html","text":"ParticleMeanCurvatureAttribute Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html#particlemeancurvatureattribute","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleProcrustesRegistration.html","text":"ParticleProcrustesRegistration Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleProcrustesRegistration.html#particleprocrustesregistration","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html","text":"ParticleShapeLinearRegressionMatrixAttribute Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html#particleshapelinearregressionmatrixattribute","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html","text":"ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Detailed Description class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#particleshapematrixattribute","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include ","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#detailed-description","text":"class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html","text":"ParticleShapeMixedEffectsMatrixAttribute Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html#particleshapemixedeffectsmatrixattribute","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classPreferences.html","text":"Preferences Application preferences. More... #include Inherits from QObject Public Types Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4 Public Signals Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal () Public Functions Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events) Detailed Description class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class. Public Types Documentation enum OrientationMarkerType Enumerator Value Description medical 0 triad 1 none 2 enum OrientationMarkerCorner Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3 enum @4 Enumerator Value Description MAX_RECENT_FILES 64 Public Signals Documentation signal color_scheme_changed void color_scheme_changed ( int newIndex ) signal glyph_properties_changed void glyph_properties_changed () signal threading_changed_signal void threading_changed_signal () signal sliders_changed_signal void sliders_changed_signal () Public Functions Documentation function Preferences Preferences () function restore_defaults void restore_defaults () function add_recent_file void add_recent_file ( QString file , QString path ) function get_recent_files QStringList get_recent_files () function get_recent_paths QStringList get_recent_paths () function not_saved bool not_saved () function set_saved void set_saved ( bool saved = true ) function get_window_geometry QByteArray get_window_geometry () function set_window_geometry void set_window_geometry ( QByteArray geometry ) function get_window_state QByteArray get_window_state () function set_window_state void set_window_state ( QByteArray state ) function get_last_directory QString get_last_directory () function set_last_directory void set_last_directory ( QString value ) function get_cache_enabled bool get_cache_enabled () function set_cache_enabled void set_cache_enabled ( bool value ) function get_parallel_enabled bool get_parallel_enabled () function set_parallel_enabled void set_parallel_enabled ( bool value ) function get_memory_cache_percent int get_memory_cache_percent () function set_memory_cache_percent void set_memory_cache_percent ( int value ) function get_num_threads int get_num_threads () function set_num_threads void set_num_threads ( int num_threads ) function get_glyph_size float get_glyph_size () function set_glyph_size void set_glyph_size ( float value ) function get_glyph_quality float get_glyph_quality () function set_glyph_quality void set_glyph_quality ( float value ) function get_glyph_auto_size bool get_glyph_auto_size () function set_glyph_auto_size void set_glyph_auto_size ( bool value ) function get_glyph_scale_arrows bool get_glyph_scale_arrows () function set_glyph_scale_arrows void set_glyph_scale_arrows ( bool value ) function get_pca_range float get_pca_range () function set_pca_range void set_pca_range ( float value ) function get_pca_steps int get_pca_steps () function set_pca_steps void set_pca_steps ( int value ) function set_color_scheme void set_color_scheme ( int value ) function get_color_scheme int get_color_scheme () function set_particle_colors void set_particle_colors ( int value ) function get_particle_colors int get_particle_colors () function set_color_map void set_color_map ( int value ) function get_color_map int get_color_map () function set_discrete_color_mode void set_discrete_color_mode ( bool value ) function get_discrete_color_mode bool get_discrete_color_mode () function set_reverse_color_map void set_reverse_color_map ( bool value ) function get_reverse_color_map bool get_reverse_color_map () function get_center_checked bool get_center_checked () function set_center_checked void set_center_checked ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_orientation_marker_type OrientationMarkerType get_orientation_marker_type () function set_orientation_marker_type void set_orientation_marker_type ( OrientationMarkerType type ) function get_orientation_marker_corner OrientationMarkerCorner get_orientation_marker_corner () function set_orientation_marker_corner void set_orientation_marker_corner ( OrientationMarkerCorner corner ) function get_groom_file_template QString get_groom_file_template () function set_groom_file_template void set_groom_file_template ( QString groom_file_template ) function get_optimize_file_template QString get_optimize_file_template () function set_optimize_file_template void set_optimize_file_template ( QString optimize_file_template ) function get_export_override_size QSize get_export_override_size () function set_export_override_size void set_export_override_size ( QSize size ) function get_export_override_size_enabled bool get_export_override_size_enabled () function set_export_override_size_enabled void set_export_override_size_enabled ( bool enabled ) function get_export_show_orientation_marker bool get_export_show_orientation_marker () function set_export_show_orientation_marker void set_export_show_orientation_marker ( bool value ) function get_export_show_color_scale bool get_export_show_color_scale () function set_export_show_color_scale void set_export_show_color_scale ( bool value ) function get_export_num_pca_images int get_export_num_pca_images () function set_export_num_pca_images void set_export_num_pca_images ( int number ) function get_export_pca_range double get_export_pca_range () function set_export_pca_range void set_export_pca_range ( double range ) function set_export_pca_modes void set_export_pca_modes ( QString string ) function get_export_pca_modes QString get_export_pca_modes () function get_auto_update_check bool get_auto_update_check () function set_auto_update_check void set_auto_update_check ( bool enabled ) function get_update_snooze_until QDateTime get_update_snooze_until () function set_update_snooze_until void set_update_snooze_until ( QDateTime date ) function get_device_id QString get_device_id () function get_telemetry_enabled bool get_telemetry_enabled () function set_telemetry_enabled void set_telemetry_enabled ( bool enabled ) function get_telemetry_asked bool get_telemetry_asked () function set_telemetry_asked void set_telemetry_asked ( bool asked ) function get_pending_telemetry_events QStringList get_pending_telemetry_events () function set_pending_telemetry_events void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-24 at 22:16:02 +0000","title":"Preferences"},{"location":"api/Classes/classPreferences.html#preferences","text":"Application preferences. More... #include Inherits from QObject","title":"Preferences"},{"location":"api/Classes/classPreferences.html#public-types","text":"Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4","title":"Public Types"},{"location":"api/Classes/classPreferences.html#public-signals","text":"Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal ()","title":"Public Signals"},{"location":"api/Classes/classPreferences.html#public-functions","text":"Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events)","title":"Public Functions"},{"location":"api/Classes/classPreferences.html#detailed-description","text":"class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class.","title":"Detailed Description"},{"location":"api/Classes/classPreferences.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkertype","text":"Enumerator Value Description medical 0 triad 1 none 2","title":"enum OrientationMarkerType"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkercorner","text":"Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3","title":"enum OrientationMarkerCorner"},{"location":"api/Classes/classPreferences.html#enum-4","text":"Enumerator Value Description MAX_RECENT_FILES 64","title":"enum @4"},{"location":"api/Classes/classPreferences.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classPreferences.html#signal-color_scheme_changed","text":"void color_scheme_changed ( int newIndex )","title":"signal color_scheme_changed"},{"location":"api/Classes/classPreferences.html#signal-glyph_properties_changed","text":"void glyph_properties_changed ()","title":"signal glyph_properties_changed"},{"location":"api/Classes/classPreferences.html#signal-threading_changed_signal","text":"void threading_changed_signal ()","title":"signal threading_changed_signal"},{"location":"api/Classes/classPreferences.html#signal-sliders_changed_signal","text":"void sliders_changed_signal ()","title":"signal sliders_changed_signal"},{"location":"api/Classes/classPreferences.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classPreferences.html#function-preferences","text":"Preferences ()","title":"function Preferences"},{"location":"api/Classes/classPreferences.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classPreferences.html#function-add_recent_file","text":"void add_recent_file ( QString file , QString path )","title":"function add_recent_file"},{"location":"api/Classes/classPreferences.html#function-get_recent_files","text":"QStringList get_recent_files ()","title":"function get_recent_files"},{"location":"api/Classes/classPreferences.html#function-get_recent_paths","text":"QStringList get_recent_paths ()","title":"function get_recent_paths"},{"location":"api/Classes/classPreferences.html#function-not_saved","text":"bool not_saved ()","title":"function not_saved"},{"location":"api/Classes/classPreferences.html#function-set_saved","text":"void set_saved ( bool saved = true )","title":"function set_saved"},{"location":"api/Classes/classPreferences.html#function-get_window_geometry","text":"QByteArray get_window_geometry ()","title":"function get_window_geometry"},{"location":"api/Classes/classPreferences.html#function-set_window_geometry","text":"void set_window_geometry ( QByteArray geometry )","title":"function set_window_geometry"},{"location":"api/Classes/classPreferences.html#function-get_window_state","text":"QByteArray get_window_state ()","title":"function get_window_state"},{"location":"api/Classes/classPreferences.html#function-set_window_state","text":"void set_window_state ( QByteArray state )","title":"function set_window_state"},{"location":"api/Classes/classPreferences.html#function-get_last_directory","text":"QString get_last_directory ()","title":"function get_last_directory"},{"location":"api/Classes/classPreferences.html#function-set_last_directory","text":"void set_last_directory ( QString value )","title":"function set_last_directory"},{"location":"api/Classes/classPreferences.html#function-get_cache_enabled","text":"bool get_cache_enabled ()","title":"function get_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool value )","title":"function set_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-get_parallel_enabled","text":"bool get_parallel_enabled ()","title":"function get_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-set_parallel_enabled","text":"void set_parallel_enabled ( bool value )","title":"function set_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-get_memory_cache_percent","text":"int get_memory_cache_percent ()","title":"function get_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-set_memory_cache_percent","text":"void set_memory_cache_percent ( int value )","title":"function set_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-get_num_threads","text":"int get_num_threads ()","title":"function get_num_threads"},{"location":"api/Classes/classPreferences.html#function-set_num_threads","text":"void set_num_threads ( int num_threads )","title":"function set_num_threads"},{"location":"api/Classes/classPreferences.html#function-get_glyph_size","text":"float get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_size","text":"void set_glyph_size ( float value )","title":"function set_glyph_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_quality","text":"float get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-set_glyph_quality","text":"void set_glyph_quality ( float value )","title":"function set_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-get_glyph_auto_size","text":"bool get_glyph_auto_size ()","title":"function get_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_auto_size","text":"void set_glyph_auto_size ( bool value )","title":"function set_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_scale_arrows","text":"bool get_glyph_scale_arrows ()","title":"function get_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-set_glyph_scale_arrows","text":"void set_glyph_scale_arrows ( bool value )","title":"function set_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-get_pca_range","text":"float get_pca_range ()","title":"function get_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_pca_range","text":"void set_pca_range ( float value )","title":"function set_pca_range"},{"location":"api/Classes/classPreferences.html#function-get_pca_steps","text":"int get_pca_steps ()","title":"function get_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_pca_steps","text":"void set_pca_steps ( int value )","title":"function set_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_color_scheme","text":"void set_color_scheme ( int value )","title":"function set_color_scheme"},{"location":"api/Classes/classPreferences.html#function-get_color_scheme","text":"int get_color_scheme ()","title":"function get_color_scheme"},{"location":"api/Classes/classPreferences.html#function-set_particle_colors","text":"void set_particle_colors ( int value )","title":"function set_particle_colors"},{"location":"api/Classes/classPreferences.html#function-get_particle_colors","text":"int get_particle_colors ()","title":"function get_particle_colors"},{"location":"api/Classes/classPreferences.html#function-set_color_map","text":"void set_color_map ( int value )","title":"function set_color_map"},{"location":"api/Classes/classPreferences.html#function-get_color_map","text":"int get_color_map ()","title":"function get_color_map"},{"location":"api/Classes/classPreferences.html#function-set_discrete_color_mode","text":"void set_discrete_color_mode ( bool value )","title":"function set_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-get_discrete_color_mode","text":"bool get_discrete_color_mode ()","title":"function get_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-set_reverse_color_map","text":"void set_reverse_color_map ( bool value )","title":"function set_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_reverse_color_map","text":"bool get_reverse_color_map ()","title":"function get_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_center_checked","text":"bool get_center_checked ()","title":"function get_center_checked"},{"location":"api/Classes/classPreferences.html#function-set_center_checked","text":"void set_center_checked ( bool value )","title":"function set_center_checked"},{"location":"api/Classes/classPreferences.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_type","text":"OrientationMarkerType get_orientation_marker_type ()","title":"function get_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_type","text":"void set_orientation_marker_type ( OrientationMarkerType type )","title":"function set_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_corner","text":"OrientationMarkerCorner get_orientation_marker_corner ()","title":"function get_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_corner","text":"void set_orientation_marker_corner ( OrientationMarkerCorner corner )","title":"function set_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-get_groom_file_template","text":"QString get_groom_file_template ()","title":"function get_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-set_groom_file_template","text":"void set_groom_file_template ( QString groom_file_template )","title":"function set_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-get_optimize_file_template","text":"QString get_optimize_file_template ()","title":"function get_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-set_optimize_file_template","text":"void set_optimize_file_template ( QString optimize_file_template )","title":"function set_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size","text":"QSize get_export_override_size ()","title":"function get_export_override_size"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size","text":"void set_export_override_size ( QSize size )","title":"function set_export_override_size"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size_enabled","text":"bool get_export_override_size_enabled ()","title":"function get_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size_enabled","text":"void set_export_override_size_enabled ( bool enabled )","title":"function set_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-get_export_show_orientation_marker","text":"bool get_export_show_orientation_marker ()","title":"function get_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-set_export_show_orientation_marker","text":"void set_export_show_orientation_marker ( bool value )","title":"function set_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-get_export_show_color_scale","text":"bool get_export_show_color_scale ()","title":"function get_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-set_export_show_color_scale","text":"void set_export_show_color_scale ( bool value )","title":"function set_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-get_export_num_pca_images","text":"int get_export_num_pca_images ()","title":"function get_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-set_export_num_pca_images","text":"void set_export_num_pca_images ( int number )","title":"function set_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_range","text":"double get_export_pca_range ()","title":"function get_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_range","text":"void set_export_pca_range ( double range )","title":"function set_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_modes","text":"void set_export_pca_modes ( QString string )","title":"function set_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_modes","text":"QString get_export_pca_modes ()","title":"function get_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_auto_update_check","text":"bool get_auto_update_check ()","title":"function get_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-set_auto_update_check","text":"void set_auto_update_check ( bool enabled )","title":"function set_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-get_update_snooze_until","text":"QDateTime get_update_snooze_until ()","title":"function get_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-set_update_snooze_until","text":"void set_update_snooze_until ( QDateTime date )","title":"function set_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-get_device_id","text":"QString get_device_id ()","title":"function get_device_id"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_enabled","text":"bool get_telemetry_enabled ()","title":"function get_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_enabled","text":"void set_telemetry_enabled ( bool enabled )","title":"function set_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_asked","text":"bool get_telemetry_asked ()","title":"function get_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_asked","text":"void set_telemetry_asked ( bool asked )","title":"function set_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-get_pending_telemetry_events","text":"QStringList get_pending_telemetry_events ()","title":"function get_pending_telemetry_events"},{"location":"api/Classes/classPreferences.html#function-set_pending_telemetry_events","text":"void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_pending_telemetry_events"},{"location":"api/Classes/classProcrustes3D.html","text":"Procrustes3D Public Types Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType Public Functions Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes) Public Types Documentation typedef RealType typedef double Procrustes3D :: RealType ; typedef PointType typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ; typedef ShapeType typedef std :: vector < PointType > Procrustes3D :: ShapeType ; typedef ShapeIteratorType typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ; typedef ShapeListType typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ; typedef ShapeListIteratorType typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ; typedef SimilarityTransformListType typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ; typedef SimilarityTransformListIteratorType typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ; typedef TransformMatrixType typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ; typedef TransformMatrixListType typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ; typedef TransformMatrixIteratorType typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ; Public Functions Documentation function Procrustes3D inline Procrustes3D () function Procrustes3D inline Procrustes3D ( bool do_scaling , bool do_rotation_translation ) function GetScaling inline bool GetScaling () const function ScalingOn inline void ScalingOn () function ScalingOff inline void ScalingOff () function GetRotationTranslation inline bool GetRotationTranslation () const function RotationTranslationOn inline void RotationTranslationOn () function RotationTranslationOff inline void RotationTranslationOff () function AlignShapes void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function RemoveTranslation void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function ConstructTransformMatrices void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ) function ConstructTransformMatrix void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ) function ComputeMeanShape void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ) function ComputeCenterOfMass void ComputeCenterOfMass ( ShapeType & shape , PointType & center ) function CenterShape void CenterShape ( ShapeType & shape ) function ComputeCommonCenter void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ) function AlignSourceToTarget void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ) function ComputeMedianShape int ComputeMedianShape ( ShapeListType & shapeList ) function TransformShape static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ) function TransformShapes static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ) function ComputeSumOfSquares static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-24 at 22:16:02 +0000","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#procrustes3d","text":"","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#public-types","text":"Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType","title":"Public Types"},{"location":"api/Classes/classProcrustes3D.html#public-functions","text":"Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes)","title":"Public Functions"},{"location":"api/Classes/classProcrustes3D.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classProcrustes3D.html#typedef-realtype","text":"typedef double Procrustes3D :: RealType ;","title":"typedef RealType"},{"location":"api/Classes/classProcrustes3D.html#typedef-pointtype","text":"typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapetype","text":"typedef std :: vector < PointType > Procrustes3D :: ShapeType ;","title":"typedef ShapeType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapeiteratortype","text":"typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ;","title":"typedef ShapeIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelisttype","text":"typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ;","title":"typedef ShapeListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelistiteratortype","text":"typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ;","title":"typedef ShapeListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlisttype","text":"typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ;","title":"typedef SimilarityTransformListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlistiteratortype","text":"typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ;","title":"typedef SimilarityTransformListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixtype","text":"typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ;","title":"typedef TransformMatrixType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixlisttype","text":"typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ;","title":"typedef TransformMatrixListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixiteratortype","text":"typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ;","title":"typedef TransformMatrixIteratorType"},{"location":"api/Classes/classProcrustes3D.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d","text":"inline Procrustes3D ()","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d_1","text":"inline Procrustes3D ( bool do_scaling , bool do_rotation_translation )","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classProcrustes3D.html#function-scalingon","text":"inline void ScalingOn ()","title":"function ScalingOn"},{"location":"api/Classes/classProcrustes3D.html#function-scalingoff","text":"inline void ScalingOff ()","title":"function ScalingOff"},{"location":"api/Classes/classProcrustes3D.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationon","text":"inline void RotationTranslationOn ()","title":"function RotationTranslationOn"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationoff","text":"inline void RotationTranslationOff ()","title":"function RotationTranslationOff"},{"location":"api/Classes/classProcrustes3D.html#function-alignshapes","text":"void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function AlignShapes"},{"location":"api/Classes/classProcrustes3D.html#function-removetranslation","text":"void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function RemoveTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrices","text":"void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices )","title":"function ConstructTransformMatrices"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrix","text":"void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix )","title":"function ConstructTransformMatrix"},{"location":"api/Classes/classProcrustes3D.html#function-computemeanshape","text":"void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList )","title":"function ComputeMeanShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecenterofmass","text":"void ComputeCenterOfMass ( ShapeType & shape , PointType & center )","title":"function ComputeCenterOfMass"},{"location":"api/Classes/classProcrustes3D.html#function-centershape","text":"void CenterShape ( ShapeType & shape )","title":"function CenterShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecommoncenter","text":"void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center )","title":"function ComputeCommonCenter"},{"location":"api/Classes/classProcrustes3D.html#function-alignsourcetotarget","text":"void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source )","title":"function AlignSourceToTarget"},{"location":"api/Classes/classProcrustes3D.html#function-computemedianshape","text":"int ComputeMedianShape ( ShapeListType & shapeList )","title":"function ComputeMedianShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshape","text":"static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform )","title":"function TransformShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshapes","text":"static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms )","title":"function TransformShapes"},{"location":"api/Classes/classProcrustes3D.html#function-computesumofsquares","text":"static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function ComputeSumOfSquares"},{"location":"api/Classes/classReconstruction.html","text":"Reconstruction More... Public Types Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType Public Functions Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad () Detailed Description template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ; Public Types Documentation typedef GradientFilterType typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ; typedef GradientMagnitudeFilterType typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ; typedef GradientImageType typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ; typedef GradientImageIteratorType typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ; typedef ImageIteratorType typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ; typedef WriterType typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ; typedef ITK2VTKConnectorType typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ; typedef AddImageFilterType typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ; typedef ResampleFilterType typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ; typedef InterpolatorType typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ; typedef MultiplyByConstantImageFilterType typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ; typedef DuplicatorType typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ; typedef TransformType typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ; typedef PointType typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ; typedef PointArrayType typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ; typedef PointSetType typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ; typedef PointIdType typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ; Public Functions Documentation function Reconstruction Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ) function ~Reconstruction ~ Reconstruction () function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ) function reset void reset () function setDecimation void setDecimation ( float dec ) function setNumClusters void setNumClusters ( int num ) function setMaxAngle void setMaxAngle ( double angleDegrees ) function setFixWinding void setFixWinding ( bool fixWinding ) function setLaplacianSmoothingBeforeDecimation void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ) function setLaplacianSmoothingAfterDecimation void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ) function setSmoothingLambda void setSmoothingLambda ( float smoothingLambda ) function setSmoothingIterations void setSmoothingIterations ( int smoothingIterations ) function setOutputEnabled void setOutputEnabled ( bool enabled ) function setMeanBeforeWarpEnabled void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins function getMesh vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function sparseDone bool sparseDone () function denseDone bool denseDone () function writeMeanInfo void writeMeanInfo ( std :: string nameBase ) function SparseMean inline vtkSmartPointer < vtkPoints > SparseMean () function DenseMean inline vtkSmartPointer < vtkPolyData > DenseMean () function GoodPoints inline std :: vector < bool > GoodPoints () function OutPrefix inline std :: string OutPrefix () function setOutPrefix inline void setOutPrefix ( std :: string out_prefix ) function computeSparseMean std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ) function setOrigin inline void setOrigin ( typename ImageType :: PointType origin ) function EnablePairwiseNormalsDifferencesForGoodBad inline void EnablePairwiseNormalsDifferencesForGoodBad () function DisablePairwiseNormalsDifferencesForGoodBad inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-24 at 22:16:02 +0000","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#reconstruction","text":"More...","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#public-types","text":"Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classReconstruction.html#public-functions","text":"Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad ()","title":"Public Functions"},{"location":"api/Classes/classReconstruction.html#detailed-description","text":"template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ;","title":"Detailed Description"},{"location":"api/Classes/classReconstruction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classReconstruction.html#typedef-gradientfiltertype","text":"typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ;","title":"typedef GradientFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientmagnitudefiltertype","text":"typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ;","title":"typedef GradientMagnitudeFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimagetype","text":"typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ;","title":"typedef GradientImageType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimageiteratortype","text":"typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ;","title":"typedef GradientImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-imageiteratortype","text":"typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ;","title":"typedef ImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-writertype","text":"typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ;","title":"typedef WriterType"},{"location":"api/Classes/classReconstruction.html#typedef-itk2vtkconnectortype","text":"typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ;","title":"typedef ITK2VTKConnectorType"},{"location":"api/Classes/classReconstruction.html#typedef-addimagefiltertype","text":"typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ;","title":"typedef AddImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-resamplefiltertype","text":"typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ;","title":"typedef ResampleFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-interpolatortype","text":"typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ;","title":"typedef InterpolatorType"},{"location":"api/Classes/classReconstruction.html#typedef-multiplybyconstantimagefiltertype","text":"typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ;","title":"typedef MultiplyByConstantImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-duplicatortype","text":"typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ;","title":"typedef DuplicatorType"},{"location":"api/Classes/classReconstruction.html#typedef-transformtype","text":"typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ;","title":"typedef TransformType"},{"location":"api/Classes/classReconstruction.html#typedef-pointtype","text":"typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classReconstruction.html#typedef-pointarraytype","text":"typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ;","title":"typedef PointArrayType"},{"location":"api/Classes/classReconstruction.html#typedef-pointsettype","text":"typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classReconstruction.html#typedef-pointidtype","text":"typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ;","title":"typedef PointIdType"},{"location":"api/Classes/classReconstruction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classReconstruction.html#function-reconstruction","text":"Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false )","title":"function Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-reconstruction_1","text":"~ Reconstruction ()","title":"function ~Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () )","title":"function getDenseMean"},{"location":"api/Classes/classReconstruction.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classReconstruction.html#function-setdecimation","text":"void setDecimation ( float dec )","title":"function setDecimation"},{"location":"api/Classes/classReconstruction.html#function-setnumclusters","text":"void setNumClusters ( int num )","title":"function setNumClusters"},{"location":"api/Classes/classReconstruction.html#function-setmaxangle","text":"void setMaxAngle ( double angleDegrees )","title":"function setMaxAngle"},{"location":"api/Classes/classReconstruction.html#function-setfixwinding","text":"void setFixWinding ( bool fixWinding )","title":"function setFixWinding"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingbeforedecimation","text":"void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation )","title":"function setLaplacianSmoothingBeforeDecimation"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingafterdecimation","text":"void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation )","title":"function setLaplacianSmoothingAfterDecimation"},{"location":"api/Classes/classReconstruction.html#function-setsmoothinglambda","text":"void setSmoothingLambda ( float smoothingLambda )","title":"function setSmoothingLambda"},{"location":"api/Classes/classReconstruction.html#function-setsmoothingiterations","text":"void setSmoothingIterations ( int smoothingIterations )","title":"function setSmoothingIterations"},{"location":"api/Classes/classReconstruction.html#function-setoutputenabled","text":"void setOutputEnabled ( bool enabled )","title":"function setOutputEnabled"},{"location":"api/Classes/classReconstruction.html#function-setmeanbeforewarpenabled","text":"void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins","title":"function setMeanBeforeWarpEnabled"},{"location":"api/Classes/classReconstruction.html#function-getmesh","text":"vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts )","title":"function getMesh"},{"location":"api/Classes/classReconstruction.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsedone","text":"bool sparseDone ()","title":"function sparseDone"},{"location":"api/Classes/classReconstruction.html#function-densedone","text":"bool denseDone ()","title":"function denseDone"},{"location":"api/Classes/classReconstruction.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string nameBase )","title":"function writeMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsemean","text":"inline vtkSmartPointer < vtkPoints > SparseMean ()","title":"function SparseMean"},{"location":"api/Classes/classReconstruction.html#function-densemean","text":"inline vtkSmartPointer < vtkPolyData > DenseMean ()","title":"function DenseMean"},{"location":"api/Classes/classReconstruction.html#function-goodpoints","text":"inline std :: vector < bool > GoodPoints ()","title":"function GoodPoints"},{"location":"api/Classes/classReconstruction.html#function-outprefix","text":"inline std :: string OutPrefix ()","title":"function OutPrefix"},{"location":"api/Classes/classReconstruction.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string out_prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classReconstruction.html#function-computesparsemean","text":"std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false )","title":"function computeSparseMean"},{"location":"api/Classes/classReconstruction.html#function-setorigin","text":"inline void setOrigin ( typename ImageType :: PointType origin )","title":"function setOrigin"},{"location":"api/Classes/classReconstruction.html#function-enablepairwisenormalsdifferencesforgoodbad","text":"inline void EnablePairwiseNormalsDifferencesForGoodBad ()","title":"function EnablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classReconstruction.html#function-disablepairwisenormalsdifferencesforgoodbad","text":"inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-24 at 22:16:02 +0000","title":"function DisablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classStudioLogger.html","text":"StudioLogger Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject Public Signals Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str) Public Functions Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str) Public Signals Documentation signal message void message ( std :: string str ) signal error void error ( std :: string str ) signal warning void warning ( std :: string str ) signal debug void debug ( std :: string str ) signal status void status ( std :: string str ) signal progress void progress ( int value , std :: string str ) Public Functions Documentation function StudioLogger inline StudioLogger () function ~StudioLogger inline virtual ~ StudioLogger () function register_callbacks void register_callbacks () function handle_message void handle_message ( std :: string str ) function handle_error void handle_error ( std :: string str ) function handle_warning void handle_warning ( std :: string str ) function handle_debug void handle_debug ( std :: string str ) function handle_status void handle_status ( std :: string str ) function handle_progress void handle_progress ( double value , std :: string str ) Updated on 2023-10-24 at 22:16:02 +0000","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#studiologger","text":"Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#public-signals","text":"Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str)","title":"Public Signals"},{"location":"api/Classes/classStudioLogger.html#public-functions","text":"Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str)","title":"Public Functions"},{"location":"api/Classes/classStudioLogger.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classStudioLogger.html#signal-message","text":"void message ( std :: string str )","title":"signal message"},{"location":"api/Classes/classStudioLogger.html#signal-error","text":"void error ( std :: string str )","title":"signal error"},{"location":"api/Classes/classStudioLogger.html#signal-warning","text":"void warning ( std :: string str )","title":"signal warning"},{"location":"api/Classes/classStudioLogger.html#signal-debug","text":"void debug ( std :: string str )","title":"signal debug"},{"location":"api/Classes/classStudioLogger.html#signal-status","text":"void status ( std :: string str )","title":"signal status"},{"location":"api/Classes/classStudioLogger.html#signal-progress","text":"void progress ( int value , std :: string str )","title":"signal progress"},{"location":"api/Classes/classStudioLogger.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classStudioLogger.html#function-studiologger","text":"inline StudioLogger ()","title":"function StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-studiologger_1","text":"inline virtual ~ StudioLogger ()","title":"function ~StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-register_callbacks","text":"void register_callbacks ()","title":"function register_callbacks"},{"location":"api/Classes/classStudioLogger.html#function-handle_message","text":"void handle_message ( std :: string str )","title":"function handle_message"},{"location":"api/Classes/classStudioLogger.html#function-handle_error","text":"void handle_error ( std :: string str )","title":"function handle_error"},{"location":"api/Classes/classStudioLogger.html#function-handle_warning","text":"void handle_warning ( std :: string str )","title":"function handle_warning"},{"location":"api/Classes/classStudioLogger.html#function-handle_debug","text":"void handle_debug ( std :: string str )","title":"function handle_debug"},{"location":"api/Classes/classStudioLogger.html#function-handle_status","text":"void handle_status ( std :: string str )","title":"function handle_status"},{"location":"api/Classes/classStudioLogger.html#function-handle_progress","text":"void handle_progress ( double value , std :: string str ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function handle_progress"},{"location":"api/Classes/classSurfaceReconstructor.html","text":"SurfaceReconstructor Public Functions Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape) Public Functions Documentation function SurfaceReconstructor SurfaceReconstructor () function ~SurfaceReconstructor ~ SurfaceReconstructor () function initializeReconstruction void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ) function hasDenseMean bool hasDenseMean () function setMean void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ) function writeMeanInfo void writeMeanInfo ( std :: string baseName ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function resetReconstruct void resetReconstruct () function set_number_of_clusters void set_number_of_clusters ( int num_clusters ) function set_normal_angle void set_normal_angle ( double angle ) function set_decimation_percent void set_decimation_percent ( double decimation ) function get_surface_reconstruction_available bool get_surface_reconstruction_available () function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#surfacereconstructor","text":"","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions","text":"Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor","text":"SurfaceReconstructor ()","title":"function SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor_1","text":"~ SurfaceReconstructor ()","title":"function ~SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-initializereconstruction","text":"void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters )","title":"function initializeReconstruction"},{"location":"api/Classes/classSurfaceReconstructor.html#function-hasdensemean","text":"bool hasDenseMean ()","title":"function hasDenseMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-setmean","text":"void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints )","title":"function setMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string baseName )","title":"function writeMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-resetreconstruct","text":"void resetReconstruct ()","title":"function resetReconstruct"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_number_of_clusters","text":"void set_number_of_clusters ( int num_clusters )","title":"function set_number_of_clusters"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_normal_angle","text":"void set_normal_angle ( double angle )","title":"function set_normal_angle"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_decimation_percent","text":"void set_decimation_percent ( double decimation )","title":"function set_decimation_percent"},{"location":"api/Classes/classSurfaceReconstructor.html#function-get_surface_reconstruction_available","text":"bool get_surface_reconstruction_available ()","title":"function get_surface_reconstruction_available"},{"location":"api/Classes/classSurfaceReconstructor.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function build_mesh"},{"location":"api/Classes/classUtils.html","text":"Utils Public Functions Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas) Public Functions Documentation function randperm static std :: vector < int > randperm ( int n ) function readSparseShape static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ) function readSparseShape static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ) function readParticleIds static std :: vector < int > readParticleIds ( char * filename ) function writeParticleIds static void writeParticleIds ( char * filename , std :: vector < int > ids ) function computeCenterOfMassForShapeEnsemble static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ) function computeCenterOfMassForShape static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ) function updateMin static void updateMin ( double curVal , double & minVal ) function updateMax static void updateMax ( double curVal , double & maxVal ) function getBoundingBoxForShapeEnsemble static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function getBoundingBoxForShape static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function spherical2cartesian static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function cartesian2spherical static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function convertToPhysicalCoordinates static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function convertToImageCoordinates static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function num2str static std :: string num2str ( float num ) function num2str static std :: string num2str ( int num ) function linspace static std :: vector < double > linspace ( double a , double b , size_t N ) function int2str static std :: string int2str ( int n , int number_of_zeros ) function multiply_into template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ) function averageThetaBruteForce static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle. APPROXIMATE CHORD SOLUTION This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x ) EXACT SOLUTION This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted. SUMMARY method runtime memory notes brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah function averageThetaChord static double averageThetaChord ( std :: vector < double > thetas ) function averageThetaArc static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-24 at 22:16:02 +0000","title":"Utils"},{"location":"api/Classes/classUtils.html#utils","text":"","title":"Utils"},{"location":"api/Classes/classUtils.html#public-functions","text":"Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas)","title":"Public Functions"},{"location":"api/Classes/classUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classUtils.html#function-randperm","text":"static std :: vector < int > randperm ( int n )","title":"function randperm"},{"location":"api/Classes/classUtils.html#function-readsparseshape","text":"static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape","text":"static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readsparseshape_1","text":"static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape_1","text":"static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readparticleids","text":"static std :: vector < int > readParticleIds ( char * filename )","title":"function readParticleIds"},{"location":"api/Classes/classUtils.html#function-writeparticleids","text":"static void writeParticleIds ( char * filename , std :: vector < int > ids )","title":"function writeParticleIds"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshapeensemble","text":"static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshape","text":"static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShape"},{"location":"api/Classes/classUtils.html#function-updatemin","text":"static void updateMin ( double curVal , double & minVal )","title":"function updateMin"},{"location":"api/Classes/classUtils.html#function-updatemax","text":"static void updateMax ( double curVal , double & maxVal )","title":"function updateMax"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshapeensemble","text":"static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshape","text":"static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShape"},{"location":"api/Classes/classUtils.html#function-spherical2cartesian","text":"static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function spherical2cartesian"},{"location":"api/Classes/classUtils.html#function-cartesian2spherical","text":"static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function cartesian2spherical"},{"location":"api/Classes/classUtils.html#function-converttophysicalcoordinates","text":"static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToPhysicalCoordinates"},{"location":"api/Classes/classUtils.html#function-converttoimagecoordinates","text":"static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classUtils.html#function-num2str","text":"static std :: string num2str ( float num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-num2str_1","text":"static std :: string num2str ( int num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-linspace","text":"static std :: vector < double > linspace ( double a , double b , size_t N )","title":"function linspace"},{"location":"api/Classes/classUtils.html#function-int2str","text":"static std :: string int2str ( int n , int number_of_zeros )","title":"function int2str"},{"location":"api/Classes/classUtils.html#function-multiply_into","text":"template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs )","title":"function multiply_into"},{"location":"api/Classes/classUtils.html#function-averagethetabruteforce","text":"static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle.","title":"function averageThetaBruteForce"},{"location":"api/Classes/classUtils.html#approximate-chord-solution","text":"This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x )","title":"APPROXIMATE CHORD SOLUTION"},{"location":"api/Classes/classUtils.html#exact-solution","text":"This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted.","title":"EXACT SOLUTION"},{"location":"api/Classes/classUtils.html#summary","text":"","title":"SUMMARY"},{"location":"api/Classes/classUtils.html#method-runtime-memory-notes","text":"brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah","title":"method runtime memory notes"},{"location":"api/Classes/classUtils.html#function-averagethetachord","text":"static double averageThetaChord ( std :: vector < double > thetas )","title":"function averageThetaChord"},{"location":"api/Classes/classUtils.html#function-averagethetaarc","text":"static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function averageThetaArc"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html","text":"itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 > Public Types Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() . Public Types Documentation typedef Self typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass. typedef ParametersType typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ; typedef ParametersValueType typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ; typedef DerivativeType typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ; typedef JacobianType typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ; typedef InputPointType typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ; typedef InverseTransformBaseType typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ; typedef InverseTransformBasePointer typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ; typedef TransformType typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass. typedef TransformTypePointer typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ; typedef TransformTypeConstPointer typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ; typedef NonZeroJacobianIndicesType typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType. typedef SpatialJacobianType typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ; typedef MovingImageGradientType typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical. typedef MovingImageGradientValueType typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space. function itkStaticConstMacro itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ) function GetNumberOfNonZeroJacobianIndices virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all. function itkGetConstMacro itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices. function itkGetConstMacro itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ) function GetJacobian virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function EvaluateJacobianWithImageGradientProduct virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned. function GetSpatialJacobian virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function ComputeJacobianWithRespectToParameters inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions. function ComputeJacobianWithRespectToPosition inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const function GetSpatialHessian virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function AdvancedTransform AdvancedTransform () function AdvancedTransform AdvancedTransform ( NumberOfParametersType numberOfParameters ) function ~AdvancedTransform inline virtual ~ AdvancedTransform () Protected Attributes Documentation variable m_HasNonZeroSpatialHessian bool m_HasNonZeroSpatialHessian ; variable m_HasNonZeroJacobianOfSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#itkadvancedtransform","text":"Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 >","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types","text":"Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType","title":"Public Types"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions","text":"Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0","title":"Public Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions","text":"Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform ()","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes","text":"Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() .","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-self","text":"typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parametersvaluetype","text":"typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ;","title":"typedef ParametersValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-derivativetype","text":"typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ;","title":"typedef DerivativeType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasetype","text":"typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ;","title":"typedef InverseTransformBaseType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasepointer","text":"typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ;","title":"typedef InverseTransformBasePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtype","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass.","title":"typedef TransformType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypepointer","text":"typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ;","title":"typedef TransformTypePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypeconstpointer","text":"typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ;","title":"typedef TransformTypeConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-nonzerojacobianindicestype","text":"typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialjacobiantype","text":"typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialjacobiantype","text":"typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialhessiantype","text":"typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialhessiantype","text":"typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-internalmatrixtype","text":"typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradienttype","text":"typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical.","title":"typedef MovingImageGradientType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradientvaluetype","text":"typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ;","title":"typedef MovingImageGradientValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itktypemacro","text":"itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions )","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getnumberofnonzerojacobianindices","text":"virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all.","title":"function GetNumberOfNonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro","text":"itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices.","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro_1","text":"itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool )","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-evaluatejacobianwithimagegradientproduct","text":"virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned.","title":"function EvaluateJacobianWithImageGradientProduct"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialjacobian","text":"virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoparameters","text":"inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions.","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoposition","text":"inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const","title":"function ComputeJacobianWithRespectToPosition"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialhessian","text":"virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian_1","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian_1","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform","text":"AdvancedTransform ()","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_1","text":"AdvancedTransform ( NumberOfParametersType numberOfParameters )","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_2","text":"inline virtual ~ AdvancedTransform ()","title":"function ~AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerospatialhessian","text":"bool m_HasNonZeroSpatialHessian ;","title":"variable m_HasNonZeroSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerojacobianofspatialhessian","text":"bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_HasNonZeroJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html","text":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double > Detailed Description template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#itkbsplineinterpolateimagefunctionwithdoublecoefficents","text":"More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double >","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#detailed-description","text":"template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-24 at 22:16:01 +0000","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html","text":"itk::CompactlySupportedRBFSparseKernelTransform More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const Protected Functions Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override Additional inherited members Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ; Public Types Documentation typedef Self typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited typedef OutputPointType typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters Protected Functions Documentation function CompactlySupportedRBFSparseKernelTransform inline CompactlySupportedRBFSparseKernelTransform () function ~CompactlySupportedRBFSparseKernelTransform inline virtual ~ CompactlySupportedRBFSparseKernelTransform () function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#itkcompactlysupportedrbfsparsekerneltransform","text":"More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions >","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types","text":"Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions","text":"Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#additional-inherited-members","text":"Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-self","text":"typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-superclass","text":"typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform","text":"inline CompactlySupportedRBFSparseKernelTransform ()","title":"function CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform_1","text":"inline virtual ~ CompactlySupportedRBFSparseKernelTransform ()","title":"function ~CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-24 at 22:16:01 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html","text":"itk::Functor::MultiplyByConstant More... Public Functions Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const Public Attributes Name TConstant m_Constant Detailed Description template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ; Public Functions Documentation function MultiplyByConstant inline MultiplyByConstant () function ~MultiplyByConstant inline ~ MultiplyByConstant () function operator!= inline bool operator != ( const MultiplyByConstant & other ) const function operator== inline bool operator == ( const MultiplyByConstant & other ) const function operator() inline TOutput operator ()( const TInput & A ) const function SetConstant inline void SetConstant ( TConstant ct ) function GetConstant inline const TConstant & GetConstant () const Public Attributes Documentation variable m_Constant TConstant m_Constant ; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#itkfunctormultiplybyconstant","text":"More...","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions","text":"Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes","text":"Name TConstant m_Constant","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#detailed-description","text":"template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant","text":"inline MultiplyByConstant ()","title":"function MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant_1","text":"inline ~ MultiplyByConstant ()","title":"function ~MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator","text":"inline bool operator != ( const MultiplyByConstant & other ) const","title":"function operator!="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_1","text":"inline bool operator == ( const MultiplyByConstant & other ) const","title":"function operator=="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_2","text":"inline TOutput operator ()( const TInput & A ) const","title":"function operator()"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-setconstant","text":"inline void SetConstant ( TConstant ct )","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#variable-m_constant","text":"TConstant m_Constant ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_Constant"},{"location":"api/Classes/classitk_1_1KernelTransform2.html","text":"itk::KernelTransform2 More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Additional inherited members Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms. Public Types Documentation typedef Self typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs. typedef ParametersType typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ; typedef JacobianType typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ; typedef InputPointType typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ; typedef NonZeroJacobianIndicesType typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs. typedef SpatialJacobianType typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef GMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Protected Types Documentation typedef SVDDecompositionType typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition. typedef QRDecompositionType typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer. function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function GetNumberOfParameters inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) Compute W matrix. function ComputeLInverse void ComputeLInverse ( void ) Compute L matrix inverse. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space function TransformVector inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform. function TransformVector inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const function TransformCovariantVector inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const function GetJacobian virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation. function SetIdentity virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform. function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks. function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks. function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) function SetAlpha inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetAlpha inline virtual TScalarType GetAlpha ( void ) const function itkSetMacro itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetPoissonRatio inline virtual const TScalarType GetPoissonRatio ( void ) const function itkSetMacro itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition. function itkGetConstReferenceMacro itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ) function GetSpatialJacobian inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided. function GetSpatialHessian inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function KernelTransform2 KernelTransform2 () function ~KernelTransform2 virtual ~ KernelTransform2 () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline. function ComputeReflexiveG virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. function ComputeK void ComputeK ( void ) Compute K matrix. function ComputeL void ComputeL ( void ) Compute L matrix. function ComputeP void ComputeP ( void ) Compute P matrix. function ComputeY void ComputeY ( void ) Compute Y matrix. function ComputeD void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter. variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function. variable m_AMatrix AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation. variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation. variable m_WMatrixComputed bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_LMatrixDecompositionComputed bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed? variable m_LMatrixDecompositionSVD SVDDecompositionType * m_LMatrixDecompositionSVD ; variable m_LMatrixDecompositionQR QRDecompositionType * m_LMatrixDecompositionQR ; variable m_I IMatrixType m_I ; Identity matrix. variable m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params) variable m_NonZeroJacobianIndicesTemp NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method: variable m_FastComputationPossible bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#itkkerneltransform2","text":"More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types","text":"Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types","text":"Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions","text":"Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions","text":"Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void )","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms.","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-self","text":"typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-superclass","text":"typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-nonzerojacobianindicestype","text":"typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialjacobiantype","text":"typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialjacobiantype","text":"typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialhessiantype","text":"typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialhessiantype","text":"typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-internalmatrixtype","text":"typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsettype","text":"typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-imatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-gmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-lmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-kmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-ymatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-wmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-dmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-amatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-bmatrixtype","text":"typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-rowmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-columnmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-svddecompositiontype","text":"typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition.","title":"typedef SVDDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-qrdecompositiontype","text":"typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ;","title":"typedef QRDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getnumberofparameters","text":"inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform.","title":"function GetNumberOfParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computelinverse","text":"void ComputeLInverse ( void ) Compute L matrix inverse.","title":"function ComputeLInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector","text":"inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform.","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector_1","text":"inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformcovariantvector","text":"inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const","title":"function TransformCovariantVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setidentity","text":"virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform.","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks.","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks.","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setalpha","text":"inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function SetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getalpha","text":"inline virtual TScalarType GetAlpha ( void ) const","title":"function GetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro","text":"itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getpoissonratio","text":"inline virtual const TScalarType GetPoissonRatio ( void ) const","title":"function GetPoissonRatio"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro_1","text":"itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetconstreferencemacro","text":"itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string )","title":"function itkGetConstReferenceMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialjacobian","text":"inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialhessian","text":"inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian_1","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian_1","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2","text":"KernelTransform2 ()","title":"function KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2_1","text":"virtual ~ KernelTransform2 ()","title":"function ~KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computereflexiveg","text":"virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space.","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computek","text":"void ComputeK ( void ) Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computel","text":"void ComputeL ( void ) Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computep","text":"void ComputeP ( void ) Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computey","text":"void ComputeY ( void ) Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computed","text":"void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-reorganizew","text":"void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter.","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function.","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation.","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation.","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositioncomputed","text":"bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed?","title":"variable m_LMatrixDecompositionComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionsvd","text":"SVDDecompositionType * m_LMatrixDecompositionSVD ;","title":"variable m_LMatrixDecompositionSVD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionqr","text":"QRDecompositionType * m_LMatrixDecompositionQR ;","title":"variable m_LMatrixDecompositionQR"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix.","title":"variable m_I"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindices","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params)","title":"variable m_NonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindicestemp","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method:","title":"variable m_NonZeroJacobianIndicesTemp"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_fastcomputationpossible","text":"bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_FastComputationPossible"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html","text":"itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > > Public Types Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const Protected Functions Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const Detailed Description template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510 Public Types Documentation typedef Self typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs. typedef Superclass typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods). function SetConstant inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels function GetConstant inline const TConstant & GetConstant () const Protected Functions Documentation function MultiplyByConstantImageFilter inline MultiplyByConstantImageFilter () function ~MultiplyByConstantImageFilter inline virtual ~ MultiplyByConstantImageFilter () function PrintSelf inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#itkmultiplybyconstantimagefilter","text":"Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > >","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types","text":"Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer","title":"Public Types"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions","text":"Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#detailed-description","text":"template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-self","text":"typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-superclass","text":"typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-setconstant","text":"inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter","text":"inline MultiplyByConstantImageFilter ()","title":"function MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter_1","text":"inline virtual ~ MultiplyByConstantImageFilter ()","title":"function ~MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html","text":"itk::SparseKernelTransform More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Public Types Documentation typedef Self typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type. typedef InputPointType typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class. typedef OutputPointType typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class. typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef TripletType typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices. typedef GMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Public Functions Documentation function itkTypeMacro itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) const Compute W matrix. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space function SetIdentity virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) Protected Functions Documentation function SparseKernelTransform SparseKernelTransform () function ~SparseKernelTransform virtual ~ SparseKernelTransform () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeReflexiveG virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space function ComputeK void ComputeK () const Compute K matrix. function ComputeL void ComputeL () const Compute L matrix. function ComputeP void ComputeP () const Compute P matrix. function ComputeY void ComputeY () const Compute Y matrix. function ComputeD void ComputeD () const Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function variable m_AMatrix AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation variable m_GMatrix GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time variable m_WMatrixComputed bool m_WMatrixComputed ; Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_I IMatrixType m_I ; Identity matrix. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#itksparsekerneltransform","text":"More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions >","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types","text":"Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions","text":"Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions","text":"Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\"","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-self","text":"typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type.","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class.","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsettype","text":"typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-imatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-triplettype","text":"typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices.","title":"typedef TripletType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-lmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-kmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-ymatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-wmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-dmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-amatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-bmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-rowmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-columnmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) const Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setidentity","text":"virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform","text":"SparseKernelTransform ()","title":"function SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform_1","text":"virtual ~ SparseKernelTransform ()","title":"function ~SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computereflexiveg","text":"virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computek","text":"void ComputeK () const Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computel","text":"void ComputeL () const Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computep","text":"void ComputeP () const Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computey","text":"void ComputeY () const Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computed","text":"void ComputeD () const Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-reorganizew","text":"void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_gmatrix","text":"GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time","title":"variable m_GMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix. Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_I"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html","text":"itk::TPGACLevelSetImageFilter More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float > Public Types Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Protected Functions Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change) Detailed Description template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ; Public Types Documentation typedef Self typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs typedef Superclass typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ; typedef ImageType typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ; typedef IndexType typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ; typedef TimeStepType typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ; typedef ValueType typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass. typedef OutputImageType typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ; typedef FeatureImageType typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory function itkTypeMacro itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods). Protected Functions Documentation function ~TPGACLevelSetImageFilter inline ~ TPGACLevelSetImageFilter () function TPGACLevelSetImageFilter TPGACLevelSetImageFilter () function PrintSelf virtual void PrintSelf ( std :: ostream & os , Indent indent ) const function TPGACLevelSetImageFilter TPGACLevelSetImageFilter ( const Self & ) function operator= void operator = ( const Self & ) function CalculateUpdateValue inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#itktpgaclevelsetimagefilter","text":"More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float >","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types","text":"Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType","title":"Public Types"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions","text":"Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change)","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#detailed-description","text":"template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-self","text":"typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-superclass","text":"typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-imagetype","text":"typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-indextype","text":"typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ;","title":"typedef IndexType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-timesteptype","text":"typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ;","title":"typedef TimeStepType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-valuetype","text":"typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass.","title":"typedef ValueType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-outputimagetype","text":"typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ;","title":"typedef OutputImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-featureimagetype","text":"typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ;","title":"typedef FeatureImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter","text":"inline ~ TPGACLevelSetImageFilter ()","title":"function ~TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_1","text":"TPGACLevelSetImageFilter ()","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-printself","text":"virtual void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_2","text":"TPGACLevelSetImageFilter ( const Self & )","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-operator","text":"void operator = ( const Self & )","title":"function operator="},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-calculateupdatevalue","text":"inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-24 at 22:16:01 +0000","title":"function CalculateUpdateValue"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html","text":"itk::ThinPlateSplineKernelTransform2 More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) Protected Functions Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const Additional inherited members Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997 Public Types Documentation typedef Self typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. typedef OutputPointType typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) Protected Functions Documentation function ThinPlateSplineKernelTransform2 inline ThinPlateSplineKernelTransform2 () function ~ThinPlateSplineKernelTransform2 inline virtual ~ ThinPlateSplineKernelTransform2 () function ComputeG virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#itkthinplatesplinekerneltransform2","text":"More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types","text":"Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma)","title":"Public Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions","text":"Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-self","text":"typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-superclass","text":"typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2","text":"inline ThinPlateSplineKernelTransform2 ()","title":"function ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2_1","text":"inline virtual ~ ThinPlateSplineKernelTransform2 ()","title":"function ~ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-24 at 22:16:01 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classmat3d.html","text":"mat3d Public Functions Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose () Protected Attributes Name double m_data Public Functions Documentation function mat3d inline mat3d () function mat3d mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ) function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function operator* inline mat3d operator * ( mat3d & m ) function operator*= inline mat3d & operator *= ( mat3d & m ) function operator+= inline mat3d & operator += ( mat3d & m ) function operator-= inline mat3d & operator -= ( mat3d & m ) function operator/= inline mat3d & operator /= ( const double f ) function operator* inline vec3d operator * ( vec3d b ) function det inline double det () const function Invert double Invert () function inverse mat3d inverse () const function zero inline void zero () function unit inline void unit () function transpose mat3d transpose () Protected Attributes Documentation variable m_data double m_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"mat3d"},{"location":"api/Classes/classmat3d.html#mat3d","text":"","title":"mat3d"},{"location":"api/Classes/classmat3d.html#public-functions","text":"Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose ()","title":"Public Functions"},{"location":"api/Classes/classmat3d.html#protected-attributes","text":"Name double m_data","title":"Protected Attributes"},{"location":"api/Classes/classmat3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmat3d.html#function-mat3d","text":"inline mat3d ()","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-mat3d_1","text":"mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 )","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmat3d.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmat3d.html#function-operator_2","text":"inline mat3d operator * ( mat3d & m )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-operator_3","text":"inline mat3d & operator *= ( mat3d & m )","title":"function operator*="},{"location":"api/Classes/classmat3d.html#function-operator_4","text":"inline mat3d & operator += ( mat3d & m )","title":"function operator+="},{"location":"api/Classes/classmat3d.html#function-operator-","text":"inline mat3d & operator -= ( mat3d & m )","title":"function operator-="},{"location":"api/Classes/classmat3d.html#function-operator_5","text":"inline mat3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classmat3d.html#function-operator_6","text":"inline vec3d operator * ( vec3d b )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-det","text":"inline double det () const","title":"function det"},{"location":"api/Classes/classmat3d.html#function-invert","text":"double Invert ()","title":"function Invert"},{"location":"api/Classes/classmat3d.html#function-inverse","text":"mat3d inverse () const","title":"function inverse"},{"location":"api/Classes/classmat3d.html#function-zero","text":"inline void zero ()","title":"function zero"},{"location":"api/Classes/classmat3d.html#function-unit","text":"inline void unit ()","title":"function unit"},{"location":"api/Classes/classmat3d.html#function-transpose","text":"mat3d transpose ()","title":"function transpose"},{"location":"api/Classes/classmat3d.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classmat3d.html#variable-m_data","text":"double m_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_data"},{"location":"api/Classes/classmatrix.html","text":"matrix Public Functions Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt) Public Functions Documentation function matrix matrix ( int r , int c ) function ~matrix inline ~ matrix () function zero void zero () function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function solve bool solve ( vector < double > & x , vector < double > & b ) function lsq_solve bool lsq_solve ( vector < double > & x , vector < double > & b ) function eigen_vectors bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values ) function Rows inline int Rows () function mult_transpose void mult_transpose ( vector < double > & x , vector < double > & y ) function mult_transpose_self void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-24 at 22:16:02 +0000","title":"matrix"},{"location":"api/Classes/classmatrix.html#matrix","text":"","title":"matrix"},{"location":"api/Classes/classmatrix.html#public-functions","text":"Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt)","title":"Public Functions"},{"location":"api/Classes/classmatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmatrix.html#function-matrix","text":"matrix ( int r , int c )","title":"function matrix"},{"location":"api/Classes/classmatrix.html#function-matrix_1","text":"inline ~ matrix ()","title":"function ~matrix"},{"location":"api/Classes/classmatrix.html#function-zero","text":"void zero ()","title":"function zero"},{"location":"api/Classes/classmatrix.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmatrix.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmatrix.html#function-solve","text":"bool solve ( vector < double > & x , vector < double > & b )","title":"function solve"},{"location":"api/Classes/classmatrix.html#function-lsq_solve","text":"bool lsq_solve ( vector < double > & x , vector < double > & b )","title":"function lsq_solve"},{"location":"api/Classes/classmatrix.html#function-eigen_vectors","text":"bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values )","title":"function eigen_vectors"},{"location":"api/Classes/classmatrix.html#function-rows","text":"inline int Rows ()","title":"function Rows"},{"location":"api/Classes/classmatrix.html#function-mult_transpose","text":"void mult_transpose ( vector < double > & x , vector < double > & y )","title":"function mult_transpose"},{"location":"api/Classes/classmatrix.html#function-mult_transpose_self","text":"void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function mult_transpose_self"},{"location":"api/Classes/classmeshFIM.html","text":"meshFIM Public Types Name enum LabelType typedef int VoxelIndexType typedef int index Public Functions Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM () Public Attributes Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors Public Types Documentation enum LabelType Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint typedef VoxelIndexType typedef int meshFIM :: VoxelIndexType ; typedef index typedef int meshFIM :: index ; Public Functions Documentation function ComputeDistanceToLandmarksGivenTriangleInfo void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ) function computeFIM void computeFIM ( TriMesh * mesh , const char * vertT_filename ) function GetFeatureValues void GetFeatureValues ( point x , std :: vector < float > & vals ) function ReadFaceIndexMap void ReadFaceIndexMap ( const char * infilename ) function ReadFeatureFromFile void ReadFeatureFromFile ( const char * infilename ) function ReadFeatureGradientFromFile void ReadFeatureGradientFromFile ( const char * infilename ) function GetFeatureDerivative point GetFeatureDerivative ( point p , int fIndex ) function need_abs_curvatures void need_abs_curvatures () function need_edge_lengths void need_edge_lengths () function need_speed void need_speed () function need_oneringfaces void need_oneringfaces () function need_kdtree void need_kdtree () function SetMesh void SetMesh ( TriMesh * mesh ) function SetStopDistance inline void SetStopDistance ( float d ) function setSpeedType inline void setSpeedType ( int st ) function meshFIM inline meshFIM () function ~meshFIM inline ~ meshFIM () Public Attributes Documentation variable m_meshPtr TriMesh * m_meshPtr ; variable NumComputation int NumComputation ; variable imageOrigin float imageOrigin ; variable imageSpacing float imageSpacing ; variable imageSize int imageSize ; variable imageIndex int imageIndex ; variable colors std :: vector < Color > colors ; Updated on 2023-10-24 at 22:16:02 +0000","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#meshfim","text":"","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-types","text":"Name enum LabelType typedef int VoxelIndexType typedef int index","title":"Public Types"},{"location":"api/Classes/classmeshFIM.html#public-functions","text":"Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM ()","title":"Public Functions"},{"location":"api/Classes/classmeshFIM.html#public-attributes","text":"Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors","title":"Public Attributes"},{"location":"api/Classes/classmeshFIM.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classmeshFIM.html#enum-labeltype","text":"Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint","title":"enum LabelType"},{"location":"api/Classes/classmeshFIM.html#typedef-voxelindextype","text":"typedef int meshFIM :: VoxelIndexType ;","title":"typedef VoxelIndexType"},{"location":"api/Classes/classmeshFIM.html#typedef-index","text":"typedef int meshFIM :: index ;","title":"typedef index"},{"location":"api/Classes/classmeshFIM.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmeshFIM.html#function-computedistancetolandmarksgiventriangleinfo","text":"void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename )","title":"function ComputeDistanceToLandmarksGivenTriangleInfo"},{"location":"api/Classes/classmeshFIM.html#function-computefim","text":"void computeFIM ( TriMesh * mesh , const char * vertT_filename )","title":"function computeFIM"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturevalues","text":"void GetFeatureValues ( point x , std :: vector < float > & vals )","title":"function GetFeatureValues"},{"location":"api/Classes/classmeshFIM.html#function-readfaceindexmap","text":"void ReadFaceIndexMap ( const char * infilename )","title":"function ReadFaceIndexMap"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturefromfile","text":"void ReadFeatureFromFile ( const char * infilename )","title":"function ReadFeatureFromFile"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturegradientfromfile","text":"void ReadFeatureGradientFromFile ( const char * infilename )","title":"function ReadFeatureGradientFromFile"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturederivative","text":"point GetFeatureDerivative ( point p , int fIndex )","title":"function GetFeatureDerivative"},{"location":"api/Classes/classmeshFIM.html#function-need_abs_curvatures","text":"void need_abs_curvatures ()","title":"function need_abs_curvatures"},{"location":"api/Classes/classmeshFIM.html#function-need_edge_lengths","text":"void need_edge_lengths ()","title":"function need_edge_lengths"},{"location":"api/Classes/classmeshFIM.html#function-need_speed","text":"void need_speed ()","title":"function need_speed"},{"location":"api/Classes/classmeshFIM.html#function-need_oneringfaces","text":"void need_oneringfaces ()","title":"function need_oneringfaces"},{"location":"api/Classes/classmeshFIM.html#function-need_kdtree","text":"void need_kdtree ()","title":"function need_kdtree"},{"location":"api/Classes/classmeshFIM.html#function-setmesh","text":"void SetMesh ( TriMesh * mesh )","title":"function SetMesh"},{"location":"api/Classes/classmeshFIM.html#function-setstopdistance","text":"inline void SetStopDistance ( float d )","title":"function SetStopDistance"},{"location":"api/Classes/classmeshFIM.html#function-setspeedtype","text":"inline void setSpeedType ( int st )","title":"function setSpeedType"},{"location":"api/Classes/classmeshFIM.html#function-meshfim","text":"inline meshFIM ()","title":"function meshFIM"},{"location":"api/Classes/classmeshFIM.html#function-meshfim_1","text":"inline ~ meshFIM ()","title":"function ~meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classmeshFIM.html#variable-m_meshptr","text":"TriMesh * m_meshPtr ;","title":"variable m_meshPtr"},{"location":"api/Classes/classmeshFIM.html#variable-numcomputation","text":"int NumComputation ;","title":"variable NumComputation"},{"location":"api/Classes/classmeshFIM.html#variable-imageorigin","text":"float imageOrigin ;","title":"variable imageOrigin"},{"location":"api/Classes/classmeshFIM.html#variable-imagespacing","text":"float imageSpacing ;","title":"variable imageSpacing"},{"location":"api/Classes/classmeshFIM.html#variable-imagesize","text":"int imageSize ;","title":"variable imageSize"},{"location":"api/Classes/classmeshFIM.html#variable-imageindex","text":"int imageIndex ;","title":"variable imageIndex"},{"location":"api/Classes/classmeshFIM.html#variable-colors","text":"std :: vector < Color > colors ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable colors"},{"location":"api/Classes/classobject__reader.html","text":"object_reader More... #include Detailed Description class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-24 at 22:16:02 +0000","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#object_reader","text":"More... #include ","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#detailed-description","text":"class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classobject__writer.html","text":"object_writer Updated on 2023-10-24 at 22:16:02 +0000","title":"object_writer"},{"location":"api/Classes/classobject__writer.html#object_writer","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"object_writer"},{"location":"api/Classes/classquatd.html","text":"quatd Public Functions Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t) Public Attributes Name double x double y double z double w Public Functions Documentation function quatd inline quatd () function quatd inline quatd ( const double angle , vec3d v ) function quatd inline quatd ( vec3d v1 , vec3d v2 ) function quatd inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) function operator!= inline bool operator != ( const quatd & q ) function operator- inline quatd operator - () function operator+ inline quatd operator + ( const quatd & q ) const function operator- inline quatd operator - ( const quatd & q ) const function operator+= inline quatd & operator += ( const quatd & q ) function operator-= inline quatd & operator -= ( const quatd & q ) function operator* inline quatd operator * ( const quatd & q ) const function operator*= inline quatd & operator *= ( const quatd & q ) function operator* inline quatd operator * ( const double a ) const function operator/ inline quatd operator / ( const double a ) const function operator/= inline quatd & operator /= ( const double a ) function Conjugate inline quatd Conjugate () const function Norm inline double Norm () const function MakeUnit inline void MakeUnit () function Inverse inline quatd Inverse () const function DotProduct inline double DotProduct ( const quatd & q ) const function GetVector inline vec3d GetVector () const function GetAngle inline double GetAngle () const function RotateVector inline void RotateVector ( vec3d & v ) const function operator* inline vec3d operator * ( const vec3d & r ) function operator* inline mat3d operator * ( mat3d m ) function RotateVectorP inline void RotateVectorP ( double * v , double * r ) const function dot static inline double dot ( quatd & q1 , quatd & q2 ) function lerp static inline quatd lerp ( quatd & q1 , quatd & q2 , double t ) function slerp static quatd slerp ( quatd & q1 , quatd & q2 , double t ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable w double w ; Updated on 2023-10-24 at 22:16:02 +0000","title":"quatd"},{"location":"api/Classes/classquatd.html#quatd","text":"","title":"quatd"},{"location":"api/Classes/classquatd.html#public-functions","text":"Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t)","title":"Public Functions"},{"location":"api/Classes/classquatd.html#public-attributes","text":"Name double x double y double z double w","title":"Public Attributes"},{"location":"api/Classes/classquatd.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classquatd.html#function-quatd","text":"inline quatd ()","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_1","text":"inline quatd ( const double angle , vec3d v )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_2","text":"inline quatd ( vec3d v1 , vec3d v2 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_3","text":"inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-operator","text":"inline bool operator != ( const quatd & q )","title":"function operator!="},{"location":"api/Classes/classquatd.html#function-operator-","text":"inline quatd operator - ()","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_1","text":"inline quatd operator + ( const quatd & q ) const","title":"function operator+"},{"location":"api/Classes/classquatd.html#function-operator-_1","text":"inline quatd operator - ( const quatd & q ) const","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_2","text":"inline quatd & operator += ( const quatd & q )","title":"function operator+="},{"location":"api/Classes/classquatd.html#function-operator-_2","text":"inline quatd & operator -= ( const quatd & q )","title":"function operator-="},{"location":"api/Classes/classquatd.html#function-operator_3","text":"inline quatd operator * ( const quatd & q ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_4","text":"inline quatd & operator *= ( const quatd & q )","title":"function operator*="},{"location":"api/Classes/classquatd.html#function-operator_5","text":"inline quatd operator * ( const double a ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_6","text":"inline quatd operator / ( const double a ) const","title":"function operator/"},{"location":"api/Classes/classquatd.html#function-operator_7","text":"inline quatd & operator /= ( const double a )","title":"function operator/="},{"location":"api/Classes/classquatd.html#function-conjugate","text":"inline quatd Conjugate () const","title":"function Conjugate"},{"location":"api/Classes/classquatd.html#function-norm","text":"inline double Norm () const","title":"function Norm"},{"location":"api/Classes/classquatd.html#function-makeunit","text":"inline void MakeUnit ()","title":"function MakeUnit"},{"location":"api/Classes/classquatd.html#function-inverse","text":"inline quatd Inverse () const","title":"function Inverse"},{"location":"api/Classes/classquatd.html#function-dotproduct","text":"inline double DotProduct ( const quatd & q ) const","title":"function DotProduct"},{"location":"api/Classes/classquatd.html#function-getvector","text":"inline vec3d GetVector () const","title":"function GetVector"},{"location":"api/Classes/classquatd.html#function-getangle","text":"inline double GetAngle () const","title":"function GetAngle"},{"location":"api/Classes/classquatd.html#function-rotatevector","text":"inline void RotateVector ( vec3d & v ) const","title":"function RotateVector"},{"location":"api/Classes/classquatd.html#function-operator_8","text":"inline vec3d operator * ( const vec3d & r )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_9","text":"inline mat3d operator * ( mat3d m )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-rotatevectorp","text":"inline void RotateVectorP ( double * v , double * r ) const","title":"function RotateVectorP"},{"location":"api/Classes/classquatd.html#function-dot","text":"static inline double dot ( quatd & q1 , quatd & q2 )","title":"function dot"},{"location":"api/Classes/classquatd.html#function-lerp","text":"static inline quatd lerp ( quatd & q1 , quatd & q2 , double t )","title":"function lerp"},{"location":"api/Classes/classquatd.html#function-slerp","text":"static quatd slerp ( quatd & q1 , quatd & q2 , double t )","title":"function slerp"},{"location":"api/Classes/classquatd.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classquatd.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classquatd.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classquatd.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classquatd.html#variable-w","text":"double w ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable w"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html","text":"shapeworks::AnalysisTool Inherits from QWidget Public Types Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType Public Slots Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed () Public Signals Name void update_view () void pca_update () void progress (int ) void reconstruction_complete () Public Functions Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type () Public Attributes Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C Public Types Documentation enum GroupAnalysisType Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3 enum McaMode Enumerator Value Description Vanilla Within Between using AlignmentType using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ; using PointType using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ; Public Slots Documentation slot on_tabWidget_currentChanged void on_tabWidget_currentChanged () slot handle_analysis_options void handle_analysis_options () slot handle_median void handle_median () slot on_mean_button_clicked void on_mean_button_clicked () slot on_group1_button_clicked void on_group1_button_clicked () slot on_group2_button_clicked void on_group2_button_clicked () slot on_difference_button_clicked void on_difference_button_clicked () slot on_pcaSlider_valueChanged void on_pcaSlider_valueChanged () slot on_group_slider_valueChanged void on_group_slider_valueChanged () slot on_pcaModeSpinBox_valueChanged void on_pcaModeSpinBox_valueChanged ( int i ) slot handle_pca_animate_state_changed void handle_pca_animate_state_changed () slot handle_pca_timer void handle_pca_timer () slot handle_group_animate_state_changed void handle_group_animate_state_changed () slot handle_group_timer void handle_group_timer () slot handle_reconstruction_complete void handle_reconstruction_complete () slot on_reconstructionButton_clicked void on_reconstructionButton_clicked () slot set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. slot get_display_feature_map std :: string get_display_feature_map () slot group_changed void group_changed () slot groups_active bool groups_active () slot on_view_open_button_toggled void on_view_open_button_toggled () slot on_surface_open_button_toggled void on_surface_open_button_toggled () slot on_metrics_open_button_toggled void on_metrics_open_button_toggled () slot is_group_active bool is_group_active ( int shape_index ) slot reconstruction_method_changed void reconstruction_method_changed () slot initialize_mesh_warper void initialize_mesh_warper () slot group_p_values_clicked void group_p_values_clicked () slot network_analysis_clicked void network_analysis_clicked () slot handle_eval_thread_complete void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) slot handle_eval_thread_progress void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ) slot handle_eval_particle_normals_progress void handle_eval_particle_normals_progress ( float progress ) slot handle_eval_particle_normals_complete void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ) slot handle_group_pvalues_complete void handle_group_pvalues_complete () slot handle_alignment_changed void handle_alignment_changed ( int new_alignment ) slot run_good_bad_particles void run_good_bad_particles () slot handle_lda_progress void handle_lda_progress ( double progress ) slot handle_lda_complete void handle_lda_complete () slot handle_network_analysis_progress void handle_network_analysis_progress ( int progress ) slot handle_network_analysis_complete void handle_network_analysis_complete () slot show_difference_to_mean_clicked void show_difference_to_mean_clicked () slot group_analysis_combo_changed void group_analysis_combo_changed () Public Signals Documentation signal update_view void update_view () signal pca_update void pca_update () signal progress void progress ( int ) signal reconstruction_complete void reconstruction_complete () Public Functions Documentation function AnalysisTool AnalysisTool ( Preferences & prefs ) function ~AnalysisTool ~ AnalysisTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function get_session QSharedPointer < Session > get_session () Return the session. function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function get_app inline ShapeWorksStudioApp * get_app () function set_active void set_active ( bool active ) Set if this tool is active. function get_active bool get_active () Return if this tool is active. function get_group_difference_mode bool get_group_difference_mode () function get_group_difference_vectors std :: vector < Shape :: Point > get_group_difference_vectors () function get_analysis_mode std :: string get_analysis_mode () function set_analysis_mode void set_analysis_mode ( std :: string mode ) function set_labels void set_labels ( QString which , QString value ) function get_pca_mode int get_pca_mode () function get_group_ratio double get_group_ratio () function get_pca_value double get_pca_value () function pca_animate bool pca_animate () function get_mca_level McaMode get_mca_level () const function get_sample_number int get_sample_number () function compute_stats bool compute_stats () function update_slider void update_slider () function reset_stats void reset_stats () function enable_actions void enable_actions ( bool newly_enabled = false ) function get_mean_shape_points Particles get_mean_shape_points () function get_mean_shape ShapeHandle get_mean_shape () function get_shape_points Particles get_shape_points ( int mode , double value ) function get_multi_level_shape_points Particles get_multi_level_shape_points ( int mode , double value , McaMode level ) function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) function get_mca_mode_shape ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ) function get_current_shape ShapeHandle get_current_shape () function get_stats ParticleShapeStatistics get_stats () function load_settings void load_settings () function store_settings void store_settings () function shutdown void shutdown () function export_variance_graph bool export_variance_graph ( QString filename ) function compute_shape_evaluations void compute_shape_evaluations () function get_group_analysis_type GroupAnalysisType get_group_analysis_type () Public Attributes Documentation variable MODE_ALL_SAMPLES_C static const std :: string MODE_ALL_SAMPLES_C ; variable MODE_MEAN_C static const std :: string MODE_MEAN_C ; variable MODE_PCA_C static const std :: string MODE_PCA_C ; variable MODE_SINGLE_SAMPLE_C static const std :: string MODE_SINGLE_SAMPLE_C ; variable MODE_REGRESSION_C static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#shapeworksanalysistool","text":"Inherits from QWidget","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types","text":"Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots","text":"Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals","text":"Name void update_view () void pca_update () void progress (int ) void reconstruction_complete ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions","text":"Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes","text":"Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-groupanalysistype","text":"Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3","title":"enum GroupAnalysisType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-mcamode","text":"Enumerator Value Description Vanilla Within Between","title":"enum McaMode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-alignmenttype","text":"using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ;","title":"using AlignmentType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-pointtype","text":"using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_tabwidget_currentchanged","text":"void on_tabWidget_currentChanged ()","title":"slot on_tabWidget_currentChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_analysis_options","text":"void handle_analysis_options ()","title":"slot handle_analysis_options"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_median","text":"void handle_median ()","title":"slot handle_median"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_mean_button_clicked","text":"void on_mean_button_clicked ()","title":"slot on_mean_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group1_button_clicked","text":"void on_group1_button_clicked ()","title":"slot on_group1_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group2_button_clicked","text":"void on_group2_button_clicked ()","title":"slot on_group2_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_difference_button_clicked","text":"void on_difference_button_clicked ()","title":"slot on_difference_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcaslider_valuechanged","text":"void on_pcaSlider_valueChanged ()","title":"slot on_pcaSlider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group_slider_valuechanged","text":"void on_group_slider_valueChanged ()","title":"slot on_group_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcamodespinbox_valuechanged","text":"void on_pcaModeSpinBox_valueChanged ( int i )","title":"slot on_pcaModeSpinBox_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_animate_state_changed","text":"void handle_pca_animate_state_changed ()","title":"slot handle_pca_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_timer","text":"void handle_pca_timer ()","title":"slot handle_pca_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_animate_state_changed","text":"void handle_group_animate_state_changed ()","title":"slot handle_group_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_timer","text":"void handle_group_timer ()","title":"slot handle_group_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_reconstructionbutton_clicked","text":"void on_reconstructionButton_clicked ()","title":"slot on_reconstructionButton_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"slot set_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-get_display_feature_map","text":"std :: string get_display_feature_map ()","title":"slot get_display_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_changed","text":"void group_changed ()","title":"slot group_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-groups_active","text":"bool groups_active ()","title":"slot groups_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_view_open_button_toggled","text":"void on_view_open_button_toggled ()","title":"slot on_view_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_surface_open_button_toggled","text":"void on_surface_open_button_toggled ()","title":"slot on_surface_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_metrics_open_button_toggled","text":"void on_metrics_open_button_toggled ()","title":"slot on_metrics_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-is_group_active","text":"bool is_group_active ( int shape_index )","title":"slot is_group_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-reconstruction_method_changed","text":"void reconstruction_method_changed ()","title":"slot reconstruction_method_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-initialize_mesh_warper","text":"void initialize_mesh_warper ()","title":"slot initialize_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_p_values_clicked","text":"void group_p_values_clicked ()","title":"slot group_p_values_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-network_analysis_clicked","text":"void network_analysis_clicked ()","title":"slot network_analysis_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_complete","text":"void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"slot handle_eval_thread_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_progress","text":"void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress )","title":"slot handle_eval_thread_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_progress","text":"void handle_eval_particle_normals_progress ( float progress )","title":"slot handle_eval_particle_normals_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_complete","text":"void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad )","title":"slot handle_eval_particle_normals_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_pvalues_complete","text":"void handle_group_pvalues_complete ()","title":"slot handle_group_pvalues_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ( int new_alignment )","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-run_good_bad_particles","text":"void run_good_bad_particles ()","title":"slot run_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_progress","text":"void handle_lda_progress ( double progress )","title":"slot handle_lda_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_complete","text":"void handle_lda_complete ()","title":"slot handle_lda_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_progress","text":"void handle_network_analysis_progress ( int progress )","title":"slot handle_network_analysis_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_complete","text":"void handle_network_analysis_complete ()","title":"slot handle_network_analysis_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-show_difference_to_mean_clicked","text":"void show_difference_to_mean_clicked ()","title":"slot show_difference_to_mean_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_analysis_combo_changed","text":"void group_analysis_combo_changed ()","title":"slot group_analysis_combo_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-pca_update","text":"void pca_update ()","title":"signal pca_update"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-reconstruction_complete","text":"void reconstruction_complete ()","title":"signal reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool","text":"AnalysisTool ( Preferences & prefs )","title":"function AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool_1","text":"~ AnalysisTool ()","title":"function ~AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_session","text":"QSharedPointer < Session > get_session () Return the session.","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_app","text":"inline ShapeWorksStudioApp * get_app ()","title":"function get_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_active","text":"void set_active ( bool active ) Set if this tool is active.","title":"function set_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_active","text":"bool get_active () Return if this tool is active.","title":"function get_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_mode","text":"bool get_group_difference_mode ()","title":"function get_group_difference_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_vectors","text":"std :: vector < Shape :: Point > get_group_difference_vectors ()","title":"function get_group_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_analysis_mode","text":"std :: string get_analysis_mode ()","title":"function get_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_analysis_mode","text":"void set_analysis_mode ( std :: string mode )","title":"function set_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_labels","text":"void set_labels ( QString which , QString value )","title":"function set_labels"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_mode","text":"int get_pca_mode ()","title":"function get_pca_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_ratio","text":"double get_group_ratio ()","title":"function get_group_ratio"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_value","text":"double get_pca_value ()","title":"function get_pca_value"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-pca_animate","text":"bool pca_animate ()","title":"function pca_animate"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_level","text":"McaMode get_mca_level () const","title":"function get_mca_level"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_sample_number","text":"int get_sample_number ()","title":"function get_sample_number"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_stats","text":"bool compute_stats ()","title":"function compute_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-update_slider","text":"void update_slider ()","title":"function update_slider"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-reset_stats","text":"void reset_stats ()","title":"function reset_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-enable_actions","text":"void enable_actions ( bool newly_enabled = false )","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points ()","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value )","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_multi_level_shape_points","text":"Particles get_multi_level_shape_points ( int mode , double value , McaMode level )","title":"function get_multi_level_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value )","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_mode_shape","text":"ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level )","title":"function get_mca_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_current_shape","text":"ShapeHandle get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_stats","text":"ParticleShapeStatistics get_stats ()","title":"function get_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-load_settings","text":"void load_settings ()","title":"function load_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-store_settings","text":"void store_settings ()","title":"function store_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-export_variance_graph","text":"bool export_variance_graph ( QString filename )","title":"function export_variance_graph"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_shape_evaluations","text":"void compute_shape_evaluations ()","title":"function compute_shape_evaluations"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_analysis_type","text":"GroupAnalysisType get_group_analysis_type ()","title":"function get_group_analysis_type"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_all_samples_c","text":"static const std :: string MODE_ALL_SAMPLES_C ;","title":"variable MODE_ALL_SAMPLES_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_mean_c","text":"static const std :: string MODE_MEAN_C ;","title":"variable MODE_MEAN_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_pca_c","text":"static const std :: string MODE_PCA_C ;","title":"variable MODE_PCA_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_single_sample_c","text":"static const std :: string MODE_SINGLE_SAMPLE_C ;","title":"variable MODE_SINGLE_SAMPLE_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_regression_c","text":"static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable MODE_REGRESSION_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html","text":"shapeworks::AnalysisUtils Public Functions Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain) Public Functions Documentation function get_local_particle_system static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#shapeworksanalysisutils","text":"","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions","text":"Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#function-get_local_particle_system","text":"static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Analyze.html","text":"shapeworks::Analyze High level analyze API. More... #include Public Types Name enum AlignmentType Public Functions Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain) Detailed Description class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project . Public Types Documentation enum AlignmentType Enumerator Value Description Global -2 Local -1 Public Functions Documentation function Analyze Analyze ( ProjectHandle project ) function run_offline_analysis void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile. function get_shapes ShapeList get_shapes () Return the list of shapes. function get_num_subjects int get_num_subjects () Return the number of subjects. function get_num_modes int get_num_modes () Return the number of modes. function get_num_particles int get_num_particles () Return the number of particles. function get_mean_shape_points Particles get_mean_shape_points () Return the mean shape. function get_mean_shape ShapeHandle get_mean_shape () Return the mean shape. function get_group_shape_particles Particles get_group_shape_particles ( double ratio ) function get_group_shape ShapeHandle get_group_shape ( double ratio ) function get_shape_points Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value. function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value. function groups_active inline bool groups_active () function create_shape_from_points ShapeHandle create_shape_from_points ( Particles points ) function get_subject_features Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ) function set_group_selection void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ) function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#shapeworksanalyze","text":"High level analyze API. More... #include ","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types","text":"Name enum AlignmentType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions","text":"Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#detailed-description","text":"class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project .","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#enum-alignmenttype","text":"Enumerator Value Description Global -2 Local -1","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-analyze","text":"Analyze ( ProjectHandle project )","title":"function Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-run_offline_analysis","text":"void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile.","title":"function run_offline_analysis"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shapes","text":"ShapeList get_shapes () Return the list of shapes.","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_subjects","text":"int get_num_subjects () Return the number of subjects.","title":"function get_num_subjects"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_modes","text":"int get_num_modes () Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_particles","text":"int get_num_particles () Return the number of particles.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points () Return the mean shape.","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape () Return the mean shape.","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape_particles","text":"Particles get_group_shape_particles ( double ratio )","title":"function get_group_shape_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape","text":"ShapeHandle get_group_shape ( double ratio )","title":"function get_group_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value.","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value.","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-groups_active","text":"inline bool groups_active ()","title":"function groups_active"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-create_shape_from_points","text":"ShapeHandle create_shape_from_points ( Particles points )","title":"function create_shape_from_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_subject_features","text":"Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name )","title":"function get_subject_features"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-set_group_selection","text":"void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 )","title":"function set_group_selection"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html","text":"shapeworks::AnalyzeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#shapeworksanalyzecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html","text":"shapeworks::ColorMap Public Functions Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color) Public Attributes Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_ Public Functions Documentation function construct_lookup_table void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ) function set_discrete_mode inline void set_discrete_mode ( bool discrete_mode ) function set_reverse_mode inline void set_reverse_mode ( bool reverse_mode ) function convert static vtkColor3ub convert ( QColor color ) Public Attributes Documentation variable name_ QString name_ ; variable color_series_ vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#shapeworkscolormap","text":"","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions","text":"Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes","text":"Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-construct_lookup_table","text":"void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut )","title":"function construct_lookup_table"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_discrete_mode","text":"inline void set_discrete_mode ( bool discrete_mode )","title":"function set_discrete_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_reverse_mode","text":"inline void set_reverse_mode ( bool reverse_mode )","title":"function set_reverse_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-convert","text":"static vtkColor3ub convert ( QColor color )","title":"function convert"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-name_","text":"QString name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-color_series_","text":"vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable color_series_"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html","text":"shapeworks::ColorMaps Inherits from std::vector< ColorMap > Public Functions Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index) Public Functions Documentation function ColorMaps ColorMaps () function get_color_series inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) function get_color_map inline ColorMap get_color_map ( int index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#shapeworkscolormaps","text":"Inherits from std::vector< ColorMap >","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions","text":"Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-colormaps","text":"ColorMaps ()","title":"function ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_series","text":"inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index )","title":"function get_color_series"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_map","text":"inline ColorMap get_color_map ( int index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_color_map"},{"location":"api/Classes/classshapeworks_1_1Command.html","text":"shapeworks::Command Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand Public Functions Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions Name virtual void buildParser () Protected Attributes Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type function name inline const std :: string name () const function usage inline const std :: string usage () const function desc inline const std :: string desc () const function parse_args std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers function run int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value Protected Functions Documentation function buildParser virtual void buildParser () Protected Attributes Documentation variable parser optparse :: OptionParser parser ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#shapeworkscommand","text":"Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions","text":"Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions","text":"Name virtual void buildParser ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes","text":"Name optparse::OptionParser parser","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-type","text":"inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type","title":"function type"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-name","text":"inline const std :: string name () const","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-usage","text":"inline const std :: string usage () const","title":"function usage"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-desc","text":"inline const std :: string desc () const","title":"function desc"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-parse_args","text":"std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers","title":"function parse_args"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-run","text":"int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-buildparser","text":"virtual void buildParser ()","title":"function buildParser"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#variable-parser","text":"optparse :: OptionParser parser ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable parser"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html","text":"shapeworks::CompareSettings Public Functions Name DisplayMode get_display_mode () bool get_mean_shape_checked () Public Attributes Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_ Public Functions Documentation function get_display_mode inline DisplayMode get_display_mode () function get_mean_shape_checked inline bool get_mean_shape_checked () Public Attributes Documentation variable compare_enabled_ bool compare_enabled_ = false ; variable surface_distance_mode_ bool surface_distance_mode_ = false ; variable original_checked_ bool original_checked_ = false ; variable groomed_checked_ bool groomed_checked_ = false ; variable reconstructed_checked_ bool reconstructed_checked_ = false ; variable mean_shape_checked_ bool mean_shape_checked_ = false ; variable opacity_ float opacity_ = 1.0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#shapeworkscomparesettings","text":"","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions","text":"Name DisplayMode get_display_mode () bool get_mean_shape_checked ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes","text":"Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_display_mode","text":"inline DisplayMode get_display_mode ()","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_mean_shape_checked","text":"inline bool get_mean_shape_checked ()","title":"function get_mean_shape_checked"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-compare_enabled_","text":"bool compare_enabled_ = false ;","title":"variable compare_enabled_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-surface_distance_mode_","text":"bool surface_distance_mode_ = false ;","title":"variable surface_distance_mode_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-original_checked_","text":"bool original_checked_ = false ;","title":"variable original_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-groomed_checked_","text":"bool groomed_checked_ = false ;","title":"variable groomed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-reconstructed_checked_","text":"bool reconstructed_checked_ = false ;","title":"variable reconstructed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-mean_shape_checked_","text":"bool mean_shape_checked_ = false ;","title":"variable mean_shape_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-opacity_","text":"float opacity_ = 1.0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable opacity_"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html","text":"shapeworks::CompareWidget Inherits from QWidget Public Signals Name void settings_changed () Public Functions Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available () Public Signals Documentation signal settings_changed void settings_changed () Public Functions Documentation function CompareWidget explicit CompareWidget ( QWidget * parent = nullptr ) function ~CompareWidget ~ CompareWidget () function get_settings CompareSettings get_settings () function set_available void set_available ( DisplayMode mode , bool available ) function set_mean_shape_available void set_mean_shape_available ( bool available ) function check_any_available bool check_any_available () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#shapeworkscomparewidget","text":"Inherits from QWidget","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals","text":"Name void settings_changed ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions","text":"Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#signal-settings_changed","text":"void settings_changed ()","title":"signal settings_changed"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget","text":"explicit CompareWidget ( QWidget * parent = nullptr )","title":"function CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget_1","text":"~ CompareWidget ()","title":"function ~CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-get_settings","text":"CompareSettings get_settings ()","title":"function get_settings"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_available","text":"void set_available ( DisplayMode mode , bool available )","title":"function set_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_mean_shape_available","text":"void set_mean_shape_available ( bool available )","title":"function set_mean_shape_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-check_any_available","text":"bool check_any_available () Updated on 2023-10-24 at 22:16:01 +0000","title":"function check_any_available"},{"location":"api/Classes/classshapeworks_1_1Constraint.html","text":"shapeworks::Constraint More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint Public Functions Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Name int sgn (double val) Returns the sign of the double. Protected Attributes Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better. Public Functions Documentation function isViolated inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated function print virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print function setMus inline void setMus ( std :: vector < double > inmu ) Initializes mu. function getMus inline std :: vector < double > getMus () Gets mu. function constraintGradient virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval function updateMu void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update. function lagragianGradient Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Documentation function sgn inline int sgn ( double val ) Returns the sign of the double. Protected Attributes Documentation variable mus_ std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#shapeworksconstraint","text":"More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions","text":"Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions","text":"Name int sgn (double val) Returns the sign of the double.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes","text":"Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#detailed-description","text":"class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated","text":"inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint.","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated_1","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-print","text":"virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-setmus","text":"inline void setMus ( std :: vector < double > inmu ) Initializes mu.","title":"function setMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-getmus","text":"inline std :: vector < double > getMus () Gets mu.","title":"function getMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constraintgradient","text":"virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-updatemu","text":"void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update.","title":"function updateMu"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-lagragiangradient","text":"Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"function lagragianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-sgn","text":"inline int sgn ( double val ) Returns the sign of the double.","title":"function sgn"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#variable-mus_","text":"std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-24 at 22:16:01 +0000","title":"variable mus_"},{"location":"api/Classes/classshapeworks_1_1Constraints.html","text":"shapeworks::Constraints More... #include Public Types Name using itk::Point< double, 3 > Point3 Public Functions Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object. Detailed Description class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap Public Types Documentation using Point3 using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ; Public Functions Documentation function Constraints inline Constraints () Constraints are inactive when initialized. function ~Constraints inline ~ Constraints () function addPlane void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. function addFreeFormConstraint void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. function transformConstraints bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs) function transformPlanes bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints. function getPlaneConstraints inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. function getFreeformConstraint FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. function isAnyViolated bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos. function printAll void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. function violationReport std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. function violationReportData std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. function constraintsLagrangianGradient vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. function InitializeLagrangianParameters void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus. function UpdateMus void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian. function GetActive inline bool GetActive () Gets the variable active, which determines whether constraints are being used. function SetActive inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used. function read void read ( std :: string filename ) Reads in a constraint json file named filename. function write void write ( std :: string filename ) Writes out a constraint json file named filename. function hasConstraints bool hasConstraints () function clipMesh void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#shapeworksconstraints","text":"More... #include ","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types","text":"Name using itk::Point< double, 3 > Point3","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions","text":"Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#detailed-description","text":"class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#using-point3","text":"using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints","text":"inline Constraints () Constraints are inactive when initialized.","title":"function Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints_1","text":"inline ~ Constraints ()","title":"function ~Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addplane","text":"void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addPlane"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addfreeformconstraint","text":"void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformconstraints","text":"bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs)","title":"function transformConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformplanes","text":"bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints.","title":"function transformPlanes"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getplaneconstraints","text":"inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info.","title":"function getPlaneConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getfreeformconstraint","text":"FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info.","title":"function getFreeformConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-isanyviolated","text":"bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos.","title":"function isAnyViolated"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-printall","text":"void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output.","title":"function printAll"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreport","text":"std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index.","title":"function violationReport"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreportdata","text":"std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC.","title":"function violationReportData"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraintslagrangiangradient","text":"vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle.","title":"function constraintsLagrangianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-initializelagrangianparameters","text":"void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus.","title":"function InitializeLagrangianParameters"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-updatemus","text":"void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian.","title":"function UpdateMus"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getactive","text":"inline bool GetActive () Gets the variable active, which determines whether constraints are being used.","title":"function GetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-setactive","text":"inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used.","title":"function SetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-read","text":"void read ( std :: string filename ) Reads in a constraint json file named filename.","title":"function read"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-write","text":"void write ( std :: string filename ) Writes out a constraint json file named filename.","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-hasconstraints","text":"bool hasConstraints ()","title":"function hasConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-clipmesh","text":"void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-24 at 22:16:01 +0000","title":"function clipMesh"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html","text":"shapeworks::ContourDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< ContourDomain > Pointer Public Functions Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ; Public Functions Documentation function ContourDomain inline explicit ContourDomain () function ~ContourDomain inline virtual ~ ContourDomain () function SetPolyLine void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ) function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleNormalAtPoint inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradientAtPoint inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function Distance virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetPositionAfterSplit virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#shapeworkscontourdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types","text":"Name using std::shared_ptr< ContourDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions","text":"Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#using-pointer","text":"using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain","text":"inline explicit ContourDomain ()","title":"function ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain_1","text":"inline virtual ~ ContourDomain ()","title":"function ~ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-setpolyline","text":"void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function SetPolyLine"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplenormalatpoint","text":"inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradientatpoint","text":"inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-distance","text":"virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-squareddistance","text":"virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getpositionaftersplit","text":"virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html","text":"shapeworks::CorrespondenceFunction Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone () Protected Functions Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c) Public Attributes Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension Protected Attributes Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ; typedef DataType typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function SetShapeData inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix. function GetShapeData inline ShapeDataType * GetShapeData () function GetShapeData inline const ShapeDataType * GetShapeData () const function SetShapeGradient inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix. function GetShapeGradient inline ShapeGradientType * GetShapeGradient () function GetShapeGradient inline const ShapeGradientType * GetShapeGradient () const function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function CheckForNans inline bool CheckForNans ( vnl_matrix_type mat ) function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function CorrespondenceFunction inline CorrespondenceFunction () function ~CorrespondenceFunction inline virtual ~ CorrespondenceFunction () function operator= void operator = ( const CorrespondenceFunction & ) function CorrespondenceFunction CorrespondenceFunction ( const CorrespondenceFunction & ) function ComputeUpdates virtual void ComputeUpdates ( const ParticleSystem * c ) Public Attributes Documentation variable ShapeGradientType itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeData ShapeDataType :: Pointer m_ShapeData ; variable m_ShapeGradient ShapeGradientType :: Pointer m_ShapeGradient ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_Counter int m_Counter ; variable m_AttributeScales std :: vector < double > m_AttributeScales ; variable m_DomainsPerShape int m_DomainsPerShape ; variable m_AttributesPerDomain std :: vector < int > m_AttributesPerDomain ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_UseXYZ std :: vector < bool > m_UseXYZ ; variable m_UseNormals std :: vector < bool > m_UseNormals ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; variable num_dims int num_dims ; variable num_samples int num_samples ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#shapeworkscorrespondencefunction","text":"Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types","text":"Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions","text":"Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions","text":"Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes","text":"Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes","text":"Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-self","text":"typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapedata","text":"inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix.","title":"function SetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata","text":"inline ShapeDataType * GetShapeData ()","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata_1","text":"inline const ShapeDataType * GetShapeData () const","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapegradient","text":"inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix.","title":"function SetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient","text":"inline ShapeGradientType * GetShapeGradient ()","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient_1","text":"inline const ShapeGradientType * GetShapeGradient () const","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-checkfornans","text":"inline bool CheckForNans ( vnl_matrix_type mat )","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction","text":"inline CorrespondenceFunction ()","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_1","text":"inline virtual ~ CorrespondenceFunction ()","title":"function ~CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-operator","text":"void operator = ( const CorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_2","text":"CorrespondenceFunction ( const CorrespondenceFunction & )","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-computeupdates","text":"virtual void ComputeUpdates ( const ParticleSystem * c )","title":"function ComputeUpdates"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-shapegradienttype","text":"itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ;","title":"variable ShapeGradientType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapedata","text":"ShapeDataType :: Pointer m_ShapeData ;","title":"variable m_ShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapegradient","text":"ShapeGradientType :: Pointer m_ShapeGradient ;","title":"variable m_ShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributescales","text":"std :: vector < double > m_AttributeScales ;","title":"variable m_AttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_domainspershape","text":"int m_DomainsPerShape ;","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributesperdomain","text":"std :: vector < int > m_AttributesPerDomain ;","title":"variable m_AttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usexyz","text":"std :: vector < bool > m_UseXYZ ;","title":"variable m_UseXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usenormals","text":"std :: vector < bool > m_UseNormals ;","title":"variable m_UseNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ;","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_dims","text":"int num_dims ;","title":"variable num_dims"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_samples","text":"int num_samples ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable num_samples"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html","text":"title: shapeworks::CurvatureSamplingFunction summary: Please note: This is the sampling function currently being used. shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject Protected Classes Name struct CrossDomainNeighborhood Public Types Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType Public Functions Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone () Protected Functions Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system) Public Attributes Name constexpr static int VDimension Protected Attributes Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor Additional inherited members Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature. Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ; typedef Self typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ; typedef Superclass typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ; typedef GradientNumericType typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs. typedef VectorType typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ; typedef GradientVectorType typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ; typedef MeanCurvatureCacheType typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ; typedef VnlMatrixType typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate function BeforeEvaluate virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy function ComputeKappa inline double ComputeKappa ( double mc , unsigned int d ) const function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function SetMeanCurvatureCache inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function GetMeanCurvatureCache inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const function SetRho inline void SetRho ( double g ) function GetRho inline double GetRho () const function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double w ) function GetSharedBoundaryWeight inline double GetSharedBoundaryWeight () const function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function GetSharedBoundaryEnabled inline bool GetSharedBoundaryEnabled () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone Protected Functions Documentation function CurvatureSamplingFunction inline CurvatureSamplingFunction () function ~CurvatureSamplingFunction inline virtual ~ CurvatureSamplingFunction () function operator= void operator = ( const CurvatureSamplingFunction & ) function CurvatureSamplingFunction CurvatureSamplingFunction ( const CurvatureSamplingFunction & ) function UpdateNeighborhood void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MeanCurvatureCache MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; variable m_Counter unsigned int m_Counter ; variable m_Rho double m_Rho ; variable m_avgKappa double m_avgKappa ; variable m_IsSharedBoundaryEnabled bool m_IsSharedBoundaryEnabled { false }; variable m_SharedBoundaryWeight double m_SharedBoundaryWeight { 1.0 }; variable m_CurrentSigma double m_CurrentSigma ; variable m_CurrentNeighborhood std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; variable m_MaxMoveFactor float m_MaxMoveFactor = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"classshapeworks 1 1CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#shapeworkscurvaturesamplingfunction","text":"Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-classes","text":"Name struct CrossDomainNeighborhood","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions","text":"Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions","text":"Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes","text":"Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#additional-inherited-members","text":"Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#detailed-description","text":"class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-self","text":"typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-superclass","text":"typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientnumerictype","text":"typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientvectortype","text":"typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-meancurvaturecachetype","text":"typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ;","title":"typedef MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vnlmatrixtype","text":"typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeevaluate","text":"virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-computekappa","text":"inline double ComputeKappa ( double mc , unsigned int d ) const","title":"function ComputeKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setmeancurvaturecache","text":"inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s )","title":"function SetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache_1","text":"inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setrho","text":"inline void SetRho ( double g )","title":"function SetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getrho","text":"inline double GetRho () const","title":"function GetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double w )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryweight","text":"inline double GetSharedBoundaryWeight () const","title":"function GetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryenabled","text":"inline bool GetSharedBoundaryEnabled () const","title":"function GetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction","text":"inline CurvatureSamplingFunction ()","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_1","text":"inline virtual ~ CurvatureSamplingFunction ()","title":"function ~CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-operator","text":"void operator = ( const CurvatureSamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_2","text":"CurvatureSamplingFunction ( const CurvatureSamplingFunction & )","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-updateneighborhood","text":"void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system )","title":"function UpdateNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_meancurvaturecache","text":"MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ;","title":"variable m_MeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_counter","text":"unsigned int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_rho","text":"double m_Rho ;","title":"variable m_Rho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_avgkappa","text":"double m_avgKappa ;","title":"variable m_avgKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_issharedboundaryenabled","text":"bool m_IsSharedBoundaryEnabled { false };","title":"variable m_IsSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_sharedboundaryweight","text":"double m_SharedBoundaryWeight { 1.0 };","title":"variable m_SharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentsigma","text":"double m_CurrentSigma ;","title":"variable m_CurrentSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentneighborhood","text":"std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ;","title":"variable m_CurrentNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_maxmovefactor","text":"float m_MaxMoveFactor = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_MaxMoveFactor"},{"location":"api/Classes/classshapeworks_1_1DataTool.html","text":"shapeworks::DataTool Inherits from QWidget Public Slots Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked () Public Signals Name void import_button_clicked () Public Functions Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data () Public Slots Documentation slot delete_button_clicked void delete_button_clicked () slot delete_landmarks_clicked void delete_landmarks_clicked () slot set_placing_button_clicked void set_placing_button_clicked ( int id ) slot handle_landmark_mode_changed void handle_landmark_mode_changed () slot handle_constraints_mode_changed void handle_constraints_mode_changed () slot constraints_table_right_click void constraints_table_right_click ( const QPoint & point ) slot copy_ffc_clicked void copy_ffc_clicked () Public Signals Documentation signal import_button_clicked void import_button_clicked () Public Functions Documentation function DataTool DataTool ( Preferences & prefs ) function ~DataTool ~ DataTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function disable_actions void disable_actions () function enable_actions void enable_actions () function update_table void update_table () function update_landmark_table void update_landmark_table () function landmark_domain_changed void landmark_domain_changed () function constraints_domain_changed void constraints_domain_changed () function delete_planes_clicked void delete_planes_clicked () function delete_ffc_clicked void delete_ffc_clicked () function update_notes void update_notes () function get_notes std :: string get_notes () function store_data void store_data () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#shapeworksdatatool","text":"Inherits from QWidget","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots","text":"Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals","text":"Name void import_button_clicked ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions","text":"Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_button_clicked","text":"void delete_button_clicked ()","title":"slot delete_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_landmarks_clicked","text":"void delete_landmarks_clicked ()","title":"slot delete_landmarks_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-set_placing_button_clicked","text":"void set_placing_button_clicked ( int id )","title":"slot set_placing_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_landmark_mode_changed","text":"void handle_landmark_mode_changed ()","title":"slot handle_landmark_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_constraints_mode_changed","text":"void handle_constraints_mode_changed ()","title":"slot handle_constraints_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-constraints_table_right_click","text":"void constraints_table_right_click ( const QPoint & point )","title":"slot constraints_table_right_click"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-copy_ffc_clicked","text":"void copy_ffc_clicked ()","title":"slot copy_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#signal-import_button_clicked","text":"void import_button_clicked ()","title":"signal import_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool","text":"DataTool ( Preferences & prefs )","title":"function DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool_1","text":"~ DataTool ()","title":"function ~DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-disable_actions","text":"void disable_actions ()","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-enable_actions","text":"void enable_actions ()","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_table","text":"void update_table ()","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_landmark_table","text":"void update_landmark_table ()","title":"function update_landmark_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-landmark_domain_changed","text":"void landmark_domain_changed ()","title":"function landmark_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-constraints_domain_changed","text":"void constraints_domain_changed ()","title":"function constraints_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_planes_clicked","text":"void delete_planes_clicked ()","title":"function delete_planes_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_ffc_clicked","text":"void delete_ffc_clicked ()","title":"function delete_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_notes","text":"void update_notes ()","title":"function update_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-get_notes","text":"std :: string get_notes ()","title":"function get_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-store_data","text":"void store_data () Updated on 2023-10-24 at 22:16:01 +0000","title":"function store_data"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html","text":"shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject Public Types Name enum class FileType enum class SplitType Public Functions Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Detailed Description class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object Public Types Documentation enum FileType Enumerator Value Description ID IMAGE PARTICLES enum SplitType Enumerator Value Description TRAIN TEST Public Functions Documentation function DeepSSMJob DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ) function ~DeepSSMJob ~ DeepSSMJob () function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function run_augmentation void run_augmentation () function run_training void run_training () function run_testing void run_testing () function python_message void python_message ( std :: string str ) function get_list std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#shapeworksdeepssmjob","text":"Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types","text":"Name enum class FileType enum class SplitType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions","text":"Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#detailed-description","text":"class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-filetype","text":"Enumerator Value Description ID IMAGE PARTICLES","title":"enum FileType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-splittype","text":"Enumerator Value Description TRAIN TEST","title":"enum SplitType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob","text":"DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode )","title":"function DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob_1","text":"~ DeepSSMJob ()","title":"function ~DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_augmentation","text":"void run_augmentation ()","title":"function run_augmentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_training","text":"void run_training ()","title":"function run_training"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_testing","text":"void run_testing ()","title":"function run_testing"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-python_message","text":"void python_message ( std :: string str )","title":"function python_message"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-get_list","text":"std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_list"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html","text":"shapeworks::DeepSSMParameters Public Functions Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults () Public Attributes Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C Public Functions Documentation function DeepSSMParameters explicit DeepSSMParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_aug_num_samples int get_aug_num_samples () function set_aug_num_samples void set_aug_num_samples ( int num_samples ) function get_aug_num_dims int get_aug_num_dims () function set_aug_num_dims void set_aug_num_dims ( int num_dims ) function get_training_num_dims int get_training_num_dims () function set_training_num_dims void set_training_num_dims ( int num_dims ) function get_aug_percent_variability double get_aug_percent_variability () function set_aug_percent_variability void set_aug_percent_variability ( double percent_variability ) function get_aug_sampler_type std :: string get_aug_sampler_type () function set_aug_sampler_type void set_aug_sampler_type ( std :: string sampler_type ) function get_training_epochs int get_training_epochs () function set_training_epochs void set_training_epochs ( int epochs ) function get_training_learning_rate double get_training_learning_rate () function set_training_learning_rate void set_training_learning_rate ( double rate ) function get_training_decay_learning_rate bool get_training_decay_learning_rate () function set_training_decay_learning_rate void set_training_decay_learning_rate ( bool decay ) function get_training_fine_tuning bool get_training_fine_tuning () function set_training_fine_tuning void set_training_fine_tuning ( bool fine_tuning ) function get_training_fine_tuning_epochs int get_training_fine_tuning_epochs () function set_training_fine_tuning_epochs void set_training_fine_tuning_epochs ( int epochs ) function get_training_fine_tuning_learning_rate double get_training_fine_tuning_learning_rate () function set_training_fine_tuning_learning_rate void set_training_fine_tuning_learning_rate ( double rate ) function get_training_batch_size int get_training_batch_size () function set_training_batch_size void set_training_batch_size ( int batch_size ) function get_training_split double get_training_split () function set_training_split void set_training_split ( double value ) function get_validation_split double get_validation_split () function set_validation_split void set_validation_split ( double value ) function get_testing_split double get_testing_split () function set_testing_split void set_testing_split ( double value ) function restore_split_defaults void restore_split_defaults () function restore_augmentation_defaults void restore_augmentation_defaults () function restore_training_defaults void restore_training_defaults () function restore_defaults void restore_defaults () Public Attributes Documentation variable DEEPSSM_SAMPLER_GAUSSIAN_C static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; variable DEEPSSM_SAMPLER_MIXTURE_C static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ; variable DEEPSSM_SAMPLER_KDE_C static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#shapeworksdeepssmparameters","text":"","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions","text":"Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes","text":"Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-deepssmparameters","text":"explicit DeepSSMParameters ( ProjectHandle project )","title":"function DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_samples","text":"int get_aug_num_samples ()","title":"function get_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_samples","text":"void set_aug_num_samples ( int num_samples )","title":"function set_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_dims","text":"int get_aug_num_dims ()","title":"function get_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_dims","text":"void set_aug_num_dims ( int num_dims )","title":"function set_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_num_dims","text":"int get_training_num_dims ()","title":"function get_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_num_dims","text":"void set_training_num_dims ( int num_dims )","title":"function set_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_percent_variability","text":"double get_aug_percent_variability ()","title":"function get_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_percent_variability","text":"void set_aug_percent_variability ( double percent_variability )","title":"function set_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_sampler_type","text":"std :: string get_aug_sampler_type ()","title":"function get_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_sampler_type","text":"void set_aug_sampler_type ( std :: string sampler_type )","title":"function set_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_epochs","text":"int get_training_epochs ()","title":"function get_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_epochs","text":"void set_training_epochs ( int epochs )","title":"function set_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_learning_rate","text":"double get_training_learning_rate ()","title":"function get_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_learning_rate","text":"void set_training_learning_rate ( double rate )","title":"function set_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_decay_learning_rate","text":"bool get_training_decay_learning_rate ()","title":"function get_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_decay_learning_rate","text":"void set_training_decay_learning_rate ( bool decay )","title":"function set_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning","text":"bool get_training_fine_tuning ()","title":"function get_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning","text":"void set_training_fine_tuning ( bool fine_tuning )","title":"function set_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_epochs","text":"int get_training_fine_tuning_epochs ()","title":"function get_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_epochs","text":"void set_training_fine_tuning_epochs ( int epochs )","title":"function set_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_learning_rate","text":"double get_training_fine_tuning_learning_rate ()","title":"function get_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_learning_rate","text":"void set_training_fine_tuning_learning_rate ( double rate )","title":"function set_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_batch_size","text":"int get_training_batch_size ()","title":"function get_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_batch_size","text":"void set_training_batch_size ( int batch_size )","title":"function set_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_split","text":"double get_training_split ()","title":"function get_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_split","text":"void set_training_split ( double value )","title":"function set_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_validation_split","text":"double get_validation_split ()","title":"function get_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_validation_split","text":"void set_validation_split ( double value )","title":"function set_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_testing_split","text":"double get_testing_split ()","title":"function get_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_testing_split","text":"void set_testing_split ( double value )","title":"function set_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_split_defaults","text":"void restore_split_defaults ()","title":"function restore_split_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_augmentation_defaults","text":"void restore_augmentation_defaults ()","title":"function restore_augmentation_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_training_defaults","text":"void restore_training_defaults ()","title":"function restore_training_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_gaussian_c","text":"static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ;","title":"variable DEEPSSM_SAMPLER_GAUSSIAN_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_mixture_c","text":"static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ;","title":"variable DEEPSSM_SAMPLER_MIXTURE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_kde_c","text":"static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable DEEPSSM_SAMPLER_KDE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html","text":"shapeworks::DeepSSMTool Inherits from QWidget Public Types Name enum class ToolMode Public Slots Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed () Public Signals Name void update_view () void progress (int ) Public Functions Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature () Public Types Documentation enum ToolMode Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType Public Slots Documentation slot run_clicked void run_clicked () slot restore_defaults void restore_defaults () slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) slot tab_changed void tab_changed ( int tab ) slot update_panels void update_panels () slot update_split void update_split ( QLineEdit * source ) slot handle_new_mesh void handle_new_mesh () slot training_fine_tuning_changed void training_fine_tuning_changed () Public Signals Documentation signal update_view void update_view () signal progress void progress ( int ) Public Functions Documentation function DeepSSMTool DeepSSMTool ( Preferences & prefs ) function ~DeepSSMTool ~ DeepSSMTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function is_active bool is_active () Return if this tool is active. function load_params void load_params () function store_params void store_params () function shutdown void shutdown () function get_shapes ShapeList get_shapes () function resizeEvent void resizeEvent ( QResizeEvent * event ) override function get_display_feature std :: string get_display_feature () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#shapeworksdeepssmtool","text":"Inherits from QWidget","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types","text":"Name enum class ToolMode","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots","text":"Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals","text":"Name void update_view () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions","text":"Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#enum-toolmode","text":"Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType","title":"enum ToolMode"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-tab_changed","text":"void tab_changed ( int tab )","title":"slot tab_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_panels","text":"void update_panels ()","title":"slot update_panels"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_split","text":"void update_split ( QLineEdit * source )","title":"slot update_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-training_fine_tuning_changed","text":"void training_fine_tuning_changed ()","title":"slot training_fine_tuning_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool","text":"DeepSSMTool ( Preferences & prefs )","title":"function DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool_1","text":"~ DeepSSMTool ()","title":"function ~DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-is_active","text":"bool is_active () Return if this tool is active.","title":"function is_active"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-load_params","text":"void load_params ()","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-store_params","text":"void store_params ()","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_display_feature","text":"std :: string get_display_feature () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_display_feature"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html","text":"shapeworks::DisentangledCorrespondenceFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type Public Functions Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM. Public Types Documentation typedef Self typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ; typedef shared_vnl_matrix_array_type typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DisentangledCorrespondenceFunction inline DisentangledCorrespondenceFunction () function ~DisentangledCorrespondenceFunction inline virtual ~ DisentangledCorrespondenceFunction () function operator= void operator = ( const DisentangledCorrespondenceFunction & ) function DisentangledCorrespondenceFunction DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ) function ComputeCovarianceMatrices virtual void ComputeCovarianceMatrices () function Initialize inline void Initialize () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_MinimumEigenValue_time_cohort std :: vector < double > m_MinimumEigenValue_time_cohort ; variable m_MinimumEigenValue_shape_cohort std :: vector < double > m_MinimumEigenValue_shape_cohort ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_InverseCovMatrices_time_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ; variable m_InverseCovMatrices_shape_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ; variable m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; variable m_points_mean_shape_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort ; variable m_Time_PointsUpdate shared_vnl_matrix_array_type m_Time_PointsUpdate ; variable m_Shape_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#shapeworksdisentangledcorrespondencefunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types","text":"Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions","text":"Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#detailed-description","text":"class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-self","text":"typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shared_vnl_matrix_array_type","text":"typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ;","title":"typedef shared_vnl_matrix_array_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction","text":"inline DisentangledCorrespondenceFunction ()","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_1","text":"inline virtual ~ DisentangledCorrespondenceFunction ()","title":"function ~DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-operator","text":"void operator = ( const DisentangledCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_2","text":"DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & )","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-computecovariancematrices","text":"virtual void ComputeCovarianceMatrices ()","title":"function ComputeCovarianceMatrices"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_time_cohort","text":"std :: vector < double > m_MinimumEigenValue_time_cohort ;","title":"variable m_MinimumEigenValue_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_shape_cohort","text":"std :: vector < double > m_MinimumEigenValue_shape_cohort ;","title":"variable m_MinimumEigenValue_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_time_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ;","title":"variable m_InverseCovMatrices_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_shape_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ;","title":"variable m_InverseCovMatrices_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_time_cohort","text":"shared_vnl_matrix_array_type m_points_mean_time_cohort ;","title":"variable m_points_mean_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_shape_cohort","text":"shared_vnl_matrix_array_type m_points_mean_shape_cohort ;","title":"variable m_points_mean_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_time_pointsupdate","text":"shared_vnl_matrix_array_type m_Time_PointsUpdate ;","title":"variable m_Time_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shape_pointsupdate","text":"shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_Shape_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html","text":"shapeworks::DualVectorFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType Public Functions Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone () Protected Functions Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff(). Public Types Documentation typedef Self typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type. Public Functions Documentation function itkTypeMacro itkTypeMacro ( DualVectorFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function EnergyA inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function EnergyB inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function Energy inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber function SetFunctionA inline void SetFunctionA ( VectorFunction * o ) function GetFunctionA inline VectorFunction * GetFunctionA () function GetFunctionB inline VectorFunction * GetFunctionB () function SetFunctionB inline void SetFunctionB ( VectorFunction * o ) function SetAOn inline void SetAOn () Turn each term on and off. function SetAOff inline void SetAOff () function SetAOn inline void SetAOn ( bool s ) function GetAOn inline bool GetAOn () const function SetBOn inline void SetBOn () function SetBOff inline void SetBOff () function SetBOn inline void SetBOn ( bool s ) function GetBOn inline bool GetBOn () const function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0. function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling function SetRelativeGradientScaling inline void SetRelativeGradientScaling ( double r ) function GetRelativeGradientScaling inline double GetRelativeGradientScaling () const function GetAverageGradMagA inline double GetAverageGradMagA () const function GetAverageGradMagB inline double GetAverageGradMagB () const function GetAverageEnergyA inline double GetAverageEnergyA () const function GetAverageEnergyB inline double GetAverageEnergyB () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DualVectorFunction inline DualVectorFunction () function ~DualVectorFunction inline virtual ~ DualVectorFunction () function operator= void operator = ( const DualVectorFunction & ) function DualVectorFunction DualVectorFunction ( const DualVectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_AOn bool m_AOn ; variable m_BOn bool m_BOn ; variable m_RelativeGradientScaling double m_RelativeGradientScaling ; variable m_RelativeEnergyScaling double m_RelativeEnergyScaling ; variable m_AverageGradMagA double m_AverageGradMagA ; variable m_AverageGradMagB double m_AverageGradMagB ; variable m_AverageEnergyA double m_AverageEnergyA ; variable m_AverageEnergyB double m_AverageEnergyB ; variable m_Counter double m_Counter ; variable m_FunctionA VectorFunction :: Pointer m_FunctionA ; variable m_FunctionB VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#shapeworksdualvectorfunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types","text":"Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions","text":"Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions","text":"Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes","text":"Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#detailed-description","text":"class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff().","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-self","text":"typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( DualVectorFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energya","text":"inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energyb","text":"inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctiona","text":"inline void SetFunctionA ( VectorFunction * o )","title":"function SetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctiona","text":"inline VectorFunction * GetFunctionA ()","title":"function GetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctionb","text":"inline VectorFunction * GetFunctionB ()","title":"function GetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctionb","text":"inline void SetFunctionB ( VectorFunction * o )","title":"function SetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon","text":"inline void SetAOn () Turn each term on and off.","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaoff","text":"inline void SetAOff ()","title":"function SetAOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon_1","text":"inline void SetAOn ( bool s )","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaon","text":"inline bool GetAOn () const","title":"function GetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon","text":"inline void SetBOn ()","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setboff","text":"inline void SetBOff ()","title":"function SetBOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon_1","text":"inline void SetBOn ( bool s )","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getbon","text":"inline bool GetBOn () const","title":"function GetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0.","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativegradientscaling","text":"inline void SetRelativeGradientScaling ( double r )","title":"function SetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativegradientscaling","text":"inline double GetRelativeGradientScaling () const","title":"function GetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmaga","text":"inline double GetAverageGradMagA () const","title":"function GetAverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmagb","text":"inline double GetAverageGradMagB () const","title":"function GetAverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergya","text":"inline double GetAverageEnergyA () const","title":"function GetAverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergyb","text":"inline double GetAverageEnergyB () const","title":"function GetAverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction","text":"inline DualVectorFunction ()","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_1","text":"inline virtual ~ DualVectorFunction ()","title":"function ~DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-operator","text":"void operator = ( const DualVectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_2","text":"DualVectorFunction ( const DualVectorFunction & )","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_aon","text":"bool m_AOn ;","title":"variable m_AOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_bon","text":"bool m_BOn ;","title":"variable m_BOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativegradientscaling","text":"double m_RelativeGradientScaling ;","title":"variable m_RelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativeenergyscaling","text":"double m_RelativeEnergyScaling ;","title":"variable m_RelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmaga","text":"double m_AverageGradMagA ;","title":"variable m_AverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmagb","text":"double m_AverageGradMagB ;","title":"variable m_AverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergya","text":"double m_AverageEnergyA ;","title":"variable m_AverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergyb","text":"double m_AverageEnergyB ;","title":"variable m_AverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_counter","text":"double m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functiona","text":"VectorFunction :: Pointer m_FunctionA ;","title":"variable m_FunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functionb","text":"VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_FunctionB"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html","text":"shapeworks::EigenUtils Public Functions Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index) Public Functions Documentation function compute_mean_and_stddev static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#shapeworkseigenutils","text":"","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions","text":"Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#function-compute_mean_and_stddev","text":"static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function compute_mean_and_stddev"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html","text":"shapeworks::ExcelProjectReader Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format Public Functions Documentation function ExcelProjectReader ExcelProjectReader ( Project & project ) function ~ExcelProjectReader ~ ExcelProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#shapeworksexcelprojectreader","text":"Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions","text":"Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#detailed-description","text":"class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader","text":"ExcelProjectReader ( Project & project )","title":"function ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader_1","text":"~ ExcelProjectReader ()","title":"function ~ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html","text":"shapeworks::ExcelProjectWriter Excel file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, const std::string & filename) Detailed Description class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format Public Functions Documentation function write_project static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#shapeworksexcelprojectwriter","text":"Excel file format writer for Project . More... #include ","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, const std::string & filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#detailed-description","text":"class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1Executable.html","text":"shapeworks::Executable Public Functions Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv) Public Functions Documentation function Executable Executable () function addCommand void addCommand ( Command & command ) function run int run ( int argc , char const * const * argv ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#shapeworksexecutable","text":"","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions","text":"Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-executable","text":"Executable ()","title":"function Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-addcommand","text":"void addCommand ( Command & command )","title":"function addCommand"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-run","text":"int run ( int argc , char const * const * argv ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html","text":"shapeworks::ExportImageDialog More... #include Inherits from QDialog Public Functions Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode) Detailed Description class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images Public Functions Documentation function ExportImageDialog ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#shapeworksexportimagedialog","text":"More... #include Inherits from QDialog","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions","text":"Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#detailed-description","text":"class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#function-exportimagedialog","text":"ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html","text":"shapeworks::ExportUtils Export utilities for Studio. #include Public Functions Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename) Public Functions Documentation function get_save_filename static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ) function export_all_subjects_particle_scalars static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ) function write_scalars static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ) function write_particle_scalars static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#shapeworksexportutils","text":"Export utilities for Studio. #include ","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions","text":"Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-get_save_filename","text":"static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext )","title":"function get_save_filename"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-export_all_subjects_particle_scalars","text":"static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session )","title":"function export_all_subjects_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_scalars","text":"static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename )","title":"function write_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_particle_scalars","text":"static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function write_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html","text":"shapeworks::FreeFormConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function FreeFormConstraint inline FreeFormConstraint () function setMesh inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC. function getMesh inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC. function readyForOptimize bool readyForOptimize () const Prepares for optimize. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function constraintEval inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function setDefinition void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists. function getDefinition inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. function applyToPolyData void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata. function boundaries std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries function getQueryPoint inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point function setQueryPoint inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point function computeBoundaries void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars function setInoutPolyData inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata. function getInoutPolyData inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata. function createInoutPolyData void createInoutPolyData () Create the in/out poly data from the definition poly data. function isSet bool isSet () Return if this FFC is set or not. function setPainted void setPainted ( bool painted ) Set if this FFC has paint on it or not. function reset void reset () Reset to initial state. function computeGradientFields void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh. function convertLegacyFFC void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#shapeworksfreeformconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions","text":"Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#detailed-description","text":"class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-freeformconstraint","text":"inline FreeFormConstraint ()","title":"function FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setmesh","text":"inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC.","title":"function setMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getmesh","text":"inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC.","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-readyforoptimize","text":"bool readyForOptimize () const Prepares for optimize.","title":"function readyForOptimize"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-print","text":"inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constrainteval","text":"inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setdefinition","text":"void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists.","title":"function setDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getdefinition","text":"inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists.","title":"function getDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-applytopolydata","text":"void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata.","title":"function applyToPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-boundaries","text":"std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries","title":"function boundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getquerypoint","text":"inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point","title":"function getQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setquerypoint","text":"inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point","title":"function setQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computeboundaries","text":"void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars","title":"function computeBoundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setinoutpolydata","text":"inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata.","title":"function setInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getinoutpolydata","text":"inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata.","title":"function getInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-createinoutpolydata","text":"void createInoutPolyData () Create the in/out poly data from the definition poly data.","title":"function createInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isset","text":"bool isSet () Return if this FFC is set or not.","title":"function isSet"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setpainted","text":"void setPainted ( bool painted ) Set if this FFC has paint on it or not.","title":"function setPainted"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-reset","text":"void reset () Reset to initial state.","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computegradientfields","text":"void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh.","title":"function computeGradientFields"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-convertlegacyffc","text":"void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-24 at 22:16:01 +0000","title":"function convertLegacyFFC"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html","text":"shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject Public Types Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const Protected Functions Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer () Detailed Description template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ; typedef Superclass typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods). function operator[] inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k. function Get inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator function GetSize inline unsigned long int GetSize () const Number of objects in the container. Protected Functions Documentation function GenericContainer inline GenericContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GenericContainer inline virtual ~ GenericContainer () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#shapeworksgenericcontainer","text":"This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types","text":"Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions","text":"Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-self","text":"typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-superclass","text":"typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-operator","text":"inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k.","title":"function operator[]"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-get","text":"inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator","title":"function Get"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-getsize","text":"inline unsigned long int GetSize () const Number of objects in the container.","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer","text":"inline GenericContainer ()","title":"function GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer_1","text":"inline virtual ~ GenericContainer () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html","text":"shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ; typedef Superclass typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function ZeroAllValues inline void ZeroAllValues () Protected Functions Documentation function GenericContainerArray inline GenericContainerArray () function ~GenericContainerArray inline virtual ~ GenericContainerArray () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#shapeworksgenericcontainerarray","text":"This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types","text":"Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions","text":"Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-self","text":"typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-superclass","text":"typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-zeroallvalues","text":"inline void ZeroAllValues ()","title":"function ZeroAllValues"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray","text":"inline GenericContainerArray ()","title":"function GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray_1","text":"inline virtual ~ GenericContainerArray ()","title":"function ~GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html","text":"shapeworks::GradientDescentOptimizer Inherits from itk::Object Public Types Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization. Protected Functions Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer () Public Attributes Name constexpr static unsigned int VDimension Public Types Documentation using TGradientNumericType using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ; typedef Self typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs typedef Superclass typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ; typedef DomainType typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain. typedef ParticleSystemType typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality. typedef GradientFunctionType typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function. typedef VectorType typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function StartOptimization inline void StartOptimization () Start the optimization. function StartAdaptiveGaussSeidelOptimization void StartAdaptiveGaussSeidelOptimization () function AugmentedLagrangianConstraints void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ) function StopOptimization inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration. function AbortProcessing inline void AbortProcessing () function itkGetMacro itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver. function itkSetMacro itkSetMacro ( NumberOfIterations , unsigned int ) function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function itkGetMacro itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value. function itkSetMacro itkSetMacro ( TimeStep , double ) function itkGetMacro itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use. function itkSetMacro itkSetMacro ( MaximumNumberOfIterations , unsigned int ) function itkGetMacro itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution. function itkSetMacro itkSetMacro ( Tolerance , double ) function itkGetObjectMacro itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) function itkGetObjectMacro itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( GradientFunction , GradientFunctionType ) function SetInitializationMode inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false) function SetCheckIterations inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence. function SetInitializationStartScalingFactor inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization. Protected Functions Documentation function GradientDescentOptimizer GradientDescentOptimizer () function GradientDescentOptimizer GradientDescentOptimizer ( const GradientDescentOptimizer & ) function operator= const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GradientDescentOptimizer inline virtual ~ GradientDescentOptimizer () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#shapeworksgradientdescentoptimizer","text":"Inherits from itk::Object","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types","text":"Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions","text":"Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#using-tgradientnumerictype","text":"using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ;","title":"using TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-self","text":"typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-superclass","text":"typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-domaintype","text":"typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain.","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-gradientfunctiontype","text":"typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function.","title":"typedef GradientFunctionType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-vectortype","text":"typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startoptimization","text":"inline void StartOptimization () Start the optimization.","title":"function StartOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startadaptivegaussseideloptimization","text":"void StartAdaptiveGaussSeidelOptimization ()","title":"function StartAdaptiveGaussSeidelOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-augmentedlagrangianconstraints","text":"void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index )","title":"function AugmentedLagrangianConstraints"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-stopoptimization","text":"inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration.","title":"function StopOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-abortprocessing","text":"inline void AbortProcessing ()","title":"function AbortProcessing"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro","text":"itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro","text":"itkSetMacro ( NumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_1","text":"itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_1","text":"itkSetMacro ( TimeStep , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_2","text":"itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_2","text":"itkSetMacro ( MaximumNumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_3","text":"itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_3","text":"itkSetMacro ( Tolerance , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( ParticleSystem , ParticleSystemType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro_1","text":"itkSetObjectMacro ( GradientFunction , GradientFunctionType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationmode","text":"inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false)","title":"function SetInitializationMode"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setcheckiterations","text":"inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence.","title":"function SetCheckIterations"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationstartscalingfactor","text":"inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization.","title":"function SetInitializationStartScalingFactor"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer","text":"GradientDescentOptimizer ()","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_1","text":"GradientDescentOptimizer ( const GradientDescentOptimizer & )","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-operator","text":"const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_2","text":"inline virtual ~ GradientDescentOptimizer ()","title":"function ~GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1Groom.html","text":"shapeworks::Groom High level groom API. More... #include Public Functions Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform. Protected Attributes Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_ Detailed Description class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations. Public Functions Documentation function Groom Groom ( ProjectHandle project ) function run bool run () Run the grooming. function abort void abort () Set abort as soon as possible. function get_aborted bool get_aborted () Return if grooming was aborted. function compute_landmark_distance static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks. function compute_landmark_transform static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform. Protected Attributes Documentation variable progress_ std :: atomic < float > progress_ = 0 ; variable total_ops_ std :: atomic < int > total_ops_ = 0 ; variable progress_counter_ std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#shapeworksgroom","text":"High level groom API. More... #include ","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions","text":"Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes","text":"Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Groom.html#detailed-description","text":"class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-groom","text":"Groom ( ProjectHandle project )","title":"function Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-run","text":"bool run () Run the grooming.","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-abort","text":"void abort () Set abort as soon as possible.","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-get_aborted","text":"bool get_aborted () Return if grooming was aborted.","title":"function get_aborted"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_distance","text":"static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks.","title":"function compute_landmark_distance"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_transform","text":"static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform.","title":"function compute_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_","text":"std :: atomic < float > progress_ = 0 ;","title":"variable progress_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-total_ops_","text":"std :: atomic < int > total_ops_ = 0 ;","title":"variable total_ops_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_counter_","text":"std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable progress_counter_"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html","text":"shapeworks::GroomCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#shapeworksgroomcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html","text":"shapeworks::GroomParameters More... #include Public Functions Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults () Public Attributes Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C Detailed Description class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters Public Functions Documentation function GroomParameters explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ) function set_domain_name void set_domain_name ( std :: string domain_name ) function save_to_project void save_to_project () function get_groom_output_prefix std :: string get_groom_output_prefix () function set_groom_output_prefix void set_groom_output_prefix ( std :: string prefix ) function get_groom_all_domains_the_same bool get_groom_all_domains_the_same () function set_groom_all_domains_the_same void set_groom_all_domains_the_same ( bool value ) function get_alignment_enabled bool get_alignment_enabled () function set_alignment_enabled void set_alignment_enabled ( bool value ) function get_alignment_method std :: string get_alignment_method () function set_alignment_method void set_alignment_method ( std :: string method ) function get_isolate_tool bool get_isolate_tool () function set_isolate_tool void set_isolate_tool ( bool value ) function get_fill_holes_tool bool get_fill_holes_tool () function set_fill_holes_tool void set_fill_holes_tool ( bool value ) function get_fill_mesh_holes_tool bool get_fill_mesh_holes_tool () function set_fill_mesh_holes_tool void set_fill_mesh_holes_tool ( bool value ) function get_auto_pad_tool bool get_auto_pad_tool () function set_auto_pad_tool void set_auto_pad_tool ( bool value ) function get_padding_amount int get_padding_amount () function set_padding_amount void set_padding_amount ( int padding_amount ) function get_antialias_tool bool get_antialias_tool () function set_antialias_tool void set_antialias_tool ( bool value ) function get_antialias_iterations int get_antialias_iterations () function set_antialias_iterations void set_antialias_iterations ( int iterations ) function get_blur_tool bool get_blur_tool () function set_blur_tool void set_blur_tool ( bool value ) function get_blur_amount double get_blur_amount () function set_blur_amount void set_blur_amount ( double blur_amount ) function get_fast_marching bool get_fast_marching () function set_fast_marching void set_fast_marching ( bool value ) function get_mesh_smooth bool get_mesh_smooth () function set_mesh_smooth void set_mesh_smooth ( bool value ) function get_mesh_smoothing_method std :: string get_mesh_smoothing_method () function set_mesh_smoothing_method void set_mesh_smoothing_method ( std :: string method ) function get_mesh_vtk_laplacian_iterations int get_mesh_vtk_laplacian_iterations () function set_mesh_vtk_laplacian_iterations void set_mesh_vtk_laplacian_iterations ( int iterations ) function get_mesh_vtk_laplacian_relaxation double get_mesh_vtk_laplacian_relaxation () function set_mesh_vtk_laplacian_relaxation void set_mesh_vtk_laplacian_relaxation ( double relaxation ) function get_mesh_vtk_windowed_sinc_iterations int get_mesh_vtk_windowed_sinc_iterations () function set_mesh_vtk_windowed_sinc_iterations void set_mesh_vtk_windowed_sinc_iterations ( int iterations ) function get_mesh_vtk_windowed_sinc_passband double get_mesh_vtk_windowed_sinc_passband () function set_mesh_vtk_windowed_sinc_passband void set_mesh_vtk_windowed_sinc_passband ( double passband ) function get_use_icp bool get_use_icp () function get_use_center bool get_use_center () function get_use_landmarks bool get_use_landmarks () function get_crop bool get_crop () function set_crop void set_crop ( bool crop ) function get_convert_to_mesh bool get_convert_to_mesh () function set_convert_to_mesh void set_convert_to_mesh ( bool value ) function get_reflect bool get_reflect () function set_reflect void set_reflect ( bool reflect ) function get_reflect_column std :: string get_reflect_column () function set_reflect_column void set_reflect_column ( std :: string column ) function get_reflect_choice std :: string get_reflect_choice () function set_reflect_choice void set_reflect_choice ( std :: string choice ) function get_reflect_axis std :: string get_reflect_axis () function set_reflect_axis void set_reflect_axis ( std :: string axies ) function get_resample bool get_resample () function set_resample void set_resample ( bool resample ) function get_isotropic bool get_isotropic () function set_isotropic void set_isotropic ( bool isotropic ) function get_iso_spacing double get_iso_spacing () function set_iso_spacing void set_iso_spacing ( double spacing ) function get_spacing std :: vector < double > get_spacing () function set_spacing void set_spacing ( std :: vector < double > spacing ) function get_remesh bool get_remesh () function set_remesh void set_remesh ( bool remesh ) function get_remesh_percent_mode bool get_remesh_percent_mode () function set_remesh_percent_mode void set_remesh_percent_mode ( bool mode ) function get_remesh_percent double get_remesh_percent () function set_remesh_percent void set_remesh_percent ( double percent ) function get_remesh_num_vertices int get_remesh_num_vertices () function set_remesh_num_vertices void set_remesh_num_vertices ( int num_vertices ) function get_remesh_gradation double get_remesh_gradation () function set_remesh_gradation void set_remesh_gradation ( double gradation ) function get_skip_grooming bool get_skip_grooming () function set_skip_grooming void set_skip_grooming ( bool skip ) function restore_defaults void restore_defaults () Public Attributes Documentation variable GROOM_SMOOTH_VTK_LAPLACIAN_C static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; variable GROOM_ALIGNMENT_CENTER_C static const std :: string GROOM_ALIGNMENT_CENTER_C ; variable GROOM_ALIGNMENT_ICP_C static const std :: string GROOM_ALIGNMENT_ICP_C ; variable GROOM_ALIGNMENT_LANDMARK_C static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#shapeworksgroomparameters","text":"More... #include ","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions","text":"Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes","text":"Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#detailed-description","text":"class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-groomparameters","text":"explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" )","title":"function GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_domain_name","text":"void set_domain_name ( std :: string domain_name )","title":"function set_domain_name"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_output_prefix","text":"std :: string get_groom_output_prefix ()","title":"function get_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_output_prefix","text":"void set_groom_output_prefix ( std :: string prefix )","title":"function set_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_all_domains_the_same","text":"bool get_groom_all_domains_the_same ()","title":"function get_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_all_domains_the_same","text":"void set_groom_all_domains_the_same ( bool value )","title":"function set_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_enabled","text":"bool get_alignment_enabled ()","title":"function get_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_enabled","text":"void set_alignment_enabled ( bool value )","title":"function set_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_method","text":"std :: string get_alignment_method ()","title":"function get_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_method","text":"void set_alignment_method ( std :: string method )","title":"function set_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isolate_tool","text":"bool get_isolate_tool ()","title":"function get_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isolate_tool","text":"void set_isolate_tool ( bool value )","title":"function set_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_holes_tool","text":"bool get_fill_holes_tool ()","title":"function get_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_holes_tool","text":"void set_fill_holes_tool ( bool value )","title":"function set_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_mesh_holes_tool","text":"bool get_fill_mesh_holes_tool ()","title":"function get_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_mesh_holes_tool","text":"void set_fill_mesh_holes_tool ( bool value )","title":"function set_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_auto_pad_tool","text":"bool get_auto_pad_tool ()","title":"function get_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_auto_pad_tool","text":"void set_auto_pad_tool ( bool value )","title":"function set_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_padding_amount","text":"int get_padding_amount ()","title":"function get_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_padding_amount","text":"void set_padding_amount ( int padding_amount )","title":"function set_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_tool","text":"bool get_antialias_tool ()","title":"function get_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_tool","text":"void set_antialias_tool ( bool value )","title":"function set_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_iterations","text":"int get_antialias_iterations ()","title":"function get_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_iterations","text":"void set_antialias_iterations ( int iterations )","title":"function set_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_tool","text":"bool get_blur_tool ()","title":"function get_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_tool","text":"void set_blur_tool ( bool value )","title":"function set_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_amount","text":"double get_blur_amount ()","title":"function get_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_amount","text":"void set_blur_amount ( double blur_amount )","title":"function set_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fast_marching","text":"bool get_fast_marching ()","title":"function get_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fast_marching","text":"void set_fast_marching ( bool value )","title":"function set_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smooth","text":"bool get_mesh_smooth ()","title":"function get_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smooth","text":"void set_mesh_smooth ( bool value )","title":"function set_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smoothing_method","text":"std :: string get_mesh_smoothing_method ()","title":"function get_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smoothing_method","text":"void set_mesh_smoothing_method ( std :: string method )","title":"function set_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_iterations","text":"int get_mesh_vtk_laplacian_iterations ()","title":"function get_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_iterations","text":"void set_mesh_vtk_laplacian_iterations ( int iterations )","title":"function set_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_relaxation","text":"double get_mesh_vtk_laplacian_relaxation ()","title":"function get_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_relaxation","text":"void set_mesh_vtk_laplacian_relaxation ( double relaxation )","title":"function set_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_iterations","text":"int get_mesh_vtk_windowed_sinc_iterations ()","title":"function get_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_iterations","text":"void set_mesh_vtk_windowed_sinc_iterations ( int iterations )","title":"function set_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_passband","text":"double get_mesh_vtk_windowed_sinc_passband ()","title":"function get_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_passband","text":"void set_mesh_vtk_windowed_sinc_passband ( double passband )","title":"function set_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_icp","text":"bool get_use_icp ()","title":"function get_use_icp"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_center","text":"bool get_use_center ()","title":"function get_use_center"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_crop","text":"bool get_crop ()","title":"function get_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_crop","text":"void set_crop ( bool crop )","title":"function set_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_convert_to_mesh","text":"bool get_convert_to_mesh ()","title":"function get_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_convert_to_mesh","text":"void set_convert_to_mesh ( bool value )","title":"function set_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect","text":"bool get_reflect ()","title":"function get_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect","text":"void set_reflect ( bool reflect )","title":"function set_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_column","text":"std :: string get_reflect_column ()","title":"function get_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_column","text":"void set_reflect_column ( std :: string column )","title":"function set_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_choice","text":"std :: string get_reflect_choice ()","title":"function get_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_choice","text":"void set_reflect_choice ( std :: string choice )","title":"function set_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_axis","text":"std :: string get_reflect_axis ()","title":"function get_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_axis","text":"void set_reflect_axis ( std :: string axies )","title":"function set_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_resample","text":"bool get_resample ()","title":"function get_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_resample","text":"void set_resample ( bool resample )","title":"function set_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isotropic","text":"bool get_isotropic ()","title":"function get_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isotropic","text":"void set_isotropic ( bool isotropic )","title":"function set_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_iso_spacing","text":"double get_iso_spacing ()","title":"function get_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_iso_spacing","text":"void set_iso_spacing ( double spacing )","title":"function set_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_spacing","text":"std :: vector < double > get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_spacing","text":"void set_spacing ( std :: vector < double > spacing )","title":"function set_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh","text":"bool get_remesh ()","title":"function get_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh","text":"void set_remesh ( bool remesh )","title":"function set_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent_mode","text":"bool get_remesh_percent_mode ()","title":"function get_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent_mode","text":"void set_remesh_percent_mode ( bool mode )","title":"function set_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent","text":"double get_remesh_percent ()","title":"function get_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent","text":"void set_remesh_percent ( double percent )","title":"function set_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_num_vertices","text":"int get_remesh_num_vertices ()","title":"function get_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_num_vertices","text":"void set_remesh_num_vertices ( int num_vertices )","title":"function set_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_gradation","text":"double get_remesh_gradation ()","title":"function get_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_gradation","text":"void set_remesh_gradation ( double gradation )","title":"function set_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_skip_grooming","text":"bool get_skip_grooming ()","title":"function get_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_skip_grooming","text":"void set_skip_grooming ( bool skip )","title":"function set_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_laplacian_c","text":"static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ;","title":"variable GROOM_SMOOTH_VTK_LAPLACIAN_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_windowed_sinc_c","text":"static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ;","title":"variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_center_c","text":"static const std :: string GROOM_ALIGNMENT_CENTER_C ;","title":"variable GROOM_ALIGNMENT_CENTER_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_icp_c","text":"static const std :: string GROOM_ALIGNMENT_ICP_C ;","title":"variable GROOM_ALIGNMENT_ICP_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_landmark_c","text":"static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable GROOM_ALIGNMENT_LANDMARK_C"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html","text":"shapeworks::GroomTool Inherits from QWidget Public Slots Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) Public Signals Name void groom_start () void groom_complete () void progress (int ) Public Functions Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_antialias_checkbox_stateChanged void on_antialias_checkbox_stateChanged ( int state ) slot on_blur_checkbox_stateChanged void on_blur_checkbox_stateChanged ( int state ) slot on_autopad_checkbox_stateChanged void on_autopad_checkbox_stateChanged ( int state ) slot skip_grooming_toggled void skip_grooming_toggled () slot on_restore_defaults_clicked void on_restore_defaults_clicked () slot update_ui void update_ui () slot domain_changed void domain_changed () slot alignment_checkbox_changed void alignment_checkbox_changed ( int state ) slot alignment_option_changed void alignment_option_changed ( int index ) slot reflect_checkbox_changed void reflect_checkbox_changed ( int state ) slot reflect_column_changed void reflect_column_changed ( int index ) slot reflect_choice_changed void reflect_choice_changed ( int index ) slot reflect_axis_changed void reflect_axis_changed ( int index ) slot on_run_groom_button_clicked void on_run_groom_button_clicked () Run groom tool. slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) Public Signals Documentation signal groom_start void groom_start () signal groom_complete void groom_complete () signal progress void progress ( int ) Public Functions Documentation function GroomTool GroomTool ( Preferences & prefs , Telemetry & telemetry ) function ~GroomTool ~ GroomTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function disable_actions void disable_actions () Disable action buttons. function enable_actions void enable_actions () Enable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#shapeworksgroomtool","text":"Inherits from QWidget","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots","text":"Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals","text":"Name void groom_start () void groom_complete () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions","text":"Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_antialias_checkbox_statechanged","text":"void on_antialias_checkbox_stateChanged ( int state )","title":"slot on_antialias_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_blur_checkbox_statechanged","text":"void on_blur_checkbox_stateChanged ( int state )","title":"slot on_blur_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_autopad_checkbox_statechanged","text":"void on_autopad_checkbox_stateChanged ( int state )","title":"slot on_autopad_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-skip_grooming_toggled","text":"void skip_grooming_toggled ()","title":"slot skip_grooming_toggled"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_restore_defaults_clicked","text":"void on_restore_defaults_clicked ()","title":"slot on_restore_defaults_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-update_ui","text":"void update_ui ()","title":"slot update_ui"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-domain_changed","text":"void domain_changed ()","title":"slot domain_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_checkbox_changed","text":"void alignment_checkbox_changed ( int state )","title":"slot alignment_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_option_changed","text":"void alignment_option_changed ( int index )","title":"slot alignment_option_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_checkbox_changed","text":"void reflect_checkbox_changed ( int state )","title":"slot reflect_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_column_changed","text":"void reflect_column_changed ( int index )","title":"slot reflect_column_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_choice_changed","text":"void reflect_choice_changed ( int index )","title":"slot reflect_choice_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_axis_changed","text":"void reflect_axis_changed ( int index )","title":"slot reflect_axis_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_run_groom_button_clicked","text":"void on_run_groom_button_clicked () Run groom tool.","title":"slot on_run_groom_button_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_start","text":"void groom_start ()","title":"signal groom_start"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_complete","text":"void groom_complete ()","title":"signal groom_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool","text":"GroomTool ( Preferences & prefs , Telemetry & telemetry )","title":"function GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool_1","text":"~ GroomTool ()","title":"function ~GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html","text":"shapeworks::GroupPvalueJob Inherits from shapeworks::Job , QObject Public Functions Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function GroupPvalueJob GroupPvalueJob ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#shapeworksgrouppvaluejob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions","text":"Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-grouppvaluejob","text":"GroupPvalueJob ( ParticleShapeStatistics stats )","title":"function GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1Image.html","text":"shapeworks::Image Module: Image Classes More... #include Public Types Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType Public Functions Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images. Public Types Documentation enum InterpolationType Enumerator Value Description Linear NearestNeighbor using PixelType using shapeworks :: Image :: PixelType = float ; using ImageType using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; Public Functions Documentation function Image Image ( const Dims dims ) function Image inline Image ( const std :: string & pathname ) function Image inline Image ( ImageType :: Pointer imagePtr ) function Image Image ( const vtkSmartPointer < vtkImageData > vtkImage ) function Image inline Image ( Image && img ) function Image inline Image ( const Image & img ) function operator= Image & operator = ( const Image & img ) function operator= Image & operator = ( Image && img ) lvalue assignment operator function operator ImageType::Pointer inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image function getITKImage inline ImageType :: Pointer getITKImage () const function getVTKImage vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image function operator- Image & operator - () negation operator function operator+ Image operator + ( const Image & other ) const plus operator to add two images function operator+= Image & operator += ( const Image & other ) function operator- Image operator - ( const Image & other ) const minus operator to add two images function operator-= Image & operator -= ( const Image & other ) function operator* Image operator * ( const Image & other ) const multiply operator to multiply two images function operator* Image operator * ( const PixelType x ) const multiply operator to scale contents of an image function operator*= Image & operator *= ( const PixelType x ) function operator/ Image operator / ( const PixelType x ) const divide operator to scale contents of an image function operator/= Image & operator /= ( const PixelType x ) function operator+ Image operator + ( const PixelType x ) const plus operator to shift contents of an image function operator+= Image & operator += ( const PixelType x ) function operator- Image operator - ( const PixelType x ) const minus operator to shift contents of an image function operator-= Image & operator -= ( const PixelType x ) function antialias Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image function recenter Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image function resample Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator function resample Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing function resample Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing function resize Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same) function pad Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value function pad Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value function pad Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value function translate Image & translate ( const Vector3 & v ) helper to simply translate image function scale Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin) function rotate Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function rotate Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function createCenterOfMassTransform TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image function createRigidRegistrationTransform TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations function applyTransform Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter function applyTransform Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values function extractLabel Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image function closeHoles Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume function binarize Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user function computeDT Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue function applyCurvatureFilter Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter function applyGradientFilter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter function applySigmoidFilter Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter function applyTPLevelSetFilter Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter function topologyPreservingSmooth Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] function applyIntensityFilter Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter function gaussianBlur Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma function crop Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added function clip Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane function reflect Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane). function setOrigin Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value function setSpacing Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value function setCoordsys Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space function isolate Image & isolate () isolate the largest object in a binary segmentation function dims inline Dims dims () const logical dimensions of the image function size inline Point3 size () const physical dimensions of the image (dims * spacing) function spacing inline Vector spacing () const physical spacing of the image function origin inline Point3 origin () const physical coordinates of image origin function center inline Point3 center () const physical coordinates of center of this image function coordsys inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space function centerOfMass Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval] function min PixelType min () minimum of image function max PixelType max () maximum of image function mean PixelType mean () mean of image function std PixelType std () standard deviation of image function logicalBoundingBox IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space function physicalBoundingBox PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space function physicalBoundingBox PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space function logicalToPhysical PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates function physicalToLogical IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates function logicalToPhysical Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space function physicalToLogical Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate function isInside bool isInside ( const Point3 & p ) const checks if a given point is inside the image function iterator ImageIterator iterator () creates an image iterator and returns it function compare bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter function operator== inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter function write Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension function toMesh Mesh toMesh ( PixelType isovalue ) const converts image to mesh function evaluate Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#shapeworksimage","text":"Module: Image Classes More... #include ","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types","text":"Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions","text":"Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#detailed-description","text":"class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#enum-interpolationtype","text":"Enumerator Value Description Linear NearestNeighbor","title":"enum InterpolationType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-pixeltype","text":"using shapeworks :: Image :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imagetype","text":"using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-statsptr","text":"using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ;","title":"using StatsPtr"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imageiterator","text":"using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-interpolatortype","text":"using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ;","title":"using InterpolatorType"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image","text":"Image ( const Dims dims )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_1","text":"inline Image ( const std :: string & pathname )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_2","text":"inline Image ( ImageType :: Pointer imagePtr )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_3","text":"Image ( const vtkSmartPointer < vtkImageData > vtkImage )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_4","text":"inline Image ( Image && img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_5","text":"inline Image ( const Image & img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator","text":"Image & operator = ( const Image & img )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_1","text":"Image & operator = ( Image && img ) lvalue assignment operator","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-imagetypepointer","text":"inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image","title":"function operator ImageType::Pointer"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getitkimage","text":"inline ImageType :: Pointer getITKImage () const","title":"function getITKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getvtkimage","text":"vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image","title":"function getVTKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-","text":"Image & operator - () negation operator","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_2","text":"Image operator + ( const Image & other ) const plus operator to add two images","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_3","text":"Image & operator += ( const Image & other )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_1","text":"Image operator - ( const Image & other ) const minus operator to add two images","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_2","text":"Image & operator -= ( const Image & other )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_4","text":"Image operator * ( const Image & other ) const multiply operator to multiply two images","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_5","text":"Image operator * ( const PixelType x ) const multiply operator to scale contents of an image","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_6","text":"Image & operator *= ( const PixelType x )","title":"function operator*="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_7","text":"Image operator / ( const PixelType x ) const divide operator to scale contents of an image","title":"function operator/"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_8","text":"Image & operator /= ( const PixelType x )","title":"function operator/="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_9","text":"Image operator + ( const PixelType x ) const plus operator to shift contents of an image","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_10","text":"Image & operator += ( const PixelType x )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_3","text":"Image operator - ( const PixelType x ) const minus operator to shift contents of an image","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_4","text":"Image & operator -= ( const PixelType x )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-antialias","text":"Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image","title":"function antialias"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-recenter","text":"Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image","title":"function recenter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample","text":"Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_1","text":"Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_2","text":"Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resize","text":"Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same)","title":"function resize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad","text":"Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_1","text":"Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_2","text":"Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-translate","text":"Image & translate ( const Vector3 & v ) helper to simply translate image","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-scale","text":"Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin)","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate","text":"Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate_1","text":"Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createcenterofmasstransform","text":"TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image","title":"function createCenterOfMassTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createrigidregistrationtransform","text":"TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"function createRigidRegistrationTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform","text":"Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform_1","text":"Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-extractlabel","text":"Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image","title":"function extractLabel"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-closeholes","text":"Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume","title":"function closeHoles"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-binarize","text":"Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user","title":"function binarize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-computedt","text":"Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue","title":"function computeDT"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applycurvaturefilter","text":"Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter","title":"function applyCurvatureFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applygradientfilter","text":"Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter","title":"function applyGradientFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applysigmoidfilter","text":"Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter","title":"function applySigmoidFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytplevelsetfilter","text":"Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter","title":"function applyTPLevelSetFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-topologypreservingsmooth","text":"Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"function topologyPreservingSmooth"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applyintensityfilter","text":"Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter","title":"function applyIntensityFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-gaussianblur","text":"Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma","title":"function gaussianBlur"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-crop","text":"Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added","title":"function crop"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-clip","text":"Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-reflect","text":"Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane).","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setorigin","text":"Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value","title":"function setOrigin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setspacing","text":"Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value","title":"function setSpacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setcoordsys","text":"Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space","title":"function setCoordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isolate","text":"Image & isolate () isolate the largest object in a binary segmentation","title":"function isolate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-dims","text":"inline Dims dims () const logical dimensions of the image","title":"function dims"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-size","text":"inline Point3 size () const physical dimensions of the image (dims * spacing)","title":"function size"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-spacing","text":"inline Vector spacing () const physical spacing of the image","title":"function spacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-origin","text":"inline Point3 origin () const physical coordinates of image origin","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-center","text":"inline Point3 center () const physical coordinates of center of this image","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-coordsys","text":"inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space","title":"function coordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-centerofmass","text":"Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval]","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-min","text":"PixelType min () minimum of image","title":"function min"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-max","text":"PixelType max () maximum of image","title":"function max"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-mean","text":"PixelType mean () mean of image","title":"function mean"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-std","text":"PixelType std () standard deviation of image","title":"function std"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicalboundingbox","text":"IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space","title":"function logicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox","text":"PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox_1","text":"PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical","text":"PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological","text":"IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical_1","text":"Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological_1","text":"Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isinside","text":"bool isInside ( const Point3 & p ) const checks if a given point is inside the image","title":"function isInside"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-iterator","text":"ImageIterator iterator () creates an image iterator and returns it","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-compare","text":"bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_11","text":"inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-write","text":"Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-tomesh","text":"Mesh toMesh ( PixelType isovalue ) const converts image to mesh","title":"function toMesh"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-evaluate","text":"Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position.","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html","text":"shapeworks::ImageCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#shapeworksimagecommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html","text":"shapeworks::ImageDomain More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T > Public Types Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Additional inherited members Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomain ; Public Types Documentation using Pointer using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs using ImageType using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class. using PointType using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image). Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetOrigin inline PointType GetOrigin () const function GetSize inline ImageType :: SizeType GetSize () const function GetSpacing inline ImageType :: SpacingType GetSpacing () const function GetIndex inline ImageType :: RegionType :: IndexType GetIndex () const function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function Sample inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Protected Functions Documentation function GetVDBImage inline openvdb :: FloatGrid :: Ptr GetVDBImage () const function ImageDomain inline ImageDomain () function ~ImageDomain inline virtual ~ ImageDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function transform inline openvdb :: math :: Transform :: Ptr transform () const function ToVDBCoord inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#shapeworksimagedomain","text":"More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T >","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types","text":"Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions","text":"Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointer","text":"using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-imagetype","text":"using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class.","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointtype","text":"using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image).","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getorigin","text":"inline PointType GetOrigin () const","title":"function GetOrigin"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsize","text":"inline ImageType :: SizeType GetSize () const","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getspacing","text":"inline ImageType :: SpacingType GetSpacing () const","title":"function GetSpacing"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getindex","text":"inline ImageType :: RegionType :: IndexType GetIndex () const","title":"function GetIndex"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-sample","text":"inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking.","title":"function Sample"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvdbimage","text":"inline openvdb :: FloatGrid :: Ptr GetVDBImage () const","title":"function GetVDBImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain","text":"inline ImageDomain ()","title":"function ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain_1","text":"inline virtual ~ ImageDomain ()","title":"function ~ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-transform","text":"inline openvdb :: math :: Transform :: Ptr transform () const","title":"function transform"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-tovdbcoord","text":"inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function ToVDBCoord"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html","text":"shapeworks::ImageDomainWithCurvature More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T > Public Types Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithCurvature ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ; typedef VnlMatrixType typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute Protected Functions Documentation function ImageDomainWithCurvature inline ImageDomainWithCurvature () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImageDomainWithCurvature inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#shapeworksimagedomainwithcurvature","text":"More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T >","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types","text":"Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions","text":"Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithCurvature ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-superclass","text":"typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-vnlmatrixtype","text":"typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature","text":"inline ImageDomainWithCurvature ()","title":"function ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature_1","text":"inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html","text":"shapeworks::ImageDomainWithGradN More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T > Public Types Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradN ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs using Pointer using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ; typedef GradNType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ; typedef VnlMatrixType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension. function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradN inline ImageDomainWithGradN () function ~ImageDomainWithGradN inline virtual ~ ImageDomainWithGradN () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#shapeworksimagedomainwithgradn","text":"More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T >","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types","text":"Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions","text":"Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradN ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-superclass","text":"typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-gradntype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-vnlmatrixtype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension.","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn","text":"inline ImageDomainWithGradN ()","title":"function ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn_1","text":"inline virtual ~ ImageDomainWithGradN ()","title":"function ~ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html","text":"shapeworks::ImageDomainWithGradients More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T > Public Types Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient () Additional inherited members Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradients ; Public Types Documentation using Pointer using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ; typedef PointType typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ; typedef VectorType typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ; typedef VnlVectorType typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function ProjectVectorToSurfaceTangent inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradients inline ImageDomainWithGradients () function ~ImageDomainWithGradients inline virtual ~ ImageDomainWithGradients () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function GetVDBGradient inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#shapeworksimagedomainwithgradients","text":"More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T >","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types","text":"Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions","text":"Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradients ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-pointtype","text":"typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-imagetype","text":"typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vectortype","text":"typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-projectvectortosurfacetangent","text":"inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients","text":"inline ImageDomainWithGradients ()","title":"function ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients_1","text":"inline virtual ~ ImageDomainWithGradients ()","title":"function ~ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-getvdbgradient","text":"inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetVDBGradient"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html","text":"shapeworks::ImageLabel An extention of QLabel especially for scaled images. #include Inherits from QLabel Public Functions Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap) Protected Functions Name void resizeEvent (QResizeEvent * reisze_event) override Public Functions Documentation function ImageLabel inline ImageLabel ( QWidget * parent ) function setPixmap inline void setPixmap ( const QPixmap & pixmap ) Protected Functions Documentation function resizeEvent void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#shapeworksimagelabel","text":"An extention of QLabel especially for scaled images. #include Inherits from QLabel","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions","text":"Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions","text":"Name void resizeEvent (QResizeEvent * reisze_event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-imagelabel","text":"inline ImageLabel ( QWidget * parent )","title":"function ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-setpixmap","text":"inline void setPixmap ( const QPixmap & pixmap )","title":"function setPixmap"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html","text":"shapeworks::ImageUtils Helper functions for image. #include Public Types Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1) Public Types Documentation using TPSTransform using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Documentation function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue function createWarpTransform static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#shapeworksimageutils","text":"Helper functions for image. #include ","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types","text":"Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions","text":"Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#using-tpstransform","text":"using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"using TPSTransform"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-createwarptransform","text":"static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function createWarpTransform"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html","text":"shapeworks::ImplicitSurfaceDomain More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Public Types Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType Public Functions Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImplicitSurfaceDomain ; Public Types Documentation typedef Superclass typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs typedef Pointer typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ; typedef PointType typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ; Public Functions Documentation function SetTolerance inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance. function GetTolerance inline virtual T GetTolerance () function GetDomainType inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points. function UpdateParticlePosition inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function ImplicitSurfaceDomain inline ImplicitSurfaceDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImplicitSurfaceDomain inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#shapeworksimplicitsurfacedomain","text":"More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types","text":"Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions","text":"Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImplicitSurfaceDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-superclass","text":"typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-settolerance","text":"inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance.","title":"function SetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-gettolerance","text":"inline virtual T GetTolerance ()","title":"function GetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getdomaintype","text":"inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-updateparticleposition","text":"inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain","text":"inline ImplicitSurfaceDomain ()","title":"function ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain_1","text":"inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html","text":"shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include Public Functions Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Coord min Coord max Public Functions Documentation function IndexRegion IndexRegion () = default function IndexRegion IndexRegion ( const IndexRegion & ) = default function IndexRegion inline IndexRegion ( const Dims & dims ) function IndexRegion inline IndexRegion ( const Coord & _min , const Coord & _max ) function operator== inline bool operator == ( const IndexRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Coord origin () const function size inline Dims size () const function pad IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Coord min { 1000000000 , 1000000000 , 1000000000 }; variable max Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#shapeworksindexregion","text":"Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include ","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions","text":"Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes","text":"Name Coord min Coord max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion","text":"IndexRegion () = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_1","text":"IndexRegion ( const IndexRegion & ) = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_2","text":"inline IndexRegion ( const Dims & dims )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_3","text":"inline IndexRegion ( const Coord & _min , const Coord & _max )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-operator","text":"inline bool operator == ( const IndexRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-origin","text":"inline Coord origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-size","text":"inline Dims size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-pad","text":"IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-min","text":"Coord min { 1000000000 , 1000000000 , 1000000000 };","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-max","text":"Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1Job.html","text":"shapeworks::Job Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob Public Signals Name void progress (double ) void finished () Public Functions Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal progress void progress ( double ) signal finished void finished () Public Functions Documentation function Job Job () function ~Job virtual ~ Job () function run virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run function name virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name function get_completion_message virtual QString get_completion_message () get a message to display when the job is complete function get_abort_message virtual QString get_abort_message () get a message to display when the job is aborted function start_timer void start_timer () start the timer function timer_elapsed qint64 timer_elapsed () how much time has elapsed since the timer was started function set_complete inline void set_complete ( bool complete ) set the job as complete function is_complete inline bool is_complete () const is the job complete? function abort inline void abort () abort the job function is_aborted inline bool is_aborted () const was the job aborted? Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#shapeworksjob","text":"Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals","text":"Name void progress (double ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions","text":"Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-progress","text":"void progress ( double )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job","text":"Job ()","title":"function Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job_1","text":"virtual ~ Job ()","title":"function ~Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-run","text":"virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-name","text":"virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_completion_message","text":"virtual QString get_completion_message () get a message to display when the job is complete","title":"function get_completion_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_abort_message","text":"virtual QString get_abort_message () get a message to display when the job is aborted","title":"function get_abort_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-start_timer","text":"void start_timer () start the timer","title":"function start_timer"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-timer_elapsed","text":"qint64 timer_elapsed () how much time has elapsed since the timer was started","title":"function timer_elapsed"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-set_complete","text":"inline void set_complete ( bool complete ) set the job as complete","title":"function set_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_complete","text":"inline bool is_complete () const is the job complete?","title":"function is_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-abort","text":"inline void abort () abort the job","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_aborted","text":"inline bool is_aborted () const was the job aborted? Updated on 2023-10-24 at 22:16:01 +0000","title":"function is_aborted"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html","text":"shapeworks::JsonProjectReader JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format Public Functions Documentation function JsonProjectReader JsonProjectReader ( Project & project ) function ~JsonProjectReader ~ JsonProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#shapeworksjsonprojectreader","text":"JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions","text":"Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#detailed-description","text":"class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader","text":"JsonProjectReader ( Project & project )","title":"function JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader_1","text":"~ JsonProjectReader ()","title":"function ~JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html","text":"shapeworks::JsonProjectWriter JSON file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, std::string filename) Detailed Description class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format Public Functions Documentation function write_project static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#shapeworksjsonprojectwriter","text":"JSON file format writer for Project . More... #include ","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, std::string filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#detailed-description","text":"class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html","text":"shapeworks::KeyboardShortcuts More... #include Inherits from QDialog Public Functions Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor Detailed Description class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts Public Functions Documentation function KeyboardShortcuts KeyboardShortcuts ( QWidget * parent ) constructor function ~KeyboardShortcuts virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#shapeworkskeyboardshortcuts","text":"More... #include Inherits from QDialog","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions","text":"Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#detailed-description","text":"class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts","text":"KeyboardShortcuts ( QWidget * parent ) constructor","title":"function KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts_1","text":"virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html","text":"shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. #include Public Attributes Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_ Public Attributes Documentation variable domain_ std :: string domain_ ; variable domain_id_ int domain_id_ = -1 ; variable landmark_id int landmark_id = -1 ; variable name_ std :: string name_ ; variable visible_ bool visible_ = true ; variable color_ std :: string color_ ; variable comment_ std :: string comment_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#shapeworkslandmarkdefinition","text":"Landmark class containing properties of each landmark. #include ","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes","text":"Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_","text":"std :: string domain_ ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_id_","text":"int domain_id_ = -1 ;","title":"variable domain_id_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-landmark_id","text":"int landmark_id = -1 ;","title":"variable landmark_id"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-name_","text":"std :: string name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-visible_","text":"bool visible_ = true ;","title":"variable visible_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-color_","text":"std :: string color_ ;","title":"variable color_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-comment_","text":"std :: string comment_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable comment_"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html","text":"shapeworks::LandmarkItemDelegate Inherits from QStyledItemDelegate Public Signals Name void button_clicked (int row) Public Functions Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model) Public Signals Documentation signal button_clicked void button_clicked ( int row ) Public Functions Documentation function LandmarkItemDelegate LandmarkItemDelegate ( QObject * parent = 0 ) function paint void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function createEditor QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function setEditorData void setEditorData ( QWidget * editor , const QModelIndex & index ) const override function setModelData void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override function sizeHint QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override function updateEditorGeometry void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function set_button_text void set_button_text ( std :: string button_text ) function set_model void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#shapeworkslandmarkitemdelegate","text":"Inherits from QStyledItemDelegate","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals","text":"Name void button_clicked (int row)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions","text":"Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#signal-button_clicked","text":"void button_clicked ( int row )","title":"signal button_clicked"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-landmarkitemdelegate","text":"LandmarkItemDelegate ( QObject * parent = 0 )","title":"function LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-paint","text":"void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function paint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-createeditor","text":"QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function createEditor"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-seteditordata","text":"void setEditorData ( QWidget * editor , const QModelIndex & index ) const override","title":"function setEditorData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-setmodeldata","text":"void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override","title":"function setModelData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-sizehint","text":"QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function sizeHint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-updateeditorgeometry","text":"void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function updateEditorGeometry"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_button_text","text":"void set_button_text ( std :: string button_text )","title":"function set_button_text"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_model","text":"void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function set_model"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html","text":"shapeworks::LandmarkTableModel Inherits from QAbstractTableModel Public Slots Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click. Public Functions Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation. Public Slots Documentation slot new_landmark void new_landmark () create a new landmark slot handle_click void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked. slot handle_double_click void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked. slot handle_header_click void handle_header_click ( int index ) Handle header click. Public Functions Documentation function LandmarkTableModel LandmarkTableModel ( QObject * parent = 0 ) Constructor. function ~LandmarkTableModel virtual ~ LandmarkTableModel () Destructor. function set_session void set_session ( QSharedPointer < Session > session ) Attach to a session. function store_landmarks void store_landmarks () Store landmarks back to project. function set_active_domain void set_active_domain ( int domain ) Set the currently active domain. function update_table void update_table () Update the table of landmarks from the project. function update_cells void update_cells () Update table cells. function remove_rows void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices. function toggle_visible void toggle_visible () Toggle tri-state button for visibility in horizontal header. function set_placing_landmark void set_placing_landmark ( int row ) Set the currently placing landmark. function delete_landmarks void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks function rowCount int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation. function columnCount int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation. function data QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation. function setData bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation. function headerData QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation. function flags Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#shapeworkslandmarktablemodel","text":"Inherits from QAbstractTableModel","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots","text":"Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click.","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions","text":"Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-new_landmark","text":"void new_landmark () create a new landmark","title":"slot new_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_click","text":"void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked.","title":"slot handle_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_double_click","text":"void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked.","title":"slot handle_double_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_header_click","text":"void handle_header_click ( int index ) Handle header click.","title":"slot handle_header_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel","text":"LandmarkTableModel ( QObject * parent = 0 ) Constructor.","title":"function LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel_1","text":"virtual ~ LandmarkTableModel () Destructor.","title":"function ~LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Attach to a session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-store_landmarks","text":"void store_landmarks () Store landmarks back to project.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_active_domain","text":"void set_active_domain ( int domain ) Set the currently active domain.","title":"function set_active_domain"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_table","text":"void update_table () Update the table of landmarks from the project.","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_cells","text":"void update_cells () Update table cells.","title":"function update_cells"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-remove_rows","text":"void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices.","title":"function remove_rows"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-toggle_visible","text":"void toggle_visible () Toggle tri-state button for visibility in horizontal header.","title":"function toggle_visible"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_placing_landmark","text":"void set_placing_landmark ( int row ) Set the currently placing landmark.","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-delete_landmarks","text":"void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks","title":"function delete_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-rowcount","text":"int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation.","title":"function rowCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-columncount","text":"int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation.","title":"function columnCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-data","text":"QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation.","title":"function data"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-setdata","text":"bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation.","title":"function setData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-headerdata","text":"QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation.","title":"function headerData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-flags","text":"Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-24 at 22:16:01 +0000","title":"function flags"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html","text":"shapeworks::LandmarkWidget LandmarkWidget . More... #include Public Functions Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles () Detailed Description class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks Public Functions Documentation function LandmarkWidget LandmarkWidget ( Viewer * viewer ) function ~LandmarkWidget ~ LandmarkWidget () function update_landmarks void update_landmarks () function store_positions void store_positions () function update_glyph_properties void update_glyph_properties () function clear_landmark_handles void clear_landmark_handles () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#shapeworkslandmarkwidget","text":"LandmarkWidget . More... #include ","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions","text":"Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#detailed-description","text":"class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget","text":"LandmarkWidget ( Viewer * viewer )","title":"function LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget_1","text":"~ LandmarkWidget ()","title":"function ~LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-store_positions","text":"void store_positions ()","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-clear_landmark_handles","text":"void clear_landmark_handles () Updated on 2023-10-24 at 22:16:01 +0000","title":"function clear_landmark_handles"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html","text":"shapeworks::LegacyCorrespondenceFunction Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function LegacyCorrespondenceFunction inline LegacyCorrespondenceFunction () function ~LegacyCorrespondenceFunction inline virtual ~ LegacyCorrespondenceFunction () function operator= void operator = ( const LegacyCorrespondenceFunction & ) function LegacyCorrespondenceFunction LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ) function ComputeCovarianceMatrix virtual void ComputeCovarianceMatrix () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#shapeworkslegacycorrespondencefunction","text":"Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types","text":"Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions","text":"Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-self","text":"typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction","text":"inline LegacyCorrespondenceFunction ()","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_1","text":"inline virtual ~ LegacyCorrespondenceFunction ()","title":"function ~LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-operator","text":"void operator = ( const LegacyCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_2","text":"LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & )","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-computecovariancematrix","text":"virtual void ComputeCovarianceMatrix ()","title":"function ComputeCovarianceMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html","text":"shapeworks::LegacyShapeMatrix Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix Public Types Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods). function DomainAddEventCallback inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration function AfterIteration inline virtual void AfterIteration () function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) Protected Functions Documentation function LegacyShapeMatrix inline LegacyShapeMatrix () function ~LegacyShapeMatrix inline virtual ~ LegacyShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#shapeworkslegacyshapematrix","text":"Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions","text":"Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-self","text":"typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods).","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix","text":"inline LegacyShapeMatrix ()","title":"function LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix_1","text":"inline virtual ~ LegacyShapeMatrix ()","title":"function ~LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html","text":"shapeworks::Lightbox Display multiple Viewers in a tiled display. More... #include Inherits from QObject Public Slots Name void handle_timer_callback () Public Signals Name void right_click (int index) Public Functions Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window () Detailed Description class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display Public Slots Documentation slot handle_timer_callback void handle_timer_callback () Public Signals Documentation signal right_click void right_click ( int index ) Public Functions Documentation function Lightbox Lightbox () function ~Lightbox ~ Lightbox () function set_shapes void set_shapes ( ShapeList shapes ) function get_shapes ShapeList get_shapes () function set_interactor void set_interactor ( vtkRenderWindowInteractor * interactor ) function set_render_window void set_render_window ( vtkRenderWindow * render_window ) function set_tile_layout void set_tile_layout ( int width , int height ) function setup_renderers void setup_renderers () function get_num_rows int get_num_rows () function get_num_rows_visible int get_num_rows_visible () function set_start_row void set_start_row ( int row ) function get_viewers ViewerList get_viewers () function redraw void redraw () function handle_pick void handle_pick ( int * click_pos , bool one , bool ctrl ) function handle_hover void handle_hover ( int * click_pos ) function handle_key void handle_key ( int * click_pos , std :: string key ) function handle_right_click void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement. function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_session void set_session ( QSharedPointer < Session > session ) function set_visualizer void set_visualizer ( Visualizer * visualizer ) function render_window_ready inline bool render_window_ready () function clear_renderers void clear_renderers () function initPos std :: array < double , 3 > initPos () function handle_new_mesh void handle_new_mesh () function reset_camera void reset_camera () function reset_camera_clipping_range void reset_camera_clipping_range () function set_orientation_marker void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ) function set_orientation_marker_viewport void set_orientation_marker_viewport () function update_feature_range void update_feature_range () function update_interactor_style void update_interactor_style () function set_shared_window_and_level void set_shared_window_and_level ( double window , double level ) function get_render_window vtkRenderWindow * get_render_window () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#shapeworkslightbox","text":"Display multiple Viewers in a tiled display. More... #include Inherits from QObject","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots","text":"Name void handle_timer_callback ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals","text":"Name void right_click (int index)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions","text":"Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#detailed-description","text":"class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#slot-handle_timer_callback","text":"void handle_timer_callback ()","title":"slot handle_timer_callback"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#signal-right_click","text":"void right_click ( int index )","title":"signal right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox","text":"Lightbox ()","title":"function Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox_1","text":"~ Lightbox ()","title":"function ~Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shapes","text":"void set_shapes ( ShapeList shapes )","title":"function set_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_interactor","text":"void set_interactor ( vtkRenderWindowInteractor * interactor )","title":"function set_interactor"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_render_window","text":"void set_render_window ( vtkRenderWindow * render_window )","title":"function set_render_window"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_tile_layout","text":"void set_tile_layout ( int width , int height )","title":"function set_tile_layout"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-setup_renderers","text":"void setup_renderers ()","title":"function setup_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows","text":"int get_num_rows ()","title":"function get_num_rows"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows_visible","text":"int get_num_rows_visible ()","title":"function get_num_rows_visible"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_start_row","text":"void set_start_row ( int row )","title":"function set_start_row"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_viewers","text":"ViewerList get_viewers ()","title":"function get_viewers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-redraw","text":"void redraw ()","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_pick","text":"void handle_pick ( int * click_pos , bool one , bool ctrl )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_hover","text":"void handle_hover ( int * click_pos )","title":"function handle_hover"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_key","text":"void handle_key ( int * click_pos , std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_right_click","text":"void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-render_window_ready","text":"inline bool render_window_ready ()","title":"function render_window_ready"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-clear_renderers","text":"void clear_renderers ()","title":"function clear_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-initpos","text":"std :: array < double , 3 > initPos ()","title":"function initPos"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera_clipping_range","text":"void reset_camera_clipping_range ()","title":"function reset_camera_clipping_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker","text":"void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner )","title":"function set_orientation_marker"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker_viewport","text":"void set_orientation_marker_viewport ()","title":"function set_orientation_marker_viewport"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_feature_range","text":"void update_feature_range ()","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_interactor_style","text":"void update_interactor_style ()","title":"function update_interactor_style"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shared_window_and_level","text":"void set_shared_window_and_level ( double window , double level )","title":"function set_shared_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_render_window","text":"vtkRenderWindow * get_render_window () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_render_window"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html","text":"shapeworks::LinearRegressionShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function LinearRegressionShapeMatrix inline LinearRegressionShapeMatrix () function ~LinearRegressionShapeMatrix inline virtual ~ LinearRegressionShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#shapeworkslinearregressionshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions","text":"Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-self","text":"typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix","text":"inline LinearRegressionShapeMatrix ()","title":"function LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix_1","text":"inline virtual ~ LinearRegressionShapeMatrix ()","title":"function ~LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html","text":"shapeworks::LogWindow Log Window. More... #include Inherits from QDialog Public Functions Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history Detailed Description class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages) Public Functions Documentation function LogWindow LogWindow ( QWidget * parent = 0 ) function add_message void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#shapeworkslogwindow","text":"Log Window. More... #include Inherits from QDialog","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions","text":"Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#detailed-description","text":"class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages)","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-logwindow","text":"LogWindow ( QWidget * parent = 0 )","title":"function LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-add_message","text":"void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-24 at 22:16:01 +0000","title":"function add_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html","text":"shapeworks::Logging Module: Common Classes ShapeWorks Logging Library. More... #include Public Functions Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted. Detailed Description class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32 Public Functions Documentation function Instance static Logging & Instance () Return the singleton instance. function open_file_log void open_file_log ( const std :: string & filename ) Create a file log. function check_log_open bool check_log_open () const Return if the log is open. function get_log_filename std :: string get_log_filename () const Return the log filename. function log_message void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro. function log_stack void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro. function log_error void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro. function show_message void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro. function show_status void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro. function show_progress void show_progress ( double value , const std :: string & message ) Display progress (0-100) function log_debug void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro. function log_warning void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro. function close_log void close_log () Close the log, use SW_CLOSE_LOG macro. function set_error_callback void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised. function set_message_callback void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted. function set_warning_callback void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted. function set_debug_callback void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted. function set_status_callback void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted. function set_progress_callback void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#shapeworkslogging","text":"Module: Common Classes ShapeWorks Logging Library. More... #include ","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions","text":"Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Logging.html#detailed-description","text":"class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-instance","text":"static Logging & Instance () Return the singleton instance.","title":"function Instance"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-open_file_log","text":"void open_file_log ( const std :: string & filename ) Create a file log.","title":"function open_file_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-check_log_open","text":"bool check_log_open () const Return if the log is open.","title":"function check_log_open"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-get_log_filename","text":"std :: string get_log_filename () const Return the log filename.","title":"function get_log_filename"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_message","text":"void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro.","title":"function log_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_stack","text":"void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro.","title":"function log_stack"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_error","text":"void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro.","title":"function log_error"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_message","text":"void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro.","title":"function show_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_status","text":"void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro.","title":"function show_status"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_progress","text":"void show_progress ( double value , const std :: string & message ) Display progress (0-100)","title":"function show_progress"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_debug","text":"void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro.","title":"function log_debug"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_warning","text":"void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro.","title":"function log_warning"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-close_log","text":"void close_log () Close the log, use SW_CLOSE_LOG macro.","title":"function close_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_error_callback","text":"void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised.","title":"function set_error_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_message_callback","text":"void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted.","title":"function set_message_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_warning_callback","text":"void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted.","title":"function set_warning_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_debug_callback","text":"void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted.","title":"function set_debug_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_status_callback","text":"void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted.","title":"function set_status_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_progress_callback","text":"void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_progress_callback"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html","text":"shapeworks::MatrixContainer Public Attributes Name Eigen::MatrixXd matrix_ Public Attributes Documentation variable matrix_ Eigen :: MatrixXd matrix_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#shapeworksmatrixcontainer","text":"","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes","text":"Name Eigen::MatrixXd matrix_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#variable-matrix_","text":"Eigen :: MatrixXd matrix_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable matrix_"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html","text":"shapeworks::MeanCurvatureContainer More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d) Protected Functions Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ; Public Types Documentation typedef NumericType typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs typedef Self typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ; typedef Superclass typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ; typedef VnlVectorType typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods). function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function PositionAddEventCallback inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function ComputeMeanCurvature inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) function ComputeCurvatureStatistics virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface. function GetMeanCurvature inline double GetMeanCurvature ( int d ) function GetCurvatureStandardDeviation inline double GetCurvatureStandardDeviation ( int d ) Protected Functions Documentation function MeanCurvatureContainer inline MeanCurvatureContainer () function ~MeanCurvatureContainer inline virtual ~ MeanCurvatureContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#shapeworksmeancurvaturecontainer","text":"More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types","text":"Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions","text":"Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#additional-inherited-members","text":"Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#detailed-description","text":"template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-numerictype","text":"typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-self","text":"typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-superclass","text":"typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computemeancurvature","text":"inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom )","title":"function ComputeMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computecurvaturestatistics","text":"virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface.","title":"function ComputeCurvatureStatistics"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getmeancurvature","text":"inline double GetMeanCurvature ( int d )","title":"function GetMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getcurvaturestandarddeviation","text":"inline double GetCurvatureStandardDeviation ( int d )","title":"function GetCurvatureStandardDeviation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer","text":"inline MeanCurvatureContainer ()","title":"function MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer_1","text":"inline virtual ~ MeanCurvatureContainer ()","title":"function ~MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Mesh.html","text":"shapeworks::Mesh Module: Mesh Classes More... #include Public Types Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints Public Functions Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes Public Types Documentation enum FieldType Enumerator Value Description Point Face enum AlignmentType Enumerator Value Description Rigid Similarity Affine enum DistanceMethod Enumerator Value Description PointToPoint PointToCell enum CurvatureType Enumerator Value Description Principal Gaussian Mean enum SubdivisionType Enumerator Value Description Butterfly Loop using MeshType using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ; Public Functions Documentation function Mesh Mesh ( const std :: string & pathname ) function Mesh inline Mesh ( MeshType meshPtr ) function Mesh inline Mesh ( const Mesh & orig ) function Mesh inline Mesh ( Mesh && orig ) function operator= inline Mesh & operator = ( const Mesh & orig ) function Mesh Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ) function operator= inline Mesh & operator = ( Mesh && orig ) function operator+= Mesh & operator += ( const Mesh & otherMesh ) append two meshes function getVTKMesh inline MeshType getVTKMesh () const return the current mesh function write Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension function coverage Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) function smooth Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing function smoothSinc Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing function remesh Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity function remeshPercent Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity function invertNormals Mesh & invertNormals () handle flipping normals function reflect Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis function createTransform MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations function applyTransform Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh function rotate Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis function fillHoles Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them function clean Mesh & clean () clean mesh function probeVolume Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image function clip Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane function translate Mesh & translate ( const Vector3 & v ) helper to translate mesh function scale Mesh & scale ( const Vector3 & v ) helper to scale mesh function boundingBox PhysicalRegion boundingBox () const computes bounding box of current mesh function fixElement Mesh & fixElement () fix element winding of mesh function fixNonManifold Mesh & fixNonManifold () Attempt to fix non-manifold edges. function detectNonManifold bool detectNonManifold () Detect if mesh contain non-manifold edges. function detectTriangular bool detectTriangular () Detect if mesh is triangular;. function distance std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points. function clipClosedSurface Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface function computeNormals Mesh & computeNormals () computes and adds oriented point and cell normals function closestPoint Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point function closestPointId int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space function geodesicDistance double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh function geodesicDistance Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh function geodesicDistance Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh function curvature Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms function computeFieldGradient void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices function computeFieldGradientAtPoint Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point function interpolateFieldAtPoint double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point function applySubdivisionFilter Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop) function toImage Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing) function toDistanceTransform Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding function computeThickness Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points function computeLandmarkGeodesics Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields function center Point3 center () const center of mesh function centerOfMass Point3 centerOfMass () const center of mass of mesh function numPoints inline int numPoints () const number of points function numFaces inline int numFaces () const number of faces function points Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point function faces Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed function getPoint Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index function getFace IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed function getFieldNames std :: vector < std :: string > getFieldNames () const print all field names in mesh function setField Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values) function getField Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist function setFieldValue void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value function getFieldValue double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields) function getMultiFieldValue Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field function compareAllPoints bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal function compareAllFaces bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal function compareAllFields bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal function compareField bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified) function compare bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes function operator== inline bool operator == ( const Mesh & other ) const compare meshes function getFFCValue double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs. function getFFCGradient Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs. function getIGLMesh MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format. function clipByField vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value. function getCellLocator inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator. function getClosestFace int getClosestFace ( const Point3 & point ) const function computeBarycentricCoordinates Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#shapeworksmesh","text":"Module: Mesh Classes More... #include ","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types","text":"Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions","text":"Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#detailed-description","text":"class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-fieldtype","text":"Enumerator Value Description Point Face","title":"enum FieldType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-alignmenttype","text":"Enumerator Value Description Rigid Similarity Affine","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-distancemethod","text":"Enumerator Value Description PointToPoint PointToCell","title":"enum DistanceMethod"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-curvaturetype","text":"Enumerator Value Description Principal Gaussian Mean","title":"enum CurvatureType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-subdivisiontype","text":"Enumerator Value Description Butterfly Loop","title":"enum SubdivisionType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshtype","text":"using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ;","title":"using MeshType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshpoints","text":"using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ;","title":"using MeshPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh","text":"Mesh ( const std :: string & pathname )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_1","text":"inline Mesh ( MeshType meshPtr )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_2","text":"inline Mesh ( const Mesh & orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_3","text":"inline Mesh ( Mesh && orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator","text":"inline Mesh & operator = ( const Mesh & orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_4","text":"Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_1","text":"inline Mesh & operator = ( Mesh && orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_2","text":"Mesh & operator += ( const Mesh & otherMesh ) append two meshes","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getvtkmesh","text":"inline MeshType getVTKMesh () const return the current mesh","title":"function getVTKMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-write","text":"Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-coverage","text":"Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"function coverage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smooth","text":"Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing","title":"function smooth"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smoothsinc","text":"Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing","title":"function smoothSinc"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remesh","text":"Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"function remesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remeshpercent","text":"Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"function remeshPercent"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-invertnormals","text":"Mesh & invertNormals () handle flipping normals","title":"function invertNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-reflect","text":"Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-createtransform","text":"MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations","title":"function createTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applytransform","text":"Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-rotate","text":"Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fillholes","text":"Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them","title":"function fillHoles"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clean","text":"Mesh & clean () clean mesh","title":"function clean"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-probevolume","text":"Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image","title":"function probeVolume"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clip","text":"Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-translate","text":"Mesh & translate ( const Vector3 & v ) helper to translate mesh","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-scale","text":"Mesh & scale ( const Vector3 & v ) helper to scale mesh","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-boundingbox","text":"PhysicalRegion boundingBox () const computes bounding box of current mesh","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixelement","text":"Mesh & fixElement () fix element winding of mesh","title":"function fixElement"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixnonmanifold","text":"Mesh & fixNonManifold () Attempt to fix non-manifold edges.","title":"function fixNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detectnonmanifold","text":"bool detectNonManifold () Detect if mesh contain non-manifold edges.","title":"function detectNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detecttriangular","text":"bool detectTriangular () Detect if mesh is triangular;.","title":"function detectTriangular"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-distance","text":"std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points.","title":"function distance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipclosedsurface","text":"Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface","title":"function clipClosedSurface"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computenormals","text":"Mesh & computeNormals () computes and adds oriented point and cell normals","title":"function computeNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpoint","text":"Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point","title":"function closestPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpointid","text":"int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space","title":"function closestPointId"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance","text":"double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_1","text":"Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_2","text":"Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-curvature","text":"Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms","title":"function curvature"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradient","text":"void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices","title":"function computeFieldGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradientatpoint","text":"Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point","title":"function computeFieldGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-interpolatefieldatpoint","text":"double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point","title":"function interpolateFieldAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applysubdivisionfilter","text":"Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop)","title":"function applySubdivisionFilter"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-toimage","text":"Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"function toImage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-todistancetransform","text":"Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding","title":"function toDistanceTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computethickness","text":"Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points","title":"function computeThickness"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computelandmarkgeodesics","text":"Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields","title":"function computeLandmarkGeodesics"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-center","text":"Point3 center () const center of mesh","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-centerofmass","text":"Point3 centerOfMass () const center of mass of mesh","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numpoints","text":"inline int numPoints () const number of points","title":"function numPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numfaces","text":"inline int numFaces () const number of faces","title":"function numFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-points","text":"Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point","title":"function points"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-faces","text":"Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed","title":"function faces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getpoint","text":"Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index","title":"function getPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getface","text":"IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed","title":"function getFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldnames","text":"std :: vector < std :: string > getFieldNames () const print all field names in mesh","title":"function getFieldNames"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfield","text":"Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values)","title":"function setField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfield","text":"Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist","title":"function getField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfieldvalue","text":"void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value","title":"function setFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldvalue","text":"double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields)","title":"function getFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getmultifieldvalue","text":"Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field","title":"function getMultiFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallpoints","text":"bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal","title":"function compareAllPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfaces","text":"bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal","title":"function compareAllFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfields","text":"bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal","title":"function compareAllFields"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-comparefield","text":"bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified)","title":"function compareField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compare","text":"bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_3","text":"inline bool operator == ( const Mesh & other ) const compare meshes","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcvalue","text":"double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs.","title":"function getFFCValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcgradient","text":"Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs.","title":"function getFFCGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getiglmesh","text":"MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format.","title":"function getIGLMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipbyfield","text":"vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value.","title":"function clipByField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getcelllocator","text":"inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator.","title":"function getCellLocator"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getclosestface","text":"int getClosestFace ( const Point3 & point ) const","title":"function getClosestFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computebarycentriccoordinates","text":"Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number.","title":"function computeBarycentricCoordinates"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html","text":"shapeworks::MeshCache Thread safe cache for meshes index by shape. More... #include Public Functions Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear () Detailed Description class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread. Public Functions Documentation function MeshCache MeshCache () function set_cache_enabled inline void set_cache_enabled ( bool enabled ) function set_memory_percent inline void set_memory_percent ( int percent ) function get_mesh MeshHandle get_mesh ( const MeshWorkItem & vector ) function insert_mesh void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ) function clear void clear () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#shapeworksmeshcache","text":"Thread safe cache for meshes index by shape. More... #include ","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions","text":"Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#detailed-description","text":"class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-meshcache","text":"MeshCache ()","title":"function MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_cache_enabled","text":"inline void set_cache_enabled ( bool enabled )","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_memory_percent","text":"inline void set_memory_percent ( int percent )","title":"function set_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & vector )","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-insert_mesh","text":"void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh )","title":"function insert_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-clear","text":"void clear () Updated on 2023-10-24 at 22:16:01 +0000","title":"function clear"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html","text":"shapeworks::MeshCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#shapeworksmeshcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html","text":"shapeworks::MeshDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< MeshDomain > Pointer Public Functions Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ; Public Functions Documentation function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function ApplyVectorConstraints bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetMaxDiameter virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function Distance inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function SetMesh inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) function GetSWMesh inline std :: shared_ptr < Mesh > GetSWMesh () const function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#shapeworksmeshdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types","text":"Name using std::shared_ptr< MeshDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions","text":"Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#using-pointer","text":"using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyvectorconstraints","text":"bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const","title":"function ApplyVectorConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-distance","text":"inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-setmesh","text":"inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ )","title":"function SetMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getswmesh","text":"inline std :: shared_ptr < Mesh > GetSWMesh () const","title":"function GetSWMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-24 at 22:16:01 +0000","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html","text":"shapeworks::MeshGenerator Public Functions Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method () Public Attributes Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C Public Functions Documentation function MeshGenerator MeshGenerator () function ~MeshGenerator ~ MeshGenerator () function build_mesh MeshHandle build_mesh ( const MeshWorkItem & item ) function build_mesh_from_points MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ) function build_mesh_from_image MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ) function build_mesh_from_file MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ) function set_mesh_reconstructors void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ) function set_reconstruction_method void set_reconstruction_method ( std :: string method ) function get_reconstruction_method std :: string get_reconstruction_method () Public Attributes Documentation variable RECONSTRUCTION_LEGACY_C static const std :: string RECONSTRUCTION_LEGACY_C ; variable RECONSTRUCTION_DISTANCE_TRANSFORM_C static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; variable RECONSTRUCTION_MESH_WARPER_C static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#shapeworksmeshgenerator","text":"","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions","text":"Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes","text":"Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator","text":"MeshGenerator ()","title":"function MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator_1","text":"~ MeshGenerator ()","title":"function ~MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh","text":"MeshHandle build_mesh ( const MeshWorkItem & item )","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_points","text":"MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain )","title":"function build_mesh_from_points"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_image","text":"MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 )","title":"function build_mesh_from_image"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_file","text":"MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 )","title":"function build_mesh_from_file"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_mesh_reconstructors","text":"void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors )","title":"function set_mesh_reconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_reconstruction_method","text":"void set_reconstruction_method ( std :: string method )","title":"function set_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-get_reconstruction_method","text":"std :: string get_reconstruction_method ()","title":"function get_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_legacy_c","text":"static const std :: string RECONSTRUCTION_LEGACY_C ;","title":"variable RECONSTRUCTION_LEGACY_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_distance_transform_c","text":"static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ;","title":"variable RECONSTRUCTION_DISTANCE_TRANSFORM_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_mesh_warper_c","text":"static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable RECONSTRUCTION_MESH_WARPER_C"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html","text":"shapeworks::MeshGroup Representation of a group of meshes. More... #include Public Functions Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Detailed Description class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain Public Functions Documentation function MeshGroup MeshGroup () function MeshGroup MeshGroup ( unsigned long num_meshes ) function ~MeshGroup ~ MeshGroup () function set_number_of_meshes void set_number_of_meshes ( int n ) function valid bool valid () function set_mesh void set_mesh ( int i , MeshHandle mesh ) function meshes MeshList & meshes () Return a reference to the list of meshes. function get_combined_poly_data vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#shapeworksmeshgroup","text":"Representation of a group of meshes. More... #include ","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions","text":"Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#detailed-description","text":"class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup","text":"MeshGroup ()","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_1","text":"MeshGroup ( unsigned long num_meshes )","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_2","text":"~ MeshGroup ()","title":"function ~MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_number_of_meshes","text":"void set_number_of_meshes ( int n )","title":"function set_number_of_meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-valid","text":"bool valid ()","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_mesh","text":"void set_mesh ( int i , MeshHandle mesh )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshes","text":"MeshList & meshes () Return a reference to the list of meshes.","title":"function meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-get_combined_poly_data","text":"vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_combined_poly_data"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html","text":"shapeworks::MeshManager Class to manage meshes. More... #include Inherits from QObject Public Slots Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress () Public Signals Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string ) Public Functions Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache Detailed Description class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background. Public Slots Documentation slot handle_thread_complete void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ) slot handle_warper_progress void handle_warper_progress () Public Signals Documentation signal new_mesh void new_mesh () signal error_encountered void error_encountered ( QString message ) signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function MeshManager MeshManager () function ~MeshManager ~ MeshManager () function set_cache_enabled void set_cache_enabled ( bool enabled ) Set if the cache should be enabled. function set_cache_memory_percent void set_cache_memory_percent ( int percent ) Set the memory cache size. function set_parallel_enabled inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled. function set_num_threads inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction. function generate_mesh void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread function get_mesh MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem function get_mesh MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points function get_surface_reconstructor std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain function get_mesh_warper std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain function get_mesh_generator inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator function clear_cache void clear_cache () clear the cache Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#shapeworksmeshmanager","text":"Class to manage meshes. More... #include Inherits from QObject","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots","text":"Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals","text":"Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions","text":"Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#detailed-description","text":"class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_thread_complete","text":"void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh )","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_warper_progress","text":"void handle_warper_progress ()","title":"slot handle_warper_progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-error_encountered","text":"void error_encountered ( QString message )","title":"signal error_encountered"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager","text":"MeshManager ()","title":"function MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager_1","text":"~ MeshManager ()","title":"function ~MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool enabled ) Set if the cache should be enabled.","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_memory_percent","text":"void set_cache_memory_percent ( int percent ) Set the memory cache size.","title":"function set_cache_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_parallel_enabled","text":"inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled.","title":"function set_parallel_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_num_threads","text":"inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction.","title":"function set_num_threads"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-generate_mesh","text":"void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread","title":"function generate_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_1","text":"MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_surface_reconstructor","text":"std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain","title":"function get_surface_reconstructor"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_warper","text":"std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain","title":"function get_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_generator","text":"inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator","title":"function get_mesh_generator"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-clear_cache","text":"void clear_cache () clear the cache Updated on 2023-10-24 at 22:16:01 +0000","title":"function clear_cache"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html","text":"shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html#shapeworksmeshreader","text":"reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html","text":"shapeworks::MeshReconstructors Public Attributes Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_ Public Attributes Documentation variable surface_reconstructors_ std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ; variable mesh_warpers_ std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#shapeworksmeshreconstructors","text":"","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes","text":"Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-surface_reconstructors_","text":"std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ;","title":"variable surface_reconstructors_"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-mesh_warpers_","text":"std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable mesh_warpers_"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html","text":"shapeworks::MeshSlice MeshSlice . More... #include Public Functions Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key) Detailed Description class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer Public Functions Documentation function MeshSlice MeshSlice ( Viewer * viewer ) function set_volume void set_volume ( vtkSmartPointer < vtkImageData > volume ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key void handle_key ( std :: string key ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#shapeworksmeshslice","text":"MeshSlice . More... #include ","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions","text":"Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#detailed-description","text":"class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-meshslice","text":"MeshSlice ( Viewer * viewer )","title":"function MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-set_volume","text":"void set_volume ( vtkSmartPointer < vtkImageData > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-handle_key","text":"void handle_key ( std :: string key ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html","text":"shapeworks::MeshUtils Module: Mesh Classes More... #include Public Functions Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations. Detailed Description class shapeworks :: MeshUtils ; This class provides helper functions for meshes Public Functions Documentation function createICPTransform static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform function threadSafeReadMesh static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock. function threadSafeWriteMesh static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock. function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes function findReferenceMesh static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh function boundaryLoopExtractor static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh function sharedBoundaryExtractor static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh function generateNormals static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes function visualizeVectorFieldForFFCs void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs. function getArrow vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#shapeworksmeshutils","text":"Module: Mesh Classes More... #include ","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions","text":"Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#detailed-description","text":"class shapeworks :: MeshUtils ; This class provides helper functions for meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-createicptransform","text":"static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform","title":"function createICPTransform"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafereadmesh","text":"static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock.","title":"function threadSafeReadMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafewritemesh","text":"static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock.","title":"function threadSafeWriteMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-findreferencemesh","text":"static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh","title":"function findReferenceMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundaryloopextractor","text":"static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh","title":"function boundaryLoopExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-sharedboundaryextractor","text":"static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh","title":"function sharedBoundaryExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-generatenormals","text":"static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes","title":"function generateNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals","text":"static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals_1","text":"static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-visualizevectorfieldforffcs","text":"void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs.","title":"function visualizeVectorFieldForFFCs"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-getarrow","text":"vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-24 at 22:16:02 +0000","title":"function getArrow"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html","text":"shapeworks::MeshWarper Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper Public Functions Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Protected Functions Name virtual void update_progress (float p) For overriding to handle progress updates. Detailed Description class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices Public Functions Documentation function set_reference_mesh void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles. function generate_warp bool generate_warp () Generate warp, return true on success. function get_warp_available bool get_warp_available () Return if the warp is available. function is_contour inline bool is_contour () const function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles. function extract_landmarks Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh. function is_contour inline bool is_contour () Return if set as a contour. function get_landmarks_map inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) function get_good_particle_indices inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) function get_warp_matrix inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix. function has_bad_particles inline bool has_bad_particles () const Return true if warping has removed any bad particle(s) function get_reference_mesh inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. function get_reference_particles inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles. function prep_mesh static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh. Protected Functions Documentation function update_progress inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#shapeworksmeshwarper","text":"Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions","text":"Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#detailed-description","text":"class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-set_reference_mesh","text":"void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles.","title":"function set_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-generate_warp","text":"bool generate_warp () Generate warp, return true on success.","title":"function generate_warp"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_available","text":"bool get_warp_available () Return if the warp is available.","title":"function get_warp_available"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour","text":"inline bool is_contour () const","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles.","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-extract_landmarks","text":"Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh.","title":"function extract_landmarks"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour_1","text":"inline bool is_contour () Return if set as a contour.","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_landmarks_map","text":"inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value)","title":"function get_landmarks_map"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_good_particle_indices","text":"inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping)","title":"function get_good_particle_indices"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_matrix","text":"inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix.","title":"function get_warp_matrix"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-has_bad_particles","text":"inline bool has_bad_particles () const Return true if warping has removed any bad particle(s)","title":"function has_bad_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_mesh","text":"inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added.","title":"function get_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_particles","text":"inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles.","title":"function get_reference_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-prep_mesh","text":"static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh.","title":"function prep_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-update_progress","text":"inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html","text":"shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. #include Public Attributes Name std::string filename Eigen::VectorXd points int domain size_t memory_size Friends Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b) Public Attributes Documentation variable filename std :: string filename ; variable points Eigen :: VectorXd points ; variable domain int domain { 0 }; variable memory_size size_t memory_size { 0 }; Friends friend operator< friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend operator== friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#shapeworksmeshworkitem","text":"Provides concurrent access to a list of shapes to work needing reconstruction. #include ","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes","text":"Name std::string filename Eigen::VectorXd points int domain size_t memory_size","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends","text":"Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b)","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-filename","text":"std :: string filename ;","title":"variable filename"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-points","text":"Eigen :: VectorXd points ;","title":"variable points"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-domain","text":"int domain { 0 };","title":"variable domain"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-memory_size","text":"size_t memory_size { 0 };","title":"variable memory_size"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator","text":"friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b );","title":"friend operator<"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator_1","text":"friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-24 at 22:16:01 +0000","title":"friend operator=="},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html","text":"shapeworks::MeshWorkQueue Public Types Name using std::list< MeshWorkItem > WorkList Public Functions Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size () Public Types Documentation using WorkList using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ; Public Functions Documentation function MeshWorkQueue MeshWorkQueue () function ~MeshWorkQueue ~ MeshWorkQueue () function push void push ( const MeshWorkItem & item ) function get_next_work_item MeshWorkItem * get_next_work_item () function is_inside bool is_inside ( const MeshWorkItem & item ) function remove void remove ( const MeshWorkItem & item ) function is_empty bool is_empty () function size int size () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#shapeworksmeshworkqueue","text":"","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types","text":"Name using std::list< MeshWorkItem > WorkList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions","text":"Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#using-worklist","text":"using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ;","title":"using WorkList"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue","text":"MeshWorkQueue ()","title":"function MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue_1","text":"~ MeshWorkQueue ()","title":"function ~MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-push","text":"void push ( const MeshWorkItem & item )","title":"function push"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-get_next_work_item","text":"MeshWorkItem * get_next_work_item ()","title":"function get_next_work_item"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_inside","text":"bool is_inside ( const MeshWorkItem & item )","title":"function is_inside"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-remove","text":"void remove ( const MeshWorkItem & item )","title":"function remove"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_empty","text":"bool is_empty ()","title":"function is_empty"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-size","text":"int size () Updated on 2023-10-24 at 22:16:01 +0000","title":"function size"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html","text":"shapeworks::MeshWorker Inherits from QObject, QRunnable Public Signals Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished () Public Functions Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run () Public Signals Documentation signal result_ready void result_ready ( const MeshWorkItem & item , MeshHandle mesh ) signal finished void finished () Public Functions Documentation function MeshWorker MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ) function ~MeshWorker ~ MeshWorker () function run void run () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#shapeworksmeshworker","text":"Inherits from QObject, QRunnable","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals","text":"Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions","text":"Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-result_ready","text":"void result_ready ( const MeshWorkItem & item , MeshHandle mesh )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker","text":"MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator )","title":"function MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker_1","text":"~ MeshWorker ()","title":"function ~MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-run","text":"void run () Updated on 2023-10-24 at 22:16:01 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html","text":"shapeworks::MeshWrapper Inherited by shapeworks::VtkMeshWrapper Public Types Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType Public Functions Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0 Public Types Documentation typedef PointType typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ; typedef GradNType typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ; Public Functions Documentation function ComputeDistance virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 function IsWithinDistance virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk function GetPointOnMesh virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh function GetMeshLowerBound virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound function GetMeshUpperBound virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound function ProjectVectorToSurfaceTangent virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh function InvalidateParticle inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle function IsGeodesicsEnabled virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled function GetPolydata virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#shapeworksmeshwrapper","text":"Inherited by shapeworks::VtkMeshWrapper","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types","text":"Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions","text":"Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-gradntype","text":"typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-computedistance","text":"virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshlowerbound","text":"virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshupperbound","text":"virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplenormalatpoint","text":"virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-invalidateparticle","text":"inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-isgeodesicsenabled","text":"virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled","title":"function IsGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpolydata","text":"virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html","text":"shapeworks::MixedEffectsShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int i ) function GetTimeptsPerIndividual inline int GetTimeptsPerIndividual () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function GetSlopeRandom inline const vnl_matrix < double > & GetSlopeRandom () const function GetInterceptRandom inline const vnl_matrix < double > & GetInterceptRandom () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function MixedEffectsShapeMatrix inline MixedEffectsShapeMatrix () function ~MixedEffectsShapeMatrix inline virtual ~ MixedEffectsShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#shapeworksmixedeffectsshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types","text":"Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions","text":"Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-self","text":"typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int i )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-gettimeptsperindividual","text":"inline int GetTimeptsPerIndividual () const","title":"function GetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getsloperandom","text":"inline const vnl_matrix < double > & GetSlopeRandom () const","title":"function GetSlopeRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getinterceptrandom","text":"inline const vnl_matrix < double > & GetInterceptRandom () const","title":"function GetInterceptRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix","text":"inline MixedEffectsShapeMatrix ()","title":"function MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix_1","text":"inline virtual ~ MixedEffectsShapeMatrix ()","title":"function ~MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html","text":"shapeworks::NetworkAnalysisJob Inherits from shapeworks::Job , QObject Public Functions Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function NetworkAnalysisJob NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function set_pvalue_of_interest void set_pvalue_of_interest ( double pvalue_of_interest ) function set_pvalue_threshold void set_pvalue_threshold ( double pvalue_threshold ) function set_num_iterations void set_num_iterations ( int num_iterations ) function get_tvalues Eigen :: VectorXf get_tvalues () function get_spm_values Eigen :: VectorXf get_spm_values () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#shapeworksnetworkanalysisjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions","text":"Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-networkanalysisjob","text":"NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature )","title":"function NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_of_interest","text":"void set_pvalue_of_interest ( double pvalue_of_interest )","title":"function set_pvalue_of_interest"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_threshold","text":"void set_pvalue_threshold ( double pvalue_threshold )","title":"function set_pvalue_threshold"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_num_iterations","text":"void set_num_iterations ( int num_iterations )","title":"function set_num_iterations"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_tvalues","text":"Eigen :: VectorXf get_tvalues ()","title":"function get_tvalues"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_spm_values","text":"Eigen :: VectorXf get_spm_values () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_spm_values"},{"location":"api/Classes/classshapeworks_1_1Observer.html","text":"shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix Public Classes Name struct DefinedCallbacksStruct Public Types Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const Public Attributes Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef Self typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: Observer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function TransformSetEventCallback inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) function PrefixTransformSetEventCallback inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) function NeighborhoodSetEventCallback inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback Protected Functions Documentation function Observer inline Observer () function ~Observer inline virtual ~ Observer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Public Attributes Documentation variable m_DefinedCallbacks DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#shapeworksobserver","text":"This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-classes","text":"Name struct DefinedCallbacksStruct","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types","text":"Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions","text":"Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes","text":"Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-self","text":"typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-superclass","text":"typedef DataObject shapeworks :: Observer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itktypemacro","text":"itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-transformseteventcallback","text":"inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function TransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-prefixtransformseteventcallback","text":"inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function PrefixTransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-neighborhoodseteventcallback","text":"inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & )","title":"function NeighborhoodSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer","text":"inline Observer ()","title":"function Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer_1","text":"inline virtual ~ Observer ()","title":"function ~Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#variable-m_definedcallbacks","text":"DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_DefinedCallbacks"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html","text":"shapeworks::OptimizationVisualizer Public Functions Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer () Public Functions Documentation function AddMesh void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ) function IterationCallback void IterationCallback ( ParticleSystem * particleSystem ) function SetWireFrame void SetWireFrame ( bool enabled ) function SetSaveScreenshots void SetSaveScreenshots ( bool enabled , std :: string path ) function OptimizationVisualizer inline OptimizationVisualizer () function ~OptimizationVisualizer inline ~ OptimizationVisualizer () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#shapeworksoptimizationvisualizer","text":"","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions","text":"Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-addmesh","text":"void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-iterationcallback","text":"void IterationCallback ( ParticleSystem * particleSystem )","title":"function IterationCallback"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setwireframe","text":"void SetWireFrame ( bool enabled )","title":"function SetWireFrame"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setsavescreenshots","text":"void SetSaveScreenshots ( bool enabled , std :: string path )","title":"function SetSaveScreenshots"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer","text":"inline OptimizationVisualizer ()","title":"function OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer_1","text":"inline ~ OptimizationVisualizer () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html","text":"shapeworks::Optimize More... #include Inherited by shapeworks::QOptimize Public Types Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir () Protected Attributes Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Detailed Description class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization Public Types Documentation using ImageType using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ; using VectorType using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ; using MatrixType using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ; Public Functions Documentation function Optimize Optimize () Constructor. function ~Optimize virtual ~ Optimize () Destructor. function Run bool Run () Run the optimization. function LoadParameterFile bool LoadParameterFile ( std :: string filename ) Load a parameter file. function SetUpOptimize bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project. function SetProject void SetProject ( std :: shared_ptr < Project > project ) Set the Project object. function SetIterationCallbackFunction inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration. function AbortOptimization void AbortOptimization () Abort optimization. function GetAborted bool GetAborted () Return if the optimization was aborted. function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints function SetCutPlanes void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes. function SetVerbosity void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5) function SetDomainsPerShape void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape. function GetDomainsPerShape int GetDomainsPerShape () Return the number of domains per shape. function SetDomainType void SetDomainType ( shapeworks :: DomainType type ) function GetDomainType shapeworks :: DomainType GetDomainType () function SetNumberOfParticles void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain) function GetNumberOfParticles std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain. function SetTransformFile void SetTransformFile ( std :: string filename ) Set the transform file. function GetTransformFile std :: string GetTransformFile () Get the transform file. function SetPrefixTransformFile void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details) function GetPrefixTransformFile std :: string GetPrefixTransformFile () Get the prefix transform file. function SetOutputDir void SetOutputDir ( std :: string output_dir ) Set the output directory. function SetOutputTransformFile void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file. function SetOutputIndividualTransformFiles void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written. function SetUseMeshBasedAttributes void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used. function GetUseMeshBasedAttributes bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. function SetUseXYZ void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain. function SetUseNormals void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain. function SetAttributesPerDomain void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain. function GetAttributesPerDomain std :: vector < int > GetAttributesPerDomain () Get attributes per domain. function SetDistributionDomainID void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details) function GetDistributionDomainID int GetDistributionDomainID () Get the distribution domain ID. function SetOutputCuttingPlaneFile void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file. function SetUseCuttingPlanes void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes. function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape. function SetProcessingMode void SetProcessingMode ( int mode ) Set processing mode (TODO: details) function SetAdaptivityMode void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details) function SetMeshFFCMode inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. function SetAdaptivityStrength void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details) function SetTimePtsPerSubject void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details) function GetTimePtsPerSubject int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) function SetOptimizationIterations void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations. function SetOptimizationIterationsCompleted void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details) function SetIterationsPerSplit void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split. function SetUseShapeStatisticsInInit void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization. function SetProcrustesInterval void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable) function SetProcrustesScaling void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used. function SetProcrustesRotationTranslation void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used. function SetRelativeWeighting void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details) function SetInitialRelativeWeighting void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details) function SetStartingRegularization void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details) function SetEndingRegularization void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details) function SetRecomputeRegularizationInterval void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details) function SetSaveInitSplits void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not. function SetCheckpointingInterval void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval. function SetKeepCheckpoints void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable) function SetUseRegression void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details) function SetUseMixedEffects void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details) function SetUseDisentangledSpatiotemporalSSM void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method. function GetUseDisentangledSpatiotemporalSSM bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. function SetNormalAngle void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details) function SetPerformGoodBad void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details) function SetLogEnergy void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details) function AddImage void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images. function AddMesh void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFilenames void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details) function SetPointFiles void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details) function SetInitialPoints void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function GetNumShapes int GetNumShapes () Get number of shapes. function SetAttributeScales void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes. function SetParticleFlags void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details) function SetFixedDomains void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details) function SetSharedBoundaryEnabled void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings. function SetSharedBoundaryWeight void SetSharedBoundaryWeight ( double weight ) function GetDomainFlags const std :: vector < int > & GetDomainFlags () function SetFileOutputEnabled void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled. function GetUseXYZ std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape. function GetUseNormals std :: vector < bool > GetUseNormals () Return if Normals are used, per shape. function SetNarrowBand void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing. function GetNarrowBand double GetNarrowBand () Return the narrow band to be used. function SetUseShapeStatisticsAfter void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over. function GetUseShapeStatisticsAfter int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. function PrintParamInfo void PrintParamInfo () Print parameter info to stdout. function GetSampler inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler . function GetParticleSystem MatrixContainer GetParticleSystem () Return the particle system as a matrix. function SetPythonFile void SetPythonFile ( std :: string filename ) Set the python file to run at startup. function SetGeodesicsEnabled void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled. function SetGeodesicsCacheSizeMultiplier void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles function GetVisualizer OptimizationVisualizer & GetVisualizer () function SetShowVisualizer void SetShowVisualizer ( bool show ) function GetShowVisualizer bool GetShowVisualizer () function GetMeshFFCMode inline bool GetMeshFFCMode () function TransformPoint vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary function UpdateProgress void UpdateProgress () function set_particle_format inline void set_particle_format ( std :: string format ) Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback function ComputeTotalIterations void ComputeTotalIterations () function OptimizerStop void OptimizerStop () function ReadTransformFile void ReadTransformFile () function ReadPrefixTransformFile void ReadPrefixTransformFile ( const std :: string & s ) function InitializeSampler void InitializeSampler () function GetMinNeighborhoodRadius double GetMinNeighborhoodRadius () function AddSinglePoint void AddSinglePoint () function Initialize void Initialize () function AddAdaptivity void AddAdaptivity () function RunOptimize void RunOptimize () function IterateCallback virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback function ComputeEnergyAfterIteration void ComputeEnergyAfterIteration () function SetCotanSigma void SetCotanSigma () function WriteTransformFile void WriteTransformFile ( int iter = -1 ) const function WriteTransformFile void WriteTransformFile ( std :: string iter_prefix ) const function WriteTransformFiles void WriteTransformFiles ( int iter = -1 ) const function WriteTransformFiles void WriteTransformFiles ( std :: string iter_prefix ) const function WritePointFiles void WritePointFiles ( int iter = -1 ) function WritePointFiles void WritePointFiles ( std :: string iter_prefix ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( int iter = -1 ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( std :: string iter_prefix ) function WriteEnergyFiles void WriteEnergyFiles () function WriteSplitFiles void WriteSplitFiles ( std :: string name ) function WriteCuttingPlanePoints void WriteCuttingPlanePoints ( int iter = -1 ) function WriteParameters void WriteParameters ( std :: string output_dir = \"\" ) function ReportBadParticles void ReportBadParticles () function SetParameters int SetParameters () function WriteModes void WriteModes () function PrintStartMessage void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const function PrintDoneMessage void PrintDoneMessage ( unsigned int vlevel = 0 ) const function UpdateExportablePoints virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms function UpdateProject void UpdateProject () function GetCheckpointDir std :: string GetCheckpointDir () Protected Attributes Documentation variable m_sampler std :: shared_ptr < Sampler > m_sampler ; variable m_procrustes ProcrustesRegistration :: Pointer m_procrustes ; variable m_good_bad std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; variable m_verbosity_level unsigned int m_verbosity_level = 0 ; variable m_local_points std :: vector < std :: vector < itk :: Point < double > > > m_local_points ; variable m_global_points std :: vector < std :: vector < itk :: Point < double > > > m_global_points ; variable m_checkpoint_counter int m_checkpoint_counter = 0 ; variable m_procrustes_counter int m_procrustes_counter = 0 ; variable m_use_cutting_planes bool m_use_cutting_planes = false ; variable m_optimizing bool m_optimizing = false ; variable m_use_regression bool m_use_regression = false ; variable m_use_mixed_effects bool m_use_mixed_effects = false ; variable m_use_disentangled_ssm bool m_use_disentangled_ssm = false ; variable m_domains_per_shape unsigned int m_domains_per_shape = 1 ; variable m_domain_type shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; variable m_number_of_particles std :: vector < int > m_number_of_particles ; variable m_transform_file std :: string m_transform_file ; variable m_prefix_transform_file std :: string m_prefix_transform_file ; variable m_output_dir std :: string m_output_dir ; variable m_output_transform_file std :: string m_output_transform_file ; variable m_output_transform_files bool m_output_transform_files = false ; variable m_mesh_based_attributes bool m_mesh_based_attributes = false ; variable m_use_xyz std :: vector < bool > m_use_xyz ; variable m_use_normals std :: vector < bool > m_use_normals ; variable m_attributes_per_domain std :: vector < int > m_attributes_per_domain ; variable m_distribution_domain_id int m_distribution_domain_id = -1 ; variable m_output_cutting_plane_file std :: string m_output_cutting_plane_file ; variable m_processing_mode int m_processing_mode = 3 ; variable m_adaptivity_mode int m_adaptivity_mode = 0 ; variable m_adaptivity_strength double m_adaptivity_strength = 0.0 ; variable m_mesh_ffc_mode bool m_mesh_ffc_mode = 0 ; variable m_timepts_per_subject unsigned int m_timepts_per_subject = 1 ; variable m_optimization_iterations int m_optimization_iterations = 2000 ; variable m_optimization_iterations_completed int m_optimization_iterations_completed = 0 ; variable m_iterations_per_split int m_iterations_per_split = 1000 ; variable m_use_shape_statistics_in_init bool m_use_shape_statistics_in_init = false ; variable m_procrustes_interval unsigned int m_procrustes_interval = 3 ; variable m_procrustes_scaling bool m_procrustes_scaling = true ; variable m_procrustes_rotation_translation bool m_procrustes_rotation_translation = true ; variable m_relative_weighting double m_relative_weighting = 1.0 ; variable m_initial_relative_weighting double m_initial_relative_weighting = 0.05 ; variable m_starting_regularization double m_starting_regularization = 1000 ; variable m_ending_regularization double m_ending_regularization = 1.0 ; variable m_recompute_regularization_interval int m_recompute_regularization_interval = 1 ; variable m_save_init_splits bool m_save_init_splits = false ; variable m_checkpointing_interval unsigned int m_checkpointing_interval = 50 ; variable m_keep_checkpoints int m_keep_checkpoints = 0 ; variable m_cotan_sigma_factor double m_cotan_sigma_factor = 5.0 ; variable m_particle_flags std :: vector < int > m_particle_flags ; variable m_domain_flags std :: vector < int > m_domain_flags ; variable m_narrow_band double m_narrow_band = 0.0 ; variable m_narrow_band_set bool m_narrow_band_set = false ; variable m_fixed_domains_present bool m_fixed_domains_present = false ; variable m_use_shape_statistics_after int m_use_shape_statistics_after = -1 ; variable m_python_filename std :: string m_python_filename ; variable m_geodesics_enabled bool m_geodesics_enabled = false ; variable m_geodesic_cache_size_multiplier size_t m_geodesic_cache_size_multiplier = 0 ; variable m_spacing double m_spacing = 0 ; variable m_filenames std :: vector < std :: string > m_filenames ; variable m_num_shapes int m_num_shapes = 0 ; variable m_energy_a std :: vector < double > m_energy_a ; variable m_energy_b std :: vector < double > m_energy_b ; variable m_total_energy std :: vector < double > m_total_energy ; variable m_log_energy bool m_log_energy = false ; variable m_str_energy std :: string m_str_energy ; variable m_bad_ids std :: vector < std :: vector < int > > m_bad_ids ; variable m_normal_angle double m_normal_angle = itk :: Math :: pi / 2.0 ; variable m_perform_good_bad bool m_perform_good_bad = false ; variable m_cutting_planes_per_input std :: vector < int > m_cutting_planes_per_input ; variable m_spheres_per_input std :: vector < int > m_spheres_per_input ; variable m_file_output_enabled bool m_file_output_enabled = true ; variable m_aborted bool m_aborted = false ; variable m_cut_planes std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ; variable m_total_iterations int m_total_iterations = 0 ; variable m_iteration_count int m_iteration_count = 0 ; variable m_split_number int m_split_number = 0 ; variable current_particle_iterations_ int current_particle_iterations_ = 0 ; variable total_particle_iterations_ int total_particle_iterations_ = 0 ; variable iteration_callback_ std :: function < void ( void ) > iteration_callback_ ; variable show_visualizer_ bool show_visualizer_ = false ; variable visualizer_ shapeworks :: OptimizationVisualizer visualizer_ ; variable particle_format_ std :: string particle_format_ = \"particles\" ; variable project_ std :: shared_ptr < Project > project_ ; variable m_start_time std :: chrono :: system_clock :: time_point m_start_time ; variable m_last_update_time std :: chrono :: system_clock :: time_point m_last_update_time ; variable m_last_remaining_update_time std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; variable m_remaining_time_message std :: string m_remaining_time_message ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#shapeworksoptimize","text":"More... #include Inherited by shapeworks::QOptimize","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types","text":"Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions","text":"Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions","text":"Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes","text":"Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#detailed-description","text":"class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-imagetype","text":"using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-vectortype","text":"using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-matrixtype","text":"using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ;","title":"using MatrixType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize","text":"Optimize () Constructor.","title":"function Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize_1","text":"virtual ~ Optimize () Destructor.","title":"function ~Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-run","text":"bool Run () Run the optimization.","title":"function Run"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-loadparameterfile","text":"bool LoadParameterFile ( std :: string filename ) Load a parameter file.","title":"function LoadParameterFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setupoptimize","text":"bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project.","title":"function SetUpOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setproject","text":"void SetProject ( std :: shared_ptr < Project > project ) Set the Project object.","title":"function SetProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallbackfunction","text":"inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration.","title":"function SetIterationCallbackFunction"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-abortoptimization","text":"void AbortOptimization () Abort optimization.","title":"function AbortOptimization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getaborted","text":"bool GetAborted () Return if the optimization was aborted.","title":"function GetAborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcutplanes","text":"void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes.","title":"function SetCutPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setverbosity","text":"void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5)","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomainspershape","text":"void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainspershape","text":"int GetDomainsPerShape () Return the number of domains per shape.","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomaintype","text":"void SetDomainType ( shapeworks :: DomainType type )","title":"function SetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomaintype","text":"shapeworks :: DomainType GetDomainType ()","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnumberofparticles","text":"void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain)","title":"function SetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumberofparticles","text":"std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settransformfile","text":"void SetTransformFile ( std :: string filename ) Set the transform file.","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettransformfile","text":"std :: string GetTransformFile () Get the transform file.","title":"function GetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprefixtransformfile","text":"void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details)","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprefixtransformfile","text":"std :: string GetPrefixTransformFile () Get the prefix transform file.","title":"function GetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputdir","text":"void SetOutputDir ( std :: string output_dir ) Set the output directory.","title":"function SetOutputDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputtransformfile","text":"void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file.","title":"function SetOutputTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputindividualtransformfiles","text":"void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written.","title":"function SetOutputIndividualTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemeshbasedattributes","text":"void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used.","title":"function SetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusemeshbasedattributes","text":"bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used.","title":"function GetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusexyz","text":"void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain.","title":"function SetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusenormals","text":"void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain.","title":"function SetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain.","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getattributesperdomain","text":"std :: vector < int > GetAttributesPerDomain () Get attributes per domain.","title":"function GetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdistributiondomainid","text":"void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details)","title":"function SetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdistributiondomainid","text":"int GetDistributionDomainID () Get the distribution domain ID.","title":"function GetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputcuttingplanefile","text":"void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file.","title":"function SetOutputCuttingPlaneFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusecuttingplanes","text":"void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes.","title":"function SetUseCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocessingmode","text":"void SetProcessingMode ( int mode ) Set processing mode (TODO: details)","title":"function SetProcessingMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitymode","text":"void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details)","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode.","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitystrength","text":"void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details)","title":"function SetAdaptivityStrength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settimeptspersubject","text":"void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details)","title":"function SetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettimeptspersubject","text":"int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details)","title":"function GetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterations","text":"void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations.","title":"function SetOptimizationIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterationscompleted","text":"void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details)","title":"function SetOptimizationIterationsCompleted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationspersplit","text":"void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split.","title":"function SetIterationsPerSplit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsininit","text":"void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization.","title":"function SetUseShapeStatisticsInInit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesinterval","text":"void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable)","title":"function SetProcrustesInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesscaling","text":"void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used.","title":"function SetProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesrotationtranslation","text":"void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used.","title":"function SetProcrustesRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrelativeweighting","text":"void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details)","title":"function SetRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialrelativeweighting","text":"void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details)","title":"function SetInitialRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setstartingregularization","text":"void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details)","title":"function SetStartingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setendingregularization","text":"void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details)","title":"function SetEndingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrecomputeregularizationinterval","text":"void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details)","title":"function SetRecomputeRegularizationInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsaveinitsplits","text":"void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not.","title":"function SetSaveInitSplits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcheckpointinginterval","text":"void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval.","title":"function SetCheckpointingInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setkeepcheckpoints","text":"void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable)","title":"function SetKeepCheckpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseregression","text":"void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details)","title":"function SetUseRegression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemixedeffects","text":"void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details)","title":"function SetUseMixedEffects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusedisentangledspatiotemporalssm","text":"void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method.","title":"function SetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusedisentangledspatiotemporalssm","text":"bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method.","title":"function GetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnormalangle","text":"void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details)","title":"function SetNormalAngle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setperformgoodbad","text":"void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details)","title":"function SetPerformGoodBad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setlogenergy","text":"void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details)","title":"function SetLogEnergy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images.","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addmesh","text":"void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfilenames","text":"void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details)","title":"function SetFilenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpointfiles","text":"void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details)","title":"function SetPointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialpoints","text":"void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumshapes","text":"int GetNumShapes () Get number of shapes.","title":"function GetNumShapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributescales","text":"void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details)","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes.","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparticleflags","text":"void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details)","title":"function SetParticleFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfixeddomains","text":"void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details)","title":"function SetFixedDomains"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryenabled","text":"void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings.","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryweight","text":"void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainflags","text":"const std :: vector < int > & GetDomainFlags ()","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfileoutputenabled","text":"void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled.","title":"function SetFileOutputEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusexyz","text":"std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape.","title":"function GetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusenormals","text":"std :: vector < bool > GetUseNormals () Return if Normals are used, per shape.","title":"function GetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnarrowband","text":"void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing.","title":"function SetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnarrowband","text":"double GetNarrowBand () Return the narrow band to be used.","title":"function GetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsafter","text":"void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over.","title":"function SetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getuseshapestatisticsafter","text":"int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over.","title":"function GetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printparaminfo","text":"void PrintParamInfo () Print parameter info to stdout.","title":"function PrintParamInfo"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getsampler","text":"inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler .","title":"function GetSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getparticlesystem","text":"MatrixContainer GetParticleSystem () Return the particle system as a matrix.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpythonfile","text":"void SetPythonFile ( std :: string filename ) Set the python file to run at startup.","title":"function SetPythonFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicsenabled","text":"void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled.","title":"function SetGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicscachesizemultiplier","text":"void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles","title":"function SetGeodesicsCacheSizeMultiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getvisualizer","text":"OptimizationVisualizer & GetVisualizer ()","title":"function GetVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setshowvisualizer","text":"void SetShowVisualizer ( bool show )","title":"function SetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getshowvisualizer","text":"bool GetShowVisualizer ()","title":"function GetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getmeshffcmode","text":"inline bool GetMeshFFCMode ()","title":"function GetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-transformpoint","text":"vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateprogress","text":"void UpdateProgress ()","title":"function UpdateProgress"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-set_particle_format","text":"inline void set_particle_format ( std :: string format )","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computetotaliterations","text":"void ComputeTotalIterations ()","title":"function ComputeTotalIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimizerstop","text":"void OptimizerStop ()","title":"function OptimizerStop"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readtransformfile","text":"void ReadTransformFile ()","title":"function ReadTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readprefixtransformfile","text":"void ReadPrefixTransformFile ( const std :: string & s )","title":"function ReadPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initializesampler","text":"void InitializeSampler ()","title":"function InitializeSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getminneighborhoodradius","text":"double GetMinNeighborhoodRadius ()","title":"function GetMinNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addsinglepoint","text":"void AddSinglePoint ()","title":"function AddSinglePoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initialize","text":"void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addadaptivity","text":"void AddAdaptivity ()","title":"function AddAdaptivity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-runoptimize","text":"void RunOptimize ()","title":"function RunOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computeenergyafteriteration","text":"void ComputeEnergyAfterIteration ()","title":"function ComputeEnergyAfterIteration"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcotansigma","text":"void SetCotanSigma ()","title":"function SetCotanSigma"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile","text":"void WriteTransformFile ( int iter = -1 ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile_1","text":"void WriteTransformFile ( std :: string iter_prefix ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles","text":"void WriteTransformFiles ( int iter = -1 ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles_1","text":"void WriteTransformFiles ( std :: string iter_prefix ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles","text":"void WritePointFiles ( int iter = -1 )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles_1","text":"void WritePointFiles ( std :: string iter_prefix )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures","text":"void WritePointFilesWithFeatures ( int iter = -1 )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures_1","text":"void WritePointFilesWithFeatures ( std :: string iter_prefix )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeenergyfiles","text":"void WriteEnergyFiles ()","title":"function WriteEnergyFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writesplitfiles","text":"void WriteSplitFiles ( std :: string name )","title":"function WriteSplitFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writecuttingplanepoints","text":"void WriteCuttingPlanePoints ( int iter = -1 )","title":"function WriteCuttingPlanePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeparameters","text":"void WriteParameters ( std :: string output_dir = \"\" )","title":"function WriteParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-reportbadparticles","text":"void ReportBadParticles ()","title":"function ReportBadParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparameters","text":"int SetParameters ()","title":"function SetParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writemodes","text":"void WriteModes ()","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printstartmessage","text":"void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const","title":"function PrintStartMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printdonemessage","text":"void PrintDoneMessage ( unsigned int vlevel = 0 ) const","title":"function PrintDoneMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateproject","text":"void UpdateProject ()","title":"function UpdateProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getcheckpointdir","text":"std :: string GetCheckpointDir ()","title":"function GetCheckpointDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_sampler","text":"std :: shared_ptr < Sampler > m_sampler ;","title":"variable m_sampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes","text":"ProcrustesRegistration :: Pointer m_procrustes ;","title":"variable m_procrustes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_good_bad","text":"std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ;","title":"variable m_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_verbosity_level","text":"unsigned int m_verbosity_level = 0 ;","title":"variable m_verbosity_level"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_local_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_local_points ;","title":"variable m_local_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_global_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_global_points ;","title":"variable m_global_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpoint_counter","text":"int m_checkpoint_counter = 0 ;","title":"variable m_checkpoint_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_counter","text":"int m_procrustes_counter = 0 ;","title":"variable m_procrustes_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_cutting_planes","text":"bool m_use_cutting_planes = false ;","title":"variable m_use_cutting_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimizing","text":"bool m_optimizing = false ;","title":"variable m_optimizing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_regression","text":"bool m_use_regression = false ;","title":"variable m_use_regression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_mixed_effects","text":"bool m_use_mixed_effects = false ;","title":"variable m_use_mixed_effects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_disentangled_ssm","text":"bool m_use_disentangled_ssm = false ;","title":"variable m_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domains_per_shape","text":"unsigned int m_domains_per_shape = 1 ;","title":"variable m_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_type","text":"shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ;","title":"variable m_domain_type"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_number_of_particles","text":"std :: vector < int > m_number_of_particles ;","title":"variable m_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_transform_file","text":"std :: string m_transform_file ;","title":"variable m_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_prefix_transform_file","text":"std :: string m_prefix_transform_file ;","title":"variable m_prefix_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_dir","text":"std :: string m_output_dir ;","title":"variable m_output_dir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_file","text":"std :: string m_output_transform_file ;","title":"variable m_output_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_files","text":"bool m_output_transform_files = false ;","title":"variable m_output_transform_files"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_based_attributes","text":"bool m_mesh_based_attributes = false ;","title":"variable m_mesh_based_attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_xyz","text":"std :: vector < bool > m_use_xyz ;","title":"variable m_use_xyz"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_normals","text":"std :: vector < bool > m_use_normals ;","title":"variable m_use_normals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_attributes_per_domain","text":"std :: vector < int > m_attributes_per_domain ;","title":"variable m_attributes_per_domain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_distribution_domain_id","text":"int m_distribution_domain_id = -1 ;","title":"variable m_distribution_domain_id"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_cutting_plane_file","text":"std :: string m_output_cutting_plane_file ;","title":"variable m_output_cutting_plane_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_processing_mode","text":"int m_processing_mode = 3 ;","title":"variable m_processing_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_mode","text":"int m_adaptivity_mode = 0 ;","title":"variable m_adaptivity_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_strength","text":"double m_adaptivity_strength = 0.0 ;","title":"variable m_adaptivity_strength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_ffc_mode","text":"bool m_mesh_ffc_mode = 0 ;","title":"variable m_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_timepts_per_subject","text":"unsigned int m_timepts_per_subject = 1 ;","title":"variable m_timepts_per_subject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations","text":"int m_optimization_iterations = 2000 ;","title":"variable m_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations_completed","text":"int m_optimization_iterations_completed = 0 ;","title":"variable m_optimization_iterations_completed"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iterations_per_split","text":"int m_iterations_per_split = 1000 ;","title":"variable m_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_in_init","text":"bool m_use_shape_statistics_in_init = false ;","title":"variable m_use_shape_statistics_in_init"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_interval","text":"unsigned int m_procrustes_interval = 3 ;","title":"variable m_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_scaling","text":"bool m_procrustes_scaling = true ;","title":"variable m_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_rotation_translation","text":"bool m_procrustes_rotation_translation = true ;","title":"variable m_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_relative_weighting","text":"double m_relative_weighting = 1.0 ;","title":"variable m_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_initial_relative_weighting","text":"double m_initial_relative_weighting = 0.05 ;","title":"variable m_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_starting_regularization","text":"double m_starting_regularization = 1000 ;","title":"variable m_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_ending_regularization","text":"double m_ending_regularization = 1.0 ;","title":"variable m_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_recompute_regularization_interval","text":"int m_recompute_regularization_interval = 1 ;","title":"variable m_recompute_regularization_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_save_init_splits","text":"bool m_save_init_splits = false ;","title":"variable m_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpointing_interval","text":"unsigned int m_checkpointing_interval = 50 ;","title":"variable m_checkpointing_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_keep_checkpoints","text":"int m_keep_checkpoints = 0 ;","title":"variable m_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cotan_sigma_factor","text":"double m_cotan_sigma_factor = 5.0 ;","title":"variable m_cotan_sigma_factor"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_particle_flags","text":"std :: vector < int > m_particle_flags ;","title":"variable m_particle_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_flags","text":"std :: vector < int > m_domain_flags ;","title":"variable m_domain_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band","text":"double m_narrow_band = 0.0 ;","title":"variable m_narrow_band"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band_set","text":"bool m_narrow_band_set = false ;","title":"variable m_narrow_band_set"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_fixed_domains_present","text":"bool m_fixed_domains_present = false ;","title":"variable m_fixed_domains_present"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_after","text":"int m_use_shape_statistics_after = -1 ;","title":"variable m_use_shape_statistics_after"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_python_filename","text":"std :: string m_python_filename ;","title":"variable m_python_filename"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesics_enabled","text":"bool m_geodesics_enabled = false ;","title":"variable m_geodesics_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesic_cache_size_multiplier","text":"size_t m_geodesic_cache_size_multiplier = 0 ;","title":"variable m_geodesic_cache_size_multiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spacing","text":"double m_spacing = 0 ;","title":"variable m_spacing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_filenames","text":"std :: vector < std :: string > m_filenames ;","title":"variable m_filenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_num_shapes","text":"int m_num_shapes = 0 ;","title":"variable m_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_a","text":"std :: vector < double > m_energy_a ;","title":"variable m_energy_a"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_b","text":"std :: vector < double > m_energy_b ;","title":"variable m_energy_b"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_energy","text":"std :: vector < double > m_total_energy ;","title":"variable m_total_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_log_energy","text":"bool m_log_energy = false ;","title":"variable m_log_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_str_energy","text":"std :: string m_str_energy ;","title":"variable m_str_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_bad_ids","text":"std :: vector < std :: vector < int > > m_bad_ids ;","title":"variable m_bad_ids"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_normal_angle","text":"double m_normal_angle = itk :: Math :: pi / 2.0 ;","title":"variable m_normal_angle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_perform_good_bad","text":"bool m_perform_good_bad = false ;","title":"variable m_perform_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cutting_planes_per_input","text":"std :: vector < int > m_cutting_planes_per_input ;","title":"variable m_cutting_planes_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spheres_per_input","text":"std :: vector < int > m_spheres_per_input ;","title":"variable m_spheres_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_file_output_enabled","text":"bool m_file_output_enabled = true ;","title":"variable m_file_output_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_aborted","text":"bool m_aborted = false ;","title":"variable m_aborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cut_planes","text":"std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ;","title":"variable m_cut_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_iterations","text":"int m_total_iterations = 0 ;","title":"variable m_total_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iteration_count","text":"int m_iteration_count = 0 ;","title":"variable m_iteration_count"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_split_number","text":"int m_split_number = 0 ;","title":"variable m_split_number"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-current_particle_iterations_","text":"int current_particle_iterations_ = 0 ;","title":"variable current_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-total_particle_iterations_","text":"int total_particle_iterations_ = 0 ;","title":"variable total_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-iteration_callback_","text":"std :: function < void ( void ) > iteration_callback_ ;","title":"variable iteration_callback_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-show_visualizer_","text":"bool show_visualizer_ = false ;","title":"variable show_visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-visualizer_","text":"shapeworks :: OptimizationVisualizer visualizer_ ;","title":"variable visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-particle_format_","text":"std :: string particle_format_ = \"particles\" ;","title":"variable particle_format_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-project_","text":"std :: shared_ptr < Project > project_ ;","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_start_time","text":"std :: chrono :: system_clock :: time_point m_start_time ;","title":"variable m_start_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_update_time","text":"std :: chrono :: system_clock :: time_point m_last_update_time ;","title":"variable m_last_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_remaining_update_time","text":"std :: chrono :: system_clock :: time_point m_last_remaining_update_time ;","title":"variable m_last_remaining_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_remaining_time_message","text":"std :: string m_remaining_time_message ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_remaining_time_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html","text":"shapeworks::OptimizeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#shapeworksoptimizecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html","text":"shapeworks::OptimizeParameterFile More... #include Public Functions Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object. Detailed Description class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object. Public Functions Documentation function OptimizeParameterFile OptimizeParameterFile () function load_parameter_file bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#shapeworksoptimizeparameterfile","text":"More... #include ","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions","text":"Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#detailed-description","text":"class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-optimizeparameterfile","text":"OptimizeParameterFile ()","title":"function OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-load_parameter_file","text":"bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-24 at 22:16:01 +0000","title":"function load_parameter_file"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html","text":"shapeworks::OptimizeParameters More... #include Public Functions Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format) Detailed Description class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters Public Functions Documentation function OptimizeParameters explicit OptimizeParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_optimize_output_prefix std :: string get_optimize_output_prefix () function set_optimize_output_prefix void set_optimize_output_prefix ( std :: string prefix ) function get_number_of_particles std :: vector < int > get_number_of_particles () function set_number_of_particles void set_number_of_particles ( std :: vector < int > number_of_particles ) function get_initial_relative_weighting double get_initial_relative_weighting () function set_initial_relative_weighting void set_initial_relative_weighting ( double value ) function get_relative_weighting double get_relative_weighting () function set_relative_weighting void set_relative_weighting ( double value ) function get_starting_regularization double get_starting_regularization () function set_starting_regularization void set_starting_regularization ( double value ) function get_ending_regularization double get_ending_regularization () function set_ending_regularization void set_ending_regularization ( double value ) function get_iterations_per_split int get_iterations_per_split () function set_iterations_per_split void set_iterations_per_split ( int value ) function get_optimization_iterations int get_optimization_iterations () function set_optimization_iterations void set_optimization_iterations ( int value ) function get_use_geodesic_distance bool get_use_geodesic_distance () function set_use_geodesic_distance void set_use_geodesic_distance ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_use_normals std :: vector < bool > get_use_normals () function set_use_normals void set_use_normals ( std :: vector < bool > use_normals ) function get_normals_strength double get_normals_strength () function set_normals_strength void set_normals_strength ( double value ) function get_use_disentangled_ssm bool get_use_disentangled_ssm () function set_use_disentangled_ssm void set_use_disentangled_ssm ( bool value ) function get_use_procrustes bool get_use_procrustes () function set_use_procrustes void set_use_procrustes ( bool value ) function get_use_procrustes_scaling bool get_use_procrustes_scaling () function set_use_procrustes_scaling void set_use_procrustes_scaling ( bool value ) function get_use_procrustes_rotation_translation bool get_use_procrustes_rotation_translation () function set_use_procrustes_rotation_translation void set_use_procrustes_rotation_translation ( bool value ) function get_procrustes_interval int get_procrustes_interval () function set_procrustes_interval void set_procrustes_interval ( int value ) function get_use_multiscale bool get_use_multiscale () function set_use_multiscale void set_use_multiscale ( bool value ) function get_multiscale_particles int get_multiscale_particles () function set_multiscale_particles void set_multiscale_particles ( int value ) function get_narrow_band double get_narrow_band () function set_narrow_band void set_narrow_band ( double value ) function get_verbosity int get_verbosity () function set_verbosity void set_verbosity ( int value ) function get_mesh_ffc_mode bool get_mesh_ffc_mode () function set_mesh_ffc_mode void set_mesh_ffc_mode ( bool value ) function get_use_landmarks bool get_use_landmarks () function set_use_landmarks void set_use_landmarks ( bool value ) function get_use_fixed_subjects bool get_use_fixed_subjects () function set_use_fixed_subjects void set_use_fixed_subjects ( bool value ) function get_fixed_subjects_column std :: string get_fixed_subjects_column () function set_fixed_subject_column void set_fixed_subject_column ( std :: string column ) function get_fixed_subjects_choice std :: string get_fixed_subjects_choice () function set_fixed_subjects_choice void set_fixed_subjects_choice ( std :: string choice ) function set_abort_load void set_abort_load ( bool value ) function set_load_callback void set_load_callback ( const std :: function < void ( int ) > & f ) function set_up_optimize bool set_up_optimize ( Optimize * optimize ) function is_subject_fixed bool is_subject_fixed ( std :: shared_ptr < Subject > subject ) function get_checkpoint_interval int get_checkpoint_interval () function set_checkpoint_interval void set_checkpoint_interval ( int iterations ) function get_save_init_splits bool get_save_init_splits () function set_save_init_splits void set_save_init_splits ( bool enabled ) function get_keep_checkpoints bool get_keep_checkpoints () function set_keep_checkpoints void set_keep_checkpoints ( bool enabled ) function get_field_attributes std :: vector < std :: string > get_field_attributes () function set_field_attributes void set_field_attributes ( std :: vector < std :: string > attributes ) function get_field_attribute_weights std :: vector < double > get_field_attribute_weights () function set_field_attribute_weights void set_field_attribute_weights ( std :: vector < double > weights ) function get_use_geodesics_to_landmarks bool get_use_geodesics_to_landmarks () function set_use_geodesics_to_landmarks void set_use_geodesics_to_landmarks ( bool value ) function get_geodesic_to_landmarks_weight double get_geodesic_to_landmarks_weight () function set_geodesic_to_landmarks_weight void set_geodesic_to_landmarks_weight ( double value ) function get_particle_format std :: string get_particle_format () function set_particle_format void set_particle_format ( std :: string format ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#shapeworksoptimizeparameters","text":"More... #include ","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions","text":"Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#detailed-description","text":"class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-optimizeparameters","text":"explicit OptimizeParameters ( ProjectHandle project )","title":"function OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimize_output_prefix","text":"std :: string get_optimize_output_prefix ()","title":"function get_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimize_output_prefix","text":"void set_optimize_output_prefix ( std :: string prefix )","title":"function set_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_number_of_particles","text":"std :: vector < int > get_number_of_particles ()","title":"function get_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_number_of_particles","text":"void set_number_of_particles ( std :: vector < int > number_of_particles )","title":"function set_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_initial_relative_weighting","text":"double get_initial_relative_weighting ()","title":"function get_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_initial_relative_weighting","text":"void set_initial_relative_weighting ( double value )","title":"function set_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_relative_weighting","text":"double get_relative_weighting ()","title":"function get_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_relative_weighting","text":"void set_relative_weighting ( double value )","title":"function set_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_starting_regularization","text":"double get_starting_regularization ()","title":"function get_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_starting_regularization","text":"void set_starting_regularization ( double value )","title":"function set_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_ending_regularization","text":"double get_ending_regularization ()","title":"function get_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_ending_regularization","text":"void set_ending_regularization ( double value )","title":"function set_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_iterations_per_split","text":"int get_iterations_per_split ()","title":"function get_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_iterations_per_split","text":"void set_iterations_per_split ( int value )","title":"function set_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimization_iterations","text":"int get_optimization_iterations ()","title":"function get_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimization_iterations","text":"void set_optimization_iterations ( int value )","title":"function set_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesic_distance","text":"bool get_use_geodesic_distance ()","title":"function get_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesic_distance","text":"void set_use_geodesic_distance ( bool value )","title":"function set_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_normals","text":"std :: vector < bool > get_use_normals ()","title":"function get_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_normals","text":"void set_use_normals ( std :: vector < bool > use_normals )","title":"function set_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_normals_strength","text":"double get_normals_strength ()","title":"function get_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_normals_strength","text":"void set_normals_strength ( double value )","title":"function set_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_disentangled_ssm","text":"bool get_use_disentangled_ssm ()","title":"function get_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_disentangled_ssm","text":"void set_use_disentangled_ssm ( bool value )","title":"function set_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes","text":"bool get_use_procrustes ()","title":"function get_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes","text":"void set_use_procrustes ( bool value )","title":"function set_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_scaling","text":"bool get_use_procrustes_scaling ()","title":"function get_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_scaling","text":"void set_use_procrustes_scaling ( bool value )","title":"function set_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_rotation_translation","text":"bool get_use_procrustes_rotation_translation ()","title":"function get_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_rotation_translation","text":"void set_use_procrustes_rotation_translation ( bool value )","title":"function set_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_procrustes_interval","text":"int get_procrustes_interval ()","title":"function get_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_procrustes_interval","text":"void set_procrustes_interval ( int value )","title":"function set_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_multiscale","text":"bool get_use_multiscale ()","title":"function get_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_multiscale","text":"void set_use_multiscale ( bool value )","title":"function set_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_multiscale_particles","text":"int get_multiscale_particles ()","title":"function get_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_multiscale_particles","text":"void set_multiscale_particles ( int value )","title":"function set_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_narrow_band","text":"double get_narrow_band ()","title":"function get_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_narrow_band","text":"void set_narrow_band ( double value )","title":"function set_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_verbosity","text":"int get_verbosity ()","title":"function get_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_verbosity","text":"void set_verbosity ( int value )","title":"function set_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_mesh_ffc_mode","text":"bool get_mesh_ffc_mode ()","title":"function get_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_mesh_ffc_mode","text":"void set_mesh_ffc_mode ( bool value )","title":"function set_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_landmarks","text":"void set_use_landmarks ( bool value )","title":"function set_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_fixed_subjects","text":"bool get_use_fixed_subjects ()","title":"function get_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_fixed_subjects","text":"void set_use_fixed_subjects ( bool value )","title":"function set_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_column","text":"std :: string get_fixed_subjects_column ()","title":"function get_fixed_subjects_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subject_column","text":"void set_fixed_subject_column ( std :: string column )","title":"function set_fixed_subject_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_choice","text":"std :: string get_fixed_subjects_choice ()","title":"function get_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subjects_choice","text":"void set_fixed_subjects_choice ( std :: string choice )","title":"function set_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_abort_load","text":"void set_abort_load ( bool value )","title":"function set_abort_load"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_load_callback","text":"void set_load_callback ( const std :: function < void ( int ) > & f )","title":"function set_load_callback"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_up_optimize","text":"bool set_up_optimize ( Optimize * optimize )","title":"function set_up_optimize"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-is_subject_fixed","text":"bool is_subject_fixed ( std :: shared_ptr < Subject > subject )","title":"function is_subject_fixed"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_checkpoint_interval","text":"int get_checkpoint_interval ()","title":"function get_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_checkpoint_interval","text":"void set_checkpoint_interval ( int iterations )","title":"function set_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_save_init_splits","text":"bool get_save_init_splits ()","title":"function get_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_save_init_splits","text":"void set_save_init_splits ( bool enabled )","title":"function set_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_keep_checkpoints","text":"bool get_keep_checkpoints ()","title":"function get_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_keep_checkpoints","text":"void set_keep_checkpoints ( bool enabled )","title":"function set_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attributes","text":"std :: vector < std :: string > get_field_attributes ()","title":"function get_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attributes","text":"void set_field_attributes ( std :: vector < std :: string > attributes )","title":"function set_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attribute_weights","text":"std :: vector < double > get_field_attribute_weights ()","title":"function get_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attribute_weights","text":"void set_field_attribute_weights ( std :: vector < double > weights )","title":"function set_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesics_to_landmarks","text":"bool get_use_geodesics_to_landmarks ()","title":"function get_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesics_to_landmarks","text":"void set_use_geodesics_to_landmarks ( bool value )","title":"function set_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_to_landmarks_weight","text":"double get_geodesic_to_landmarks_weight ()","title":"function get_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_to_landmarks_weight","text":"void set_geodesic_to_landmarks_weight ( double value )","title":"function set_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_particle_format","text":"std :: string get_particle_format ()","title":"function get_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_particle_format","text":"void set_particle_format ( std :: string format ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html","text":"shapeworks::OptimizeTool Inherits from QWidget Public Slots Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs () Public Signals Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string ) Public Functions Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_run_optimize_button_clicked void on_run_optimize_button_clicked () Run optimize tool. slot on_restoreDefaults_clicked void on_restoreDefaults_clicked () slot handle_optimize_complete void handle_optimize_complete () slot handle_optimize_failed void handle_optimize_failed () slot handle_progress void handle_progress ( int val , QString message ) slot handle_error void handle_error ( QString ) slot handle_warning void handle_warning ( QString ) slot handle_message void handle_message ( QString ) slot update_ui_elements void update_ui_elements () slot validate_inputs bool validate_inputs () Public Signals Documentation signal optimize_start void optimize_start () signal optimize_complete void optimize_complete () signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function OptimizeTool OptimizeTool ( Preferences & prefs , Telemetry & telemetry ) function ~OptimizeTool ~ OptimizeTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the project function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function enable_actions void enable_actions () Enable action buttons. function disable_actions void disable_actions () Disable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#shapeworksoptimizetool","text":"Inherits from QWidget","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots","text":"Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals","text":"Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions","text":"Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_run_optimize_button_clicked","text":"void on_run_optimize_button_clicked () Run optimize tool.","title":"slot on_run_optimize_button_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_restoredefaults_clicked","text":"void on_restoreDefaults_clicked ()","title":"slot on_restoreDefaults_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_failed","text":"void handle_optimize_failed ()","title":"slot handle_optimize_failed"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_progress","text":"void handle_progress ( int val , QString message )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_error","text":"void handle_error ( QString )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_warning","text":"void handle_warning ( QString )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_message","text":"void handle_message ( QString )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-update_ui_elements","text":"void update_ui_elements ()","title":"slot update_ui_elements"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-validate_inputs","text":"bool validate_inputs ()","title":"slot validate_inputs"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_start","text":"void optimize_start ()","title":"signal optimize_start"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_complete","text":"void optimize_complete ()","title":"signal optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool","text":"OptimizeTool ( Preferences & prefs , Telemetry & telemetry )","title":"function OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool_1","text":"~ OptimizeTool ()","title":"function ~OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the project","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html","text":"shapeworks::PaintWidget Inherits from vtkAbstractWidget Protected Types Name enum @5 Public Functions Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b) Protected Functions Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w) Protected Attributes Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_ Protected Types Documentation enum @5 Enumerator Value Description Start Paint Erase Public Functions Documentation function New static PaintWidget * New () function vtkTypeMacro vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( PointPlacer , vtkPointPlacer * ) function vtkGetMacro vtkGetMacro ( PointPlacer , vtkPointPlacer * ) function vtkSetMacro vtkSetMacro ( Renderer , vtkRenderer * ) function vtkGetMacro vtkGetMacro ( Renderer , vtkRenderer * ) function set_viewer void set_viewer ( Viewer * viewer ) function SetEnabled virtual void SetEnabled ( int ) function SetRepresentation inline void SetRepresentation ( vtkContourRepresentation * r ) function CreateDefaultRepresentation void CreateDefaultRepresentation () function update_position void update_position () function Initialize virtual void Initialize ( vtkPolyData * poly , int state = 1 ) function Initialize inline virtual void Initialize () function set_brush_size void set_brush_size ( double size ) function get_brush_size double get_brush_size () function set_brush_color void set_brush_color ( float r , float g , float b ) Protected Functions Documentation function PaintWidget PaintWidget () function ~PaintWidget ~ PaintWidget () function use_point_placer bool use_point_placer ( double displayPos [ 2 ], int newState ) function set_cursor void set_cursor ( int requestedShape ) function StartPaintAction static void StartPaintAction ( vtkAbstractWidget * w ) function EndPaintAction static void EndPaintAction ( vtkAbstractWidget * w ) function StartEraseAction static void StartEraseAction ( vtkAbstractWidget * w ) function EndEraseAction static void EndEraseAction ( vtkAbstractWidget * w ) function MoveAction static void MoveAction ( vtkAbstractWidget * w ) function LeaveAction static void LeaveAction ( vtkAbstractWidget * w ) function KeyPressAction static void KeyPressAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable WidgetState int WidgetState ; variable PointPlacer vtkPointPlacer * PointPlacer ; variable Renderer vtkRenderer * Renderer ; variable sphere_cursor_ StudioSphereRepresentation * sphere_cursor_ ; variable mouse_in_window_ bool mouse_in_window_ ; variable viewer_ Viewer * viewer_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#shapeworkspaintwidget","text":"Inherits from vtkAbstractWidget","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types","text":"Name enum @5","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions","text":"Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions","text":"Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes","text":"Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#enum-5","text":"Enumerator Value Description Start Paint Erase","title":"enum @5"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-new","text":"static PaintWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtktypemacro","text":"vtkTypeMacro ( PaintWidget , vtkAbstractWidget )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro","text":"vtkSetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro","text":"vtkGetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro_1","text":"vtkSetMacro ( Renderer , vtkRenderer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Renderer , vtkRenderer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_viewer","text":"void set_viewer ( Viewer * viewer )","title":"function set_viewer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setenabled","text":"virtual void SetEnabled ( int )","title":"function SetEnabled"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setrepresentation","text":"inline void SetRepresentation ( vtkContourRepresentation * r )","title":"function SetRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-createdefaultrepresentation","text":"void CreateDefaultRepresentation ()","title":"function CreateDefaultRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-update_position","text":"void update_position ()","title":"function update_position"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize","text":"virtual void Initialize ( vtkPolyData * poly , int state = 1 )","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize_1","text":"inline virtual void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_size","text":"void set_brush_size ( double size )","title":"function set_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-get_brush_size","text":"double get_brush_size ()","title":"function get_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_color","text":"void set_brush_color ( float r , float g , float b )","title":"function set_brush_color"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget","text":"PaintWidget ()","title":"function PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget_1","text":"~ PaintWidget ()","title":"function ~PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-use_point_placer","text":"bool use_point_placer ( double displayPos [ 2 ], int newState )","title":"function use_point_placer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_cursor","text":"void set_cursor ( int requestedShape )","title":"function set_cursor"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-startpaintaction","text":"static void StartPaintAction ( vtkAbstractWidget * w )","title":"function StartPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-endpaintaction","text":"static void EndPaintAction ( vtkAbstractWidget * w )","title":"function EndPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-starteraseaction","text":"static void StartEraseAction ( vtkAbstractWidget * w )","title":"function StartEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-enderaseaction","text":"static void EndEraseAction ( vtkAbstractWidget * w )","title":"function EndEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-moveaction","text":"static void MoveAction ( vtkAbstractWidget * w )","title":"function MoveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-leaveaction","text":"static void LeaveAction ( vtkAbstractWidget * w )","title":"function LeaveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-keypressaction","text":"static void KeyPressAction ( vtkAbstractWidget * w )","title":"function KeyPressAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-widgetstate","text":"int WidgetState ;","title":"variable WidgetState"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-pointplacer","text":"vtkPointPlacer * PointPlacer ;","title":"variable PointPlacer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-renderer","text":"vtkRenderer * Renderer ;","title":"variable Renderer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-sphere_cursor_","text":"StudioSphereRepresentation * sphere_cursor_ ;","title":"variable sphere_cursor_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-mouse_in_window_","text":"bool mouse_in_window_ ;","title":"variable mouse_in_window_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-viewer_","text":"Viewer * viewer_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable viewer_"},{"location":"api/Classes/classshapeworks_1_1Parameters.html","text":"shapeworks::Parameters Parameter settings. More... #include Public Functions Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank Public Attributes Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS Detailed Description class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools Public Functions Documentation function Parameters Parameters () default constructor function Parameters explicit Parameters ( StringMap map ) construct from map function get Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist function key_exists bool key_exists ( std :: string key ) return if a key exists or not function set void set ( std :: string key , Variant value ) set a parameter based on a key function remove_entry void remove_entry ( std :: string key ) remove an entry function set_map void set_map ( StringMap map ) set underlying map function get_map StringMap get_map () const get underlying map function reset_parameters void reset_parameters () reset parameters to blank Public Attributes Documentation variable ANALYSIS_PARAMS static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; variable GROOM_PARAMS static constexpr const char * GROOM_PARAMS = \"groom\" ; variable OPTIMIZE_PARAMS static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; variable STUDIO_PARAMS static constexpr const char * STUDIO_PARAMS = \"studio\" ; variable PROJECT_PARAMS static constexpr const char * PROJECT_PARAMS = \"project\" ; variable DEEPSSM_PARAMS static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#shapeworksparameters","text":"Parameter settings. More... #include ","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions","text":"Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes","text":"Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#detailed-description","text":"class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters","text":"Parameters () default constructor","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters_1","text":"explicit Parameters ( StringMap map ) construct from map","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get","text":"Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist","title":"function get"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-key_exists","text":"bool key_exists ( std :: string key ) return if a key exists or not","title":"function key_exists"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set","text":"void set ( std :: string key , Variant value ) set a parameter based on a key","title":"function set"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-remove_entry","text":"void remove_entry ( std :: string key ) remove an entry","title":"function remove_entry"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set_map","text":"void set_map ( StringMap map ) set underlying map","title":"function set_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get_map","text":"StringMap get_map () const get underlying map","title":"function get_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-reset_parameters","text":"void reset_parameters () reset parameters to blank","title":"function reset_parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-analysis_params","text":"static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ;","title":"variable ANALYSIS_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-groom_params","text":"static constexpr const char * GROOM_PARAMS = \"groom\" ;","title":"variable GROOM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-optimize_params","text":"static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ;","title":"variable OPTIMIZE_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-studio_params","text":"static constexpr const char * STUDIO_PARAMS = \"studio\" ;","title":"variable STUDIO_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-project_params","text":"static constexpr const char * PROJECT_PARAMS = \"project\" ;","title":"variable PROJECT_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-deepssm_params","text":"static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable DEEPSSM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html","text":"shapeworks::ParticleArea Public Functions Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle Public Functions Documentation function assign_vertex_particles static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance function assign_vertex_colors static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids function assign_vertex_areas static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids function colors_from_lut static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors function compute_particle_triangle_areas static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#shapeworksparticlearea","text":"","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions","text":"Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_particles","text":"static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance","title":"function assign_vertex_particles"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_colors","text":"static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids","title":"function assign_vertex_colors"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_areas","text":"static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids","title":"function assign_vertex_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-colors_from_lut","text":"static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors","title":"function colors_from_lut"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-compute_particle_triangle_areas","text":"static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-24 at 22:16:01 +0000","title":"function compute_particle_triangle_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html","text":"shapeworks::ParticleAreaJob Inherits from shapeworks::Job , QObject Public Functions Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function ParticleAreaJob ParticleAreaJob ( QSharedPointer < Session > session ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_mean_areas inline const Eigen :: VectorXf & get_mean_areas () const function get_stddev_areas inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#shapeworksparticleareajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions","text":"Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-particleareajob","text":"ParticleAreaJob ( QSharedPointer < Session > session )","title":"function ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-name","text":"inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_mean_areas","text":"inline const Eigen :: VectorXf & get_mean_areas () const","title":"function get_mean_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_stddev_areas","text":"inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_stddev_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html","text":"shapeworks::ParticleAreaPanel Inherits from QWidget Public Slots Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete () Public Signals Name void update_view () Public Functions Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const Public Slots Documentation slot run_clicked void run_clicked () slot show_particle_area_clicked void show_particle_area_clicked () slot display_option_changed void display_option_changed () slot handle_job_progress void handle_job_progress ( int progress ) slot handle_job_complete void handle_job_complete () Public Signals Documentation signal update_view void update_view () Public Functions Documentation function ParticleAreaPanel ParticleAreaPanel ( QWidget * parent = 0 ) function ~ParticleAreaPanel ~ ParticleAreaPanel () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function reset void reset () function get_display_particle_area bool get_display_particle_area () const function get_computed_values Eigen :: VectorXf get_computed_values () const function get_computed_value_name std :: string get_computed_value_name () const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#shapeworksparticleareapanel","text":"Inherits from QWidget","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots","text":"Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals","text":"Name void update_view ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions","text":"Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-show_particle_area_clicked","text":"void show_particle_area_clicked ()","title":"slot show_particle_area_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-display_option_changed","text":"void display_option_changed ()","title":"slot display_option_changed"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_progress","text":"void handle_job_progress ( int progress )","title":"slot handle_job_progress"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_complete","text":"void handle_job_complete ()","title":"slot handle_job_complete"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel","text":"ParticleAreaPanel ( QWidget * parent = 0 )","title":"function ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel_1","text":"~ ParticleAreaPanel ()","title":"function ~ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_display_particle_area","text":"bool get_display_particle_area () const","title":"function get_display_particle_area"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_values","text":"Eigen :: VectorXf get_computed_values () const","title":"function get_computed_values"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_value_name","text":"std :: string get_computed_value_name () const Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_computed_value_name"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html","text":"shapeworks::ParticleColors Supplies particle colors. More... #include Inherits from QObject Public Types Name enum ParticleColorsType Public Functions Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct () Detailed Description class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles Public Types Documentation enum ParticleColorsType Enumerator Value Description Distinct 0 Original 1 Public Functions Documentation function Q_ENUM Q_ENUM ( ParticleColorsType ) function construct_distinct static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#shapeworksparticlecolors","text":"Supplies particle colors. More... #include Inherits from QObject","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types","text":"Name enum ParticleColorsType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions","text":"Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#detailed-description","text":"class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#enum-particlecolorstype","text":"Enumerator Value Description Distinct 0 Original 1","title":"enum ParticleColorsType"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-q_enum","text":"Q_ENUM ( ParticleColorsType )","title":"function Q_ENUM"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-construct_distinct","text":"static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-24 at 22:16:01 +0000","title":"function construct_distinct"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html","text":"shapeworks::ParticleDomain Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain Public Types Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation typedef Pointer typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ; using PointType using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations. using GradNType using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ; Public Functions Documentation function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleGradientAtPoint virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint function SampleNormalAtPoint virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint function Distance inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function GetCurvature virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius. function GetValidLocationNear virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages function DeletePartialDerivativeImages virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages function UpdateZeroCrossingPoint virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint function IsDomainFixed inline bool IsDomainFixed () const function GetDomainType virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType function GetConstraints inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const function GetPositionAfterSplit inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit function SetDomainID inline void SetDomainID ( int id ) function SetDomainName inline void SetDomainName ( std :: string name ) Protected Functions Documentation function ParticleDomain inline ParticleDomain () function ~ParticleDomain inline virtual ~ ParticleDomain () Protected Attributes Documentation variable m_FixedDomain bool m_FixedDomain { true }; variable m_DomainID int m_DomainID { -1 }; variable m_DomainName std :: string m_DomainName ; variable constraints std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#shapeworksparticledomain","text":"Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types","text":"Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions","text":"Name ParticleDomain () virtual ~ParticleDomain ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes","text":"Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-pointtype","text":"using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations.","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-gradntype","text":"using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectordoubletype","text":"using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ;","title":"using VectorDoubleType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectorfloattype","text":"using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ;","title":"using VectorFloatType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-invalidateparticleposition","text":"inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradientatpoint","text":"virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplenormalatpoint","text":"virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-distance","text":"inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getcurvature","text":"virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacemeancurvature","text":"virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacestddevcurvature","text":"virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getlowerbound","text":"virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getupperbound","text":"virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getzerocrossingpoint","text":"virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacearea","text":"virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getvalidlocationnear","text":"virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deleteimages","text":"virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deletepartialderivativeimages","text":"virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updatezerocrossingpoint","text":"virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-isdomainfixed","text":"inline bool IsDomainFixed () const","title":"function IsDomainFixed"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getdomaintype","text":"virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getconstraints","text":"inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const","title":"function GetConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getpositionaftersplit","text":"inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainid","text":"inline void SetDomainID ( int id )","title":"function SetDomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainname","text":"inline void SetDomainName ( std :: string name )","title":"function SetDomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain","text":"inline ParticleDomain ()","title":"function ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain_1","text":"inline virtual ~ ParticleDomain ()","title":"function ~ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_fixeddomain","text":"bool m_FixedDomain { true };","title":"variable m_FixedDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainid","text":"int m_DomainID { -1 };","title":"variable m_DomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainname","text":"std :: string m_DomainName ;","title":"variable m_DomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-constraints","text":"std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable constraints"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html","text":"shapeworks::ParticleEvent Inherits from itk::EventObject Public Types Name typedef ParticleEvent Self Public Functions Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const Public Types Documentation typedef Self typedef ParticleEvent shapeworks :: ParticleEvent :: Self ; Public Functions Documentation function ParticleEvent inline ParticleEvent () function ~ParticleEvent inline virtual ~ ParticleEvent () function ParticleEvent inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator= function operator= inline const ParticleEvent & operator = ( const ParticleEvent & v ) function GetEventName inline virtual const char * GetEventName () const Standard ITK event members. function CheckEvent inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const function MakeObject inline :: itk :: EventObject * MakeObject () const function SetPositionIndex inline void SetPositionIndex ( int i ) Get/Set the index value. function GetPositionIndex inline int GetPositionIndex () const function SetDomainIndex inline void SetDomainIndex ( int i ) Get/Set the Domain index value. function GetDomainIndex inline int GetDomainIndex () const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#shapeworksparticleevent","text":"Inherits from itk::EventObject","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types","text":"Name typedef ParticleEvent Self","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions","text":"Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#typedef-self","text":"typedef ParticleEvent shapeworks :: ParticleEvent :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent","text":"inline ParticleEvent ()","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_1","text":"inline virtual ~ ParticleEvent ()","title":"function ~ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_2","text":"inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator=","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-operator","text":"inline const ParticleEvent & operator = ( const ParticleEvent & v )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-geteventname","text":"inline virtual const char * GetEventName () const Standard ITK event members.","title":"function GetEventName"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-checkevent","text":"inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const","title":"function CheckEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-makeobject","text":"inline :: itk :: EventObject * MakeObject () const","title":"function MakeObject"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setpositionindex","text":"inline void SetPositionIndex ( int i ) Get/Set the index value.","title":"function SetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getpositionindex","text":"inline int GetPositionIndex () const","title":"function GetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setdomainindex","text":"inline void SetDomainIndex ( int i ) Get/Set the Domain index value.","title":"function SetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getdomainindex","text":"inline int GetDomainIndex () const Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html","text":"shapeworks::ParticleGaussianModeWriter More... Inherits from itk::DataObject Public Types Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const Protected Functions Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & ) Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName Detailed Description template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ; Public Types Documentation typedef Self typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ; typedef Superclass typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes. typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ; typedef PointType typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types. typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Update void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. function GetNumberOfModes inline int GetNumberOfModes () const function SetNumberOfModes inline void SetNumberOfModes ( int b ) function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function SetFileName inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix. function SetFileName inline void SetFileName ( const char * s ) function GetFileName inline const std :: string & GetFileName () const Protected Functions Documentation function ParticleGaussianModeWriter inline ParticleGaussianModeWriter () function ~ParticleGaussianModeWriter inline virtual ~ ParticleGaussianModeWriter () function operator= void operator = ( const ParticleGaussianModeWriter & ) function ParticleGaussianModeWriter ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ) Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_NumberOfModes int m_NumberOfModes ; variable m_FileName std :: string m_FileName ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#shapeworksparticlegaussianmodewriter","text":"More... Inherits from itk::DataObject","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types","text":"Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions","text":"Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions","text":"Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#detailed-description","text":"template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-self","text":"typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGaussianModeWriter , DataObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-update","text":"void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix.","title":"function Update"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getnumberofmodes","text":"inline int GetNumberOfModes () const","title":"function GetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setnumberofmodes","text":"inline void SetNumberOfModes ( int b )","title":"function SetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename","text":"inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix.","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename_1","text":"inline void SetFileName ( const char * s )","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter","text":"inline ParticleGaussianModeWriter ()","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_1","text":"inline virtual ~ ParticleGaussianModeWriter ()","title":"function ~ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-operator","text":"void operator = ( const ParticleGaussianModeWriter & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_2","text":"ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & )","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_numberofmodes","text":"int m_NumberOfModes ;","title":"variable m_NumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_filename","text":"std :: string m_FileName ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_FileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html","text":"shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. #include Public Types Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType Public Functions Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache) Public Types Documentation using MeanCurvatureCacheType using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; Public Functions Documentation function set_domains_per_shape inline void set_domains_per_shape ( int i ) function set_criterion_angle inline void set_criterion_angle ( double a ) function run_assessment std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#shapeworksparticlegoodbadassessment","text":"Performs good/bad points assessment and reports the bad positions of the particle system. #include ","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types","text":"Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions","text":"Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#using-meancurvaturecachetype","text":"using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_domains_per_shape","text":"inline void set_domains_per_shape ( int i )","title":"function set_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_criterion_angle","text":"inline void set_criterion_angle ( double a )","title":"function set_criterion_angle"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-run_assessment","text":"std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function run_assessment"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html","text":"shapeworks::ParticleNeighborhood More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood Public Types Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called. Public Types Documentation typedef Self typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations. using DomainType using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type. typedef PointVectorType typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function itkSetObjectMacro itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called. function itkGetConstObjectMacro itkGetConstObjectMacro ( PointContainer , PointContainerType ) function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points. function FindNeighborhoodPoints inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const function SetDomain inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures. function GetDomain inline DomainType :: Pointer GetDomain () const function AddPosition inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition function RemovePosition inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition Protected Functions Documentation function ParticleNeighborhood inline ParticleNeighborhood () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleNeighborhood inline virtual ~ ParticleNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#shapeworksparticleneighborhood","text":"More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types","text":"Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions","text":"Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-self","text":"typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointvectortype","text":"typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints.","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called.","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkgetconstobjectmacro","text":"itkGetConstObjectMacro ( PointContainer , PointContainerType )","title":"function itkGetConstObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_1","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_2","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_3","text":"inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setdomain","text":"inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-getdomain","text":"inline DomainType :: Pointer GetDomain () const","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-addposition","text":"inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setposition","text":"inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-removeposition","text":"inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood","text":"inline ParticleNeighborhood ()","title":"function ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood_1","text":"inline virtual ~ ParticleNeighborhood ()","title":"function ~ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html","text":"shapeworks::ParticleNormalEvaluation Public Functions Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions. Public Functions Documentation function evaluate_particle_normals static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ) function threshold_particle_normals static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ) function compute_particle_normals static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#shapeworksparticlenormalevaluation","text":"","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions","text":"Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-evaluate_particle_normals","text":"static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals )","title":"function evaluate_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-threshold_particle_normals","text":"static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees )","title":"function threshold_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-compute_particle_normals","text":"static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-24 at 22:16:01 +0000","title":"function compute_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html","text":"shapeworks::ParticleNormalEvaluationJob Inherits from shapeworks::Job , QObject Public Signals Name void result_ready (std::vector< bool > good_bad) Public Functions Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal result_ready void result_ready ( std :: vector < bool > good_bad ) Public Functions Documentation function ParticleNormalEvaluationJob ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_good_bad std :: vector < bool > get_good_bad () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#shapeworksparticlenormalevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals","text":"Name void result_ready (std::vector< bool > good_bad)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions","text":"Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#signal-result_ready","text":"void result_ready ( std :: vector < bool > good_bad )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-particlenormalevaluationjob","text":"ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees )","title":"function ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-get_good_bad","text":"std :: vector < bool > get_good_bad () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_good_bad"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html","text":"shapeworks::ParticleRegionDomain Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T > Public Types Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType Public Functions Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs typedef PointType typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations. Public Functions Documentation function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries. function GetUpperBound inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetLowerBound inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function SetUpperBound inline void SetUpperBound ( const PointType _UpperBound ) function SetLowerBound inline void SetLowerBound ( const PointType _LowerBound ) function SetRegion inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) Protected Functions Documentation function ParticleRegionDomain inline ParticleRegionDomain () function ~ParticleRegionDomain inline virtual ~ ParticleRegionDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function IsInsideBuffer inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#shapeworksparticleregiondomain","text":"Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T >","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types","text":"Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions","text":"Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#using-pointer","text":"using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType _UpperBound )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType _LowerBound )","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setregion","text":"inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound )","title":"function SetRegion"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain","text":"inline ParticleRegionDomain ()","title":"function ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain_1","text":"inline virtual ~ ParticleRegionDomain ()","title":"function ~ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-isinsidebuffer","text":"inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-24 at 22:16:01 +0000","title":"function IsInsideBuffer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html","text":"shapeworks::ParticleRegionNeighborhood More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood Protected Classes Name struct IteratorNodePair Public Types Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType Protected Types Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Additional inherited members Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Detailed Description class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef Self typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ; typedef PointTreeType typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location. Protected Types Documentation typedef IteratorMapType typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function SetDomain virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree. function itkSetMacro itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree. function itkGetMacro itkGetMacro ( TreeLevels , unsigned int ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function AddPosition virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition function RemovePosition virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition Protected Functions Documentation function ParticleRegionNeighborhood inline ParticleRegionNeighborhood () function ~ParticleRegionNeighborhood inline virtual ~ ParticleRegionNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_Tree PointTreeType :: Pointer m_Tree ; variable m_IteratorMap IteratorMapType :: Pointer m_IteratorMap ; variable m_TreeLevels unsigned int m_TreeLevels ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#shapeworksparticleregionneighborhood","text":"More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-classes","text":"Name struct IteratorNodePair","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types","text":"Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types","text":"Name typedef GenericContainer < IteratorNodePair > IteratorMapType","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions","text":"Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes","text":"Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood ()","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-self","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-superclass","text":"typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ;","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtreetype","text":"typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location.","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-iteratormaptype","text":"typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ;","title":"typedef IteratorMapType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setdomain","text":"virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itksetmacro","text":"itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree.","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkgetmacro","text":"itkGetMacro ( TreeLevels , unsigned int )","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-addposition","text":"virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setposition","text":"virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-removeposition","text":"virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood","text":"inline ParticleRegionNeighborhood ()","title":"function ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood_1","text":"inline virtual ~ ParticleRegionNeighborhood ()","title":"function ~ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_tree","text":"PointTreeType :: Pointer m_Tree ;","title":"variable m_Tree"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_iteratormap","text":"IteratorMapType :: Pointer m_IteratorMap ;","title":"variable m_IteratorMap"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_treelevels","text":"unsigned int m_TreeLevels ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_TreeLevels"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html","text":"shapeworks::ParticleShapeStatistics More... #include Public Functions Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix () Public Attributes Name constexpr static int VDimension Detailed Description class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids. Public Functions Documentation function ParticleShapeStatistics inline ParticleShapeStatistics () function ParticleShapeStatistics ParticleShapeStatistics ( std :: shared_ptr < Project > project ) function ~ParticleShapeStatistics inline ~ ParticleShapeStatistics () function DoPCA int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 ) function DoPCA int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function ImportPoints int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics. function ComputeMultiLevelAnalysisStatistics void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis. function ComputeShapeDevModesForMca int ComputeShapeDevModesForMca () Compute shape variations for MLCA. function ComputeRelPoseModesForMca int ComputeRelPoseModesForMca () Compute pose variations for MLCA. function SetNumberOfParticlesArray void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis) function ReadPointFiles int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics. function ReloadPointFiles int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. function WriteCSVFile int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. function WriteCSVFile2 int WriteCSVFile2 ( const std :: string & s ) function ComputeModes int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. function get_num_modes int get_num_modes () const Return the number of modes. function PrincipalComponentProjections int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first. function FisherLinearDiscriminant int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation. function SampleSize inline int SampleSize () const Returns the sample size. function Group1SampleSize inline int Group1SampleSize () const function Group2SampleSize inline int Group2SampleSize () const function NumberOfDimensions inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) function NumberOfObjects inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. function NumberOfPointsArray inline std :: vector < int > NumberOfPointsArray () function GroupID inline int GroupID ( unsigned int i ) const Returns the group ids. function GroupID inline const std :: vector < int > & GroupID () const function Eigenvectors inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values. function Eigenvalues inline const std :: vector < double > & Eigenvalues () const function EigenvectorsRelPose inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. function EigenvaluesShapeDev inline const std :: vector < double > & EigenvaluesShapeDev () function EigenvectorsShapeDev inline const Eigen :: MatrixXd & EigenvectorsShapeDev () function EigenvaluesRelPose inline const std :: vector < double > & EigenvaluesRelPose () function MeanShapeDev inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. function MeanRelPose inline const Eigen :: VectorXd & MeanRelPose () function Mean inline const Eigen :: VectorXd & Mean () const Returns the mean shape. function Group1Mean inline const Eigen :: VectorXd & Group1Mean () const function Group2Mean inline const Eigen :: VectorXd & Group2Mean () const function NormalizedGroupDifference inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. function GroupDifference inline const Eigen :: VectorXd & GroupDifference () const function ComputeMedianShape int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/ function L1Norm double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b. function PCALoadings inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings. function FishersLDA inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant. function ShapeMatrix inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix. function RecenteredShape inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. function PercentVarByMode inline const std :: vector < double > & PercentVarByMode () const function SimpleLinearRegression int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/ function get_compactness Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_specificity Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_generalization Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_group1_matrix Eigen :: MatrixXd get_group1_matrix () const function get_group2_matrix Eigen :: MatrixXd get_group2_matrix () const function matrix inline Eigen :: MatrixXd & matrix () Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#shapeworksparticleshapestatistics","text":"More... #include ","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions","text":"Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#detailed-description","text":"class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics","text":"inline ParticleShapeStatistics ()","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_1","text":"ParticleShapeStatistics ( std :: shared_ptr < Project > project )","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_2","text":"inline ~ ParticleShapeStatistics ()","title":"function ~ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca","text":"int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca_1","text":"int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-importpoints","text":"int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics.","title":"function ImportPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemultilevelanalysisstatistics","text":"void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis.","title":"function ComputeMultiLevelAnalysisStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computeshapedevmodesformca","text":"int ComputeShapeDevModesForMca () Compute shape variations for MLCA.","title":"function ComputeShapeDevModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computerelposemodesformca","text":"int ComputeRelPoseModesForMca () Compute pose variations for MLCA.","title":"function ComputeRelPoseModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-setnumberofparticlesarray","text":"void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis)","title":"function SetNumberOfParticlesArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-readpointfiles","text":"int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics.","title":"function ReadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-reloadpointfiles","text":"int ReloadPointFiles () Reloads a set of point files and recomputes some statistics.","title":"function ReloadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile","text":"int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis.","title":"function WriteCSVFile"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile2","text":"int WriteCSVFile2 ( const std :: string & s )","title":"function WriteCSVFile2"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemodes","text":"int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first.","title":"function ComputeModes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_num_modes","text":"int get_num_modes () const Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-principalcomponentprojections","text":"int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first.","title":"function PrincipalComponentProjections"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherlineardiscriminant","text":"int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation.","title":"function FisherLinearDiscriminant"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-samplesize","text":"inline int SampleSize () const Returns the sample size.","title":"function SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1samplesize","text":"inline int Group1SampleSize () const","title":"function Group1SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2samplesize","text":"inline int Group2SampleSize () const","title":"function Group2SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofdimensions","text":"inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension)","title":"function NumberOfDimensions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofobjects","text":"inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure.","title":"function NumberOfObjects"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofpointsarray","text":"inline std :: vector < int > NumberOfPointsArray ()","title":"function NumberOfPointsArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid","text":"inline int GroupID ( unsigned int i ) const Returns the group ids.","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid_1","text":"inline const std :: vector < int > & GroupID () const","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectors","text":"inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values.","title":"function Eigenvectors"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvalues","text":"inline const std :: vector < double > & Eigenvalues () const","title":"function Eigenvalues"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsrelpose","text":"inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA.","title":"function EigenvectorsRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesshapedev","text":"inline const std :: vector < double > & EigenvaluesShapeDev ()","title":"function EigenvaluesShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsshapedev","text":"inline const Eigen :: MatrixXd & EigenvectorsShapeDev ()","title":"function EigenvectorsShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesrelpose","text":"inline const std :: vector < double > & EigenvaluesRelPose ()","title":"function EigenvaluesRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanshapedev","text":"inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace.","title":"function MeanShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanrelpose","text":"inline const Eigen :: VectorXd & MeanRelPose ()","title":"function MeanRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-mean","text":"inline const Eigen :: VectorXd & Mean () const Returns the mean shape.","title":"function Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1mean","text":"inline const Eigen :: VectorXd & Group1Mean () const","title":"function Group1Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2mean","text":"inline const Eigen :: VectorXd & Group2Mean () const","title":"function Group2Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-normalizedgroupdifference","text":"inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean.","title":"function NormalizedGroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupdifference","text":"inline const Eigen :: VectorXd & GroupDifference () const","title":"function GroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemedianshape","text":"int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/","title":"function ComputeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-l1norm","text":"double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b.","title":"function L1Norm"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-pcaloadings","text":"inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings.","title":"function PCALoadings"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherslda","text":"inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant.","title":"function FishersLDA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-shapematrix","text":"inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix.","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-recenteredshape","text":"inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted.","title":"function RecenteredShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-percentvarbymode","text":"inline const std :: vector < double > & PercentVarByMode () const","title":"function PercentVarByMode"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-simplelinearregression","text":"int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/","title":"function SimpleLinearRegression"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_compactness","text":"Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_compactness"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_specificity","text":"Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_specificity"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_generalization","text":"Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_generalization"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group1_matrix","text":"Eigen :: MatrixXd get_group1_matrix () const","title":"function get_group1_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group2_matrix","text":"Eigen :: MatrixXd get_group2_matrix () const","title":"function get_group2_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-matrix","text":"inline Eigen :: MatrixXd & matrix ()","title":"function matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html","text":"shapeworks::ParticleSurfaceNeighborhood More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject Public Types Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType Public Functions Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood () Additional inherited members Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef TImage typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs typedef ImageType typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ; typedef Self typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ; typedef Superclass typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ; typedef NumericType typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ; typedef PointTreeType typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ; typedef GradientVectorType typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ; typedef DomainType typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ; Public Functions Documentation function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension. function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods). function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function SetWeightingEnabled inline void SetWeightingEnabled ( bool is_enabled ) function IsWeightingEnabled inline bool IsWeightingEnabled () const function SetForceEuclidean inline void SetForceEuclidean ( bool is_enabled ) function IsForceEuclidean inline bool IsForceEuclidean () const function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function ParticleSurfaceNeighborhood inline ParticleSurfaceNeighborhood () function ~ParticleSurfaceNeighborhood inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#shapeworksparticlesurfaceneighborhood","text":"More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types","text":"Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions","text":"Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions","text":"Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#additional-inherited-members","text":"Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-timage","text":"typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs","title":"typedef TImage"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-imagetype","text":"typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-self","text":"typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-superclass","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-numerictype","text":"typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ;","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtreetype","text":"typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ;","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-domaintype","text":"typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ;","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints_1","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setweightingenabled","text":"inline void SetWeightingEnabled ( bool is_enabled )","title":"function SetWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isweightingenabled","text":"inline bool IsWeightingEnabled () const","title":"function IsWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setforceeuclidean","text":"inline void SetForceEuclidean ( bool is_enabled )","title":"function SetForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isforceeuclidean","text":"inline bool IsForceEuclidean () const","title":"function IsForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood","text":"inline ParticleSurfaceNeighborhood ()","title":"function ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood_1","text":"inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html","text":"shapeworks::ParticleSystem A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject Public Types Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const Protected Functions Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform () Public Attributes Name constexpr int VDimension Detailed Description class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame. Public Types Documentation typedef Self typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleSystem :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type. typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations. typedef NeighborhoodType typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain. typedef PointVectorType typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ; typedef TransformType typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used. typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ; typedef VnlMatrixType typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function RegisterObserver void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events. function SynchronizePositions inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync. function GetNumberOfParticles inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k. function AddPosition const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain. function SetPosition const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ) function RemovePosition void RemovePosition ( unsigned long int k , unsigned int d = 0 ) function GetPosition inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain. function GetPosition inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const function GetTransformedPosition inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function GetPrefixTransformedPosition inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function SplitAllParticles void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked. function SplitParticle void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ) function AdvancedAllParticleSplitting void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ) function PrintParticleSystem void PrintParticleSystem () function SetNeighborhood void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k. function SetNeighborhood inline void SetNeighborhood ( NeighborhoodType * n ) function GetNeighborhood inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain. function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function AddDomain void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id. function GetDomainsBegin inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains. function GetDomainsEnd inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains. function GetDomain inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object. function GetDomain inline DomainType * GetDomain () API for the single domain case. function GetDomain inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object. function GetDomain inline const DomainType * GetDomain () const API for the single domain case. function GetNumberOfDomains inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system. function SetTransform void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed. function SetTransform inline void SetTransform ( const TransformType & p ) function SetPrefixTransform void SetPrefixTransform ( unsigned int i , const TransformType & ) function SetPrefixTransform inline void SetPrefixTransform ( const TransformType & p ) function GetTransformsBegin inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms. function GetTransformsEnd inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetTransform inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object. function GetTransform inline const TransformType & GetTransform () const API for the single transform case. function GetTransform inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object. function GetTransform inline TransformType GetTransform () API for the single transform case. function GetPrefixTransform inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetPrefixTransform inline const TransformType & GetPrefixTransform () const API for the single transform case. function GetPrefixTransform inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object. function GetPrefixTransform inline TransformType GetPrefixTransform () API for the single transform case. function GetInverseTransformsBegin inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms. function GetInverseTransformsEnd inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetInverseTransform inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object. function GetInverseTransform inline const TransformType & GetInverseTransform () const API for the single transform case. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform () const API for the single transform case. function GetPositions inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions. function GetPositions inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const function AddPositionList void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number. function TransformPoint PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.) function TransformVector VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported. function TransformNormalDerivative VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space. function InvertTransform inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix. function FlagDomain inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system. function UnflagDomain inline void UnflagDomain ( unsigned int i ) function GetDomainFlag inline bool GetDomainFlag ( unsigned int i ) const function GetDomainFlags inline const std :: vector < bool > & GetDomainFlags () const function SetDomainFlags inline void SetDomainFlags () function ResetDomainFlags inline void ResetDomainFlags () function SetFixedParticleFlag inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed. function ResetFixedParticleFlag inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) function GetFixedParticleFlag inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const function ResetFixedParticleFlags inline void ResetFixedParticleFlags () function SetDomainsPerShape inline void SetDomainsPerShape ( unsigned int num ) function GetDomainsPerShape inline unsigned int GetDomainsPerShape () const function SetNumberOfDomains void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists. function ComputeMaxDistNearestNeighbors double ComputeMaxDistNearestNeighbors ( size_t dom ) function SetFieldAttributes inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) function GetFieldAttributes inline const std :: vector < std :: string > & GetFieldAttributes () const Protected Functions Documentation function ParticleSystem ParticleSystem () function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleSystem inline virtual ~ ParticleSystem () function GetInverseTransform inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object. function GetInverseTransform inline TransformType & GetInverseTransform () API for the single transform case. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform () API for the single transform case. Public Attributes Documentation variable VDimension static constexpr int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#shapeworksparticlesystem","text":"A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types","text":"Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions","text":"Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes","text":"Name constexpr int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#detailed-description","text":"class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-self","text":"typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleSystem :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#using-domaintype","text":"using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-neighborhoodtype","text":"typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain.","title":"typedef NeighborhoodType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointvectortype","text":"typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-transformtype","text":"typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used.","title":"typedef TransformType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vnlmatrixtype","text":"typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-registerobserver","text":"void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events.","title":"function RegisterObserver"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-synchronizepositions","text":"inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync.","title":"function SynchronizePositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofparticles","text":"inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addposition","text":"const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setposition","text":"const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 )","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-removeposition","text":"void RemovePosition ( unsigned long int k , unsigned int d = 0 )","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition","text":"inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain.","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition_1","text":"inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformedposition","text":"inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransformedposition","text":"inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPrefixTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitallparticles","text":"void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked.","title":"function SplitAllParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitparticle","text":"void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 )","title":"function SplitParticle"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-advancedallparticlesplitting","text":"void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process )","title":"function AdvancedAllParticleSplitting"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printparticlesystem","text":"void PrintParticleSystem ()","title":"function PrintParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood","text":"void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k.","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood_1","text":"inline void SetNeighborhood ( NeighborhoodType * n )","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getneighborhood","text":"inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const","title":"function GetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_1","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_2","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_3","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_4","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_5","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-adddomain","text":"void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id.","title":"function AddDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsbegin","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains.","title":"function GetDomainsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsend","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains.","title":"function GetDomainsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain","text":"inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_1","text":"inline DomainType * GetDomain () API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_2","text":"inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_3","text":"inline const DomainType * GetDomain () const API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofdomains","text":"inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system.","title":"function GetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform","text":"void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed.","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform_1","text":"inline void SetTransform ( const TransformType & p )","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform","text":"void SetPrefixTransform ( unsigned int i , const TransformType & )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform_1","text":"inline void SetPrefixTransform ( const TransformType & p )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms.","title":"function GetTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform","text":"inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_1","text":"inline const TransformType & GetTransform () const API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_2","text":"inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_3","text":"inline TransformType GetTransform () API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform","text":"inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_1","text":"inline const TransformType & GetPrefixTransform () const API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_2","text":"inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_3","text":"inline TransformType GetPrefixTransform () API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms.","title":"function GetInverseTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetInverseTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform","text":"inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_1","text":"inline const TransformType & GetInverseTransform () const API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform","text":"inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_1","text":"inline const TransformType & GetInversePrefixTransform () const API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions","text":"inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions.","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions_1","text":"inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addpositionlist","text":"void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number.","title":"function AddPositionList"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformpoint","text":"PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.)","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformvector","text":"VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported.","title":"function TransformVector"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformnormalderivative","text":"VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space.","title":"function TransformNormalDerivative"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-inverttransform","text":"inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix.","title":"function InvertTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-flagdomain","text":"inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system.","title":"function FlagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-unflagdomain","text":"inline void UnflagDomain ( unsigned int i )","title":"function UnflagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflag","text":"inline bool GetDomainFlag ( unsigned int i ) const","title":"function GetDomainFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflags","text":"inline const std :: vector < bool > & GetDomainFlags () const","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainflags","text":"inline void SetDomainFlags ()","title":"function SetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetdomainflags","text":"inline void ResetDomainFlags ()","title":"function ResetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfixedparticleflag","text":"inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed.","title":"function SetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflag","text":"inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i )","title":"function ResetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfixedparticleflag","text":"inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const","title":"function GetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflags","text":"inline void ResetFixedParticleFlags ()","title":"function ResetFixedParticleFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( unsigned int num )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainspershape","text":"inline unsigned int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setnumberofdomains","text":"void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists.","title":"function SetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-computemaxdistnearestneighbors","text":"double ComputeMaxDistNearestNeighbors ( size_t dom )","title":"function ComputeMaxDistNearestNeighbors"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfieldattributes","text":"inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfieldattributes","text":"inline const std :: vector < std :: string > & GetFieldAttributes () const","title":"function GetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem","text":"ParticleSystem ()","title":"function ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem_1","text":"inline virtual ~ ParticleSystem ()","title":"function ~ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_2","text":"inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_3","text":"inline TransformType & GetInverseTransform () API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_2","text":"inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_3","text":"inline TransformType & GetInversePrefixTransform () API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#variable-vdimension","text":"static constexpr int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html","text":"shapeworks::ParticleSystemCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#shapeworksparticlesystemcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html","text":"shapeworks::ParticleSystemEvaluation Public Functions Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points) Friends Name struct SharedCommandData Public Functions Documentation function ParticleSystemEvaluation ParticleSystemEvaluation ( const std :: vector < std :: string > & paths ) function ParticleSystemEvaluation ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ) function Particles inline const Eigen :: MatrixXd & Particles () const function Paths inline const std :: vector < std :: string > & Paths () const function N inline int N () const Number of samples. function D inline int D () const Dimensions (e.g. x/y/z * number of particles) function ExactCompare bool ExactCompare ( const ParticleSystemEvaluation & other ) const function EvaluationCompare bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const function ReadParticleFile static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ) Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#shapeworksparticlesystemevaluation","text":"","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions","text":"Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation","text":"ParticleSystemEvaluation ( const std :: vector < std :: string > & paths )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation_1","text":"ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particles","text":"inline const Eigen :: MatrixXd & Particles () const","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-paths","text":"inline const std :: vector < std :: string > & Paths () const","title":"function Paths"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-n","text":"inline int N () const Number of samples.","title":"function N"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-d","text":"inline int D () const Dimensions (e.g. x/y/z * number of particles)","title":"function D"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-exactcompare","text":"bool ExactCompare ( const ParticleSystemEvaluation & other ) const","title":"function ExactCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-evaluationcompare","text":"bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const","title":"function EvaluationCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-readparticlefile","text":"static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points )","title":"function ReadParticleFile"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:01 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1Particles.html","text":"shapeworks::Particles Representation of correspondence points for a shape including multiple domains. More... #include Public Functions Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points) Detailed Description class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points Public Functions Documentation function Particles Particles () = default function set_local_particles void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_world_particles void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_local_particles void set_local_particles ( int domain , Eigen :: VectorXd particles ) function set_world_particles void set_world_particles ( int domain , Eigen :: VectorXd particles ) function get_local_particles std :: vector < Eigen :: VectorXd > get_local_particles () const function get_world_particles std :: vector < Eigen :: VectorXd > get_world_particles () const function get_local_particles Eigen :: VectorXd get_local_particles ( int domain ) function get_world_particles Eigen :: VectorXd get_world_particles ( int domain ) function get_raw_world_particles Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer. function get_combined_local_particles Eigen :: VectorXd get_combined_local_particles () const function get_combined_global_particles Eigen :: VectorXd get_combined_global_particles () const function set_combined_global_particles void set_combined_global_particles ( const Eigen :: VectorXd & particles ) function get_local_points std :: vector < itk :: Point < double > > get_local_points ( int domain ) function get_world_points std :: vector < itk :: Point < double > > get_world_points ( int domain ) function get_domain_for_combined_id int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together. function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function set_procrustes_transforms void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms ) function set_alignment_type void set_alignment_type ( int alignment ) function get_difference_vectors Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const function save_particles_file static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#shapeworksparticles","text":"Representation of correspondence points for a shape including multiple domains. More... #include ","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions","text":"Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Particles.html#detailed-description","text":"class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-particles","text":"Particles () = default","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles","text":"void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles","text":"void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles_1","text":"void set_local_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles_1","text":"void set_world_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles","text":"std :: vector < Eigen :: VectorXd > get_local_particles () const","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles","text":"std :: vector < Eigen :: VectorXd > get_world_particles () const","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles_1","text":"Eigen :: VectorXd get_local_particles ( int domain )","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles_1","text":"Eigen :: VectorXd get_world_particles ( int domain )","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_raw_world_particles","text":"Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer.","title":"function get_raw_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_local_particles","text":"Eigen :: VectorXd get_combined_local_particles () const","title":"function get_combined_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_global_particles","text":"Eigen :: VectorXd get_combined_global_particles () const","title":"function get_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_combined_global_particles","text":"void set_combined_global_particles ( const Eigen :: VectorXd & particles )","title":"function set_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_points","text":"std :: vector < itk :: Point < double > > get_local_points ( int domain )","title":"function get_local_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_points","text":"std :: vector < itk :: Point < double > > get_world_points ( int domain )","title":"function get_world_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_domain_for_combined_id","text":"int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together.","title":"function get_domain_for_combined_id"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms )","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment )","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_difference_vectors","text":"Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const","title":"function get_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-save_particles_file","text":"static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function save_particles_file"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html","text":"shapeworks::PhysicalRegion physical bounds of a 3d region of space #include Public Functions Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Point min Point max Public Functions Documentation function PhysicalRegion PhysicalRegion ( const PhysicalRegion & ) = default function PhysicalRegion inline PhysicalRegion ( const Point & _min , const Point & _max ) function PhysicalRegion inline PhysicalRegion () function operator== inline bool operator == ( const PhysicalRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Point origin () const function size inline Point size () const function shrink PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both function expand PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both function expand PhysicalRegion & expand ( const Point & pt ) expand this region to include this point function pad PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Point min ; variable max Point max ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#shapeworksphysicalregion","text":"physical bounds of a 3d region of space #include ","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions","text":"Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes","text":"Name Point min Point max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion","text":"PhysicalRegion ( const PhysicalRegion & ) = default","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_1","text":"inline PhysicalRegion ( const Point & _min , const Point & _max )","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_2","text":"inline PhysicalRegion ()","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-operator","text":"inline bool operator == ( const PhysicalRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-origin","text":"inline Point origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-size","text":"inline Point size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-shrink","text":"PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both","title":"function shrink"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand","text":"PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand_1","text":"PhysicalRegion & expand ( const Point & pt ) expand this region to include this point","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-pad","text":"PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-min","text":"Point min ;","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-max","text":"Point max ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1PickResult.html","text":"shapeworks::PickResult Public Attributes Name Shape::Point pos_ int domain_ int subject_ Public Attributes Documentation variable pos_ Shape :: Point pos_ ; variable domain_ int domain_ = -1 ; variable subject_ int subject_ = -1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#shapeworkspickresult","text":"","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes","text":"Name Shape::Point pos_ int domain_ int subject_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-pos_","text":"Shape :: Point pos_ ;","title":"variable pos_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-subject_","text":"int subject_ = -1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable subject_"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html","text":"shapeworks::PlaneConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function getPlaneNormal inline Eigen :: Vector3d getPlaneNormal () Get plane normal. function setPlaneNormal inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal. function getPlanePoint inline Eigen :: Vector3d getPlanePoint () Get plane center point. function setPlanePoint inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point. function setPlanePoint inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point. function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function points inline std :: vector < Eigen :: Vector3d > & points () function getOffset double getOffset () function setOffset void setOffset ( double offset ) function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function updatePlaneFromPoints void updatePlaneFromPoints () function getVTKPlane vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#shapeworksplaneconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions","text":"Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#detailed-description","text":"class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-print","text":"virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanenormal","text":"inline Eigen :: Vector3d getPlaneNormal () Get plane normal.","title":"function getPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanenormal","text":"inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal.","title":"function setPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanepoint","text":"inline Eigen :: Vector3d getPlanePoint () Get plane center point.","title":"function getPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint","text":"inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint_1","text":"inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-points","text":"inline std :: vector < Eigen :: Vector3d > & points ()","title":"function points"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getoffset","text":"double getOffset ()","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setoffset","text":"void setOffset ( double offset )","title":"function setOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-updateplanefrompoints","text":"void updatePlaneFromPoints ()","title":"function updatePlaneFromPoints"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getvtkplane","text":"vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-24 at 22:16:01 +0000","title":"function getVTKPlane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html","text":"shapeworks::PlaneWidget PlaneWidget . More... #include Public Functions Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane. Detailed Description class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes Public Functions Documentation function PlaneWidget PlaneWidget ( Viewer * viewer ) function ~PlaneWidget ~ PlaneWidget () function update void update () Update the widget from shape data. function store_positions void store_positions () Store positions back to shape data (this is called by callback) function update_glyph_properties void update_glyph_properties () Update the sizes and detail of control spheres. function clear_planes void clear_planes () Clear point handles and planes. function handle_right_click void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point. function delete_plane void delete_plane ( int domain , int plane_id ) Delete a particular plane. function flip_plane void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane. function apply_plane void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste) function set_plane_offset void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane. function finalize_plane_offset void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#shapeworksplanewidget","text":"PlaneWidget . More... #include ","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions","text":"Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#detailed-description","text":"class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget","text":"PlaneWidget ( Viewer * viewer )","title":"function PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget_1","text":"~ PlaneWidget ()","title":"function ~PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update","text":"void update () Update the widget from shape data.","title":"function update"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-store_positions","text":"void store_positions () Store positions back to shape data (this is called by callback)","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update_glyph_properties","text":"void update_glyph_properties () Update the sizes and detail of control spheres.","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-clear_planes","text":"void clear_planes () Clear point handles and planes.","title":"function clear_planes"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-handle_right_click","text":"void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-delete_plane","text":"void delete_plane ( int domain , int plane_id ) Delete a particular plane.","title":"function delete_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-flip_plane","text":"void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane.","title":"function flip_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-apply_plane","text":"void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste)","title":"function apply_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-set_plane_offset","text":"void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane.","title":"function set_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-finalize_plane_offset","text":"void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-24 at 22:16:01 +0000","title":"function finalize_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html","text":"shapeworks::PowerOfTwoPointTree More... #include Inherits from itk::DataObject Public Types Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ; typedef NodeType typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node. typedef NodePointerType typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes. typedef PointType typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds. typedef PointListType typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType. typedef PointIteratorListType typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node. function itkGetMacro itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree. function ConstructTree void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively. function FindPointsInRegion PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound. function FindPointsInRegion unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const function GetNode NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point. function GetNode const NodePointerType GetNode ( const PointType & ) const function itkGetObjectMacro itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree. function itkSetObjectMacro itkSetObjectMacro ( Root , NodeType ) function AddPoint PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception. function AddPoint inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) function Overlap bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise. function RegionContains inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function PowerOfTwoPointTree inline PowerOfTwoPointTree () function ~PowerOfTwoPointTree inline virtual ~ PowerOfTwoPointTree () function BranchNode void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree. function FindOneNodeInRegion void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively. Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#shapeworkspoweroftwopointtree","text":"More... #include Inherits from itk::DataObject","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types","text":"Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions","text":"Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-self","text":"typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-superclass","text":"typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodetype","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node.","title":"typedef NodeType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodepointertype","text":"typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes.","title":"typedef NodePointerType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointtype","text":"typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointlisttype","text":"typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointiteratorlisttype","text":"typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ;","title":"typedef PointIteratorListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetmacro","text":"itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-constructtree","text":"void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively.","title":"function ConstructTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion","text":"PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound.","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion_1","text":"unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode","text":"NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point.","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode_1","text":"const NodePointerType GetNode ( const PointType & ) const","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( Root , NodeType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint","text":"PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception.","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint_1","text":"inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i )","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-overlap","text":"bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise.","title":"function Overlap"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-regioncontains","text":"inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const","title":"function RegionContains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree","text":"inline PowerOfTwoPointTree ()","title":"function PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree_1","text":"inline virtual ~ PowerOfTwoPointTree ()","title":"function ~PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-branchnode","text":"void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree.","title":"function BranchNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findonenodeinregion","text":"void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively.","title":"function FindOneNodeInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html","text":"shapeworks::PowerOfTwoPointTreeNode More... #include Inherits from itk::LightObject Public Types Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType Public Functions Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList () Protected Functions Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o) Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes. typedef PointListType typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices. Public Functions Documentation function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc. function operator== inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type. function IsLeaf inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing. function InsertElement inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node. function Contains inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise. function SetLowerBound inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node. function GetLowerBound inline const PointType & GetLowerBound () const function SetUpperBound inline void SetUpperBound ( const PointType & p ) function GetUpperBound inline const PointType & GetUpperBound () const function GetBranches inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes. function GetBranches inline const Self :: Pointer * GetBranches () const function GetBranch inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch function GetBranch inline const Self :: Pointer & GetBranch ( unsigned int i ) const function SetBranch inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node. function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method. function GetList inline const PointListType & GetList () const Get the list of elements which contain points and associated indices. function GetList inline PointListType & GetList () Protected Functions Documentation function PowerOfTwoPointTreeNode inline PowerOfTwoPointTreeNode () function ~PowerOfTwoPointTreeNode inline ~ PowerOfTwoPointTreeNode () function PowerOfTwoPointTreeNode PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ) function operator= const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#shapeworkspoweroftwopointtreenode","text":"More... #include Inherits from itk::LightObject","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types","text":"Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions","text":"Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions","text":"Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-self","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointlisttype","text":"typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator","text":"inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type.","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-isleaf","text":"inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing.","title":"function IsLeaf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-insertelement","text":"inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node.","title":"function InsertElement"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-contains","text":"inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise.","title":"function Contains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node.","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlowerbound","text":"inline const PointType & GetLowerBound () const","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType & p )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getupperbound","text":"inline const PointType & GetUpperBound () const","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches","text":"inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes.","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches_1","text":"inline const Self :: Pointer * GetBranches () const","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch","text":"inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch_1","text":"inline const Self :: Pointer & GetBranch ( unsigned int i ) const","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setbranch","text":"inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node.","title":"function SetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method.","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist","text":"inline const PointListType & GetList () const Get the list of elements which contain points and associated indices.","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist_1","text":"inline PointListType & GetList ()","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode","text":"inline PowerOfTwoPointTreeNode ()","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_1","text":"inline ~ PowerOfTwoPointTreeNode ()","title":"function ~PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_2","text":"PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o )","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator_1","text":"const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html","text":"shapeworks::PreferencesWindow Qt UI dialog to control preferences. More... #include Inherits from QDialog Public Slots Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences () Public Signals Name void clear_cache () void update_view () void slider_update () Public Functions Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override Detailed Description class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object Public Slots Documentation slot on_mesh_cache_enabled_stateChanged void on_mesh_cache_enabled_stateChanged ( int state ) slot on_mesh_cache_memory_valueChanged void on_mesh_cache_memory_valueChanged ( int value ) slot on_color_scheme_currentIndexChanged void on_color_scheme_currentIndexChanged ( int index ) slot on_pca_range_valueChanged void on_pca_range_valueChanged ( double value ) slot on_pca_steps_valueChanged void on_pca_steps_valueChanged ( int value ) slot on_parallel_enabled_toggled void on_parallel_enabled_toggled ( bool b ) slot on_num_threads_valueChanged void on_num_threads_valueChanged ( int i ) slot accept void accept () override slot restore_defaults void restore_defaults () slot save_to_preferences void save_to_preferences () Public Signals Documentation signal clear_cache void clear_cache () signal update_view void update_view () signal slider_update void slider_update () Public Functions Documentation function PreferencesWindow PreferencesWindow ( QWidget * parent , Preferences & prefs ) function set_values_from_preferences void set_values_from_preferences () function closeEvent void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#shapeworkspreferenceswindow","text":"Qt UI dialog to control preferences. More... #include Inherits from QDialog","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots","text":"Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals","text":"Name void clear_cache () void update_view () void slider_update ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions","text":"Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#detailed-description","text":"class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_enabled_statechanged","text":"void on_mesh_cache_enabled_stateChanged ( int state )","title":"slot on_mesh_cache_enabled_stateChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_memory_valuechanged","text":"void on_mesh_cache_memory_valueChanged ( int value )","title":"slot on_mesh_cache_memory_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_color_scheme_currentindexchanged","text":"void on_color_scheme_currentIndexChanged ( int index )","title":"slot on_color_scheme_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_range_valuechanged","text":"void on_pca_range_valueChanged ( double value )","title":"slot on_pca_range_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_steps_valuechanged","text":"void on_pca_steps_valueChanged ( int value )","title":"slot on_pca_steps_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_parallel_enabled_toggled","text":"void on_parallel_enabled_toggled ( bool b )","title":"slot on_parallel_enabled_toggled"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_num_threads_valuechanged","text":"void on_num_threads_valueChanged ( int i )","title":"slot on_num_threads_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-accept","text":"void accept () override","title":"slot accept"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-save_to_preferences","text":"void save_to_preferences ()","title":"slot save_to_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-clear_cache","text":"void clear_cache ()","title":"signal clear_cache"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-slider_update","text":"void slider_update ()","title":"signal slider_update"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-preferenceswindow","text":"PreferencesWindow ( QWidget * parent , Preferences & prefs )","title":"function PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-set_values_from_preferences","text":"void set_values_from_preferences ()","title":"function set_values_from_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html","text":"shapeworks::ProcrustesRegistration Public Types Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType Public Functions Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation) Public Types Documentation using Pointer using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ; using ParticleSystemType using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ; using PointType using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ; Public Functions Documentation function SetParticleSystem inline void SetParticleSystem ( ParticleSystemType * p ) function GetParticleSystem inline ParticleSystemType * GetParticleSystem () const function GetParticleSystem inline ParticleSystemType * GetParticleSystem () function RunRegistration void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object. function RunRegistration void RunRegistration () Run registration on all domains. function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. function GetDomainsPerShape inline int GetDomainsPerShape () const function GetScaling inline bool GetScaling () const function SetScaling inline void SetScaling ( bool scaling ) function GetRotationTranslation inline bool GetRotationTranslation () const function SetRotationTranslation inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#shapeworksprocrustesregistration","text":"","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types","text":"Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions","text":"Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointer","text":"using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-particlesystemtype","text":"using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ;","title":"using ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointtype","text":"using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setparticlesystem","text":"inline void SetParticleSystem ( ParticleSystemType * p )","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem","text":"inline ParticleSystemType * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem_1","text":"inline ParticleSystemType * GetParticleSystem ()","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration","text":"void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration_1","text":"void RunRegistration () Run registration on all domains.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setscaling","text":"inline void SetScaling ( bool scaling )","title":"function SetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setrotationtranslation","text":"inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function SetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Project.html","text":"shapeworks::Project Representation of a project. More... #include Public Types Name using std::map< std::string, std::string > StringMap Public Functions Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types. Detailed Description class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data. Public Types Documentation using StringMap using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ; Public Functions Documentation function Project Project () function ~Project ~ Project () function load bool load ( const std :: string & filename ) Load from project file. function save bool save ( const std :: string & filename ) Save to project file. function set_project_path void set_project_path ( const std :: string & path ) Set the project path. function get_filename std :: string get_filename () Return the filename. function set_filename void set_filename ( std :: string filename ) Set project filename. function get_headers std :: vector < std :: string > get_headers () Return the headers of the subject sheet. function get_string_column std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name. function get_number_of_subjects int get_number_of_subjects () Return the number of subjects in the project. function get_number_of_domains_per_subject int get_number_of_domains_per_subject () Return the number of domains. function get_domain_names std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) function set_domain_names void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names. function get_subjects std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference) function set_subjects void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects. function update_subjects void update_subjects () function get_originals_present bool get_originals_present () const Return if originals are present. function get_groomed_present bool get_groomed_present () const Return if groomed files are present. function get_particles_present bool get_particles_present () const Return if particle files are present. function get_images_present bool get_images_present () Return if images are present (e.g. CT/MRI) function get_fixed_subjects_present bool get_fixed_subjects_present () Return if there are fixed subjects present. function get_feature_names std :: vector < std :: string > get_feature_names () Get feature names. function get_image_names std :: vector < std :: string > get_image_names () Get image names. function get_group_names std :: vector < std :: string > get_group_names () Get group names. function get_group_values std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values. function get_parameters Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key. function get_parameter_map std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name. function set_parameter_map void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name. function set_parameters void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key. function clear_parameters void clear_parameters ( const std :: string & name ) Clear parameters based on key. function get_supported_version int get_supported_version () const Get the supported version (this version of the code) function get_version int get_version () const Get the version of the currently loaded project. function get_landmarks std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain. function get_all_landmark_definitions std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. function set_landmark_definitions void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions. function get_landmarks_present bool get_landmarks_present () Return if landmarks are present. function set_landmarks void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project. function new_landmark void new_landmark ( int domain_id ) Add a new landmark. function get_original_domain_types std :: vector < DomainType > get_original_domain_types () Return the original domain types. function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types. function set_original_domain_types void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types. function set_groomed_domain_types void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#shapeworksproject","text":"Representation of a project. More... #include ","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types","text":"Name using std::map< std::string, std::string > StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions","text":"Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Project.html#detailed-description","text":"class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#using-stringmap","text":"using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project","text":"Project ()","title":"function Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project_1","text":"~ Project ()","title":"function ~Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-load","text":"bool load ( const std :: string & filename ) Load from project file.","title":"function load"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-save","text":"bool save ( const std :: string & filename ) Save to project file.","title":"function save"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_project_path","text":"void set_project_path ( const std :: string & path ) Set the project path.","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_filename","text":"std :: string get_filename () Return the filename.","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_filename","text":"void set_filename ( std :: string filename ) Set project filename.","title":"function set_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_headers","text":"std :: vector < std :: string > get_headers () Return the headers of the subject sheet.","title":"function get_headers"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_string_column","text":"std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name.","title":"function get_string_column"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_subjects","text":"int get_number_of_subjects () Return the number of subjects in the project.","title":"function get_number_of_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_domains_per_subject","text":"int get_number_of_domains_per_subject () Return the number of domains.","title":"function get_number_of_domains_per_subject"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_domain_names","text":"std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc)","title":"function get_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_domain_names","text":"void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names.","title":"function set_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_subjects","text":"std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference)","title":"function get_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_subjects","text":"void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects.","title":"function set_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-update_subjects","text":"void update_subjects ()","title":"function update_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_originals_present","text":"bool get_originals_present () const Return if originals are present.","title":"function get_originals_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_present","text":"bool get_groomed_present () const Return if groomed files are present.","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_particles_present","text":"bool get_particles_present () const Return if particle files are present.","title":"function get_particles_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_images_present","text":"bool get_images_present () Return if images are present (e.g. CT/MRI)","title":"function get_images_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_fixed_subjects_present","text":"bool get_fixed_subjects_present () Return if there are fixed subjects present.","title":"function get_fixed_subjects_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_feature_names","text":"std :: vector < std :: string > get_feature_names () Get feature names.","title":"function get_feature_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_image_names","text":"std :: vector < std :: string > get_image_names () Get image names.","title":"function get_image_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_names","text":"std :: vector < std :: string > get_group_names () Get group names.","title":"function get_group_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_values","text":"std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameters","text":"Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key.","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameter_map","text":"std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name.","title":"function get_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameter_map","text":"void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name.","title":"function set_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameters","text":"void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key.","title":"function set_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-clear_parameters","text":"void clear_parameters ( const std :: string & name ) Clear parameters based on key.","title":"function clear_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_supported_version","text":"int get_supported_version () const Get the supported version (this version of the code)","title":"function get_supported_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_version","text":"int get_version () const Get the version of the currently loaded project.","title":"function get_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks","text":"std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain.","title":"function get_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_all_landmark_definitions","text":"std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions.","title":"function get_all_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmark_definitions","text":"void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions.","title":"function set_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks_present","text":"bool get_landmarks_present () Return if landmarks are present.","title":"function get_landmarks_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmarks","text":"void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project.","title":"function set_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-new_landmark","text":"void new_landmark ( int domain_id ) Add a new landmark.","title":"function new_landmark"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_original_domain_types","text":"std :: vector < DomainType > get_original_domain_types () Return the original domain types.","title":"function get_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types.","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_original_domain_types","text":"void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types.","title":"function set_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_groomed_domain_types","text":"void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html","text":"shapeworks::ProjectCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#shapeworksprojectcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html","text":"shapeworks::ProjectReader Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader Public Types Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0 Protected Functions Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes Name Project & project_ Detailed Description class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers Public Types Documentation using StringMapList using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ; using StringMap using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ; using StringMultiMap using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ; Public Functions Documentation function ProjectReader ProjectReader ( Project & project ) Constructor. function ~ProjectReader virtual ~ ProjectReader () = default Destructor. function read_project virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters Protected Functions Documentation function load_subjects void load_subjects ( StringMapList list ) Load subjects from string map list. function load_parameters void load_parameters () function load_parameter void load_parameter ( std :: string name , StringMap map ) function load_landmark_definitions void load_landmark_definitions ( StringMapList list ) function contains bool contains ( StringMap map , std :: string key ) function get_keys static StringList get_keys ( StringMap map ) Protected Attributes Documentation variable project_ Project & project_ ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#shapeworksprojectreader","text":"Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types","text":"Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions","text":"Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions","text":"Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes","text":"Name Project & project_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#detailed-description","text":"class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmaplist","text":"using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ;","title":"using StringMapList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmap","text":"using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringlist","text":"using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmultimap","text":"using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ;","title":"using StringMultiMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader","text":"ProjectReader ( Project & project ) Constructor.","title":"function ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader_1","text":"virtual ~ ProjectReader () = default Destructor.","title":"function ~ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_subjects","text":"void load_subjects ( StringMapList list ) Load subjects from string map list.","title":"function load_subjects"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameters","text":"void load_parameters ()","title":"function load_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameter","text":"void load_parameter ( std :: string name , StringMap map )","title":"function load_parameter"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_landmark_definitions","text":"void load_landmark_definitions ( StringMapList list )","title":"function load_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-contains","text":"bool contains ( StringMap map , std :: string key )","title":"function contains"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_keys","text":"static StringList get_keys ( StringMap map )","title":"function get_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#variable-project_","text":"Project & project_ ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html","text":"shapeworks::ProjectUtils Public Types Name using project::types::StringList StringList using project::types::StringMap StringMap Public Functions Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject) Public Types Documentation using StringList using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ; using StringMap using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ; Public Functions Documentation function convert_transform static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform function convert_transform static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) function determine_domain_names static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys function determine_domain_types static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types function get_input_prefixes static StringList get_input_prefixes () return a list of the input prefixes function get_groomed_prefixes static StringList get_groomed_prefixes () return a list of the groomed prefixes function get_original_keys static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names function get_values static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names function get_transforms static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names function get_value_map static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) function get_extra_columns static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes function determine_domain_type static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename function starts_with static bool starts_with ( std :: string str , std :: string prefix ) function transform_to_string static std :: string transform_to_string ( std :: vector < double > transform ) function convert_domain_types static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ) function convert_groomed_domain_types static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ) function convert_subject_to_map static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#shapeworksprojectutils","text":"","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types","text":"Name using project::types::StringList StringList using project::types::StringMap StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions","text":"Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringlist","text":"using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringmap","text":"using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform","text":"static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform_1","text":"static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet)","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_names","text":"static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys","title":"function determine_domain_names"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_types","text":"static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types","title":"function determine_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_input_prefixes","text":"static StringList get_input_prefixes () return a list of the input prefixes","title":"function get_input_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_groomed_prefixes","text":"static StringList get_groomed_prefixes () return a list of the groomed prefixes","title":"function get_groomed_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_original_keys","text":"static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names","title":"function get_original_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_values","text":"static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names","title":"function get_values"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_transforms","text":"static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names","title":"function get_transforms"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_value_map","text":"static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_)","title":"function get_value_map"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_extra_columns","text":"static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes","title":"function get_extra_columns"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_type","text":"static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename","title":"function determine_domain_type"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-starts_with","text":"static bool starts_with ( std :: string str , std :: string prefix )","title":"function starts_with"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-transform_to_string","text":"static std :: string transform_to_string ( std :: vector < double > transform )","title":"function transform_to_string"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_domain_types","text":"static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_groomed_domain_types","text":"static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_subject_to_map","text":"static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function convert_subject_to_map"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html","text":"shapeworks::PythonWorker Inherits from QObject Public Slots Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python () Public Signals Name void result_ready () void finished () Public Functions Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job () Public Attributes Name constexpr static const char * python_api_version Public Slots Documentation slot init bool init () slot start_job void start_job ( QSharedPointer < Job > job ) slot finalize_python void finalize_python () Public Signals Documentation signal result_ready void result_ready () signal finished void finished () Public Functions Documentation function PythonWorker PythonWorker () function ~PythonWorker ~ PythonWorker () function set_vtk_output_window void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ) function run_job void run_job ( QSharedPointer < Job > job ) function incoming_python_message void incoming_python_message ( std :: string message_string ) function incoming_python_progress void incoming_python_progress ( double value ) function end_python void end_python () function abort_job void abort_job () Public Attributes Documentation variable python_api_version static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#shapeworkspythonworker","text":"Inherits from QObject","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots","text":"Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals","text":"Name void result_ready () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions","text":"Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes","text":"Name constexpr static const char * python_api_version","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-init","text":"bool init ()","title":"slot init"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-start_job","text":"void start_job ( QSharedPointer < Job > job )","title":"slot start_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-finalize_python","text":"void finalize_python ()","title":"slot finalize_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker","text":"PythonWorker ()","title":"function PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker_1","text":"~ PythonWorker ()","title":"function ~PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-set_vtk_output_window","text":"void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window )","title":"function set_vtk_output_window"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_message","text":"void incoming_python_message ( std :: string message_string )","title":"function incoming_python_message"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_progress","text":"void incoming_python_progress ( double value )","title":"function incoming_python_progress"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-end_python","text":"void end_python ()","title":"function end_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-abort_job","text":"void abort_job ()","title":"function abort_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#variable-python_api_version","text":"static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable python_api_version"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html","text":"shapeworks::QMeshWarper Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper Public Signals Name void progress () Public Functions Name QMeshWarper (QObject * parent =nullptr) float get_progress () Protected Functions Name virtual void update_progress (float p) override For overriding to handle progress updates. Additional inherited members Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Public Signals Documentation signal progress void progress () Public Functions Documentation function QMeshWarper QMeshWarper ( QObject * parent = nullptr ) function get_progress float get_progress () Protected Functions Documentation function update_progress virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#shapeworksqmeshwarper","text":"Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals","text":"Name void progress ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions","text":"Name QMeshWarper (QObject * parent =nullptr) float get_progress ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) override For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#signal-progress","text":"void progress ()","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-qmeshwarper","text":"QMeshWarper ( QObject * parent = nullptr )","title":"function QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-get_progress","text":"float get_progress ()","title":"function get_progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-update_progress","text":"virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html","text":"shapeworks::QOptimize Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize Public Signals Name void progress (int , QString ) Public Functions Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override Protected Functions Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override Additional inherited members Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Public Signals Documentation signal progress void progress ( int , QString ) Public Functions Documentation function QOptimize QOptimize ( QObject * parent = nullptr ) function ~QOptimize virtual ~ QOptimize () function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints function GetParticles std :: vector < Particles > GetParticles () function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms function UpdateExportablePoints virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback function IterateCallback virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#shapeworksqoptimize","text":"Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals","text":"Name void progress (int , QString )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions","text":"Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions","text":"Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#additional-inherited-members","text":"Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#signal-progress","text":"void progress ( int , QString )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize","text":"QOptimize ( QObject * parent = nullptr )","title":"function QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize_1","text":"virtual ~ QOptimize ()","title":"function ~QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getparticles","text":"std :: vector < Particles > GetParticles ()","title":"function GetParticles"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-24 at 22:16:02 +0000","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html","text":"shapeworks::ReconstructSurface More... Public Types Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType Public Functions Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees) Detailed Description template < class TransformType > class shapeworks :: ReconstructSurface ; Public Types Documentation using TransformTypePtr using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ; using PointSetType using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ; using PointIdType using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ; Public Functions Documentation function ReconstructSurface ReconstructSurface () = default function ReconstructSurface ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ) function computeAverageDistanceToNeighbors double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ) function checkMapping void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ) function generateWarpedMeshes void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh ) function getMesh Mesh getMesh ( PointArray localPoints ) function convertToImageCoordinates Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ) function computeMedianShape int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList ) function performKMeansClustering void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices ) function computeParticlesNormals Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ) function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ) function computeDenseMean void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ) function computeSparseMean std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ) function writeMeanInfo void writeMeanInfo () function surface void surface ( const std :: vector < std :: string > localPointsFiles ) function samplesAlongPCAModes void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ) function meanSurface void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ) function setOutPrefix inline void setOutPrefix ( std :: string prefix ) function setOutPath inline void setOutPath ( std :: string path ) function setDoProcrustes inline void setDoProcrustes ( bool doProcrusts ) function setDoProcrustesScaling inline void setDoProcrustesScaling ( bool doProcrustsScaling ) function setPairwiseNormalsDiffForGoodBad inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) function setMeanBeforeWarp inline void setMeanBeforeWarp ( bool meanBeforeWarp ) function setEnableOutput inline void setEnableOutput ( bool enableOutput ) function setModeIndex inline void setModeIndex ( int modeIndex ) function setNumOfModes inline void setNumOfModes ( int numOfModes ) function setNumOfSamplesPerMode inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) function setNumOfParticles inline void setNumOfParticles ( int numOfParticles ) function setNumOfClusters inline void setNumOfClusters ( int numOfClusters ) function setMaxStdDev inline void setMaxStdDev ( float maxStdDev ) function setMaxVarianceCaptured inline void setMaxVarianceCaptured ( float maxVarianceCaptured ) function setMaxAngleDegrees inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#shapeworksreconstructsurface","text":"More...","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types","text":"Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions","text":"Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#detailed-description","text":"template < class TransformType > class shapeworks :: ReconstructSurface ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-transformtypeptr","text":"using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ;","title":"using TransformTypePtr"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointsettype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ;","title":"using PointSetType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointidtype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ;","title":"using PointIdType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface","text":"ReconstructSurface () = default","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface_1","text":"ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile )","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeaveragedistancetoneighbors","text":"double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices )","title":"function computeAverageDistanceToNeighbors"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-checkmapping","text":"void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints )","title":"function checkMapping"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-generatewarpedmeshes","text":"void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh )","title":"function generateWarpedMeshes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getmesh","text":"Mesh getMesh ( PointArray localPoints )","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-converttoimagecoordinates","text":"Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computemedianshape","text":"int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList )","title":"function computeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-performkmeansclustering","text":"void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices )","title":"function performKMeansClustering"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeparticlesnormals","text":"Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt )","title":"function computeParticlesNormals"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform )","title":"function getDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computedensemean","text":"void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform )","title":"function computeDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computesparsemean","text":"std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter )","title":"function computeSparseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-writemeaninfo","text":"void writeMeanInfo ()","title":"function writeMeanInfo"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-surface","text":"void surface ( const std :: vector < std :: string > localPointsFiles )","title":"function surface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-samplesalongpcamodes","text":"void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles )","title":"function samplesAlongPCAModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-meansurface","text":"void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles )","title":"function meanSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutpath","text":"inline void setOutPath ( std :: string path )","title":"function setOutPath"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustes","text":"inline void setDoProcrustes ( bool doProcrusts )","title":"function setDoProcrustes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustesscaling","text":"inline void setDoProcrustesScaling ( bool doProcrustsScaling )","title":"function setDoProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setpairwisenormalsdiffforgoodbad","text":"inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad )","title":"function setPairwiseNormalsDiffForGoodBad"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmeanbeforewarp","text":"inline void setMeanBeforeWarp ( bool meanBeforeWarp )","title":"function setMeanBeforeWarp"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setenableoutput","text":"inline void setEnableOutput ( bool enableOutput )","title":"function setEnableOutput"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmodeindex","text":"inline void setModeIndex ( int modeIndex )","title":"function setModeIndex"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofmodes","text":"inline void setNumOfModes ( int numOfModes )","title":"function setNumOfModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofsamplespermode","text":"inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode )","title":"function setNumOfSamplesPerMode"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofparticles","text":"inline void setNumOfParticles ( int numOfParticles )","title":"function setNumOfParticles"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofclusters","text":"inline void setNumOfClusters ( int numOfClusters )","title":"function setNumOfClusters"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxstddev","text":"inline void setMaxStdDev ( float maxStdDev )","title":"function setMaxStdDev"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxvariancecaptured","text":"inline void setMaxVarianceCaptured ( float maxVarianceCaptured )","title":"function setMaxVarianceCaptured"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxangledegrees","text":"inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function setMaxAngleDegrees"},{"location":"api/Classes/classshapeworks_1_1Sampler.html","text":"shapeworks::Sampler Public Classes Name struct CuttingPlaneType struct SphereType Public Types Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList Public Functions Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode) Public Attributes Name constexpr unsigned int Dimension Public Types Documentation using PixelType using shapeworks :: Sampler :: PixelType = float ; using ImageType using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ; using PointType using shapeworks :: Sampler :: PointType = ImageType :: PointType ; using MeanCurvatureCacheType using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ; using CuttingPlaneList using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ; Public Functions Documentation function Sampler Sampler () Constructor. function ~Sampler inline virtual ~ Sampler () Destructor. function GetParticleSystem inline ParticleSystem * GetParticleSystem () Returns the particle system. function GetParticleSystem inline const ParticleSystem * GetParticleSystem () const function GetGradientFunction inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used. function GetCurvatureGradientFunction inline CurvatureSamplingFunction * GetCurvatureGradientFunction () function GetOptimizer inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object. function GetOptimizer inline const OptimizerType * GetOptimizer () const function SetPointsFile inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set. function SetPointsFile inline void SetPointsFile ( const std :: string & s ) function SetInitialPoints inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function AddImage void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ) function ApplyConstraintsToZeroCrossing inline void ApplyConstraintsToZeroCrossing () function AddMesh void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int n ) function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains. function AddFreeFormConstraint void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ) function TransformCuttingPlanes void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation function AddSphere void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain. function SetAdaptivityMode inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity function GetAdaptivityMode inline int GetAdaptivityMode () const function SetCorrespondenceOn inline void SetCorrespondenceOn () function SetCorrespondenceOff inline void SetCorrespondenceOff () function SetSamplingOn inline void SetSamplingOn () function SetSamplingOff inline void SetSamplingOff () function GetCorrespondenceOn inline bool GetCorrespondenceOn () const function GetSamplingOn inline bool GetSamplingOn () const function SetCorrespondenceMode void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains). function RegisterGeneralShapeMatrices inline void RegisterGeneralShapeMatrices () function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( unsigned int i , bool flag ) function SetNormals inline void SetNormals ( int i , bool flag ) function SetAttributesPerDomain void SetAttributesPerDomain ( const std :: vector < int > s ) function GetShapeMatrix inline LegacyShapeMatrix * GetShapeMatrix () function GetGeneralShapeMatrix inline ShapeMatrix * GetGeneralShapeMatrix () function GetGeneralShapeGradientMatrix inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix () function GetLinkingFunction inline DualVectorFunction * GetLinkingFunction () function GetEnsembleEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () function GetDisentangledEnsembleEntropyFunction inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () function GetEnsembleRegressionEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () function GetEnsembleMixedEffectsEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () function GetMeshBasedGeneralEntropyGradientFunction inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () function GetLinkingFunction inline const DualVectorFunction * GetLinkingFunction () const function GetEnsembleEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const function GetDisentangledEnsembleEntropyFunction inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const function GetEnsembleRegressionEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const function GetEnsembleMixedEffectsEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const function GetMeshBasedGeneralEntropyGradientFunction inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int n ) function GetCorrespondenceMode inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const function SetTransformFile inline void SetTransformFile ( const std :: string & s ) function SetTransformFile inline void SetTransformFile ( const char * s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const std :: string & s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const char * s ) function SetPairwisePotentialType inline void SetPairwisePotentialType ( int pairwise_potential_type ) function GetPairwisePotentialType inline int GetPairwisePotentialType () function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double weight ) function ReadTransforms void ReadTransforms () function ReadPointsFiles void ReadPointsFiles () function AllocateDataCaches void AllocateDataCaches () function AllocateDomainsAndNeighborhoods void AllocateDomainsAndNeighborhoods () function InitializeOptimizationFunctions void InitializeOptimizationFunctions () function initialize_initial_positions void initialize_initial_positions () function Initialize inline void Initialize () function ReInitialize void ReInitialize () function Execute void Execute () function ComputeCuttingPlanes CuttingPlaneList ComputeCuttingPlanes () function ComputePlaneNormal Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) function GetFFCs inline std :: vector < FreeFormConstraint > GetFFCs () function SetMeshFFCMode inline void SetMeshFFCMode ( bool mesh_ffc_mode ) Public Attributes Documentation variable Dimension static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#shapeworkssampler","text":"","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-classes","text":"Name struct CuttingPlaneType struct SphereType","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types","text":"Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions","text":"Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes","text":"Name constexpr unsigned int Dimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pixeltype","text":"using shapeworks :: Sampler :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-imagetype","text":"using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pointtype","text":"using shapeworks :: Sampler :: PointType = ImageType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-meancurvaturecachetype","text":"using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-transformtype","text":"using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ;","title":"using TransformType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-optimizertype","text":"using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ;","title":"using OptimizerType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-cuttingplanelist","text":"using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ;","title":"using CuttingPlaneList"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler","text":"Sampler () Constructor.","title":"function Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler_1","text":"inline virtual ~ Sampler () Destructor.","title":"function ~Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem","text":"inline ParticleSystem * GetParticleSystem () Returns the particle system.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem_1","text":"inline const ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgradientfunction","text":"inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used.","title":"function GetGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcurvaturegradientfunction","text":"inline CurvatureSamplingFunction * GetCurvatureGradientFunction ()","title":"function GetCurvatureGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer","text":"inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object.","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer_1","text":"inline const OptimizerType * GetOptimizer () const","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile","text":"inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set.","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile_1","text":"inline void SetPointsFile ( const std :: string & s )","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setinitialpoints","text":"inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" )","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-applyconstraintstozerocrossing","text":"inline void ApplyConstraintsToZeroCrossing ()","title":"function ApplyConstraintsToZeroCrossing"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addmesh","text":"void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & s )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int n )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addfreeformconstraint","text":"void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc )","title":"function AddFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-transformcuttingplanes","text":"void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation","title":"function TransformCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addsphere","text":"void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain.","title":"function AddSphere"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setadaptivitymode","text":"inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getadaptivitymode","text":"inline int GetAdaptivityMode () const","title":"function GetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceon","text":"inline void SetCorrespondenceOn ()","title":"function SetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceoff","text":"inline void SetCorrespondenceOff ()","title":"function SetCorrespondenceOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingon","text":"inline void SetSamplingOn ()","title":"function SetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingoff","text":"inline void SetSamplingOff ()","title":"function SetSamplingOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondenceon","text":"inline bool GetCorrespondenceOn () const","title":"function GetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getsamplingon","text":"inline bool GetSamplingOn () const","title":"function GetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondencemode","text":"void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains).","title":"function SetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-registergeneralshapematrices","text":"inline void RegisterGeneralShapeMatrices ()","title":"function RegisterGeneralShapeMatrices"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setxyz","text":"inline void SetXYZ ( unsigned int i , bool flag )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setnormals","text":"inline void SetNormals ( int i , bool flag )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( const std :: vector < int > s )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getshapematrix","text":"inline LegacyShapeMatrix * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapematrix","text":"inline ShapeMatrix * GetGeneralShapeMatrix ()","title":"function GetGeneralShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapegradientmatrix","text":"inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix ()","title":"function GetGeneralShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction","text":"inline DualVectorFunction * GetLinkingFunction ()","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction ()","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction","text":"inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction ()","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction ()","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction ()","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction","text":"inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction ()","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction_1","text":"inline const DualVectorFunction * GetLinkingFunction () const","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction_1","text":"inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction_1","text":"inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int n )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondencemode","text":"inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const","title":"function GetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile","text":"inline void SetTransformFile ( const std :: string & s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile_1","text":"inline void SetTransformFile ( const char * s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile","text":"inline void SetPrefixTransformFile ( const std :: string & s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile_1","text":"inline void SetPrefixTransformFile ( const char * s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpairwisepotentialtype","text":"inline void SetPairwisePotentialType ( int pairwise_potential_type )","title":"function SetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getpairwisepotentialtype","text":"inline int GetPairwisePotentialType ()","title":"function GetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readtransforms","text":"void ReadTransforms ()","title":"function ReadTransforms"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readpointsfiles","text":"void ReadPointsFiles ()","title":"function ReadPointsFiles"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedatacaches","text":"void AllocateDataCaches ()","title":"function AllocateDataCaches"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedomainsandneighborhoods","text":"void AllocateDomainsAndNeighborhoods ()","title":"function AllocateDomainsAndNeighborhoods"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initializeoptimizationfunctions","text":"void InitializeOptimizationFunctions ()","title":"function InitializeOptimizationFunctions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize_initial_positions","text":"void initialize_initial_positions ()","title":"function initialize_initial_positions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-reinitialize","text":"void ReInitialize ()","title":"function ReInitialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-execute","text":"void Execute ()","title":"function Execute"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computecuttingplanes","text":"CuttingPlaneList ComputeCuttingPlanes ()","title":"function ComputeCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computeplanenormal","text":"Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c )","title":"function ComputePlaneNormal"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getffcs","text":"inline std :: vector < FreeFormConstraint > GetFFCs ()","title":"function GetFFCs"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( bool mesh_ffc_mode )","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#variable-dimension","text":"static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable Dimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html","text":"shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction Public Types Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType Public Functions Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone () Protected Functions Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i). Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: SamplingFunction :: TGradientNumericType ; typedef Self typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ; typedef GradientNumericType typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components. typedef SigmaCacheType typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values. typedef VectorType typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ; typedef GradientVectorType typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( SamplingFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate function Energy inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function AngleCoefficient TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees. function SetMinimumNeighborhoodRadius inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius. function GetMinimumNeighborhoodRadius inline double GetMinimumNeighborhoodRadius () const function SetMaximumNeighborhoodRadius inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. function GetMaximumNeighborhoodRadius inline double GetMaximumNeighborhoodRadius () const function SetFlatCutoff inline void SetFlatCutoff ( double s ) Numerical parameters function GetFlatCutoff inline double GetFlatCutoff () const function SetNeighborhoodToSigmaRatio inline void SetNeighborhoodToSigmaRatio ( double s ) function GetNeighborhoodToSigmaRatio inline double GetNeighborhoodToSigmaRatio () const function SetSpatialSigmaCache inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem). function GetSpatialSigmaCache inline SigmaCacheType * GetSpatialSigmaCache () function GetSpatialSigmaCache inline const SigmaCacheType * GetSpatialSigmaCache () const function ComputeAngularWeights void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0. function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone Protected Functions Documentation function SamplingFunction inline SamplingFunction () function ~SamplingFunction inline virtual ~ SamplingFunction () function operator= void operator = ( const SamplingFunction & ) function SamplingFunction SamplingFunction ( const SamplingFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MinimumNeighborhoodRadius double m_MinimumNeighborhoodRadius ; variable m_MaximumNeighborhoodRadius double m_MaximumNeighborhoodRadius ; variable m_FlatCutoff double m_FlatCutoff ; variable m_NeighborhoodToSigmaRatio double m_NeighborhoodToSigmaRatio ; variable m_SpatialSigmaCache SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#shapeworkssamplingfunction","text":"This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions","text":"Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions","text":"Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes","text":"Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#detailed-description","text":"class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i).","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: SamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-self","text":"typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientnumerictype","text":"typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-sigmacachetype","text":"typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values.","title":"typedef SigmaCacheType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( SamplingFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-anglecoefficient","text":"TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees.","title":"function AngleCoefficient"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setminimumneighborhoodradius","text":"inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius.","title":"function SetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getminimumneighborhoodradius","text":"inline double GetMinimumNeighborhoodRadius () const","title":"function GetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setmaximumneighborhoodradius","text":"inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space.","title":"function SetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getmaximumneighborhoodradius","text":"inline double GetMaximumNeighborhoodRadius () const","title":"function GetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setflatcutoff","text":"inline void SetFlatCutoff ( double s ) Numerical parameters","title":"function SetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getflatcutoff","text":"inline double GetFlatCutoff () const","title":"function GetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setneighborhoodtosigmaratio","text":"inline void SetNeighborhoodToSigmaRatio ( double s )","title":"function SetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getneighborhoodtosigmaratio","text":"inline double GetNeighborhoodToSigmaRatio () const","title":"function GetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setspatialsigmacache","text":"inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem).","title":"function SetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache","text":"inline SigmaCacheType * GetSpatialSigmaCache ()","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache_1","text":"inline const SigmaCacheType * GetSpatialSigmaCache () const","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-computeangularweights","text":"void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0.","title":"function ComputeAngularWeights"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction","text":"inline SamplingFunction ()","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_1","text":"inline virtual ~ SamplingFunction ()","title":"function ~SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-operator","text":"void operator = ( const SamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_2","text":"SamplingFunction ( const SamplingFunction & )","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_minimumneighborhoodradius","text":"double m_MinimumNeighborhoodRadius ;","title":"variable m_MinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_maximumneighborhoodradius","text":"double m_MaximumNeighborhoodRadius ;","title":"variable m_MaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_flatcutoff","text":"double m_FlatCutoff ;","title":"variable m_FlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_neighborhoodtosigmaratio","text":"double m_NeighborhoodToSigmaRatio ;","title":"variable m_NeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_spatialsigmacache","text":"SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_SpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1Session.html","text":"shapeworks::Session Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session > Public Slots Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete () Public Signals Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes () Public Functions Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i) Public Attributes Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C Detailed Description class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project. Public Slots Documentation slot set_feature_auto_scale void set_feature_auto_scale ( bool value ) slot set_landmark_drag_mode void set_landmark_drag_mode ( bool mode ) slot get_landmark_drag_mode bool get_landmark_drag_mode () slot handle_clear_cache void handle_clear_cache () slot handle_new_mesh void handle_new_mesh () slot handle_thread_complete void handle_thread_complete () Public Signals Documentation signal data_changed void data_changed () signal that the data has changed signal points_changed void points_changed () signal landmarks_changed void landmarks_changed () signal planes_changed void planes_changed () signal ffc_changed void ffc_changed () signal update_display void update_display () signal new_mesh void new_mesh () signal feature_range_changed void feature_range_changed () signal update_view_mode void update_view_mode () signal image_slice_settings_changed void image_slice_settings_changed () signal ffc_paint_mode_changed void ffc_paint_mode_changed () signal repaint void repaint () signal reinsert_shapes void reinsert_shapes () Public Functions Documentation function Session Session ( QWidget * parent , Preferences & prefs ) constructor function ~Session ~ Session () destructor function set_parent void set_parent ( QWidget * parent ) set QWidget parent function save_project bool save_project ( QString filename ) save project to file function load_project bool load_project ( QString filename ) load project from file function load_light_project bool load_light_project ( QString filename ) read a lightweight project file function load_xl_project bool load_xl_project ( QString filename ) load a shapeworks project function set_project_path void set_project_path ( QString relative_path ) function get_project std :: shared_ptr < shapeworks :: Project > get_project () function load_original_files void load_original_files ( std :: vector < std :: string > filenames ) import files function load_groomed_files void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files function load_point_files bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ) function update_particles bool update_particles ( std :: vector < Particles > particles ) function get_num_particles int get_num_particles () Return the total number of particles for all domains, combined. function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) function update_procrustes_transforms void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms ) function is_light_project bool is_light_project () function get_groomed_present bool get_groomed_present () function remove_shapes void remove_shapes ( QList < int > list ) remove shapes function get_shapes ShapeList get_shapes () return all shapes function calculate_reconstructed_samples void calculate_reconstructed_samples () function get_filename QString get_filename () get the filename function get_display_name QString get_display_name () get file display name function original_present bool original_present () function groomed_present bool groomed_present () function particles_present bool particles_present () function groups_available bool groups_available () function get_num_shapes int get_num_shapes () function get_domains_per_shape int get_domains_per_shape () function get_default_feature_map std :: string get_default_feature_map () function get_mesh_manager inline std :: shared_ptr < MeshManager > get_mesh_manager () function parameters shapeworks :: Parameters & parameters () function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () function update_auto_glyph_size double update_auto_glyph_size () function get_auto_glyph_size double get_auto_glyph_size () function clear_particles void clear_particles () clear particles from session (e.g. groom start, optimize start) function get_feature_auto_scale bool get_feature_auto_scale () function get_feature_range_max double get_feature_range_max () function get_feature_range_min double get_feature_range_min () function set_feature_range void set_feature_range ( double min , double max ) function set_feature_range_min void set_feature_range_min ( double value ) function set_feature_range_max void set_feature_range_max ( double value ) function handle_ctrl_click void handle_ctrl_click ( PickResult result ) function trigger_landmarks_changed void trigger_landmarks_changed () function trigger_planes_changed void trigger_planes_changed () function trigger_ffc_changed void trigger_ffc_changed () function set_active_landmark_domain void set_active_landmark_domain ( int id ) function get_active_landmark_domain int get_active_landmark_domain () function set_placing_landmark void set_placing_landmark ( int id ) function get_placing_landmark int get_placing_landmark () function set_landmarks_active void set_landmarks_active ( bool active ) function get_landmarks_active bool get_landmarks_active () function set_planes_active void set_planes_active ( bool active ) function get_planes_active bool get_planes_active () function set_show_landmark_labels void set_show_landmark_labels ( bool show ) function get_show_landmark_labels bool get_show_landmark_labels () function set_show_planes void set_show_planes ( bool show ) function get_show_planes bool get_show_planes () function should_show_planes bool should_show_planes () function set_show_landmarks void set_show_landmarks ( bool show ) function get_show_landmarks bool get_show_landmarks () function set_image_name bool set_image_name ( std :: string image_name ) function get_image_name std :: string get_image_name () function set_image_axis void set_image_axis ( QString axis ) function get_image_axis Axis get_image_axis () function set_image_3d_mode void set_image_3d_mode ( bool mode ) function get_image_3d_mode bool get_image_3d_mode () function set_image_share_window_and_level void set_image_share_window_and_level ( bool enabled ) function get_image_share_window_and_level bool get_image_share_window_and_level () function set_image_sync_slice void set_image_sync_slice ( bool enabled ) function get_image_sync_slice bool get_image_sync_slice () function has_constraints bool has_constraints () function set_loading void set_loading ( bool loading ) function is_loading bool is_loading () function set_tool_state void set_tool_state ( std :: string state ) function get_tool_state std :: string get_tool_state () function is_analysis_mode bool is_analysis_mode () function set_ffc_paint_active void set_ffc_paint_active ( bool enabled ) function get_ffc_paint_active bool get_ffc_paint_active () function set_ffc_paint_mode_inclusive void set_ffc_paint_mode_inclusive ( bool inclusive ) function get_ffc_paint_mode_inclusive bool get_ffc_paint_mode_inclusive () function set_ffc_paint_size void set_ffc_paint_size ( double size ) function get_ffc_paint_size double get_ffc_paint_size () function get_show_good_bad_particles bool get_show_good_bad_particles () function set_show_good_bad_particles void set_show_good_bad_particles ( bool enabled ) function get_show_difference_vectors bool get_show_difference_vectors () function set_show_difference_vectors void set_show_difference_vectors ( bool enabled ) function should_difference_vectors_show bool should_difference_vectors_show () function get_good_bad_particles std :: vector < bool > get_good_bad_particles () function set_good_bad_particles void set_good_bad_particles ( const std :: vector < bool > & good_bad ) function set_difference_particles inline void set_difference_particles ( Particles particles ) function get_difference_particles inline Particles get_difference_particles () function set_compare_settings void set_compare_settings ( CompareSettings settings ) function get_compare_settings CompareSettings get_compare_settings () function trigger_repaint void trigger_repaint () function trigger_reinsert_shapes void trigger_reinsert_shapes () function set_display_mode void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed) function get_display_mode DisplayMode get_display_mode () return the current display mode function set_glyph_lut inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function get_glyph_lut inline vtkSmartPointer < vtkLookupTable > get_glyph_lut () function is_supported_file_format static bool is_supported_file_format ( std :: string filename ) function get_point static Point3 get_point ( const Eigen :: VectorXd & points , int i ) Public Attributes Documentation variable DATA_C static const std :: string DATA_C ; variable GROOM_C static const std :: string GROOM_C ; variable OPTIMIZE_C static const std :: string OPTIMIZE_C ; variable ANALYSIS_C static const std :: string ANALYSIS_C ; variable DEEPSSM_C static const std :: string DEEPSSM_C ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#shapeworkssession","text":"Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session >","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots","text":"Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals","text":"Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions","text":"Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes","text":"Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Session.html#detailed-description","text":"class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_feature_auto_scale","text":"void set_feature_auto_scale ( bool value )","title":"slot set_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_landmark_drag_mode","text":"void set_landmark_drag_mode ( bool mode )","title":"slot set_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-get_landmark_drag_mode","text":"bool get_landmark_drag_mode ()","title":"slot get_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-data_changed","text":"void data_changed () signal that the data has changed","title":"signal data_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-points_changed","text":"void points_changed ()","title":"signal points_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-landmarks_changed","text":"void landmarks_changed ()","title":"signal landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-planes_changed","text":"void planes_changed ()","title":"signal planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_changed","text":"void ffc_changed ()","title":"signal ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_display","text":"void update_display ()","title":"signal update_display"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-feature_range_changed","text":"void feature_range_changed ()","title":"signal feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_view_mode","text":"void update_view_mode ()","title":"signal update_view_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-image_slice_settings_changed","text":"void image_slice_settings_changed ()","title":"signal image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_paint_mode_changed","text":"void ffc_paint_mode_changed ()","title":"signal ffc_paint_mode_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-repaint","text":"void repaint ()","title":"signal repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-reinsert_shapes","text":"void reinsert_shapes ()","title":"signal reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session","text":"Session ( QWidget * parent , Preferences & prefs ) constructor","title":"function Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session_1","text":"~ Session () destructor","title":"function ~Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_parent","text":"void set_parent ( QWidget * parent ) set QWidget parent","title":"function set_parent"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-save_project","text":"bool save_project ( QString filename ) save project to file","title":"function save_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_project","text":"bool load_project ( QString filename ) load project from file","title":"function load_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_light_project","text":"bool load_light_project ( QString filename ) read a lightweight project file","title":"function load_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_xl_project","text":"bool load_xl_project ( QString filename ) load a shapeworks project","title":"function load_xl_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_project_path","text":"void set_project_path ( QString relative_path )","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_project","text":"std :: shared_ptr < shapeworks :: Project > get_project ()","title":"function get_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_original_files","text":"void load_original_files ( std :: vector < std :: string > filenames ) import files","title":"function load_original_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_groomed_files","text":"void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files","title":"function load_groomed_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_point_files","text":"bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape )","title":"function load_point_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_particles","text":"bool update_particles ( std :: vector < Particles > particles )","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_particles","text":"int get_num_particles () Return the total number of particles for all domains, combined.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain )","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_procrustes_transforms","text":"void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms )","title":"function update_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_light_project","text":"bool is_light_project ()","title":"function is_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_present","text":"bool get_groomed_present ()","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-remove_shapes","text":"void remove_shapes ( QList < int > list ) remove shapes","title":"function remove_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_shapes","text":"ShapeList get_shapes () return all shapes","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-calculate_reconstructed_samples","text":"void calculate_reconstructed_samples ()","title":"function calculate_reconstructed_samples"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_filename","text":"QString get_filename () get the filename","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_name","text":"QString get_display_name () get file display name","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-original_present","text":"bool original_present ()","title":"function original_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groomed_present","text":"bool groomed_present ()","title":"function groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-particles_present","text":"bool particles_present ()","title":"function particles_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groups_available","text":"bool groups_available ()","title":"function groups_available"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_shapes","text":"int get_num_shapes ()","title":"function get_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_domains_per_shape","text":"int get_domains_per_shape ()","title":"function get_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_default_feature_map","text":"std :: string get_default_feature_map ()","title":"function get_default_feature_map"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_mesh_manager","text":"inline std :: shared_ptr < MeshManager > get_mesh_manager ()","title":"function get_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-parameters","text":"shapeworks :: Parameters & parameters ()","title":"function parameters"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types ()","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_auto_glyph_size","text":"double update_auto_glyph_size ()","title":"function update_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_auto_glyph_size","text":"double get_auto_glyph_size ()","title":"function get_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-clear_particles","text":"void clear_particles () clear particles from session (e.g. groom start, optimize start)","title":"function clear_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_auto_scale","text":"bool get_feature_auto_scale ()","title":"function get_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_max","text":"double get_feature_range_max ()","title":"function get_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_min","text":"double get_feature_range_min ()","title":"function get_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range","text":"void set_feature_range ( double min , double max )","title":"function set_feature_range"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_min","text":"void set_feature_range_min ( double value )","title":"function set_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_max","text":"void set_feature_range_max ( double value )","title":"function set_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_landmarks_changed","text":"void trigger_landmarks_changed ()","title":"function trigger_landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_planes_changed","text":"void trigger_planes_changed ()","title":"function trigger_planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_ffc_changed","text":"void trigger_ffc_changed ()","title":"function trigger_ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_active_landmark_domain","text":"void set_active_landmark_domain ( int id )","title":"function set_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_active_landmark_domain","text":"int get_active_landmark_domain ()","title":"function get_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_placing_landmark","text":"void set_placing_landmark ( int id )","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_placing_landmark","text":"int get_placing_landmark ()","title":"function get_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_landmarks_active","text":"void set_landmarks_active ( bool active )","title":"function set_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_landmarks_active","text":"bool get_landmarks_active ()","title":"function get_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_planes_active","text":"void set_planes_active ( bool active )","title":"function set_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_planes_active","text":"bool get_planes_active ()","title":"function get_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmark_labels","text":"void set_show_landmark_labels ( bool show )","title":"function set_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmark_labels","text":"bool get_show_landmark_labels ()","title":"function get_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_planes","text":"void set_show_planes ( bool show )","title":"function set_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_planes","text":"bool get_show_planes ()","title":"function get_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_show_planes","text":"bool should_show_planes ()","title":"function should_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmarks","text":"void set_show_landmarks ( bool show )","title":"function set_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmarks","text":"bool get_show_landmarks ()","title":"function get_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_name","text":"bool set_image_name ( std :: string image_name )","title":"function set_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_name","text":"std :: string get_image_name ()","title":"function get_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_axis","text":"void set_image_axis ( QString axis )","title":"function set_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_axis","text":"Axis get_image_axis ()","title":"function get_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_3d_mode","text":"void set_image_3d_mode ( bool mode )","title":"function set_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_3d_mode","text":"bool get_image_3d_mode ()","title":"function get_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_share_window_and_level","text":"void set_image_share_window_and_level ( bool enabled )","title":"function set_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_share_window_and_level","text":"bool get_image_share_window_and_level ()","title":"function get_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_sync_slice","text":"void set_image_sync_slice ( bool enabled )","title":"function set_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_sync_slice","text":"bool get_image_sync_slice ()","title":"function get_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-has_constraints","text":"bool has_constraints ()","title":"function has_constraints"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_loading","text":"void set_loading ( bool loading )","title":"function set_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_loading","text":"bool is_loading ()","title":"function is_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_tool_state","text":"void set_tool_state ( std :: string state )","title":"function set_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_tool_state","text":"std :: string get_tool_state ()","title":"function get_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_analysis_mode","text":"bool is_analysis_mode ()","title":"function is_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_active","text":"void set_ffc_paint_active ( bool enabled )","title":"function set_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_active","text":"bool get_ffc_paint_active ()","title":"function get_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_mode_inclusive","text":"void set_ffc_paint_mode_inclusive ( bool inclusive )","title":"function set_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_mode_inclusive","text":"bool get_ffc_paint_mode_inclusive ()","title":"function get_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_size","text":"void set_ffc_paint_size ( double size )","title":"function set_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_size","text":"double get_ffc_paint_size ()","title":"function get_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_good_bad_particles","text":"bool get_show_good_bad_particles ()","title":"function get_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_good_bad_particles","text":"void set_show_good_bad_particles ( bool enabled )","title":"function set_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_difference_vectors","text":"bool get_show_difference_vectors ()","title":"function get_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_difference_vectors","text":"void set_show_difference_vectors ( bool enabled )","title":"function set_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_difference_vectors_show","text":"bool should_difference_vectors_show ()","title":"function should_difference_vectors_show"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_good_bad_particles","text":"std :: vector < bool > get_good_bad_particles ()","title":"function get_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_good_bad_particles","text":"void set_good_bad_particles ( const std :: vector < bool > & good_bad )","title":"function set_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_difference_particles","text":"inline void set_difference_particles ( Particles particles )","title":"function set_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_difference_particles","text":"inline Particles get_difference_particles ()","title":"function get_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_compare_settings","text":"void set_compare_settings ( CompareSettings settings )","title":"function set_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_compare_settings","text":"CompareSettings get_compare_settings ()","title":"function get_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_repaint","text":"void trigger_repaint ()","title":"function trigger_repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_reinsert_shapes","text":"void trigger_reinsert_shapes ()","title":"function trigger_reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_display_mode","text":"void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed)","title":"function set_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_mode","text":"DisplayMode get_display_mode () return the current display mode","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_glyph_lut","text":"inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_glyph_lut","text":"inline vtkSmartPointer < vtkLookupTable > get_glyph_lut ()","title":"function get_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_supported_file_format","text":"static bool is_supported_file_format ( std :: string filename )","title":"function is_supported_file_format"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_point","text":"static Point3 get_point ( const Eigen :: VectorXd & points , int i )","title":"function get_point"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-data_c","text":"static const std :: string DATA_C ;","title":"variable DATA_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-groom_c","text":"static const std :: string GROOM_C ;","title":"variable GROOM_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-optimize_c","text":"static const std :: string OPTIMIZE_C ;","title":"variable OPTIMIZE_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-analysis_c","text":"static const std :: string ANALYSIS_C ;","title":"variable ANALYSIS_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-deepssm_c","text":"static const std :: string DEEPSSM_C ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable DEEPSSM_C"},{"location":"api/Classes/classshapeworks_1_1Shape.html","text":"shapeworks::Shape Representation of a single shape/patient/subject. #include Public Classes Name class Point TODO: replace this wherever it is used. Public Functions Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers () Public Functions Documentation function Shape Shape () function ~Shape ~ Shape () function get_display_name std :: string get_display_name () function get_meshes MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ) function set_annotations void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ) function get_annotations std :: vector < std :: string > get_annotations () function set_mesh_manager void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ) function set_subject void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ) function is_subject bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) function get_subject std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object. function import_original_file void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file. function get_original_meshes MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes. function get_groomed_meshes MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes. function get_reconstructed_meshes MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes. function reset_groomed_mesh void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. function import_global_point_files bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files. function import_local_point_files bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files. function import_landmarks_files bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files. function store_landmarks bool store_landmarks () Store landmarks. function import_constraints bool import_constraints ( std :: vector < std :: string > filenames ) import constraints function store_constraints bool store_constraints () Store constraints. function set_particles void set_particles ( Particles particles ) Set particles. function get_particles Particles get_particles () Get particles. function set_particle_transform void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment) function set_alignment_type void set_alignment_type ( int alignment ) Set the alignment type. function get_global_correspondence_points Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points. function get_particles_for_display std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display. function get_local_correspondence_points Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points. function clear_reconstructed_mesh void clear_reconstructed_mesh () function get_id int get_id () Get the id of this shape. function set_id void set_id ( int id ) Set the id of this shape. function get_original_filenames std :: vector < std :: string > get_original_filenames () function get_original_filenames_with_path std :: vector < std :: string > get_original_filenames_with_path () function get_original_filename std :: string get_original_filename () function get_original_filename_with_path std :: string get_original_filename_with_path () function get_groomed_filename std :: string get_groomed_filename () function get_groomed_filename_with_path std :: string get_groomed_filename_with_path ( int domain ) function get_global_point_filename std :: string get_global_point_filename () function get_global_point_filename_with_path std :: string get_global_point_filename_with_path () function get_local_point_filename std :: string get_local_point_filename () function get_local_point_filename_with_path std :: string get_local_point_filename_with_path () function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function get_transform vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ) function get_inverse_transform vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ) function has_alignment bool has_alignment () function get_original_transform vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ) function set_reconstruction_transforms void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms ) function get_reconstruction_transform vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ) function get_groomed_transform vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ) function get_procrustes_transform vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ) function get_procrustes_transforms std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms () function get_alignment vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ) function load_feature void load_feature ( DisplayMode display_mode , std :: string feature ) function get_image_volume std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ) function get_point_features Eigen :: VectorXf get_point_features ( std :: string feature ) function set_point_features void set_point_features ( std :: string feature , Eigen :: VectorXf values ) function load_feature_from_scalar_file void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ) function set_override_feature void set_override_feature ( std :: string feature ) function get_override_feature std :: string get_override_feature () function landmarks Eigen :: MatrixXd & landmarks () function constraints std :: vector < Constraints > & constraints () function get_constraints Constraints & get_constraints ( int domain_id ) function has_planes bool has_planes () function get_groomed_mesh_wrappers std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#shapeworksshape","text":"Representation of a single shape/patient/subject. #include ","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-classes","text":"Name class Point TODO: replace this wherever it is used.","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions","text":"Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape","text":"Shape ()","title":"function Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape_1","text":"~ Shape ()","title":"function ~Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_display_name","text":"std :: string get_display_name ()","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_meshes","text":"MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false )","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_annotations","text":"void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true )","title":"function set_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_annotations","text":"std :: vector < std :: string > get_annotations ()","title":"function get_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_mesh_manager","text":"void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager )","title":"function set_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_subject","text":"void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject )","title":"function set_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-is_subject","text":"bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not)","title":"function is_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_subject","text":"std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object.","title":"function get_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_original_file","text":"void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file.","title":"function import_original_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_meshes","text":"MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes.","title":"function get_original_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_meshes","text":"MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes.","title":"function get_groomed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstructed_meshes","text":"MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes.","title":"function get_reconstructed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-reset_groomed_mesh","text":"void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created.","title":"function reset_groomed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_global_point_files","text":"bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files.","title":"function import_global_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_local_point_files","text":"bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files.","title":"function import_local_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_landmarks_files","text":"bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files.","title":"function import_landmarks_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_landmarks","text":"bool store_landmarks () Store landmarks.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_constraints","text":"bool import_constraints ( std :: vector < std :: string > filenames ) import constraints","title":"function import_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_constraints","text":"bool store_constraints () Store constraints.","title":"function store_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particles","text":"void set_particles ( Particles particles ) Set particles.","title":"function set_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles","text":"Particles get_particles () Get particles.","title":"function get_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particle_transform","text":"void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment)","title":"function set_particle_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment ) Set the alignment type.","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_correspondence_points","text":"Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points.","title":"function get_global_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles_for_display","text":"std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display.","title":"function get_particles_for_display"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_correspondence_points","text":"Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points.","title":"function get_local_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-clear_reconstructed_mesh","text":"void clear_reconstructed_mesh ()","title":"function clear_reconstructed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_id","text":"int get_id () Get the id of this shape.","title":"function get_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_id","text":"void set_id ( int id ) Set the id of this shape.","title":"function set_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames","text":"std :: vector < std :: string > get_original_filenames ()","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames_with_path","text":"std :: vector < std :: string > get_original_filenames_with_path ()","title":"function get_original_filenames_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename","text":"std :: string get_original_filename ()","title":"function get_original_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename_with_path","text":"std :: string get_original_filename_with_path ()","title":"function get_original_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename","text":"std :: string get_groomed_filename ()","title":"function get_groomed_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename_with_path","text":"std :: string get_groomed_filename_with_path ( int domain )","title":"function get_groomed_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename","text":"std :: string get_global_point_filename ()","title":"function get_global_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename_with_path","text":"std :: string get_global_point_filename_with_path ()","title":"function get_global_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename","text":"std :: string get_local_point_filename ()","title":"function get_local_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename_with_path","text":"std :: string get_local_point_filename_with_path ()","title":"function get_local_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_inverse_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 )","title":"function get_inverse_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_alignment","text":"bool has_alignment ()","title":"function has_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_transform","text":"vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 )","title":"function get_original_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_reconstruction_transforms","text":"void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms )","title":"function set_reconstruction_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstruction_transform","text":"vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain )","title":"function get_reconstruction_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_transform","text":"vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 )","title":"function get_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transform","text":"vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 )","title":"function get_procrustes_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transforms","text":"std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms ()","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_alignment","text":"vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 )","title":"function get_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature","text":"void load_feature ( DisplayMode display_mode , std :: string feature )","title":"function load_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_image_volume","text":"std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name )","title":"function get_image_volume"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_point_features","text":"Eigen :: VectorXf get_point_features ( std :: string feature )","title":"function get_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_point_features","text":"void set_point_features ( std :: string feature , Eigen :: VectorXf values )","title":"function set_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature_from_scalar_file","text":"void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name )","title":"function load_feature_from_scalar_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_override_feature","text":"void set_override_feature ( std :: string feature )","title":"function set_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_override_feature","text":"std :: string get_override_feature ()","title":"function get_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-landmarks","text":"Eigen :: MatrixXd & landmarks ()","title":"function landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-constraints","text":"std :: vector < Constraints > & constraints ()","title":"function constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_constraints","text":"Constraints & get_constraints ( int domain_id )","title":"function get_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_planes","text":"bool has_planes ()","title":"function has_planes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_mesh_wrappers","text":"std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-24 at 22:16:02 +0000","title":"function get_groomed_mesh_wrappers"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html","text":"shapeworks::ShapeEvaluation Public Functions Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) Public Attributes Name const unsigned VDimension Public Functions Documentation function ShapeEvaluation ShapeEvaluation () function ComputeCompactness static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullCompactness static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeGeneralization static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullGeneralization static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeSpecificity static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullSpecificity static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) Public Attributes Documentation variable VDimension static const unsigned VDimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#shapeworksshapeevaluation","text":"","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions","text":"Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes","text":"Name const unsigned VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-shapeevaluation","text":"ShapeEvaluation ()","title":"function ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computecompactness","text":"static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullcompactness","text":"static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computegeneralization","text":"static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullgeneralization","text":"static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computespecificity","text":"static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullspecificity","text":"static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#variable-vdimension","text":"static const unsigned VDimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html","text":"shapeworks::ShapeEvaluationJob Inherits from shapeworks::Job , QObject Public Types Name enum class JobType Public Signals Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) Public Functions Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Types Documentation enum JobType Enumerator Value Description CompactnessType SpecificityType GeneralizationType Public Signals Documentation signal report_progress void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ) signal result_ready void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) Public Functions Documentation function ShapeEvaluationJob ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#shapeworksshapeevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types","text":"Name enum class JobType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals","text":"Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions","text":"Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#enum-jobtype","text":"Enumerator Value Description CompactnessType SpecificityType GeneralizationType","title":"enum JobType"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-report_progress","text":"void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress )","title":"signal report_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-result_ready","text":"void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-shapeevaluationjob","text":"ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats )","title":"function ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-24 at 22:16:02 +0000","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html","text":"shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) function itkTypeMacro itkTypeMacro ( ShapeGradientMatrix , Observer ) function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function SetValues void SetValues ( const ParticleSystemType * ps , int idx , int d ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Protected Functions Documentation function ShapeGradientMatrix inline ShapeGradientMatrix () function ~ShapeGradientMatrix inline virtual ~ ShapeGradientMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#shapeworksshapegradientmatrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions","text":"Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#detailed-description","text":"class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-self","text":"typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ;","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self )","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeGradientMatrix , Observer )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setvalues","text":"void SetValues ( const ParticleSystemType * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix","text":"inline ShapeGradientMatrix ()","title":"function ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix_1","text":"inline virtual ~ ShapeGradientMatrix ()","title":"function ~ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html","text":"shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () Protected Functions Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods). function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function SetValues inline void SetValues ( const ParticleSystem * ps , int idx , int d ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () Protected Functions Documentation function ShapeMatrix inline ShapeMatrix () function ~ShapeMatrix inline virtual ~ ShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#shapeworksshapematrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions","text":"Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#detailed-description","text":"class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-self","text":"typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setvalues","text":"inline void SetValues ( const ParticleSystem * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix","text":"inline ShapeMatrix ()","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix_1","text":"inline virtual ~ ShapeMatrix ()","title":"function ~ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html","text":"shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. More... #include Inherits from QMainWindow Public Slots Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session () Public Functions Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names) Protected Functions Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override Detailed Description class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface Public Slots Documentation slot open_project void open_project ( QString filename ) slot on_action_new_project_triggered void on_action_new_project_triggered () slot on_action_open_project_triggered void on_action_open_project_triggered () slot on_action_show_project_folder_triggered void on_action_show_project_folder_triggered () slot on_action_save_project_triggered bool on_action_save_project_triggered () slot save_project_as bool save_project_as ( QString type ) slot save_as_swproj_clicked void save_as_swproj_clicked () slot save_as_xlsx_clicked void save_as_xlsx_clicked () slot on_action_quit_triggered void on_action_quit_triggered () slot on_action_import_triggered void on_action_import_triggered () slot splash_screen_closed void splash_screen_closed () slot on_vertical_scroll_bar_valueChanged void on_vertical_scroll_bar_valueChanged () slot on_action_import_mode_triggered void on_action_import_mode_triggered () slot on_action_groom_mode_triggered void on_action_groom_mode_triggered () slot on_action_optimize_mode_triggered void on_action_optimize_mode_triggered () slot on_action_analysis_mode_triggered void on_action_analysis_mode_triggered () slot on_action_deepssm_mode_triggered void on_action_deepssm_mode_triggered () slot on_actionShow_Tool_Window_triggered void on_actionShow_Tool_Window_triggered () slot on_actionExport_PCA_Mesh_triggered void on_actionExport_PCA_Mesh_triggered () slot on_actionExport_Eigenvalues_triggered void on_actionExport_Eigenvalues_triggered () slot on_actionExport_Eigenvectors_triggered void on_actionExport_Eigenvectors_triggered () slot on_actionExport_PCA_Mode_Points_triggered void on_actionExport_PCA_Mode_Points_triggered () slot on_action_preferences_triggered void on_action_preferences_triggered () slot action_export_current_mesh_triggered void action_export_current_mesh_triggered ( int index = 0 ) slot on_action_export_current_particles_triggered void on_action_export_current_particles_triggered () slot on_action_export_mesh_scalars_triggered void on_action_export_mesh_scalars_triggered () slot on_action_export_pca_scores_triggered void on_action_export_pca_scores_triggered () slot action_export_pca_montage_triggered void action_export_pca_montage_triggered () slot action_export_screenshot_triggered void action_export_screenshot_triggered () slot action_export_particle_scalars_triggered void action_export_particle_scalars_triggered () slot action_export_all_subjects_particle_scalars_triggered void action_export_all_subjects_particle_scalars_triggered () slot on_center_checkbox_stateChanged void on_center_checkbox_stateChanged () slot on_zoom_slider_valueChanged void on_zoom_slider_valueChanged () slot on_view_mode_combobox_currentIndexChanged void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ) slot on_auto_view_button_clicked void on_auto_view_button_clicked () slot handle_pca_changed void handle_pca_changed () slot handle_slider_update void handle_slider_update () slot handle_mca_changed void handle_mca_changed () slot handle_project_changed void handle_project_changed () slot handle_points_changed void handle_points_changed () slot handle_groom_start void handle_groom_start () slot handle_groom_complete void handle_groom_complete () slot handle_optimize_start void handle_optimize_start () slot handle_optimize_complete void handle_optimize_complete () slot handle_reconstruction_complete void handle_reconstruction_complete () slot handle_display_setting_changed void handle_display_setting_changed () slot handle_glyph_changed void handle_glyph_changed () slot handle_opacity_changed void handle_opacity_changed () slot handle_alignment_changed void handle_alignment_changed () slot handle_open_recent void handle_open_recent () slot handle_color_scheme void handle_color_scheme () slot handle_pca_update void handle_pca_update () slot clear_message void clear_message () slot handle_message void handle_message ( std :: string str ) slot handle_error void handle_error ( std :: string str ) slot handle_warning void handle_warning ( std :: string str ) slot handle_debug void handle_debug ( std :: string str ) slot handle_status void handle_status ( std :: string str ) slot handle_progress_with_message void handle_progress_with_message ( int amt , std :: string str ) slot handle_progress void handle_progress ( int amt ) slot message_callback void message_callback ( std :: string str ) slot handle_new_mesh void handle_new_mesh () slot handle_clear_cache void handle_clear_cache () slot handle_compare_settings_changed void handle_compare_settings_changed () slot handle_lightbox_right_click void handle_lightbox_right_click ( int index ) slot update_feature_map_selection void update_feature_map_selection ( int index ) slot update_feature_map_scale void update_feature_map_scale () slot image_combo_changed void image_combo_changed ( int index ) slot show_splash_screen void show_splash_screen () slot hide_splash_screen void hide_splash_screen () slot about void about () slot keyboard_shortcuts void keyboard_shortcuts () slot toggle_log_window void toggle_log_window () slot get_py_worker QSharedPointer < PythonWorker > get_py_worker () slot prefs inline Preferences & prefs () slot session inline QSharedPointer < Session > session () Public Functions Documentation function ShapeWorksStudioApp ShapeWorksStudioApp () function ~ShapeWorksStudioApp ~ ShapeWorksStudioApp () function closeEvent void closeEvent ( QCloseEvent * event ) override function initialize_vtk void initialize_vtk () function import_files void import_files ( QStringList file_names ) Protected Functions Documentation function dragEnterEvent void dragEnterEvent ( QDragEnterEvent * event ) override function dragLeaveEvent void dragLeaveEvent ( QDragLeaveEvent * event ) override function dropEvent void dropEvent ( QDropEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#shapeworksshapeworksstudioapp","text":"Main ShapeWorksStudio window. More... #include Inherits from QMainWindow","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots","text":"Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions","text":"Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions","text":"Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#detailed-description","text":"class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-open_project","text":"void open_project ( QString filename )","title":"slot open_project"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_new_project_triggered","text":"void on_action_new_project_triggered ()","title":"slot on_action_new_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_open_project_triggered","text":"void on_action_open_project_triggered ()","title":"slot on_action_open_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_show_project_folder_triggered","text":"void on_action_show_project_folder_triggered ()","title":"slot on_action_show_project_folder_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_save_project_triggered","text":"bool on_action_save_project_triggered ()","title":"slot on_action_save_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_project_as","text":"bool save_project_as ( QString type )","title":"slot save_project_as"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_swproj_clicked","text":"void save_as_swproj_clicked ()","title":"slot save_as_swproj_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_xlsx_clicked","text":"void save_as_xlsx_clicked ()","title":"slot save_as_xlsx_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_quit_triggered","text":"void on_action_quit_triggered ()","title":"slot on_action_quit_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_triggered","text":"void on_action_import_triggered ()","title":"slot on_action_import_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-splash_screen_closed","text":"void splash_screen_closed ()","title":"slot splash_screen_closed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_vertical_scroll_bar_valuechanged","text":"void on_vertical_scroll_bar_valueChanged ()","title":"slot on_vertical_scroll_bar_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_mode_triggered","text":"void on_action_import_mode_triggered ()","title":"slot on_action_import_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_groom_mode_triggered","text":"void on_action_groom_mode_triggered ()","title":"slot on_action_groom_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_optimize_mode_triggered","text":"void on_action_optimize_mode_triggered ()","title":"slot on_action_optimize_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_analysis_mode_triggered","text":"void on_action_analysis_mode_triggered ()","title":"slot on_action_analysis_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_deepssm_mode_triggered","text":"void on_action_deepssm_mode_triggered ()","title":"slot on_action_deepssm_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionshow_tool_window_triggered","text":"void on_actionShow_Tool_Window_triggered ()","title":"slot on_actionShow_Tool_Window_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mesh_triggered","text":"void on_actionExport_PCA_Mesh_triggered ()","title":"slot on_actionExport_PCA_Mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvalues_triggered","text":"void on_actionExport_Eigenvalues_triggered ()","title":"slot on_actionExport_Eigenvalues_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvectors_triggered","text":"void on_actionExport_Eigenvectors_triggered ()","title":"slot on_actionExport_Eigenvectors_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mode_points_triggered","text":"void on_actionExport_PCA_Mode_Points_triggered ()","title":"slot on_actionExport_PCA_Mode_Points_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_preferences_triggered","text":"void on_action_preferences_triggered ()","title":"slot on_action_preferences_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_current_mesh_triggered","text":"void action_export_current_mesh_triggered ( int index = 0 )","title":"slot action_export_current_mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_current_particles_triggered","text":"void on_action_export_current_particles_triggered ()","title":"slot on_action_export_current_particles_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_mesh_scalars_triggered","text":"void on_action_export_mesh_scalars_triggered ()","title":"slot on_action_export_mesh_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_pca_scores_triggered","text":"void on_action_export_pca_scores_triggered ()","title":"slot on_action_export_pca_scores_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_pca_montage_triggered","text":"void action_export_pca_montage_triggered ()","title":"slot action_export_pca_montage_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_screenshot_triggered","text":"void action_export_screenshot_triggered ()","title":"slot action_export_screenshot_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_particle_scalars_triggered","text":"void action_export_particle_scalars_triggered ()","title":"slot action_export_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_all_subjects_particle_scalars_triggered","text":"void action_export_all_subjects_particle_scalars_triggered ()","title":"slot action_export_all_subjects_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_center_checkbox_statechanged","text":"void on_center_checkbox_stateChanged ()","title":"slot on_center_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_zoom_slider_valuechanged","text":"void on_zoom_slider_valueChanged ()","title":"slot on_zoom_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_view_mode_combobox_currentindexchanged","text":"void on_view_mode_combobox_currentIndexChanged ( QString disp_mode )","title":"slot on_view_mode_combobox_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_auto_view_button_clicked","text":"void on_auto_view_button_clicked ()","title":"slot on_auto_view_button_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_changed","text":"void handle_pca_changed ()","title":"slot handle_pca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_slider_update","text":"void handle_slider_update ()","title":"slot handle_slider_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_mca_changed","text":"void handle_mca_changed ()","title":"slot handle_mca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_project_changed","text":"void handle_project_changed ()","title":"slot handle_project_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_points_changed","text":"void handle_points_changed ()","title":"slot handle_points_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_start","text":"void handle_groom_start ()","title":"slot handle_groom_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_complete","text":"void handle_groom_complete ()","title":"slot handle_groom_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_start","text":"void handle_optimize_start ()","title":"slot handle_optimize_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_display_setting_changed","text":"void handle_display_setting_changed ()","title":"slot handle_display_setting_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_glyph_changed","text":"void handle_glyph_changed ()","title":"slot handle_glyph_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_opacity_changed","text":"void handle_opacity_changed ()","title":"slot handle_opacity_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ()","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_open_recent","text":"void handle_open_recent ()","title":"slot handle_open_recent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_color_scheme","text":"void handle_color_scheme ()","title":"slot handle_color_scheme"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_update","text":"void handle_pca_update ()","title":"slot handle_pca_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-clear_message","text":"void clear_message ()","title":"slot clear_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_message","text":"void handle_message ( std :: string str )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_error","text":"void handle_error ( std :: string str )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_warning","text":"void handle_warning ( std :: string str )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_debug","text":"void handle_debug ( std :: string str )","title":"slot handle_debug"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_status","text":"void handle_status ( std :: string str )","title":"slot handle_status"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress_with_message","text":"void handle_progress_with_message ( int amt , std :: string str )","title":"slot handle_progress_with_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress","text":"void handle_progress ( int amt )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-message_callback","text":"void message_callback ( std :: string str )","title":"slot message_callback"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_compare_settings_changed","text":"void handle_compare_settings_changed ()","title":"slot handle_compare_settings_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_lightbox_right_click","text":"void handle_lightbox_right_click ( int index )","title":"slot handle_lightbox_right_click"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_selection","text":"void update_feature_map_selection ( int index )","title":"slot update_feature_map_selection"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_scale","text":"void update_feature_map_scale ()","title":"slot update_feature_map_scale"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-image_combo_changed","text":"void image_combo_changed ( int index )","title":"slot image_combo_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-show_splash_screen","text":"void show_splash_screen ()","title":"slot show_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-hide_splash_screen","text":"void hide_splash_screen ()","title":"slot hide_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-about","text":"void about ()","title":"slot about"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-keyboard_shortcuts","text":"void keyboard_shortcuts ()","title":"slot keyboard_shortcuts"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-toggle_log_window","text":"void toggle_log_window ()","title":"slot toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-get_py_worker","text":"QSharedPointer < PythonWorker > get_py_worker ()","title":"slot get_py_worker"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-prefs","text":"inline Preferences & prefs ()","title":"slot prefs"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-session","text":"inline QSharedPointer < Session > session ()","title":"slot session"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp","text":"ShapeWorksStudioApp ()","title":"function ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp_1","text":"~ ShapeWorksStudioApp ()","title":"function ~ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-initialize_vtk","text":"void initialize_vtk ()","title":"function initialize_vtk"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-import_files","text":"void import_files ( QStringList file_names )","title":"function import_files"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragenterevent","text":"void dragEnterEvent ( QDragEnterEvent * event ) override","title":"function dragEnterEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragleaveevent","text":"void dragLeaveEvent ( QDragLeaveEvent * event ) override","title":"function dragLeaveEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dropevent","text":"void dropEvent ( QDropEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function dropEvent"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html","text":"title: shapeworks::Shape::Point summary: TODO: replace this wherever it is used. shapeworks::Shape::Point TODO: replace this wherever it is used. #include Public Functions Name Point () Point (double _x, double _y, double _z) Public Attributes Name double x double y double z Public Functions Documentation function Point inline Point () function Point inline Point ( double _x , double _y , double _z ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"classshapeworks 1 1Shape 1 1Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#shapeworksshapepoint","text":"TODO: replace this wherever it is used. #include ","title":"shapeworks::Shape::Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions","text":"Name Point () Point (double _x, double _y, double _z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point","text":"inline Point ()","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point_1","text":"inline Point ( double _x , double _y , double _z )","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-z","text":"double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable z"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html","text":"shapeworks::ShapeworksCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#shapeworksshapeworkscommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html","text":"shapeworks::ShapeworksUtils Public Functions Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat) Public Functions Documentation function now static inline time_point now () get the current time function elapsed static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console function rngSeed static inline unsigned rngSeed () returns random seed function setRngSeed static void setRngSeed ( const unsigned seed ) sets random seed function generateNumber static inline unsigned generateNumber () generates random number function is_directory static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory function exists static bool exists ( const std :: string & filename ) returns true if filename exists function getMatrix static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector function getOffset static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#shapeworksshapeworksutils","text":"","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions","text":"Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-now","text":"static inline time_point now () get the current time","title":"function now"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-elapsed","text":"static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console","title":"function elapsed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-rngseed","text":"static inline unsigned rngSeed () returns random seed","title":"function rngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-setrngseed","text":"static void setRngSeed ( const unsigned seed ) sets random seed","title":"function setRngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-generatenumber","text":"static inline unsigned generateNumber () generates random number","title":"function generateNumber"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-is_directory","text":"static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory","title":"function is_directory"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-exists","text":"static bool exists ( const std :: string & filename ) returns true if filename exists","title":"function exists"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getmatrix","text":"static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector","title":"function getMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getoffset","text":"static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html","text":"shapeworks::ShapeworksWorker Inherits from QObject Public Types Name enum ThreadType Public Slots Name void process () Public Signals Name void result_ready () void failure () void finished () Public Functions Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker () Public Types Documentation enum ThreadType Enumerator Value Description GroomType OptimizeType ReconstructType Public Slots Documentation slot process void process () Public Signals Documentation signal result_ready void result_ready () signal failure void failure () signal finished void finished () Public Functions Documentation function ShapeworksWorker ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ) function ~ShapeworksWorker ~ ShapeworksWorker () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#shapeworksshapeworksworker","text":"Inherits from QObject","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types","text":"Name enum ThreadType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals","text":"Name void result_ready () void failure () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions","text":"Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#enum-threadtype","text":"Enumerator Value Description GroomType OptimizeType ReconstructType","title":"enum ThreadType"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-failure","text":"void failure ()","title":"signal failure"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker","text":"ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 )","title":"function ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker_1","text":"~ ShapeworksWorker () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1SliceView.html","text":"shapeworks::SliceView SliceView . More... #include Public Types Name enum SliceChange Public Functions Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z) Detailed Description class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer Public Types Documentation enum SliceChange Enumerator Value Description Down Up Public Functions Documentation function SliceView SliceView ( Viewer * viewer ) function set_volume void set_volume ( std :: shared_ptr < Image > volume ) function set_mesh void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ) function set_orientation void set_orientation ( int orientation ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key Point handle_key ( std :: string key ) function change_slice void change_slice ( SliceChange change ) function get_slice_position Point get_slice_position () function set_slice_position void set_slice_position ( Point point ) function set_window_and_level void set_window_and_level ( double window , double level ) function get_spacing double get_spacing () function get_orientation_index int get_orientation_index () function update_particles void update_particles () function get_viewer Viewer * get_viewer () function should_point_show bool should_point_show ( double x , double y , double z ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#shapeworkssliceview","text":"SliceView . More... #include ","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types","text":"Name enum SliceChange","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions","text":"Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#detailed-description","text":"class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#enum-slicechange","text":"Enumerator Value Description Down Up","title":"enum SliceChange"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-sliceview","text":"SliceView ( Viewer * viewer )","title":"function SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_volume","text":"void set_volume ( std :: shared_ptr < Image > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_mesh","text":"void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_orientation","text":"void set_orientation ( int orientation )","title":"function set_orientation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-handle_key","text":"Point handle_key ( std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-change_slice","text":"void change_slice ( SliceChange change )","title":"function change_slice"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_slice_position","text":"Point get_slice_position ()","title":"function get_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_slice_position","text":"void set_slice_position ( Point point )","title":"function set_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_window_and_level","text":"void set_window_and_level ( double window , double level )","title":"function set_window_and_level"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_spacing","text":"double get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_orientation_index","text":"int get_orientation_index ()","title":"function get_orientation_index"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_particles","text":"void update_particles ()","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_viewer","text":"Viewer * get_viewer ()","title":"function get_viewer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-should_point_show","text":"bool should_point_show ( double x , double y , double z ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function should_point_show"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html","text":"shapeworks::SplashScreen More... #include Inherits from QDialog Public Signals Name void open_project (QString file_path) signal to open a particular project Public Functions Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor Detailed Description class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects Public Signals Documentation signal open_project void open_project ( QString file_path ) signal to open a particular project Public Functions Documentation function SplashScreen SplashScreen ( QWidget * parent , Preferences & preferences ) constructor function ~SplashScreen virtual ~ SplashScreen () destructor Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#shapeworkssplashscreen","text":"More... #include Inherits from QDialog","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals","text":"Name void open_project (QString file_path) signal to open a particular project","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions","text":"Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#detailed-description","text":"class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#signal-open_project","text":"void open_project ( QString file_path ) signal to open a particular project","title":"signal open_project"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen","text":"SplashScreen ( QWidget * parent , Preferences & preferences ) constructor","title":"function SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen_1","text":"virtual ~ SplashScreen () destructor Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~SplashScreen"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html","text":"shapeworks::StatsGroupLDAJob Inherits from shapeworks::Job , QObject Public Functions Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function StatsGroupLDAJob StatsGroupLDAJob () function set_stats void set_stats ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () function plot void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#shapeworksstatsgroupldajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions","text":"Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-statsgroupldajob","text":"StatsGroupLDAJob ()","title":"function StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-set_stats","text":"void set_stats ( ParticleShapeStatistics stats )","title":"function set_stats"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues ()","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-plot","text":"void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function plot"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html","text":"shapeworks::StatusBarWidget StatusBarWidget . More... #include Inherits from QWidget Public Signals Name void toggle_log_window () Public Functions Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override Detailed Description class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar Public Signals Documentation signal toggle_log_window void toggle_log_window () Public Functions Documentation function StatusBarWidget StatusBarWidget ( QMainWindow * parent = 0 ) function set_message void set_message ( MessageType message_type , QString message ) function set_progress void set_progress ( int value ) function resizeEvent void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#shapeworksstatusbarwidget","text":"StatusBarWidget . More... #include Inherits from QWidget","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals","text":"Name void toggle_log_window ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions","text":"Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#detailed-description","text":"class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#signal-toggle_log_window","text":"void toggle_log_window ()","title":"signal toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-statusbarwidget","text":"StatusBarWidget ( QMainWindow * parent = 0 )","title":"function StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_message","text":"void set_message ( MessageType message_type , QString message )","title":"function set_message"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_progress","text":"void set_progress ( int value )","title":"function set_progress"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html","text":"shapeworks::StringUtils String utility functions. #include Public Functions Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement. Public Functions Documentation function removeExtension static std :: string removeExtension ( std :: string const & filename ) function getPath static std :: string getPath ( std :: string const & filename ) function getFilename static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return. function getBaseFilenameWithoutExtension static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension. function toLower static std :: string toLower ( std :: string s ) function hasSuffix static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ) function getFileNamesFromPaths static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths ) function getLowerExtension static std :: string getLowerExtension ( std :: string const & filename ) function safeString static inline std :: string safeString ( const char * s ) function replace_string static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#shapeworksstringutils","text":"String utility functions. #include ","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions","text":"Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-removeextension","text":"static std :: string removeExtension ( std :: string const & filename )","title":"function removeExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getpath","text":"static std :: string getPath ( std :: string const & filename )","title":"function getPath"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilename","text":"static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return.","title":"function getFilename"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getbasefilenamewithoutextension","text":"static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension.","title":"function getBaseFilenameWithoutExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-tolower","text":"static std :: string toLower ( std :: string s )","title":"function toLower"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-hassuffix","text":"static bool hasSuffix ( std :: string const & filename , std :: string const & suffix )","title":"function hasSuffix"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilenamesfrompaths","text":"static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths )","title":"function getFileNamesFromPaths"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getlowerextension","text":"static std :: string getLowerExtension ( std :: string const & filename )","title":"function getLowerExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-safestring","text":"static inline std :: string safeString ( const char * s )","title":"function safeString"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-replace_string","text":"static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-24 at 22:16:02 +0000","title":"function replace_string"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html","text":"shapeworks::StudioHandleWidget Inherits from vtkHandleWidget Public Functions Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget) Protected Functions Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w) Protected Attributes Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_ Public Functions Documentation function New static StudioHandleWidget * New () function StudioHandleWidget StudioHandleWidget () function set_domain inline void set_domain ( int domain ) function set_plane inline void set_plane ( int plane ) function set_point inline void set_point ( int point ) function set_plane_widget inline void set_plane_widget ( PlaneWidget * plane_widget ) Protected Functions Documentation function RightClickSelectAction static void RightClickSelectAction ( vtkAbstractWidget * w ) function CustomMoveAction static void CustomMoveAction ( vtkAbstractWidget * w ) function CustomSelectAction static void CustomSelectAction ( vtkAbstractWidget * w ) function CustomEndSelectAction static void CustomEndSelectAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable domain_ int domain_ = -1 ; variable plane_ int plane_ = -1 ; variable point_ int point_ = -1 ; variable plane_widget_ PlaneWidget * plane_widget_ ; variable shift_active_ bool shift_active_ = false ; variable start_y_ int start_y_ = 0 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#shapeworksstudiohandlewidget","text":"Inherits from vtkHandleWidget","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions","text":"Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions","text":"Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes","text":"Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-new","text":"static StudioHandleWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-studiohandlewidget","text":"StudioHandleWidget ()","title":"function StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_domain","text":"inline void set_domain ( int domain )","title":"function set_domain"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane","text":"inline void set_plane ( int plane )","title":"function set_plane"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_point","text":"inline void set_point ( int point )","title":"function set_point"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane_widget","text":"inline void set_plane_widget ( PlaneWidget * plane_widget )","title":"function set_plane_widget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-rightclickselectaction","text":"static void RightClickSelectAction ( vtkAbstractWidget * w )","title":"function RightClickSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-custommoveaction","text":"static void CustomMoveAction ( vtkAbstractWidget * w )","title":"function CustomMoveAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customselectaction","text":"static void CustomSelectAction ( vtkAbstractWidget * w )","title":"function CustomSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customendselectaction","text":"static void CustomEndSelectAction ( vtkAbstractWidget * w )","title":"function CustomEndSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_","text":"int plane_ = -1 ;","title":"variable plane_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-point_","text":"int point_ = -1 ;","title":"variable point_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_widget_","text":"PlaneWidget * plane_widget_ ;","title":"variable plane_widget_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-shift_active_","text":"bool shift_active_ = false ;","title":"variable shift_active_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-start_y_","text":"int start_y_ = 0 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable start_y_"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html","text":"shapeworks::StudioInteractorStyle Inherits from vtkInteractorStyleTrackballCamera Public Functions Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override Protected Functions Name void Dolly (double factor) override Public Functions Documentation function New static StudioInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioInteractorStyle StudioInteractorStyle () function ~StudioInteractorStyle virtual ~ StudioInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnRightButtonUp void OnRightButtonUp () override function OnMouseWheelForward void OnMouseWheelForward () override function OnMouseWheelBackward void OnMouseWheelBackward () override function OnKeyDown void OnKeyDown () override function Dolly void Dolly () override function Rotate void Rotate () override function OnMouseMove void OnMouseMove () override Protected Functions Documentation function Dolly void Dolly ( double factor ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#shapeworksstudiointeractorstyle","text":"Inherits from vtkInteractorStyleTrackballCamera","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions","text":"Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions","text":"Name void Dolly (double factor) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-new","text":"static StudioInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle","text":"StudioInteractorStyle ()","title":"function StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle_1","text":"virtual ~ StudioInteractorStyle ()","title":"function ~StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttonup","text":"void OnRightButtonUp () override","title":"function OnRightButtonUp"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelforward","text":"void OnMouseWheelForward () override","title":"function OnMouseWheelForward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelbackward","text":"void OnMouseWheelBackward () override","title":"function OnMouseWheelBackward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly","text":"void Dolly () override","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-rotate","text":"void Rotate () override","title":"function Rotate"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousemove","text":"void OnMouseMove () override","title":"function OnMouseMove"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly_1","text":"void Dolly ( double factor ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html","text":"shapeworks::StudioMesh Representation of a single mesh. More... #include Public Functions Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Name constexpr const char *const FFC_PAINT Detailed Description class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class Public Functions Documentation function StudioMesh StudioMesh () Constructor. function ~StudioMesh ~ StudioMesh () Destructor. function get_poly_data vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata. function set_poly_data void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly. function set_error_message void set_error_message ( std :: string error_message ) Set the error message. function get_error_message std :: string get_error_message () Return the error message. function apply_feature_map void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map. function apply_scalars void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform. function interpolate_scalars_to_mesh void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh. function get_largest_dimension_size double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) function get_or_create_array vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name. function paint_ffc void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint. function has_ffc_paint bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Documentation variable FFC_PAINT static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#shapeworksstudiomesh","text":"Representation of a single mesh. More... #include ","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions","text":"Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes","text":"Name constexpr const char *const FFC_PAINT","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#detailed-description","text":"class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh","text":"StudioMesh () Constructor.","title":"function StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh_1","text":"~ StudioMesh () Destructor.","title":"function ~StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_poly_data","text":"vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata.","title":"function get_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_poly_data","text":"void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly.","title":"function set_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_error_message","text":"void set_error_message ( std :: string error_message ) Set the error message.","title":"function set_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_error_message","text":"std :: string get_error_message () Return the error message.","title":"function get_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_feature_map","text":"void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map.","title":"function apply_feature_map"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_scalars","text":"void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform.","title":"function apply_scalars"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-interpolate_scalars_to_mesh","text":"void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh.","title":"function interpolate_scalars_to_mesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_largest_dimension_size","text":"double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100)","title":"function get_largest_dimension_size"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_or_create_array","text":"vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name.","title":"function get_or_create_array"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-paint_ffc","text":"void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint.","title":"function paint_ffc"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-has_ffc_paint","text":"bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"function has_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#variable-ffc_paint","text":"static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable FFC_PAINT"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html","text":"shapeworks::StudioSliceInteractorStyle Inherits from vtkInteractorStyleImage Public Functions Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override Public Functions Documentation function New static StudioSliceInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioSliceInteractorStyle StudioSliceInteractorStyle () function ~StudioSliceInteractorStyle virtual ~ StudioSliceInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnKeyDown void OnKeyDown () override function WindowLevel void WindowLevel () override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#shapeworksstudiosliceinteractorstyle","text":"Inherits from vtkInteractorStyleImage","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions","text":"Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-new","text":"static StudioSliceInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle","text":"StudioSliceInteractorStyle ()","title":"function StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle_1","text":"virtual ~ StudioSliceInteractorStyle ()","title":"function ~StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-windowlevel","text":"void WindowLevel () override Updated on 2023-10-24 at 22:16:02 +0000","title":"function WindowLevel"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html","text":"shapeworks::StudioUtils Utilities for Studio. #include Public Functions Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport Public Functions Documentation function ask_multiple_domains_as_single static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ) function to_string_list static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList function vtk_image_to_qimage static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage function reverse_poly_data static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data function get_platform_string static QString get_platform_string () return platform string function add_viewport_border static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#shapeworksstudioutils","text":"Utilities for Studio. #include ","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions","text":"Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-ask_multiple_domains_as_single","text":"static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project )","title":"function ask_multiple_domains_as_single"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-to_string_list","text":"static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList","title":"function to_string_list"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-vtk_image_to_qimage","text":"static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage","title":"function vtk_image_to_qimage"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-reverse_poly_data","text":"static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data","title":"function reverse_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-get_platform_string","text":"static QString get_platform_string () return platform string","title":"function get_platform_string"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-add_viewport_border","text":"static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-24 at 22:16:02 +0000","title":"function add_viewport_border"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html","text":"shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow Public Functions Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override Public Functions Documentation function New static StudioVtkOutputWindow * New () function vtkTypeMacro vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) function StudioVtkOutputWindow StudioVtkOutputWindow () function DisplayErrorText void DisplayErrorText ( const char * text ) override function DisplayWarningText void DisplayWarningText ( const char * text ) override function DisplayGenericWarningText void DisplayGenericWarningText ( const char * text ) override function DisplayDebugText void DisplayDebugText ( const char * text ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#shapeworksstudiovtkoutputwindow","text":"Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions","text":"Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-new","text":"static StudioVtkOutputWindow * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-studiovtkoutputwindow","text":"StudioVtkOutputWindow ()","title":"function StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displayerrortext","text":"void DisplayErrorText ( const char * text ) override","title":"function DisplayErrorText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaywarningtext","text":"void DisplayWarningText ( const char * text ) override","title":"function DisplayWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaygenericwarningtext","text":"void DisplayGenericWarningText ( const char * text ) override","title":"function DisplayGenericWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaydebugtext","text":"void DisplayDebugText ( const char * text ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function DisplayDebugText"},{"location":"api/Classes/classshapeworks_1_1Style.html","text":"shapeworks::Style Public Functions Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button) Public Functions Documentation function Style Style () function apply_normal_button_style static void apply_normal_button_style ( QPushButton * button ) function apply_abort_button_style static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#shapeworksstyle","text":"","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions","text":"Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-style","text":"Style ()","title":"function Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_normal_button_style","text":"static void apply_normal_button_style ( QPushButton * button )","title":"function apply_normal_button_style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_abort_button_style","text":"static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function apply_abort_button_style"},{"location":"api/Classes/classshapeworks_1_1Subject.html","text":"shapeworks::Subject Representation of a single subject. More... #include Public Types Name using project::types::StringMap StringMap using project::types::StringList StringList Public Functions Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not. Detailed Description class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it. Public Types Documentation using StringMap using shapeworks :: Subject :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: Subject :: StringList = project :: types :: StringList ; Public Functions Documentation function Subject Subject () function ~Subject ~ Subject () function set_original_filenames void set_original_filenames ( StringList filenames ) Set original filenames (one per domain) function get_original_filenames StringList get_original_filenames () Get original filenames. function set_groomed_filenames void set_groomed_filenames ( StringList filenames ) Set groomed filenames. function get_groomed_filenames StringList get_groomed_filenames () Get groomed filenames. function set_local_particle_filenames void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain) function get_local_particle_filenames StringList get_local_particle_filenames () Get local particle filenames. function set_world_particle_filenames void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames. function get_world_particle_filenames StringList get_world_particle_filenames () Get the world particle filenames. function set_landmarks_filenames void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain) function get_landmarks_filenames StringList get_landmarks_filenames () Set the landmarks filenames. function set_constraints_filenames void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain) function get_constraints_filenames StringList get_constraints_filenames () Set the constratins filenames. function set_number_of_domains void set_number_of_domains ( int number_of_domains ) Set the number of domains. function get_number_of_domains int get_number_of_domains () Get the number of domains. function get_feature_filenames StringMap get_feature_filenames () const Get the feature map filenames. function set_feature_filenames void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames. function get_groomed_transforms std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) function set_groomed_transforms void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain) function set_groomed_transform void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform. function get_procrustes_transforms std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) function set_procrustes_transforms void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain) function get_group_values StringMap get_group_values () const Get the group values. function get_group_value std :: string get_group_value ( std :: string group_name ) Get a specific group value. function set_group_values void set_group_values ( const StringMap & group_values ) Set the group values. function get_extra_values StringMap get_extra_values () const Get extra values (extra columns we don't interpret) function set_extra_values void set_extra_values ( StringMap extra_values ) function get_table_values StringMap get_table_values () const Get all table values. function set_table_values void set_table_values ( StringMap table_values ) function get_display_name std :: string get_display_name () Get the display name. function set_display_name void set_display_name ( std :: string display_name ) Set the display name. function is_fixed bool is_fixed () Get if this subject is fixed or not. function set_fixed void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#shapeworkssubject","text":"Representation of a single subject. More... #include ","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types","text":"Name using project::types::StringMap StringMap using project::types::StringList StringList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions","text":"Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Subject.html#detailed-description","text":"class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringmap","text":"using shapeworks :: Subject :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringlist","text":"using shapeworks :: Subject :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject","text":"Subject ()","title":"function Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject_1","text":"~ Subject ()","title":"function ~Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_original_filenames","text":"void set_original_filenames ( StringList filenames ) Set original filenames (one per domain)","title":"function set_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_original_filenames","text":"StringList get_original_filenames () Get original filenames.","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_filenames","text":"void set_groomed_filenames ( StringList filenames ) Set groomed filenames.","title":"function set_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_filenames","text":"StringList get_groomed_filenames () Get groomed filenames.","title":"function get_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_local_particle_filenames","text":"void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain)","title":"function set_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_local_particle_filenames","text":"StringList get_local_particle_filenames () Get local particle filenames.","title":"function get_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_world_particle_filenames","text":"void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames.","title":"function set_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_world_particle_filenames","text":"StringList get_world_particle_filenames () Get the world particle filenames.","title":"function get_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_landmarks_filenames","text":"void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain)","title":"function set_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_landmarks_filenames","text":"StringList get_landmarks_filenames () Set the landmarks filenames.","title":"function get_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_constraints_filenames","text":"void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain)","title":"function set_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_constraints_filenames","text":"StringList get_constraints_filenames () Set the constratins filenames.","title":"function get_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_number_of_domains","text":"void set_number_of_domains ( int number_of_domains ) Set the number of domains.","title":"function set_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_number_of_domains","text":"int get_number_of_domains () Get the number of domains.","title":"function get_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_feature_filenames","text":"StringMap get_feature_filenames () const Get the feature map filenames.","title":"function get_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_feature_filenames","text":"void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames.","title":"function set_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_transforms","text":"std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain)","title":"function get_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transforms","text":"void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain)","title":"function set_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transform","text":"void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform.","title":"function set_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_procrustes_transforms","text":"std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain)","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain)","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_values","text":"StringMap get_group_values () const Get the group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_value","text":"std :: string get_group_value ( std :: string group_name ) Get a specific group value.","title":"function get_group_value"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_group_values","text":"void set_group_values ( const StringMap & group_values ) Set the group values.","title":"function set_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_extra_values","text":"StringMap get_extra_values () const Get extra values (extra columns we don't interpret)","title":"function get_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_extra_values","text":"void set_extra_values ( StringMap extra_values )","title":"function set_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_table_values","text":"StringMap get_table_values () const Get all table values.","title":"function get_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_table_values","text":"void set_table_values ( StringMap table_values )","title":"function set_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_display_name","text":"std :: string get_display_name () Get the display name.","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_display_name","text":"void set_display_name ( std :: string display_name ) Set the display name.","title":"function set_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-is_fixed","text":"bool is_fixed () Get if this subject is fixed or not.","title":"function is_fixed"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_fixed","text":"void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_fixed"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html","text":"shapeworks::Telemetry Inherits from QObject Public Slots Name void handle_network_reply (QNetworkReply * reply) Public Functions Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params) Public Slots Documentation slot handle_network_reply void handle_network_reply ( QNetworkReply * reply ) Public Functions Documentation function Telemetry Telemetry ( Preferences & prefs ) function record_event void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#shapeworkstelemetry","text":"Inherits from QObject","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots","text":"Name void handle_network_reply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions","text":"Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#slot-handle_network_reply","text":"void handle_network_reply ( QNetworkReply * reply )","title":"slot handle_network_reply"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-telemetry","text":"Telemetry ( Preferences & prefs )","title":"function Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-record_event","text":"void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function record_event"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html","text":"shapeworks::UpdateChecker Update Checker. More... #include Inherits from QDialog Public Slots Name void handleNetworkReply (QNetworkReply * reply) Public Functions Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check () Detailed Description class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog Public Slots Documentation slot handleNetworkReply void handleNetworkReply ( QNetworkReply * reply ) Public Functions Documentation function UpdateChecker explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ) function ~UpdateChecker ~ UpdateChecker () function run_auto_update_check void run_auto_update_check () function run_manual_update_check void run_manual_update_check () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#shapeworksupdatechecker","text":"Update Checker. More... #include Inherits from QDialog","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots","text":"Name void handleNetworkReply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions","text":"Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#detailed-description","text":"class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#slot-handlenetworkreply","text":"void handleNetworkReply ( QNetworkReply * reply )","title":"slot handleNetworkReply"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker","text":"explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr )","title":"function UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker_1","text":"~ UpdateChecker ()","title":"function ~UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_auto_update_check","text":"void run_auto_update_check ()","title":"function run_auto_update_check"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_manual_update_check","text":"void run_manual_update_check () Updated on 2023-10-24 at 22:16:02 +0000","title":"function run_manual_update_check"},{"location":"api/Classes/classshapeworks_1_1Variant.html","text":"shapeworks::Variant Variant class to represent multiple types. More... #include Public Functions Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const Detailed Description class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet Public Functions Documentation function Variant inline Variant () function Variant inline Variant ( const std :: string & v ) function Variant inline Variant ( int v ) function Variant inline Variant ( double v ) function Variant inline Variant ( const char * v ) function Variant inline Variant ( bool v ) function Variant inline Variant ( std :: vector < double > v ) function Variant inline Variant ( std :: vector < int > v ) function Variant inline Variant ( std :: vector < bool > v ) function Variant inline Variant ( std :: vector < std :: string > v ) function operator std::string operator std :: string () const function operator bool operator bool () const function operator int operator int () const function operator unsigned int operator unsigned int () const function operator long operator long () const function operator unsigned long operator unsigned long () const function operator float operator float () const function operator double operator double () const function operator std::vector< double > operator std :: vector < double > () const function operator std::vector< int > operator std :: vector < int > () const function operator std::vector< bool > operator std :: vector < bool > () const function operator std::vector< std::string > operator std :: vector < std :: string > () const Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#shapeworksvariant","text":"Variant class to represent multiple types. More... #include ","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions","text":"Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Variant.html#detailed-description","text":"class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant","text":"inline Variant ()","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_1","text":"inline Variant ( const std :: string & v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_2","text":"inline Variant ( int v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_3","text":"inline Variant ( double v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_4","text":"inline Variant ( const char * v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_5","text":"inline Variant ( bool v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_6","text":"inline Variant ( std :: vector < double > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_7","text":"inline Variant ( std :: vector < int > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_8","text":"inline Variant ( std :: vector < bool > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_9","text":"inline Variant ( std :: vector < std :: string > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdstring","text":"operator std :: string () const","title":"function operator std::string"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-bool","text":"operator bool () const","title":"function operator bool"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-int","text":"operator int () const","title":"function operator int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-int","text":"operator unsigned int () const","title":"function operator unsigned int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-long","text":"operator long () const","title":"function operator long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-long","text":"operator unsigned long () const","title":"function operator unsigned long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-float","text":"operator float () const","title":"function operator float"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-double","text":"operator double () const","title":"function operator double"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-double","text":"operator std :: vector < double > () const","title":"function operator std::vector< double >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-int","text":"operator std :: vector < int > () const","title":"function operator std::vector< int >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-bool","text":"operator std :: vector < bool > () const","title":"function operator std::vector< bool >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-stdstring","text":"operator std :: vector < std :: string > () const Updated on 2023-10-24 at 22:16:02 +0000","title":"function operator std::vector< std::string >"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html","text":"shapeworks::VectorFunction More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction Public Types Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType Public Functions Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & ) Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result. Public Types Documentation typedef Self typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ; typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors. Public Functions Documentation function itkTypeMacro itkTypeMacro ( VectorFunction , LightObject ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate function Energy virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class. function AfterIteration inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function GetParticleSystem inline virtual ParticleSystem * GetParticleSystem () const function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber function GetDomainNumber inline virtual int GetDomainNumber () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling Protected Functions Documentation function VectorFunction inline VectorFunction () function ~VectorFunction inline virtual ~ VectorFunction () function operator= void operator = ( const VectorFunction & ) function VectorFunction VectorFunction ( const VectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ParticleSystem ParticleSystem * m_ParticleSystem ; variable m_DomainNumber unsigned int m_DomainNumber ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#shapeworksvectorfunction","text":"More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types","text":"Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions","text":"Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions","text":"Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes","text":"Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#detailed-description","text":"class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-self","text":"typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( VectorFunction , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-energy","text":"virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getparticlesystem","text":"inline virtual ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getdomainnumber","text":"inline virtual int GetDomainNumber () const","title":"function GetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction","text":"inline VectorFunction ()","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_1","text":"inline virtual ~ VectorFunction ()","title":"function ~VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-operator","text":"void operator = ( const VectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_2","text":"VectorFunction ( const VectorFunction & )","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_particlesystem","text":"ParticleSystem * m_ParticleSystem ;","title":"variable m_ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_domainnumber","text":"unsigned int m_DomainNumber ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_DomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html","text":"shapeworks::VectorImage Gradient (vector) image. #include Public Types Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator Public Functions Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator () Public Types Documentation using GradientImageFilter using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; Public Functions Documentation function VectorImage VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform) function VectorImage VectorImage () = delete function ~VectorImage ~ VectorImage () = default function evaluate Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ). function iterator ImageIterator iterator () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#shapeworksvectorimage","text":"Gradient (vector) image. #include ","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types","text":"Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions","text":"Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientimagefilter","text":"using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ;","title":"using GradientImageFilter"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imagetype","text":"using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientinterpolatortype","text":"using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ;","title":"using GradientInterpolatorType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imageiterator","text":"using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage","text":"VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform)","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_1","text":"VectorImage () = delete","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_2","text":"~ VectorImage () = default","title":"function ~VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-evaluate","text":"Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ).","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-iterator","text":"ImageIterator iterator () Updated on 2023-10-24 at 22:16:02 +0000","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Viewer.html","text":"shapeworks::Viewer 3D Viewer More... #include Public Functions Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform) Detailed Description class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape Public Functions Documentation function Viewer Viewer () function ~Viewer ~ Viewer () = default function set_renderer void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ) function get_renderer vtkSmartPointer < vtkRenderer > get_renderer () function display_shape void display_shape ( std :: shared_ptr < Shape > shape ) function clear_viewer void clear_viewer () function reset_camera void reset_camera ( std :: array < double , 3 > c ) function reset_camera void reset_camera () function set_color_series void set_color_series ( ColorMap color_series ) function set_glyph_size_and_quality void set_glyph_size_and_quality ( double size , double quality ) function get_glyph_size double get_glyph_size () function get_glyph_quality double get_glyph_quality () function set_session void set_session ( QSharedPointer < Session > session ) function get_session QSharedPointer < Session > get_session () function set_show_glyphs void set_show_glyphs ( bool show ) function set_show_surface void set_show_surface ( bool show ) function set_scale_arrows void set_scale_arrows ( bool scale ) function update_points void update_points () function update_glyph_properties void update_glyph_properties () function handle_pick int handle_pick ( int * click_pos ) function handle_ctrl_click PickResult handle_ctrl_click ( int * click_pos ) function set_selected_point void set_selected_point ( int id ) function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_loading_screen void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ) function set_color_scheme void set_color_scheme ( int i ) function handle_new_mesh void handle_new_mesh () function is_viewer_ready bool is_viewer_ready () function set_visualizer void set_visualizer ( Visualizer * visualizer ) function update_feature_range void update_feature_range ( double * range ) function update_opacities void update_opacities () function get_shape std :: shared_ptr < Shape > get_shape () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function get_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors () function get_unclipped_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors () function get_meshes MeshGroup get_meshes () function get_transform vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ) function get_landmark_transform vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ) function get_inverse_landmark_transform vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ) function get_image_transform vtkSmartPointer < vtkTransform > get_image_transform () function slice_view SliceView & slice_view () function update_image_volume void update_image_volume () function get_glyph_points vtkSmartPointer < vtkPoints > get_glyph_points () function get_alignment_transform vtkSmartPointer < vtkTransform > get_alignment_transform () function update_clipping_planes void update_clipping_planes () function get_point_placer vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer () function handle_ffc_paint void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] ) function update_actors void update_actors () function remove_scalar_bar void remove_scalar_bar () function is_ready inline bool is_ready () function get_particle_scalars vtkFloatArray * get_particle_scalars () function get_particle_poly_data vtkSmartPointer < vtkPolyData > get_particle_poly_data () function insert_compare_meshes void insert_compare_meshes () function set_scalar_visibility void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ) function is_reverse static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#shapeworksviewer","text":"3D Viewer More... #include ","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions","text":"Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#detailed-description","text":"class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer","text":"Viewer ()","title":"function Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer_1","text":"~ Viewer () = default","title":"function ~Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_renderer","text":"void set_renderer ( vtkSmartPointer < vtkRenderer > renderer )","title":"function set_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_renderer","text":"vtkSmartPointer < vtkRenderer > get_renderer ()","title":"function get_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-display_shape","text":"void display_shape ( std :: shared_ptr < Shape > shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-clear_viewer","text":"void clear_viewer ()","title":"function clear_viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera","text":"void reset_camera ( std :: array < double , 3 > c )","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera_1","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_series","text":"void set_color_series ( ColorMap color_series )","title":"function set_color_series"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_size_and_quality","text":"void set_glyph_size_and_quality ( double size , double quality )","title":"function set_glyph_size_and_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_size","text":"double get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_quality","text":"double get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_session","text":"QSharedPointer < Session > get_session ()","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show )","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_surface","text":"void set_show_surface ( bool show )","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scale_arrows","text":"void set_scale_arrows ( bool scale )","title":"function set_scale_arrows"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_points","text":"void update_points ()","title":"function update_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_pick","text":"int handle_pick ( int * click_pos )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ctrl_click","text":"PickResult handle_ctrl_click ( int * click_pos )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_selected_point","text":"void set_selected_point ( int id )","title":"function set_selected_point"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_loading_screen","text":"void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen )","title":"function set_loading_screen"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_scheme","text":"void set_color_scheme ( int i )","title":"function set_color_scheme"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_viewer_ready","text":"bool is_viewer_ready ()","title":"function is_viewer_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_feature_range","text":"void update_feature_range ( double * range )","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_opacities","text":"void update_opacities ()","title":"function update_opacities"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_shape","text":"std :: shared_ptr < Shape > get_shape ()","title":"function get_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors ()","title":"function get_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_unclipped_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors ()","title":"function get_unclipped_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_meshes","text":"MeshGroup get_meshes ()","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain )","title":"function get_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_inverse_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain )","title":"function get_inverse_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_image_transform","text":"vtkSmartPointer < vtkTransform > get_image_transform ()","title":"function get_image_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-slice_view","text":"SliceView & slice_view ()","title":"function slice_view"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_image_volume","text":"void update_image_volume ()","title":"function update_image_volume"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_points","text":"vtkSmartPointer < vtkPoints > get_glyph_points ()","title":"function get_glyph_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_alignment_transform","text":"vtkSmartPointer < vtkTransform > get_alignment_transform ()","title":"function get_alignment_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_clipping_planes","text":"void update_clipping_planes ()","title":"function update_clipping_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_point_placer","text":"vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer ()","title":"function get_point_placer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ffc_paint","text":"void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] )","title":"function handle_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_actors","text":"void update_actors ()","title":"function update_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-remove_scalar_bar","text":"void remove_scalar_bar ()","title":"function remove_scalar_bar"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_ready","text":"inline bool is_ready ()","title":"function is_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_scalars","text":"vtkFloatArray * get_particle_scalars ()","title":"function get_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_particle_poly_data ()","title":"function get_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-insert_compare_meshes","text":"void insert_compare_meshes ()","title":"function insert_compare_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scalar_visibility","text":"void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar )","title":"function set_scalar_visibility"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_reverse","text":"static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function is_reverse"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html","text":"shapeworks::Visualizer Controls display of objects in viewers. More... #include Inherits from QObject Public Slots Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed () Public Functions Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size. Detailed Description class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions. Public Slots Documentation slot update_viewer_properties void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) slot handle_feature_range_changed void handle_feature_range_changed () slot handle_image_slice_settings_changed void handle_image_slice_settings_changed () Public Functions Documentation function Visualizer Visualizer ( Preferences & prefs ) function ~Visualizer ~ Visualizer () function set_lightbox void set_lightbox ( LightboxHandle lightbox ) set the lightbox function set_session void set_session ( SessionHandle session ) set the session function set_center void set_center ( bool center ) turn automatic centering on/off function get_center bool get_center () get centering on/off function set_alignment_domain void set_alignment_domain ( int domain ) set the alignment domain function get_alignment_domain int get_alignment_domain () get the current alignment domain function set_show_glyphs void set_show_glyphs ( bool show ) turn on/off glyph display function set_show_surface void set_show_surface ( bool show ) turn on/off surface display function display_samples void display_samples () update the display using the current settings function update_samples void update_samples () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function display_sample void display_sample ( int i ) function display_shape void display_shape ( ShapeHandle shape ) function display_shapes void display_shapes ( ShapeList shapes ) function set_selected_point_one void set_selected_point_one ( int id ) function set_selected_point_two void set_selected_point_two ( int id ) function set_mean void set_mean ( const Eigen :: VectorXd & mean ) function set_mean_shape void set_mean_shape ( ShapeHandle mean_shape ) function get_mean_shape ShapeHandle get_mean_shape () function reset_camera void reset_camera () function update_lut void update_lut () function get_current_shape Particles get_current_shape () function get_current_particle_scalars vtkFloatArray * get_current_particle_scalars () function get_current_particle_poly_data vtkSmartPointer < vtkPolyData > get_current_particle_poly_data () function handle_new_mesh void handle_new_mesh () function get_current_mesh vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ) function get_current_meshes_transformed std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index ) function get_feature_map const std :: string & get_feature_map () const Get the currently selected feature map. function set_uniform_feature_range void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range. function get_uniform_feature_range bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range. function set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. function clear_viewers void clear_viewers () clear out the viewers function reset_feature_range void reset_feature_range () Reset the feature range (e.g. for a new feature) function get_feature_range double * get_feature_range () Get the current feature range. function get_feature_raw_range double * get_feature_raw_range () Get the current raw feature range. function get_feature_range_valid bool get_feature_range_valid () Return if the feature range is valid or not. function update_feature_range void update_feature_range ( double * range ) Update the feature range with a given range. function update_feature_range void update_feature_range ( double min , double max ) Update the feature range with a given range. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode. function set_opacities void set_opacities ( std :: vector < float > opacities ) Set domain opacities. function get_opacities std :: vector < float > get_opacities () Get domain opacities. function set_domain_particle_visibilities void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities. function get_domain_particle_visibilities std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. function get_current_glyph_size double get_current_glyph_size () Get the current glyph size. function handle_ctrl_click void handle_ctrl_click ( PickResult result ) Handle ctrl click. function redraw void redraw () Redraw renderers. function export_to_pixmap QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap. function get_render_size QSize get_render_size () Return render window size. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#shapeworksvisualizer","text":"Controls display of objects in viewers. More... #include Inherits from QObject","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots","text":"Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions","text":"Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#detailed-description","text":"class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-update_viewer_properties","text":"void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc)","title":"slot update_viewer_properties"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_feature_range_changed","text":"void handle_feature_range_changed ()","title":"slot handle_feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_image_slice_settings_changed","text":"void handle_image_slice_settings_changed ()","title":"slot handle_image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer","text":"Visualizer ( Preferences & prefs )","title":"function Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer_1","text":"~ Visualizer ()","title":"function ~Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_lightbox","text":"void set_lightbox ( LightboxHandle lightbox ) set the lightbox","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_session","text":"void set_session ( SessionHandle session ) set the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_center","text":"void set_center ( bool center ) turn automatic centering on/off","title":"function set_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_center","text":"bool get_center () get centering on/off","title":"function get_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_alignment_domain","text":"void set_alignment_domain ( int domain ) set the alignment domain","title":"function set_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_alignment_domain","text":"int get_alignment_domain () get the current alignment domain","title":"function get_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show ) turn on/off glyph display","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_surface","text":"void set_show_surface ( bool show ) turn on/off surface display","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_samples","text":"void display_samples () update the display using the current settings","title":"function display_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_samples","text":"void update_samples ()","title":"function update_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_sample","text":"void display_sample ( int i )","title":"function display_sample"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shape","text":"void display_shape ( ShapeHandle shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shapes","text":"void display_shapes ( ShapeList shapes )","title":"function display_shapes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_one","text":"void set_selected_point_one ( int id )","title":"function set_selected_point_one"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_two","text":"void set_selected_point_two ( int id )","title":"function set_selected_point_two"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean","text":"void set_mean ( const Eigen :: VectorXd & mean )","title":"function set_mean"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean_shape","text":"void set_mean_shape ( ShapeHandle mean_shape )","title":"function set_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_lut","text":"void update_lut ()","title":"function update_lut"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_shape","text":"Particles get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_scalars","text":"vtkFloatArray * get_current_particle_scalars ()","title":"function get_current_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_current_particle_poly_data ()","title":"function get_current_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_mesh","text":"vtkSmartPointer < vtkPolyData > get_current_mesh ( int index )","title":"function get_current_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_meshes_transformed","text":"std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index )","title":"function get_current_meshes_transformed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_map","text":"const std :: string & get_feature_map () const Get the currently selected feature map.","title":"function get_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_uniform_feature_range","text":"void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range.","title":"function set_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_uniform_feature_range","text":"bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range.","title":"function get_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"function set_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-clear_viewers","text":"void clear_viewers () clear out the viewers","title":"function clear_viewers"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_feature_range","text":"void reset_feature_range () Reset the feature range (e.g. for a new feature)","title":"function reset_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range","text":"double * get_feature_range () Get the current feature range.","title":"function get_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_raw_range","text":"double * get_feature_raw_range () Get the current raw feature range.","title":"function get_feature_raw_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range_valid","text":"bool get_feature_range_valid () Return if the feature range is valid or not.","title":"function get_feature_range_valid"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range","text":"void update_feature_range ( double * range ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range_1","text":"void update_feature_range ( double min , double max ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform_1","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_opacities","text":"void set_opacities ( std :: vector < float > opacities ) Set domain opacities.","title":"function set_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_opacities","text":"std :: vector < float > get_opacities () Get domain opacities.","title":"function get_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_domain_particle_visibilities","text":"void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities.","title":"function set_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_domain_particle_visibilities","text":"std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities.","title":"function get_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_glyph_size","text":"double get_current_glyph_size () Get the current glyph size.","title":"function get_current_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result ) Handle ctrl click.","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-redraw","text":"void redraw () Redraw renderers.","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-export_to_pixmap","text":"QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap.","title":"function export_to_pixmap"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_render_size","text":"QSize get_render_size () Return render window size. Updated on 2023-10-24 at 22:16:02 +0000","title":"function get_render_size"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html","text":"shapeworks::VtkMeshWrapper Inherits from shapeworks::MeshWrapper Public Types Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType Public Functions Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override Public Types Documentation using PointType using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ; using GradNType using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ; using NormalType using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ; Public Functions Documentation function VtkMeshWrapper explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ) function ~VtkMeshWrapper ~ VtkMeshWrapper () = default function ComputeDistance double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override function IsWithinDistance virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk function ProjectVectorToSurfaceTangent virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh function GetPointOnMesh virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh function GetMeshLowerBound inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound function GetMeshUpperBound inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound function InvalidateParticle virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle function GetPolydata inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#shapeworksvtkmeshwrapper","text":"Inherits from shapeworks::MeshWrapper","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types","text":"Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions","text":"Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-pointtype","text":"using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-gradntype","text":"using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-normaltype","text":"using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ;","title":"using NormalType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-vectortype","text":"using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper","text":"explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 )","title":"function VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper_1","text":"~ VtkMeshWrapper () = default","title":"function ~VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-computedistance","text":"double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplenormalatpoint","text":"virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshlowerbound","text":"inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshupperbound","text":"inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-invalidateparticle","text":"virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpolydata","text":"inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:02 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html","text":"shapeworks::WheelEventForwarder Inherits from QObject Public Functions Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event) Public Functions Documentation function WheelEventForwarder explicit WheelEventForwarder ( QScrollBar * target ) function ~WheelEventForwarder ~ WheelEventForwarder () function eventFilter bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#shapeworkswheeleventforwarder","text":"Inherits from QObject","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions","text":"Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder","text":"explicit WheelEventForwarder ( QScrollBar * target )","title":"function WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder_1","text":"~ WheelEventForwarder ()","title":"function ~WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-eventfilter","text":"bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function eventFilter"},{"location":"api/Classes/classshapeworks_1_1Worker.html","text":"shapeworks::Worker Inherits from QObject Public Slots Name void process () Public Signals Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished () Public Functions Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker () Public Slots Documentation slot process void process () Public Signals Documentation signal error_message void error_message ( QString ) signal warning_message void warning_message ( QString ) signal status_message void status_message ( QString ) signal progress void progress ( int ) signal finished void finished () Public Functions Documentation function Worker Worker () function ~Worker ~ Worker () function run_job void run_job ( QSharedPointer < Job > job ) function create_worker static Worker * create_worker () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#shapeworksworker","text":"Inherits from QObject","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals","text":"Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions","text":"Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-error_message","text":"void error_message ( QString )","title":"signal error_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-warning_message","text":"void warning_message ( QString )","title":"signal warning_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-status_message","text":"void status_message ( QString )","title":"signal status_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker","text":"Worker ()","title":"function Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker_1","text":"~ Worker ()","title":"function ~Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-create_worker","text":"static Worker * create_worker () Updated on 2023-10-24 at 22:16:02 +0000","title":"function create_worker"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html","text":"shapeworks::shapeworks_exception Inherits from std::runtime_error Public Functions Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message) Public Functions Documentation function shapeworks_exception shapeworks_exception ( char const * const message ) function shapeworks_exception shapeworks_exception ( std :: string const & message ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#shapeworksshapeworks_exception","text":"Inherits from std::runtime_error","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions","text":"Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception","text":"shapeworks_exception ( char const * const message )","title":"function shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception_1","text":"shapeworks_exception ( std :: string const & message ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function shapeworks_exception"},{"location":"api/Classes/classvec2d.html","text":"vec2d Public Functions Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const Public Attributes Name double x double y Public Functions Documentation function vec2d inline vec2d () function vec2d inline vec2d ( double X , double Y ) function operator- inline vec2d operator - () function operator- inline vec2d operator - ( const vec2d & r ) function operator+ inline vec2d operator + ( const vec2d & r ) function operator* inline vec2d operator * ( double g ) function operator* inline double operator * ( const vec2d & r ) function norm inline double norm () function unit inline double unit () function operator== inline bool operator == ( const vec2d & r ) const Public Attributes Documentation variable x double x ; variable y double y ; Updated on 2023-10-24 at 22:16:02 +0000","title":"vec2d"},{"location":"api/Classes/classvec2d.html#vec2d","text":"","title":"vec2d"},{"location":"api/Classes/classvec2d.html#public-functions","text":"Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const","title":"Public Functions"},{"location":"api/Classes/classvec2d.html#public-attributes","text":"Name double x double y","title":"Public Attributes"},{"location":"api/Classes/classvec2d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec2d.html#function-vec2d","text":"inline vec2d ()","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-vec2d_1","text":"inline vec2d ( double X , double Y )","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-operator-","text":"inline vec2d operator - ()","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator-_1","text":"inline vec2d operator - ( const vec2d & r )","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator","text":"inline vec2d operator + ( const vec2d & r )","title":"function operator+"},{"location":"api/Classes/classvec2d.html#function-operator_1","text":"inline vec2d operator * ( double g )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-operator_2","text":"inline double operator * ( const vec2d & r )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-norm","text":"inline double norm ()","title":"function norm"},{"location":"api/Classes/classvec2d.html#function-unit","text":"inline double unit ()","title":"function unit"},{"location":"api/Classes/classvec2d.html#function-operator_3","text":"inline bool operator == ( const vec2d & r ) const","title":"function operator=="},{"location":"api/Classes/classvec2d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec2d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec2d.html#variable-y","text":"double y ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable y"},{"location":"api/Classes/classvec3d.html","text":"vec3d Public Functions Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize () Public Attributes Name double x double y double z Public Functions Documentation function vec3d inline vec3d () function vec3d inline vec3d ( double rx , double ry , double rz ) function vec3d inline vec3d ( const vec2d & r ) function operator+ inline vec3d operator + ( const vec3d & v ) const function operator- inline vec3d operator - ( const vec3d & v ) const function operator^ inline vec3d operator ^ ( const vec3d & v ) const function operator* inline double operator * ( const vec3d & v ) const function operator* inline vec3d operator * ( const double g ) const function operator/ inline vec3d operator / ( const double g ) const function operator+= inline const vec3d & operator += ( const vec3d & v ) function operator-= inline const vec3d & operator -= ( const vec3d & v ) function operator/= inline const vec3d & operator /= ( const double f ) function operator/= inline const vec3d & operator /= ( const int n ) function operator*= inline const vec3d & operator *= ( const double f ) function operator- inline vec3d operator - () const function Length inline double Length () const function SqrLength inline double SqrLength () const function Normalize inline vec3d & Normalize () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"vec3d"},{"location":"api/Classes/classvec3d.html#vec3d","text":"","title":"vec3d"},{"location":"api/Classes/classvec3d.html#public-functions","text":"Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize ()","title":"Public Functions"},{"location":"api/Classes/classvec3d.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classvec3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec3d.html#function-vec3d","text":"inline vec3d ()","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_1","text":"inline vec3d ( double rx , double ry , double rz )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_2","text":"inline vec3d ( const vec2d & r )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-operator","text":"inline vec3d operator + ( const vec3d & v ) const","title":"function operator+"},{"location":"api/Classes/classvec3d.html#function-operator-","text":"inline vec3d operator - ( const vec3d & v ) const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-operator_1","text":"inline vec3d operator ^ ( const vec3d & v ) const","title":"function operator^"},{"location":"api/Classes/classvec3d.html#function-operator_2","text":"inline double operator * ( const vec3d & v ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_3","text":"inline vec3d operator * ( const double g ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_4","text":"inline vec3d operator / ( const double g ) const","title":"function operator/"},{"location":"api/Classes/classvec3d.html#function-operator_5","text":"inline const vec3d & operator += ( const vec3d & v )","title":"function operator+="},{"location":"api/Classes/classvec3d.html#function-operator-_1","text":"inline const vec3d & operator -= ( const vec3d & v )","title":"function operator-="},{"location":"api/Classes/classvec3d.html#function-operator_6","text":"inline const vec3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_7","text":"inline const vec3d & operator /= ( const int n )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_8","text":"inline const vec3d & operator *= ( const double f )","title":"function operator*="},{"location":"api/Classes/classvec3d.html#function-operator-_2","text":"inline vec3d operator - () const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-length","text":"inline double Length () const","title":"function Length"},{"location":"api/Classes/classvec3d.html#function-sqrlength","text":"inline double SqrLength () const","title":"function SqrLength"},{"location":"api/Classes/classvec3d.html#function-normalize","text":"inline vec3d & Normalize ()","title":"function Normalize"},{"location":"api/Classes/classvec3d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec3d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec3d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec3d.html#variable-z","text":"double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable z"},{"location":"api/Classes/classvec6d.html","text":"vec6d Public Functions Name vec6d () Public Attributes Name double x double y double z double xy double yz double xz Public Functions Documentation function vec6d inline vec6d () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable xy double xy ; variable yz double yz ; variable xz double xz ; Updated on 2023-10-24 at 22:16:02 +0000","title":"vec6d"},{"location":"api/Classes/classvec6d.html#vec6d","text":"","title":"vec6d"},{"location":"api/Classes/classvec6d.html#public-functions","text":"Name vec6d ()","title":"Public Functions"},{"location":"api/Classes/classvec6d.html#public-attributes","text":"Name double x double y double z double xy double yz double xz","title":"Public Attributes"},{"location":"api/Classes/classvec6d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec6d.html#function-vec6d","text":"inline vec6d ()","title":"function vec6d"},{"location":"api/Classes/classvec6d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec6d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec6d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec6d.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classvec6d.html#variable-xy","text":"double xy ;","title":"variable xy"},{"location":"api/Classes/classvec6d.html#variable-yz","text":"double yz ;","title":"variable yz"},{"location":"api/Classes/classvec6d.html#variable-xz","text":"double xz ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable xz"},{"location":"api/Classes/classvtkPolyDataToImageData.html","text":"vtkPolyDataToImageData Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New () Protected Functions Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( Border , unsigned int ) function vtkGetMacro vtkGetMacro ( Border , unsigned int ) function vtkSetMacro vtkSetMacro ( Spacing , double ) function vtkGetMacro vtkGetMacro ( Spacing , double ) function vtkSetMacro vtkSetMacro ( SampleDistance , double ) function vtkGetMacro vtkGetMacro ( SampleDistance , double ) function vtkSetMacro vtkSetMacro ( InitialBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( InitialBallSize , unsigned int ) function vtkSetMacro vtkSetMacro ( FinalBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( FinalBallSize , unsigned int ) function FillInputPortInformation virtual int FillInputPortInformation ( int port , vtkInformation * info ) function New static vtkPolyDataToImageData * New () Protected Functions Documentation function vtkPolyDataToImageData vtkPolyDataToImageData () function ~vtkPolyDataToImageData inline ~ vtkPolyDataToImageData () function RequestInformation virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestData virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestUpdateExtent virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-24 at 22:16:02 +0000","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#vtkpolydatatoimagedata","text":"Inherits from vtkImageAlgorithm","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions","text":"Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New ()","title":"Public Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions","text":"Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector)","title":"Protected Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtktypemacro","text":"vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro","text":"vtkSetMacro ( Border , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro","text":"vtkGetMacro ( Border , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_1","text":"vtkSetMacro ( Spacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Spacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_2","text":"vtkSetMacro ( SampleDistance , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_2","text":"vtkGetMacro ( SampleDistance , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_3","text":"vtkSetMacro ( InitialBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_3","text":"vtkGetMacro ( InitialBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_4","text":"vtkSetMacro ( FinalBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_4","text":"vtkGetMacro ( FinalBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int port , vtkInformation * info )","title":"function FillInputPortInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-new","text":"static vtkPolyDataToImageData * New ()","title":"function New"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata","text":"vtkPolyDataToImageData ()","title":"function vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata_1","text":"inline ~ vtkPolyDataToImageData ()","title":"function ~vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestupdateextent","text":"virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function RequestUpdateExtent"},{"location":"api/Classes/index_classes.html","text":"Classes class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-24 at 22:16:03 +0000","title":"Classes"},{"location":"api/Classes/index_classes.html#classes","text":"class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-24 at 22:16:03 +0000","title":"Classes"},{"location":"api/Classes/structColorScheme_1_1rgb.html","text":"ColorScheme::rgb Public Functions Name rgb () rgb (float l, float m, float n) Public Attributes Name float r float g float b Public Functions Documentation function rgb inline rgb () function rgb inline rgb ( float l , float m , float n ) Public Attributes Documentation variable r float r ; variable g float g ; variable b float b ; Updated on 2023-10-24 at 22:16:02 +0000","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#colorschemergb","text":"","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions","text":"Name rgb () rgb (float l, float m, float n)","title":"Public Functions"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes","text":"Name float r float g float b","title":"Public Attributes"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb","text":"inline rgb ()","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb_1","text":"inline rgb ( float l , float m , float n )","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-g","text":"float g ;","title":"variable g"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-b","text":"float b ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable b"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html","text":"FECVDDecimationModifier::EDGE Public Attributes Name int face int node Public Attributes Documentation variable face int face ; variable node int node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#fecvddecimationmodifieredge","text":"","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes","text":"Name int face int node","title":"Public Attributes"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-face","text":"int face ;","title":"variable face"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-node","text":"int node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable node"},{"location":"api/Classes/structFEFillHole_1_1FACE.html","text":"FEFillHole::FACE Public Attributes Name vec3d r int n Public Attributes Documentation variable r vec3d r ; variable n int n ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#fefillholeface","text":"","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes","text":"Name vec3d r int n","title":"Public Attributes"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-n","text":"int n ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable n"},{"location":"api/Classes/structIntersection.html","text":"Intersection Public Attributes Name vec3d point float r int m_index int m_faceIndex Public Attributes Documentation variable point vec3d point ; variable r float r ; variable m_index int m_index ; variable m_faceIndex int m_faceIndex ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Intersection"},{"location":"api/Classes/structIntersection.html#intersection","text":"","title":"Intersection"},{"location":"api/Classes/structIntersection.html#public-attributes","text":"Name vec3d point float r int m_index int m_faceIndex","title":"Public Attributes"},{"location":"api/Classes/structIntersection.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structIntersection.html#variable-point","text":"vec3d point ;","title":"variable point"},{"location":"api/Classes/structIntersection.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structIntersection.html#variable-m_index","text":"int m_index ;","title":"variable m_index"},{"location":"api/Classes/structIntersection.html#variable-m_faceindex","text":"int m_faceIndex ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_faceIndex"},{"location":"api/Classes/structQuad.html","text":"Quad Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d r3 Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable r3 vec3d r3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Quad"},{"location":"api/Classes/structQuad.html#quad","text":"","title":"Quad"},{"location":"api/Classes/structQuad.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d r3","title":"Public Attributes"},{"location":"api/Classes/structQuad.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structQuad.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structQuad.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structQuad.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structQuad.html#variable-r3","text":"vec3d r3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable r3"},{"location":"api/Classes/structRay.html","text":"Ray Public Attributes Name vec3d origin vec3d direction Public Attributes Documentation variable origin vec3d origin ; variable direction vec3d direction ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Ray"},{"location":"api/Classes/structRay.html#ray","text":"","title":"Ray"},{"location":"api/Classes/structRay.html#public-attributes","text":"Name vec3d origin vec3d direction","title":"Public Attributes"},{"location":"api/Classes/structRay.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structRay.html#variable-origin","text":"vec3d origin ;","title":"variable origin"},{"location":"api/Classes/structRay.html#variable-direction","text":"vec3d direction ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable direction"},{"location":"api/Classes/structSimilarityTransform3D.html","text":"SimilarityTransform3D Public Attributes Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation Public Attributes Documentation variable rotation vnl_matrix_fixed < double , 3 , 3 > rotation ; variable scale double scale ; variable translation vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-24 at 22:16:02 +0000","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#similaritytransform3d","text":"","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes","text":"Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation","title":"Public Attributes"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-rotation","text":"vnl_matrix_fixed < double , 3 , 3 > rotation ;","title":"variable rotation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-scale","text":"double scale ;","title":"variable scale"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-translation","text":"vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable translation"},{"location":"api/Classes/structTriangle.html","text":"Triangle Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d fn Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable fn vec3d fn ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Triangle"},{"location":"api/Classes/structTriangle.html#triangle","text":"","title":"Triangle"},{"location":"api/Classes/structTriangle.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d fn","title":"Public Attributes"},{"location":"api/Classes/structTriangle.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structTriangle.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structTriangle.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structTriangle.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structTriangle.html#variable-fn","text":"vec3d fn ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable fn"},{"location":"api/Classes/structVTKEXPORT.html","text":"VTKEXPORT Public Attributes Name bool bshellthick bool bscalar_data Public Attributes Documentation variable bshellthick bool bshellthick ; variable bscalar_data bool bscalar_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#vtkexport","text":"","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes","text":"Name bool bshellthick bool bscalar_data","title":"Public Attributes"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structVTKEXPORT.html#variable-bshellthick","text":"bool bshellthick ;","title":"variable bshellthick"},{"location":"api/Classes/structVTKEXPORT.html#variable-bscalar_data","text":"bool bscalar_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable bscalar_data"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html","text":"fmt::formatter< QString > Public Functions Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const Public Functions Documentation function parse inline constexpr auto parse ( format_parse_context & ctx ) function format template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#fmtformatter-qstring","text":"","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions","text":"Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const","title":"Public Functions"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-parse","text":"inline constexpr auto parse ( format_parse_context & ctx )","title":"function parse"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-format","text":"template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function format"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html","text":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood Public Functions Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_) Public Attributes Name ParticlePointIndexPair pi_pair double weight double distance int dom Public Functions Documentation function CrossDomainNeighborhood inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) Public Attributes Documentation variable pi_pair ParticlePointIndexPair pi_pair ; variable weight double weight ; variable distance double distance ; variable dom int dom ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#shapeworkscurvaturesamplingfunctioncrossdomainneighborhood","text":"","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions","text":"Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes","text":"Name ParticlePointIndexPair pi_pair double weight double distance int dom","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#function-crossdomainneighborhood","text":"inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ )","title":"function CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-pi_pair","text":"ParticlePointIndexPair pi_pair ;","title":"variable pi_pair"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-weight","text":"double weight ;","title":"variable weight"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-distance","text":"double distance ;","title":"variable distance"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-dom","text":"int dom ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable dom"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html","text":"shapeworks::MeshGeoEntry Public Types Name enum Mode Public Functions Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target) Public Attributes Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full Public Types Documentation enum Mode Enumerator Value Description Full Partial Public Functions Documentation function clear inline void clear () function is_full_mode inline bool is_full_mode () const function update_max_dist inline void update_max_dist () function has_entry inline bool has_entry ( int target ) Public Attributes Documentation variable mode Mode mode { Mode :: Partial }; variable max_dist double max_dist { 0.0 }; variable data_partial robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; variable data_full std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#shapeworksmeshgeoentry","text":"","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types","text":"Name enum Mode","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions","text":"Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes","text":"Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#enum-mode","text":"Enumerator Value Description Full Partial","title":"enum Mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-is_full_mode","text":"inline bool is_full_mode () const","title":"function is_full_mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-update_max_dist","text":"inline void update_max_dist ()","title":"function update_max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-has_entry","text":"inline bool has_entry ( int target )","title":"function has_entry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-mode","text":"Mode mode { Mode :: Partial };","title":"variable mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-max_dist","text":"double max_dist { 0.0 };","title":"variable max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_partial","text":"robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ;","title":"variable data_partial"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_full","text":"std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable data_full"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html","text":"shapeworks::MultiVariateNormalRandom Public Functions Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() () Public Attributes Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist Public Functions Documentation function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) function operator() inline Eigen :: MatrixXd operator ()() Public Attributes Documentation variable mean Eigen :: VectorXd mean ; variable transform Eigen :: MatrixXd transform ; variable gen boost :: mt19937 gen { 42 }; variable dist boost :: normal_distribution dist ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#shapeworksmultivariatenormalrandom","text":"","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions","text":"Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes","text":"Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom","text":"inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom_1","text":"inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-operator","text":"inline Eigen :: MatrixXd operator ()()","title":"function operator()"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-mean","text":"Eigen :: VectorXd mean ;","title":"variable mean"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-transform","text":"Eigen :: MatrixXd transform ;","title":"variable transform"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-gen","text":"boost :: mt19937 gen { 42 };","title":"variable gen"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-dist","text":"boost :: normal_distribution dist ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html","text":"shapeworks::Observer::DefinedCallbacksStruct More... #include Public Functions Name DefinedCallbacksStruct () Public Attributes Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent Detailed Description struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register. Public Functions Documentation function DefinedCallbacksStruct inline DefinedCallbacksStruct () Public Attributes Documentation variable DomainAddEvent bool DomainAddEvent ; variable TransformSetEvent bool TransformSetEvent ; variable PrefixTransformSetEvent bool PrefixTransformSetEvent ; variable NeighborhoodSetEvent bool NeighborhoodSetEvent ; variable PositionSetEvent bool PositionSetEvent ; variable PositionAddEvent bool PositionAddEvent ; variable PositionRemoveEvent bool PositionRemoveEvent ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#shapeworksobserverdefinedcallbacksstruct","text":"More... #include ","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions","text":"Name DefinedCallbacksStruct ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes","text":"Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#detailed-description","text":"struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#function-definedcallbacksstruct","text":"inline DefinedCallbacksStruct ()","title":"function DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-domainaddevent","text":"bool DomainAddEvent ;","title":"variable DomainAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-transformsetevent","text":"bool TransformSetEvent ;","title":"variable TransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-prefixtransformsetevent","text":"bool PrefixTransformSetEvent ;","title":"variable PrefixTransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-neighborhoodsetevent","text":"bool NeighborhoodSetEvent ;","title":"variable NeighborhoodSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionsetevent","text":"bool PositionSetEvent ;","title":"variable PositionSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionaddevent","text":"bool PositionAddEvent ;","title":"variable PositionAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionremoveevent","text":"bool PositionRemoveEvent ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable PositionRemoveEvent"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html","text":"shapeworks::ParticlePointIndexPair More... #include Public Types Name typedef itk::Point< double, 3 > PointType Public Functions Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o) Public Attributes Name PointType Point unsigned int Index Detailed Description struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h] Public Types Documentation typedef PointType typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ; Public Functions Documentation function ParticlePointIndexPair inline ParticlePointIndexPair () function ParticlePointIndexPair inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) function ParticlePointIndexPair inline ParticlePointIndexPair ( const ParticlePointIndexPair & o ) function operator= inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) Public Attributes Documentation variable Point PointType Point ; variable Index unsigned int Index ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#shapeworksparticlepointindexpair","text":"More... #include ","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types","text":"Name typedef itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions","text":"Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes","text":"Name PointType Point unsigned int Index","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#detailed-description","text":"struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h]","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#typedef-pointtype","text":"typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair","text":"inline ParticlePointIndexPair ()","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_1","text":"inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_2","text":"inline ParticlePointIndexPair ( const ParticlePointIndexPair & o )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-operator","text":"inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-point","text":"PointType Point ;","title":"variable Point"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-index","text":"unsigned int Index ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable Index"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html","text":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair More... #include Public Types Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType Public Functions Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o) Public Attributes Name IteratorType Iterator NodePointerType NodePointer Detailed Description struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values. Public Types Documentation typedef NodePointerType typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ; typedef IteratorType typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ; Public Functions Documentation function IteratorNodePair inline IteratorNodePair () function ~IteratorNodePair inline ~ IteratorNodePair () function IteratorNodePair inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) function IteratorNodePair inline IteratorNodePair ( const IteratorNodePair & o ) function operator= inline const IteratorNodePair & operator = ( const IteratorNodePair & o ) Public Attributes Documentation variable Iterator IteratorType Iterator ; variable NodePointer NodePointerType NodePointer ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#shapeworksparticleregionneighborhooditeratornodepair","text":"More... #include ","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types","text":"Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions","text":"Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes","text":"Name IteratorType Iterator NodePointerType NodePointer","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#detailed-description","text":"struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-nodepointertype","text":"typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ;","title":"typedef NodePointerType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-iteratortype","text":"typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ;","title":"typedef IteratorType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair","text":"inline IteratorNodePair ()","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_1","text":"inline ~ IteratorNodePair ()","title":"function ~IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_2","text":"inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_3","text":"inline IteratorNodePair ( const IteratorNodePair & o )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-operator","text":"inline const IteratorNodePair & operator = ( const IteratorNodePair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-iterator","text":"IteratorType Iterator ;","title":"variable Iterator"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-nodepointer","text":"NodePointerType NodePointer ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable NodePointer"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html","text":"shapeworks::Reconstruction Public Attributes Name double dist int shapeIdx Eigen::MatrixXd rec Public Attributes Documentation variable dist double dist ; variable shapeIdx int shapeIdx ; variable rec Eigen :: MatrixXd rec ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#shapeworksreconstruction","text":"","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes","text":"Name double dist int shapeIdx Eigen::MatrixXd rec","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-dist","text":"double dist ;","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-shapeidx","text":"int shapeIdx ;","title":"variable shapeIdx"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-rec","text":"Eigen :: MatrixXd rec ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable rec"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html","text":"shapeworks::Sampler::CuttingPlaneType More... #include Public Attributes Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c Detailed Description struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information Public Attributes Documentation variable a vnl_vector_fixed < double , 3 > a ; variable b vnl_vector_fixed < double , 3 > b ; variable c vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#shapeworkssamplercuttingplanetype","text":"More... #include ","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes","text":"Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#detailed-description","text":"struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-a","text":"vnl_vector_fixed < double , 3 > a ;","title":"variable a"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-b","text":"vnl_vector_fixed < double , 3 > b ;","title":"variable b"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-c","text":"vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html","text":"shapeworks::Sampler::SphereType More... #include Public Attributes Name vnl_vector_fixed< double, Dimension > center double radius Detailed Description struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information Public Attributes Documentation variable center vnl_vector_fixed < double , Dimension > center ; variable radius double radius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#shapeworkssamplerspheretype","text":"More... #include ","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes","text":"Name vnl_vector_fixed< double, Dimension > center double radius","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#detailed-description","text":"struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-center","text":"vnl_vector_fixed < double , Dimension > center ;","title":"variable center"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-radius","text":"double radius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable radius"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html","text":"shapeworks::SharedCommandData Public Functions Name bool validImage () const bool validMesh () const bool validParticleSystem () const Public Attributes Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field Public Functions Documentation function validImage inline bool validImage () const function validMesh inline bool validMesh () const function validParticleSystem inline bool validParticleSystem () const Public Attributes Documentation variable image Image image ; variable mesh std :: unique_ptr < Mesh > mesh ; variable region PhysicalRegion region ; variable particleSystem ParticleSystemEvaluation particleSystem ; variable field Field field ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#shapeworkssharedcommanddata","text":"","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions","text":"Name bool validImage () const bool validMesh () const bool validParticleSystem () const","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes","text":"Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validimage","text":"inline bool validImage () const","title":"function validImage"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validmesh","text":"inline bool validMesh () const","title":"function validMesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validparticlesystem","text":"inline bool validParticleSystem () const","title":"function validParticleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-image","text":"Image image ;","title":"variable image"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-mesh","text":"std :: unique_ptr < Mesh > mesh ;","title":"variable mesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-region","text":"PhysicalRegion region ;","title":"variable region"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-particlesystem","text":"ParticleSystemEvaluation particleSystem ;","title":"variable particleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-field","text":"Field field ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable field"},{"location":"api/Classes/structshapeworks_1_1powstruct.html","text":"shapeworks::powstruct More... #include Public Attributes Name const int c Detailed Description template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time. Public Attributes Documentation variable c static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#shapeworkspowstruct","text":"More... #include ","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#detailed-description","text":"template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#variable-c","text":"static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html","text":"shapeworks::powstruct< a, 0 > More... Public Attributes Name const int c Detailed Description template < int a > struct shapeworks :: powstruct < a , 0 > ; Public Attributes Documentation variable c static const int c = 1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#shapeworkspowstruct-a-0","text":"More...","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#detailed-description","text":"template < int a > struct shapeworks :: powstruct < a , 0 > ;","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#variable-c","text":"static const int c = 1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable c"},{"location":"api/Files/AnalysisTool_8h.html","text":"Studio/Analysis/AnalysisTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisTool Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#studioanalysisanalysistoolh","text":"","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisTool_8h.html#classes","text":"Name class shapeworks::AnalysisTool","title":"Classes"},{"location":"api/Files/AnalysisTool_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/AnalysisUtils_8h.html","text":"Studio/Utils/AnalysisUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisUtils Source code #pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#studioutilsanalysisutilsh","text":"","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisUtils_8h.html#classes","text":"Name class shapeworks::AnalysisUtils","title":"Classes"},{"location":"api/Files/AnalysisUtils_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Analyze_8h.html","text":"Libs/Analyze/Analyze.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Analyze High level analyze API. Source code #pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#libsanalyzeanalyzeh","text":"","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Analyze_8h.html#classes","text":"Name class shapeworks::Analyze High level analyze API.","title":"Classes"},{"location":"api/Files/Analyze_8h.html#source-code","text":"#pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ColorMap_8h.html","text":"Studio/Visualization/ColorMap.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ColorMap class shapeworks::ColorMaps Source code #pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#studiovisualizationcolormaph","text":"","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ColorMap_8h.html#classes","text":"Name class shapeworks::ColorMap class shapeworks::ColorMaps","title":"Classes"},{"location":"api/Files/ColorMap_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ColorSchemes_8h.html","text":"Studio/Visualization/ColorSchemes.h Classes Name class ColorScheme struct ColorScheme::rgb class ColorSchemes Source code #pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#studiovisualizationcolorschemesh","text":"","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#classes","text":"Name class ColorScheme struct ColorScheme::rgb class ColorSchemes","title":"Classes"},{"location":"api/Files/ColorSchemes_8h.html#source-code","text":"#pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Command_8h.html","text":"Applications/shapeworks/Command.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand Functions Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd) Defines Name COMMAND_DECLARE (CommandName, CommandType) Functions Documentation function operator<< std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ) Macros Documentation define COMMAND_DECLARE #define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ } Source code #pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#applicationsshapeworkscommandh","text":"","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Command_8h.html#classes","text":"Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand","title":"Classes"},{"location":"api/Files/Command_8h.html#functions","text":"Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd)","title":"Functions"},{"location":"api/Files/Command_8h.html#defines","text":"Name COMMAND_DECLARE (CommandName, CommandType)","title":"Defines"},{"location":"api/Files/Command_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Command_8h.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd )","title":"function operator<<"},{"location":"api/Files/Command_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Command_8h.html#define-command_declare","text":"#define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ }","title":"define COMMAND_DECLARE"},{"location":"api/Files/Command_8h.html#source-code","text":"#pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Commands_8h.html","text":"Applications/shapeworks/Commands.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#applicationsshapeworkscommandsh","text":"","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Commands_8h.html#source-code","text":"#pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CompareWidget_8h.html","text":"Studio/Interface/CompareWidget.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareWidget Source code #pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#studiointerfacecomparewidgeth","text":"","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CompareWidget_8h.html#classes","text":"Name class shapeworks::CompareWidget","title":"Classes"},{"location":"api/Files/CompareWidget_8h.html#source-code","text":"#pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ConstraintType_8h.html","text":"Libs/Optimize/Constraints/ConstraintType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#libsoptimizeconstraintsconstrainttypeh","text":"","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ConstraintType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/ConstraintType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/ConstraintType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/ConstraintType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Constraint_8h.html","text":"Libs/Optimize/Constraints/Constraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraint Source code #pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#libsoptimizeconstraintsconstrainth","text":"","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraint_8h.html#classes","text":"Name class shapeworks::Constraint","title":"Classes"},{"location":"api/Files/Constraint_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Constraints_8h.html","text":"Libs/Optimize/Constraints/Constraints.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraints Source code #pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#libsoptimizeconstraintsconstraintsh","text":"","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraints_8h.html#classes","text":"Name class shapeworks::Constraints","title":"Classes"},{"location":"api/Files/Constraints_8h.html#source-code","text":"#pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ContourDomain_8h.html","text":"Libs/Optimize/Domain/ContourDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ContourDomain Source code #pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#libsoptimizedomaincontourdomainh","text":"","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ContourDomain_8h.html#classes","text":"Name class shapeworks::ContourDomain","title":"Classes"},{"location":"api/Files/ContourDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/CorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CorrespondenceFunction Correspondence term. Source code #pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#libsoptimizefunctioncorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::CorrespondenceFunction Correspondence term.","title":"Classes"},{"location":"api/Files/CorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceMode_8h.html","text":"Libs/Optimize/CorrespondenceMode.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#libsoptimizecorrespondencemodeh","text":"","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceMode_8h.html#source-code","text":"#pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/CurvatureSamplingFunction_8h.html","text":"Libs/Optimize/Function/CurvatureSamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#libsoptimizefunctioncurvaturesamplingfunctionh","text":"","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#classes","text":"Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used.","title":"Classes"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CustomSlider_8h.html","text":"Studio/Interface/CustomSlider.h Classes Name class CustomSlider Source code #pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#studiointerfacecustomsliderh","text":"","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#classes","text":"Name class CustomSlider","title":"Classes"},{"location":"api/Files/CustomSlider_8h.html#source-code","text":"#pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html","text":"Libs/Analyze/CustomSurfaceReconstructionFilter.h Classes Name class CustomSurfaceReconstructionFilter Source code /*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#libsanalyzecustomsurfacereconstructionfilterh","text":"","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#classes","text":"Name class CustomSurfaceReconstructionFilter","title":"Classes"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#source-code","text":"/*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/DataTool_8h.html","text":"Studio/Data/DataTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DataTool Source code #pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#studiodatadatatoolh","text":"","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DataTool_8h.html#classes","text":"Name class shapeworks::DataTool","title":"Classes"},{"location":"api/Files/DataTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DeepSSMJob_8h.html","text":"Studio/DeepSSM/DeepSSMJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. Source code #pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#studiodeepssmdeepssmjobh","text":"","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMJob_8h.html#classes","text":"Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM.","title":"Classes"},{"location":"api/Files/DeepSSMJob_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DeepSSMParameters_8h.html","text":"Studio/DeepSSM/DeepSSMParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMParameters Source code #pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#studiodeepssmdeepssmparametersh","text":"","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMParameters_8h.html#classes","text":"Name class shapeworks::DeepSSMParameters","title":"Classes"},{"location":"api/Files/DeepSSMParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DeepSSMTool_8h.html","text":"Studio/DeepSSM/DeepSSMTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMTool Source code #pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#studiodeepssmdeepssmtoolh","text":"","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMTool_8h.html#classes","text":"Name class shapeworks::DeepSSMTool","title":"Classes"},{"location":"api/Files/DeepSSMTool_8h.html#source-code","text":"#pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DisentangledCorrespondenceFunction Source code #pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#libsoptimizefunctiondisentangledcorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::DisentangledCorrespondenceFunction","title":"Classes"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/DomainType_8h.html","text":"Libs/Optimize/Domain/DomainType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#libsoptimizedomaindomaintypeh","text":"","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DomainType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/DomainType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/DomainType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/DomainType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/DualVectorFunction_8h.html","text":"Libs/Optimize/Function/DualVectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DualVectorFunction Source code #pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#libsoptimizefunctiondualvectorfunctionh","text":"","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DualVectorFunction_8h.html#classes","text":"Name class shapeworks::DualVectorFunction","title":"Classes"},{"location":"api/Files/DualVectorFunction_8h.html#source-code","text":"#pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/EigenUtils_8h.html","text":"Libs/Utils/EigenUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::EigenUtils Source code #pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#libsutilseigenutilsh","text":"","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EigenUtils_8h.html#classes","text":"Name class shapeworks::EigenUtils","title":"Classes"},{"location":"api/Files/EigenUtils_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/EvaluationUtil_8h.html","text":"Libs/Particles/EvaluationUtil.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction Source code #pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#libsparticlesevaluationutilh","text":"","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EvaluationUtil_8h.html#classes","text":"Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction","title":"Classes"},{"location":"api/Files/EvaluationUtil_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectReader_8h.html","text":"Libs/Project/ExcelProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectReader Excel file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#libsprojectexcelprojectreaderh","text":"","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectReader_8h.html#classes","text":"Name class shapeworks::ExcelProjectReader Excel file format reader for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectWriter_8h.html","text":"Libs/Project/ExcelProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectWriter Excel file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#libsprojectexcelprojectwriterh","text":"","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectWriter_8h.html#classes","text":"Name class shapeworks::ExcelProjectWriter Excel file format writer for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Exception_8h.html","text":"Libs/Common/Exception.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::shapeworks_exception Source code #pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#libscommonexceptionh","text":"","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Exception_8h.html#classes","text":"Name class shapeworks::shapeworks_exception","title":"Classes"},{"location":"api/Files/Exception_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Executable_8h.html","text":"Applications/shapeworks/Executable.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Executable Source code #pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#applicationsshapeworksexecutableh","text":"","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Executable_8h.html#classes","text":"Name class shapeworks::Executable","title":"Classes"},{"location":"api/Files/Executable_8h.html#source-code","text":"#pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ExportImageDialog_8h.html","text":"Studio/Interface/ExportImageDialog.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportImageDialog Source code #pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#studiointerfaceexportimagedialogh","text":"","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportImageDialog_8h.html#classes","text":"Name class shapeworks::ExportImageDialog","title":"Classes"},{"location":"api/Files/ExportImageDialog_8h.html#source-code","text":"#pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ExportUtils_8h.html","text":"Studio/Data/ExportUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportUtils Export utilities for Studio. Source code #include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#studiodataexportutilsh","text":"","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportUtils_8h.html#classes","text":"Name class shapeworks::ExportUtils Export utilities for Studio.","title":"Classes"},{"location":"api/Files/ExportUtils_8h.html#source-code","text":"#include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/FEAreaCoverage_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Namespaces Name std Classes Name class FEAreaCoverage Source code #pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#libsmeshpreviewmeshqcfeareacoverageh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#namespaces","text":"Name std","title":"Namespaces"},{"location":"api/Files/FEAreaCoverage_8h.html#classes","text":"Name class FEAreaCoverage","title":"Classes"},{"location":"api/Files/FEAreaCoverage_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEAutoMesher_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Classes Name class FEAutoMesher Source code #pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#libsmeshpreviewmeshqcfeautomesherh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#classes","text":"Name class FEAutoMesher","title":"Classes"},{"location":"api/Files/FEAutoMesher_8h.html#source-code","text":"#pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FECVDDecimationModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Classes Name class FECVDDecimationModifier Source code #pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#libsmeshpreviewmeshqcfecvddecimationmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#classes","text":"Name class FECVDDecimationModifier","title":"Classes"},{"location":"api/Files/FECVDDecimationModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FECoreMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h Classes Name class FECoreMesh Source code #pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#libsmeshpreviewmeshqcfecoremeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#classes","text":"Name class FECoreMesh","title":"Classes"},{"location":"api/Files/FECoreMesh_8h.html#source-code","text":"#pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEElement_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEElement.h Classes Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement Defines Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM Macros Documentation define FE_VISIBLE #define FE_VISIBLE 0x01 define FE_SELECTED #define FE_SELECTED 0x02 define FE_HEX8 #define FE_HEX8 1 define FE_TET4 #define FE_TET4 2 define FE_PENTA6 #define FE_PENTA6 3 define FE_QUAD4 #define FE_QUAD4 4 define FE_TRI3 #define FE_TRI3 5 define FE_BEAM2 #define FE_BEAM2 6 define FE_HEX20 #define FE_HEX20 7 define FE_QUAD8 #define FE_QUAD8 8 define FE_BEAM3 #define FE_BEAM3 9 define FE_TET10 #define FE_TET10 10 define FE_TRI6 #define FE_TRI6 11 define FE_TET15 #define FE_TET15 12 define FE_HEX27 #define FE_HEX27 13 define MAX_ELEM #define MAX_ELEM 13 Source code // FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#libsmeshpreviewmeshqcfeelementh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#classes","text":"Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement","title":"Classes"},{"location":"api/Files/FEElement_8h.html#defines","text":"Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM","title":"Defines"},{"location":"api/Files/FEElement_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/FEElement_8h.html#define-fe_visible","text":"#define FE_VISIBLE 0x01","title":"define FE_VISIBLE"},{"location":"api/Files/FEElement_8h.html#define-fe_selected","text":"#define FE_SELECTED 0x02","title":"define FE_SELECTED"},{"location":"api/Files/FEElement_8h.html#define-fe_hex8","text":"#define FE_HEX8 1","title":"define FE_HEX8"},{"location":"api/Files/FEElement_8h.html#define-fe_tet4","text":"#define FE_TET4 2","title":"define FE_TET4"},{"location":"api/Files/FEElement_8h.html#define-fe_penta6","text":"#define FE_PENTA6 3","title":"define FE_PENTA6"},{"location":"api/Files/FEElement_8h.html#define-fe_quad4","text":"#define FE_QUAD4 4","title":"define FE_QUAD4"},{"location":"api/Files/FEElement_8h.html#define-fe_tri3","text":"#define FE_TRI3 5","title":"define FE_TRI3"},{"location":"api/Files/FEElement_8h.html#define-fe_beam2","text":"#define FE_BEAM2 6","title":"define FE_BEAM2"},{"location":"api/Files/FEElement_8h.html#define-fe_hex20","text":"#define FE_HEX20 7","title":"define FE_HEX20"},{"location":"api/Files/FEElement_8h.html#define-fe_quad8","text":"#define FE_QUAD8 8","title":"define FE_QUAD8"},{"location":"api/Files/FEElement_8h.html#define-fe_beam3","text":"#define FE_BEAM3 9","title":"define FE_BEAM3"},{"location":"api/Files/FEElement_8h.html#define-fe_tet10","text":"#define FE_TET10 10","title":"define FE_TET10"},{"location":"api/Files/FEElement_8h.html#define-fe_tri6","text":"#define FE_TRI6 11","title":"define FE_TRI6"},{"location":"api/Files/FEElement_8h.html#define-fe_tet15","text":"#define FE_TET15 12","title":"define FE_TET15"},{"location":"api/Files/FEElement_8h.html#define-fe_hex27","text":"#define FE_HEX27 13","title":"define FE_HEX27"},{"location":"api/Files/FEElement_8h.html#define-max_elem","text":"#define MAX_ELEM 13","title":"define MAX_ELEM"},{"location":"api/Files/FEElement_8h.html#source-code","text":"// FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEFillHole_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFillHole.h Classes Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#libsmeshpreviewmeshqcfefillholeh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#classes","text":"Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE","title":"Classes"},{"location":"api/Files/FEFillHole_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEFixMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h Classes Name class FEFixMesh Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#libsmeshpreviewmeshqcfefixmeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#classes","text":"Name class FEFixMesh","title":"Classes"},{"location":"api/Files/FEFixMesh_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Classes Name class FEMeshSmoothingModifier Source code #pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#libsmeshpreviewmeshqcfemeshsmoothingmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#classes","text":"Name class FEMeshSmoothingModifier","title":"Classes"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMesh.h Classes Name class FEElementData class FEMesh Functions Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3]) Attributes Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15 Functions Documentation function bias double bias ( double b , double x ) function gain double gain ( double g , double x ) function area_triangle double area_triangle ( vec3d r [ 3 ] ) Attributes Documentation variable FTHEX8 int FTHEX8 ; variable FTHEX20 int FTHEX20 ; variable FTHEX27 int FTHEX27 ; variable FTPENTA int FTPENTA ; variable FTTET int FTTET ; variable FTTET10 int FTTET10 ; variable FTTET15 int FTTET15 ; Source code // FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#libsmeshpreviewmeshqcfemeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#classes","text":"Name class FEElementData class FEMesh","title":"Classes"},{"location":"api/Files/FEMesh_8h.html#functions","text":"Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3])","title":"Functions"},{"location":"api/Files/FEMesh_8h.html#attributes","text":"Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15","title":"Attributes"},{"location":"api/Files/FEMesh_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/FEMesh_8h.html#function-bias","text":"double bias ( double b , double x )","title":"function bias"},{"location":"api/Files/FEMesh_8h.html#function-gain","text":"double gain ( double g , double x )","title":"function gain"},{"location":"api/Files/FEMesh_8h.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Files/FEMesh_8h.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Files/FEMesh_8h.html#variable-fthex8","text":"int FTHEX8 ;","title":"variable FTHEX8"},{"location":"api/Files/FEMesh_8h.html#variable-fthex20","text":"int FTHEX20 ;","title":"variable FTHEX20"},{"location":"api/Files/FEMesh_8h.html#variable-fthex27","text":"int FTHEX27 ;","title":"variable FTHEX27"},{"location":"api/Files/FEMesh_8h.html#variable-ftpenta","text":"int FTPENTA ;","title":"variable FTPENTA"},{"location":"api/Files/FEMesh_8h.html#variable-fttet","text":"int FTTET ;","title":"variable FTTET"},{"location":"api/Files/FEMesh_8h.html#variable-fttet10","text":"int FTTET10 ;","title":"variable FTTET10"},{"location":"api/Files/FEMesh_8h.html#variable-fttet15","text":"int FTTET15 ;","title":"variable FTTET15"},{"location":"api/Files/FEMesh_8h.html#source-code","text":"// FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FENodeElementList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h Classes Name class FENodeElementList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#libsmeshpreviewmeshqcfenodeelementlisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#classes","text":"Name class FENodeElementList","title":"Classes"},{"location":"api/Files/FENodeElementList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FENodeFaceList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Classes Name class FENodeFaceList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#libsmeshpreviewmeshqcfenodefacelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#classes","text":"Name class FENodeFaceList","title":"Classes"},{"location":"api/Files/FENodeFaceList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FENodeNodeList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Classes Name class FENodeNodeList Source code #pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#libsmeshpreviewmeshqcfenodenodelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#classes","text":"Name class FENodeNodeList","title":"Classes"},{"location":"api/Files/FENodeNodeList_8h.html#source-code","text":"#pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEVTKExport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h Classes Name struct VTKEXPORT class FEVTKExport Source code #pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#libsmeshpreviewmeshqcfevtkexporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#classes","text":"Name struct VTKEXPORT class FEVTKExport","title":"Classes"},{"location":"api/Files/FEVTKExport_8h.html#source-code","text":"#pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEVTKImport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h Classes Name class FEVTKimport Source code #pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#libsmeshpreviewmeshqcfevtkimporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#classes","text":"Name class FEVTKimport","title":"Classes"},{"location":"api/Files/FEVTKImport_8h.html#source-code","text":"#pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FreeFormConstraint_8h.html","text":"Libs/Optimize/Constraints/FreeFormConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::FreeFormConstraint Source code #pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#libsoptimizeconstraintsfreeformconstrainth","text":"","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/FreeFormConstraint_8h.html#classes","text":"Name class shapeworks::FreeFormConstraint","title":"Classes"},{"location":"api/Files/FreeFormConstraint_8h.html#source-code","text":"#pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GenericContainerArray_8h.html","text":"Libs/Optimize/Container/GenericContainerArray.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Source code #pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#libsoptimizecontainergenericcontainerarrayh","text":"","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainerArray_8h.html#classes","text":"Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Classes"},{"location":"api/Files/GenericContainerArray_8h.html#source-code","text":"#pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GenericContainer_8h.html","text":"Libs/Optimize/Container/GenericContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) Source code #pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#libsoptimizecontainergenericcontainerh","text":"","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainer_8h.html#classes","text":"Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?)","title":"Classes"},{"location":"api/Files/GenericContainer_8h.html#source-code","text":"#pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GradientDescentOptimizer_8h.html","text":"Libs/Optimize/GradientDescentOptimizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GradientDescentOptimizer Source code #pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#libsoptimizegradientdescentoptimizerh","text":"","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GradientDescentOptimizer_8h.html#classes","text":"Name class shapeworks::GradientDescentOptimizer","title":"Classes"},{"location":"api/Files/GradientDescentOptimizer_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/GroomParameters_8h.html","text":"Libs/Groom/GroomParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomParameters Source code #pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#libsgroomgroomparametersh","text":"","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomParameters_8h.html#classes","text":"Name class shapeworks::GroomParameters","title":"Classes"},{"location":"api/Files/GroomParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GroomTool_8h.html","text":"Studio/Groom/GroomTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomTool Source code #pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#studiogroomgroomtoolh","text":"","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomTool_8h.html#classes","text":"Name class shapeworks::GroomTool","title":"Classes"},{"location":"api/Files/GroomTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Groom_8h.html","text":"Libs/Groom/Groom.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Groom High level groom API. Source code #pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#libsgroomgroomh","text":"","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Groom_8h.html#classes","text":"Name class shapeworks::Groom High level groom API.","title":"Classes"},{"location":"api/Files/Groom_8h.html#source-code","text":"#pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GroupPvalueJob_8h.html","text":"Studio/Job/GroupPvalueJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroupPvalueJob Source code #pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#studiojobgrouppvaluejobh","text":"","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroupPvalueJob_8h.html#classes","text":"Name class shapeworks::GroupPvalueJob","title":"Classes"},{"location":"api/Files/GroupPvalueJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithCurvature_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithCurvature.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithCurvature Source code #pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#libsoptimizedomainimagedomainwithcurvatureh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#classes","text":"Name class shapeworks::ImageDomainWithCurvature","title":"Classes"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradN_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradN.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradN Source code #pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#libsoptimizedomainimagedomainwithgradnh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradN_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradN","title":"Classes"},{"location":"api/Files/ImageDomainWithGradN_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradients_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradients.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradients Source code #pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#libsoptimizedomainimagedomainwithgradientsh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradients_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradients","title":"Classes"},{"location":"api/Files/ImageDomainWithGradients_8h.html#source-code","text":"#pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageDomain_8h.html","text":"Libs/Optimize/Domain/ImageDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomain Source code #pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#libsoptimizedomainimagedomainh","text":"","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomain_8h.html#classes","text":"Name class shapeworks::ImageDomain","title":"Classes"},{"location":"api/Files/ImageDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageLabel_8h.html","text":"Studio/Utils/ImageLabel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images. Source code #pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#studioutilsimagelabelh","text":"","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageLabel_8h.html#classes","text":"Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images.","title":"Classes"},{"location":"api/Files/ImageLabel_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ImageUtils_8h.html","text":"Libs/Image/ImageUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageUtils Helper functions for image. Source code #pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#libsimageimageutilsh","text":"","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageUtils_8h.html#classes","text":"Name class shapeworks::ImageUtils Helper functions for image.","title":"Classes"},{"location":"api/Files/ImageUtils_8h.html#source-code","text":"#pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Image_8h.html","text":"Libs/Image/Image.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Image Source code #pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#libsimageimageh","text":"","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Image_8h.html#classes","text":"Name class shapeworks::Image","title":"Classes"},{"location":"api/Files/Image_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html","text":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImplicitSurfaceDomain Source code #pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#libsoptimizedomainimplicitsurfacedomainh","text":"","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#classes","text":"Name class shapeworks::ImplicitSurfaceDomain","title":"Classes"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Intersect_8h.html","text":"Libs/Mesh/PreviewMeshQC/Intersect.h Classes Name struct Ray struct Intersection struct Triangle struct Quad Functions Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) Functions Documentation function IntersectTriangle bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ) function IntersectQuad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) function FastIntersectQuad bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) Source code #pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#libsmeshpreviewmeshqcintersecth","text":"","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#classes","text":"Name struct Ray struct Intersection struct Triangle struct Quad","title":"Classes"},{"location":"api/Files/Intersect_8h.html#functions","text":"Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q)","title":"Functions"},{"location":"api/Files/Intersect_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Intersect_8h.html#function-intersecttriangle","text":"bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true )","title":"function IntersectTriangle"},{"location":"api/Files/Intersect_8h.html#function-intersectquad","text":"bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function IntersectQuad"},{"location":"api/Files/Intersect_8h.html#function-fastintersectquad","text":"bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function FastIntersectQuad"},{"location":"api/Files/Intersect_8h.html#source-code","text":"#pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ItkToVtk_8h.html","text":"Libs/Analyze/ItkToVtk.h Functions Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer) Functions Documentation function ConnectPipelines template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter. Source code #pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#libsanalyzeitktovtkh","text":"","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#functions","text":"Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer)","title":"Functions"},{"location":"api/Files/ItkToVtk_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ItkToVtk_8h.html#function-connectpipelines","text":"template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter.","title":"function ConnectPipelines"},{"location":"api/Files/ItkToVtk_8h.html#source-code","text":"#pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Job_8h.html","text":"Studio/Job/Job.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Job Source code #pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#studiojobjobh","text":"","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Job_8h.html#classes","text":"Name class shapeworks::Job","title":"Classes"},{"location":"api/Files/Job_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/JsonProjectReader_8h.html","text":"Libs/Project/JsonProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectReader JSON file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#libsprojectjsonprojectreaderh","text":"","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectReader_8h.html#classes","text":"Name class shapeworks::JsonProjectReader JSON file format reader for Project .","title":"Classes"},{"location":"api/Files/JsonProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/JsonProjectWriter_8h.html","text":"Libs/Project/JsonProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectWriter JSON file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#libsprojectjsonprojectwriterh","text":"","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectWriter_8h.html#classes","text":"Name class shapeworks::JsonProjectWriter JSON file format writer for Project .","title":"Classes"},{"location":"api/Files/JsonProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/KeyboardShortcuts_8h.html","text":"Studio/Interface/KeyboardShortcuts.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::KeyboardShortcuts Source code #pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#studiointerfacekeyboardshortcutsh","text":"","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/KeyboardShortcuts_8h.html#classes","text":"Name class shapeworks::KeyboardShortcuts","title":"Classes"},{"location":"api/Files/KeyboardShortcuts_8h.html#source-code","text":"#pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LandmarkItemDelegate_8h.html","text":"Studio/Data/LandmarkItemDelegate.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkItemDelegate Source code #pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#studiodatalandmarkitemdelegateh","text":"","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkItemDelegate_8h.html#classes","text":"Name class shapeworks::LandmarkItemDelegate","title":"Classes"},{"location":"api/Files/LandmarkItemDelegate_8h.html#source-code","text":"#pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LandmarkTableModel_8h.html","text":"Studio/Data/LandmarkTableModel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkTableModel Source code #pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#studiodatalandmarktablemodelh","text":"","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkTableModel_8h.html#classes","text":"Name class shapeworks::LandmarkTableModel","title":"Classes"},{"location":"api/Files/LandmarkTableModel_8h.html#source-code","text":"#pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LandmarkWidget_8h.html","text":"Studio/Visualization/LandmarkWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkWidget LandmarkWidget . Source code #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#studiovisualizationlandmarkwidgeth","text":"","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkWidget_8h.html#classes","text":"Name class shapeworks::LandmarkWidget LandmarkWidget .","title":"Classes"},{"location":"api/Files/LandmarkWidget_8h.html#source-code","text":"#include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyCorrespondenceFunction Source code #pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#libsoptimizefunctionlegacycorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::LegacyCorrespondenceFunction","title":"Classes"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/LegacyMeshGenerator_8h.html","text":"Libs/Analyze/LegacyMeshGenerator.h Mesh generation. More... Classes Name class LegacyMeshGenerator Detailed Description Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code /* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#libsanalyzelegacymeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#classes","text":"Name class LegacyMeshGenerator","title":"Classes"},{"location":"api/Files/LegacyMeshGenerator_8h.html#detailed-description","text":"Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/LegacyMeshGenerator_8h.html#source-code","text":"/* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/LegacyShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LegacyShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyShapeMatrix Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#libsoptimizematrixlegacyshapematrixh","text":"","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyShapeMatrix_8h.html#classes","text":"Name class shapeworks::LegacyShapeMatrix","title":"Classes"},{"location":"api/Files/LegacyShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Lightbox_8h.html","text":"Studio/Visualization/Lightbox.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Lightbox Display multiple Viewers in a tiled display. Source code #pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#studiovisualizationlightboxh","text":"","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Lightbox_8h.html#classes","text":"Name class shapeworks::Lightbox Display multiple Viewers in a tiled display.","title":"Classes"},{"location":"api/Files/Lightbox_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LinearRegressionShapeMatrix Source code #pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#libsoptimizematrixlinearregressionshapematrixh","text":"","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#classes","text":"Name class shapeworks::LinearRegressionShapeMatrix","title":"Classes"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#source-code","text":"#pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/LogWindow_8h.html","text":"Studio/Interface/LogWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LogWindow Log Window. Source code #pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#studiointerfacelogwindowh","text":"","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LogWindow_8h.html#classes","text":"Name class shapeworks::LogWindow Log Window.","title":"Classes"},{"location":"api/Files/LogWindow_8h.html#source-code","text":"#pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Logging_8h.html","text":"Libs/Common/Logging.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library. Defines Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once. Macros Documentation define SW_LOG_STACK #define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro. define SW_LOG #define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro. define SW_WARN #define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro. define SW_ERROR #define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro. define SW_DEBUG #define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro. define SW_TRACE #define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = ) define SW_MESSAGE #define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro. define SW_STATUS #define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar) define SW_PROGRESS #define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ )); define SW_CLOSE_LOG #define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro. define SW_LOG_ONCE #define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once. Source code #pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#libscommonloggingh","text":"","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Logging_8h.html#classes","text":"Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library.","title":"Classes"},{"location":"api/Files/Logging_8h.html#defines","text":"Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once.","title":"Defines"},{"location":"api/Files/Logging_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Logging_8h.html#define-sw_log_stack","text":"#define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro.","title":"define SW_LOG_STACK"},{"location":"api/Files/Logging_8h.html#define-sw_log","text":"#define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro.","title":"define SW_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_warn","text":"#define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro.","title":"define SW_WARN"},{"location":"api/Files/Logging_8h.html#define-sw_error","text":"#define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro.","title":"define SW_ERROR"},{"location":"api/Files/Logging_8h.html#define-sw_debug","text":"#define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro.","title":"define SW_DEBUG"},{"location":"api/Files/Logging_8h.html#define-sw_trace","text":"#define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = )","title":"define SW_TRACE"},{"location":"api/Files/Logging_8h.html#define-sw_message","text":"#define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro.","title":"define SW_MESSAGE"},{"location":"api/Files/Logging_8h.html#define-sw_status","text":"#define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar)","title":"define SW_STATUS"},{"location":"api/Files/Logging_8h.html#define-sw_progress","text":"#define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ ));","title":"define SW_PROGRESS"},{"location":"api/Files/Logging_8h.html#define-sw_close_log","text":"#define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro.","title":"define SW_CLOSE_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_log_once","text":"#define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once.","title":"define SW_LOG_ONCE"},{"location":"api/Files/Logging_8h.html#source-code","text":"#pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeanCurvatureContainer_8h.html","text":"Libs/Optimize/Container/MeanCurvatureContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeanCurvatureContainer Source code #pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#libsoptimizecontainermeancurvaturecontainerh","text":"","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeanCurvatureContainer_8h.html#classes","text":"Name class shapeworks::MeanCurvatureContainer","title":"Classes"},{"location":"api/Files/MeanCurvatureContainer_8h.html#source-code","text":"#pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MemoryUsage_8h.html","text":"Libs/Optimize/Utils/MemoryUsage.h Functions Name void process_mem_usage (double & vm_usage, double & resident_set) Functions Documentation function process_mem_usage void process_mem_usage ( double & vm_usage , double & resident_set ) Source code #pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#libsoptimizeutilsmemoryusageh","text":"","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#functions","text":"Name void process_mem_usage (double & vm_usage, double & resident_set)","title":"Functions"},{"location":"api/Files/MemoryUsage_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MemoryUsage_8h.html#function-process_mem_usage","text":"void process_mem_usage ( double & vm_usage , double & resident_set )","title":"function process_mem_usage"},{"location":"api/Files/MemoryUsage_8h.html#source-code","text":"#pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshCache_8h.html","text":"Libs/Analyze/MeshCache.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshCache Thread safe cache for meshes index by shape. Source code #pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#libsanalyzemeshcacheh","text":"","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshCache_8h.html#classes","text":"Name class shapeworks::MeshCache Thread safe cache for meshes index by shape.","title":"Classes"},{"location":"api/Files/MeshCache_8h.html#source-code","text":"#pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshComputeThickness_8h.html","text":"Libs/Mesh/MeshComputeThickness.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::mesh Source code #pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#libsmeshmeshcomputethicknessh","text":"","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::mesh","title":"Namespaces"},{"location":"api/Files/MeshComputeThickness_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshDomain_8h.html","text":"Libs/Optimize/Domain/MeshDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshDomain Source code #pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#libsoptimizedomainmeshdomainh","text":"","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshDomain_8h.html#classes","text":"Name class shapeworks::MeshDomain","title":"Classes"},{"location":"api/Files/MeshDomain_8h.html#source-code","text":"#pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshGenerator_8h.html","text":"Libs/Analyze/MeshGenerator.h Mesh generation. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator Detailed Description Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code #pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#libsanalyzemeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGenerator_8h.html#classes","text":"Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator","title":"Classes"},{"location":"api/Files/MeshGenerator_8h.html#detailed-description","text":"Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/MeshGenerator_8h.html#source-code","text":"#pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshGeoEntry_8h.html","text":"Libs/Optimize/Domain/MeshGeoEntry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MeshGeoEntry Source code #pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#libsoptimizedomainmeshgeoentryh","text":"","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGeoEntry_8h.html#classes","text":"Name struct shapeworks::MeshGeoEntry","title":"Classes"},{"location":"api/Files/MeshGeoEntry_8h.html#source-code","text":"#pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshGroup_8h.html","text":"Libs/Analyze/MeshGroup.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshGroup Representation of a group of meshes. Source code #pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#libsanalyzemeshgrouph","text":"","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGroup_8h.html#classes","text":"Name class shapeworks::MeshGroup Representation of a group of meshes.","title":"Classes"},{"location":"api/Files/MeshGroup_8h.html#source-code","text":"#pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshManager_8h.html","text":"Libs/Analyze/MeshManager.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshManager Class to manage meshes. Source code #pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#libsanalyzemeshmanagerh","text":"","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshManager_8h.html#classes","text":"Name class shapeworks::MeshManager Class to manage meshes.","title":"Classes"},{"location":"api/Files/MeshManager_8h.html#source-code","text":"#pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshSettings_8h.html","text":"Studio/Data/MeshSettings.h Classes Name class MeshSettings Settings for creating a mesh. Types Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle Types Documentation typedef MeshSettingsHandle typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; Source code #pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#studiodatameshsettingsh","text":"","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#classes","text":"Name class MeshSettings Settings for creating a mesh.","title":"Classes"},{"location":"api/Files/MeshSettings_8h.html#types","text":"Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle","title":"Types"},{"location":"api/Files/MeshSettings_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/MeshSettings_8h.html#typedef-meshsettingshandle","text":"typedef QSharedPointer < MeshSettings > MeshSettingsHandle ;","title":"typedef MeshSettingsHandle"},{"location":"api/Files/MeshSettings_8h.html#source-code","text":"#pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/MeshSlice_8h.html","text":"Studio/Visualization/MeshSlice.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshSlice MeshSlice . Source code #pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#studiovisualizationmeshsliceh","text":"","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshSlice_8h.html#classes","text":"Name class shapeworks::MeshSlice MeshSlice .","title":"Classes"},{"location":"api/Files/MeshSlice_8h.html#source-code","text":"#pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/MeshUtils_8h.html","text":"Libs/Mesh/MeshUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshUtils Source code #pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#libsmeshmeshutilsh","text":"","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshUtils_8h.html#classes","text":"Name class shapeworks::MeshUtils","title":"Classes"},{"location":"api/Files/MeshUtils_8h.html#source-code","text":"#pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWarper_8h.html","text":"Libs/Mesh/MeshWarper.h Mesh warping capability. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWarper Detailed Description Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction Source code #pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#libsmeshmeshwarperh","text":"Mesh warping capability. More...","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWarper_8h.html#classes","text":"Name class shapeworks::MeshWarper","title":"Classes"},{"location":"api/Files/MeshWarper_8h.html#detailed-description","text":"Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction","title":"Detailed Description"},{"location":"api/Files/MeshWarper_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWorkQueue_8h.html","text":"Libs/Analyze/MeshWorkQueue.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue Functions Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ) Source code #pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#libsanalyzemeshworkqueueh","text":"","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorkQueue_8h.html#classes","text":"Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue","title":"Classes"},{"location":"api/Files/MeshWorkQueue_8h.html#functions","text":"Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem )","title":"Functions"},{"location":"api/Files/MeshWorkQueue_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorkQueue_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorkQueue_8h.html#source-code","text":"#pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWorker_8h.html","text":"Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorker Functions Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > ) Detailed Description Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ) Source code #pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#libsanalyzemeshworkerh","text":"Worker class for parallel mesh reconstruction. More...","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorker_8h.html#classes","text":"Name class shapeworks::MeshWorker","title":"Classes"},{"location":"api/Files/MeshWorker_8h.html#functions","text":"Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > )","title":"Functions"},{"location":"api/Files/MeshWorker_8h.html#detailed-description","text":"Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management","title":"Detailed Description"},{"location":"api/Files/MeshWorker_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorker_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorker_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWrapper_8h.html","text":"Libs/Optimize/Domain/MeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWrapper Source code #pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#libsoptimizedomainmeshwrapperh","text":"","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWrapper_8h.html#classes","text":"Name class shapeworks::MeshWrapper","title":"Classes"},{"location":"api/Files/MeshWrapper_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Mesh_8h.html","text":"Libs/Mesh/Mesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) Source code #pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#libsmeshmeshh","text":"","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Mesh_8h.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors)","title":"Classes"},{"location":"api/Files/Mesh_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MixedEffectsShapeMatrix Source code /* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#libsoptimizematrixmixedeffectsshapematrixh","text":"","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#classes","text":"Name class shapeworks::MixedEffectsShapeMatrix","title":"Classes"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#source-code","text":"/* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Module_8dox.html","text":"Module.dox Updated on 2023-10-24 at 22:16:03 +0000","title":"Module.dox"},{"location":"api/Files/Module_8dox.html#moduledox","text":"Updated on 2023-10-24 at 22:16:03 +0000","title":"Module.dox"},{"location":"api/Files/NetworkAnalysisJob_8h.html","text":"Studio/Job/NetworkAnalysisJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::NetworkAnalysisJob Source code #pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#studiojobnetworkanalysisjobh","text":"","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/NetworkAnalysisJob_8h.html#classes","text":"Name class shapeworks::NetworkAnalysisJob","title":"Classes"},{"location":"api/Files/NetworkAnalysisJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ObjectReader_8h.html","text":"Libs/Optimize/Utils/ObjectReader.h Classes Name class ObjectReader Source code #pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#libsoptimizeutilsobjectreaderh","text":"","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#classes","text":"Name class ObjectReader","title":"Classes"},{"location":"api/Files/ObjectReader_8h.html#source-code","text":"#pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ObjectWriter_8h.html","text":"Libs/Optimize/Utils/ObjectWriter.h Classes Name class ObjectWriter Source code #pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#libsoptimizeutilsobjectwriterh","text":"","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#classes","text":"Name class ObjectWriter","title":"Classes"},{"location":"api/Files/ObjectWriter_8h.html#source-code","text":"#pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Observer_8h.html","text":"Libs/Optimize/Observer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct Source code #pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#libsoptimizeobserverh","text":"","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Observer_8h.html#classes","text":"Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct","title":"Classes"},{"location":"api/Files/Observer_8h.html#source-code","text":"#pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizationVisualizer_8h.html","text":"Libs/Optimize/Utils/OptimizationVisualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizationVisualizer Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#libsoptimizeutilsoptimizationvisualizerh","text":"","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizationVisualizer_8h.html#classes","text":"Name class shapeworks::OptimizationVisualizer","title":"Classes"},{"location":"api/Files/OptimizationVisualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameterFile_8h.html","text":"Libs/Optimize/OptimizeParameterFile.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameterFile Source code #pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#libsoptimizeoptimizeparameterfileh","text":"","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameterFile_8h.html#classes","text":"Name class shapeworks::OptimizeParameterFile","title":"Classes"},{"location":"api/Files/OptimizeParameterFile_8h.html#source-code","text":"#pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameters_8h.html","text":"Libs/Optimize/OptimizeParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameters Source code #pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#libsoptimizeoptimizeparametersh","text":"","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameters_8h.html#classes","text":"Name class shapeworks::OptimizeParameters","title":"Classes"},{"location":"api/Files/OptimizeParameters_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizeTool_8h.html","text":"Studio/Optimize/OptimizeTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeTool Source code #pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#studiooptimizeoptimizetoolh","text":"","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeTool_8h.html#classes","text":"Name class shapeworks::OptimizeTool","title":"Classes"},{"location":"api/Files/OptimizeTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Optimize_8h.html","text":"Libs/Optimize/Optimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MatrixContainer class shapeworks::Optimize Source code #pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#libsoptimizeoptimizeh","text":"","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Optimize_8h.html#classes","text":"Name class shapeworks::MatrixContainer class shapeworks::Optimize","title":"Classes"},{"location":"api/Files/Optimize_8h.html#source-code","text":"#pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PaintWidget_8h.html","text":"Studio/Visualization/PaintWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PaintWidget Source code #pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#studiovisualizationpaintwidgeth","text":"","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PaintWidget_8h.html#classes","text":"Name class shapeworks::PaintWidget","title":"Classes"},{"location":"api/Files/PaintWidget_8h.html#source-code","text":"#pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Parameters_8h.html","text":"Libs/Project/Parameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Parameters Parameter settings. Source code #pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#libsprojectparametersh","text":"","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Parameters_8h.html#classes","text":"Name class shapeworks::Parameters Parameter settings.","title":"Classes"},{"location":"api/Files/Parameters_8h.html#source-code","text":"#pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaJob_8h.html","text":"Studio/Job/ParticleAreaJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaJob Source code #pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#studiojobparticleareajobh","text":"","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaJob_8h.html#classes","text":"Name class shapeworks::ParticleAreaJob","title":"Classes"},{"location":"api/Files/ParticleAreaJob_8h.html#source-code","text":"#pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaPanel_8h.html","text":"Studio/Analysis/ParticleAreaPanel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaPanel Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#studioanalysisparticleareapanelh","text":"","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaPanel_8h.html#classes","text":"Name class shapeworks::ParticleAreaPanel","title":"Classes"},{"location":"api/Files/ParticleAreaPanel_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleArea_8h.html","text":"Libs/Analyze/ParticleArea.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleArea Source code #pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#libsanalyzeparticleareah","text":"","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleArea_8h.html#classes","text":"Name class shapeworks::ParticleArea","title":"Classes"},{"location":"api/Files/ParticleArea_8h.html#source-code","text":"#pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleColors_8h.html","text":"Studio/Visualization/ParticleColors.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleColors Supplies particle colors. Source code #pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#studiovisualizationparticlecolorsh","text":"","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleColors_8h.html#classes","text":"Name class shapeworks::ParticleColors Supplies particle colors.","title":"Classes"},{"location":"api/Files/ParticleColors_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleDomain_8h.html","text":"Libs/Optimize/Domain/ParticleDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleDomain Source code #pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#libsoptimizedomainparticledomainh","text":"","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleDomain_8h.html#classes","text":"Name class shapeworks::ParticleDomain","title":"Classes"},{"location":"api/Files/ParticleDomain_8h.html#source-code","text":"#pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleEvents_8h.html","text":"Libs/Optimize/ParticleEvents.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleEvent Source code #pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#libsoptimizeparticleeventsh","text":"","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleEvents_8h.html#classes","text":"Name class shapeworks::ParticleEvent","title":"Classes"},{"location":"api/Files/ParticleEvents_8h.html#source-code","text":"#pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleFile_8h.html","text":"Libs/Particles/ParticleFile.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::particles Source code #pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#libsparticlesparticlefileh","text":"","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::particles","title":"Namespaces"},{"location":"api/Files/ParticleFile_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html","text":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGaussianModeWriter Source code #pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#libsoptimizeutilsparticlegaussianmodewriterh","text":"","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#classes","text":"Name class shapeworks::ParticleGaussianModeWriter","title":"Classes"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html","text":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#libsoptimizeutilsparticlegoodbadassessmenth","text":"","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#classes","text":"Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system.","title":"Classes"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNeighborhood Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#libsoptimizeneighborhoodparticleneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleNeighborhood","title":"Classes"},{"location":"api/Files/ParticleNeighborhood_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html","text":"Studio/Job/ParticleNormalEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluationJob Source code #pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#studiojobparticlenormalevaluationjobh","text":"","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluationJob","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluation_8h.html","text":"Libs/Particles/ParticleNormalEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluation Source code #pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#libsparticlesparticlenormalevaluationh","text":"","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluation","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticlePointIndexPair_8h.html","text":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::ParticlePointIndexPair Source code #pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#libsoptimizeneighborhoodparticlepointindexpairh","text":"","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticlePointIndexPair_8h.html#classes","text":"Name struct shapeworks::ParticlePointIndexPair","title":"Classes"},{"location":"api/Files/ParticlePointIndexPair_8h.html#source-code","text":"#pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionDomain_8h.html","text":"Libs/Optimize/Domain/ParticleRegionDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionDomain Source code #pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#libsoptimizedomainparticleregiondomainh","text":"","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionDomain_8h.html#classes","text":"Name class shapeworks::ParticleRegionDomain","title":"Classes"},{"location":"api/Files/ParticleRegionDomain_8h.html#source-code","text":"#pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionNeighborhood Source code #pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#libsoptimizeneighborhoodparticleregionneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleRegionNeighborhood","title":"Classes"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#source-code","text":"#pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleShapeStatistics_8h.html","text":"Libs/Particles/ParticleShapeStatistics.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleShapeStatistics Source code #pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#libsparticlesparticleshapestatisticsh","text":"","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleShapeStatistics_8h.html#classes","text":"Name class shapeworks::ParticleShapeStatistics","title":"Classes"},{"location":"api/Files/ParticleShapeStatistics_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSurfaceNeighborhood Source code #pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#libsoptimizeneighborhoodparticlesurfaceneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleSurfaceNeighborhood","title":"Classes"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleSystemEvaluation_8h.html","text":"Libs/Particles/ParticleSystemEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystemEvaluation Source code #pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#libsparticlesparticlesystemevaluationh","text":"","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleSystemEvaluation","title":"Classes"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleSystem_8h.html","text":"Libs/Optimize/ParticleSystem.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system. Source code #pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#libsoptimizeparticlesystemh","text":"","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystem_8h.html#classes","text":"Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system.","title":"Classes"},{"location":"api/Files/ParticleSystem_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Particles_8h.html","text":"Libs/Analyze/Particles.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. Source code #pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#libsanalyzeparticlesh","text":"","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Particles_8h.html#classes","text":"Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains.","title":"Classes"},{"location":"api/Files/Particles_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/PlaneConstraint_8h.html","text":"Libs/Optimize/Constraints/PlaneConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneConstraint Source code #pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#libsoptimizeconstraintsplaneconstrainth","text":"","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneConstraint_8h.html#classes","text":"Name class shapeworks::PlaneConstraint","title":"Classes"},{"location":"api/Files/PlaneConstraint_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/PlaneWidget_8h.html","text":"Studio/Visualization/PlaneWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneWidget PlaneWidget . Source code #include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#studiovisualizationplanewidgeth","text":"","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneWidget_8h.html#classes","text":"Name class shapeworks::PlaneWidget PlaneWidget .","title":"Classes"},{"location":"api/Files/PlaneWidget_8h.html#source-code","text":"#include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PowerOfTwoPointTree_8h.html","text":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree Source code #pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#libsoptimizeneighborhoodpoweroftwopointtreeh","text":"","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#classes","text":"Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree","title":"Classes"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#source-code","text":"#pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/PreferencesWindow_8h.html","text":"Studio/Data/PreferencesWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences. Source code #pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#studiodatapreferenceswindowh","text":"","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PreferencesWindow_8h.html#classes","text":"Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences.","title":"Classes"},{"location":"api/Files/PreferencesWindow_8h.html#source-code","text":"#pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Preferences_8h.html","text":"Studio/Data/Preferences.h Classes Name class Preferences Application preferences. Source code #pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#studiodatapreferencesh","text":"","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#classes","text":"Name class Preferences Application preferences.","title":"Classes"},{"location":"api/Files/Preferences_8h.html#source-code","text":"#pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Procrustes3D_8h.html","text":"Libs/Alignment/Procrustes3D.h Classes Name struct SimilarityTransform3D class Procrustes3D Source code #pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#libsalignmentprocrustes3dh","text":"","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#classes","text":"Name struct SimilarityTransform3D class Procrustes3D","title":"Classes"},{"location":"api/Files/Procrustes3D_8h.html#source-code","text":"#pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ProcrustesRegistration_8h.html","text":"Libs/Optimize/ProcrustesRegistration.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProcrustesRegistration Source code #pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#libsoptimizeprocrustesregistrationh","text":"","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProcrustesRegistration_8h.html#classes","text":"Name class shapeworks::ProcrustesRegistration","title":"Classes"},{"location":"api/Files/ProcrustesRegistration_8h.html#source-code","text":"#pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ProjectReader_8h.html","text":"Libs/Project/ProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProjectReader Base class for Project readers. Source code #pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#libsprojectprojectreaderh","text":"","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProjectReader_8h.html#classes","text":"Name class shapeworks::ProjectReader Base class for Project readers.","title":"Classes"},{"location":"api/Files/ProjectReader_8h.html#source-code","text":"#pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ProjectUtils_8h.html","text":"Libs/Project/ProjectUtils.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types Classes Name class shapeworks::ProjectUtils Source code #pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#libsprojectprojectutilsh","text":"","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types","title":"Namespaces"},{"location":"api/Files/ProjectUtils_8h.html#classes","text":"Name class shapeworks::ProjectUtils","title":"Classes"},{"location":"api/Files/ProjectUtils_8h.html#source-code","text":"#pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Project_8h.html","text":"Libs/Project/Project.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project. Source code #pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#libsprojectprojecth","text":"","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Project_8h.html#classes","text":"Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project.","title":"Classes"},{"location":"api/Files/Project_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PythonAnalyze_8h.html","text":"Libs/Python/PythonAnalyze.h Functions Name void define_python_analyze (pybind11::module_ m) Functions Documentation function define_python_analyze void define_python_analyze ( pybind11 :: module_ m ) Source code #pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#libspythonpythonanalyzeh","text":"","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#functions","text":"Name void define_python_analyze (pybind11::module_ m)","title":"Functions"},{"location":"api/Files/PythonAnalyze_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/PythonAnalyze_8h.html#function-define_python_analyze","text":"void define_python_analyze ( pybind11 :: module_ m )","title":"function define_python_analyze"},{"location":"api/Files/PythonAnalyze_8h.html#source-code","text":"#pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PythonWorker_8h.html","text":"Studio/Python/PythonWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PythonWorker Source code #pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#studiopythonpythonworkerh","text":"","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PythonWorker_8h.html#classes","text":"Name class shapeworks::PythonWorker","title":"Classes"},{"location":"api/Files/PythonWorker_8h.html#source-code","text":"#pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/QMeshWarper_8h.html","text":"Libs/Analyze/QMeshWarper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. Source code #pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#libsanalyzeqmeshwarperh","text":"","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QMeshWarper_8h.html#classes","text":"Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject.","title":"Classes"},{"location":"api/Files/QMeshWarper_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/QOptimize_8h.html","text":"Studio/Optimize/QOptimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QOptimize Wraps Optimize as a QObject. Source code #pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#studiooptimizeqoptimizeh","text":"","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QOptimize_8h.html#classes","text":"Name class shapeworks::QOptimize Wraps Optimize as a QObject.","title":"Classes"},{"location":"api/Files/QOptimize_8h.html#source-code","text":"#pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ReconstructSurface_8h.html","text":"Libs/Particles/ReconstructSurface.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ReconstructSurface Source code #pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#libsparticlesreconstructsurfaceh","text":"","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ReconstructSurface_8h.html#classes","text":"Name class shapeworks::ReconstructSurface","title":"Classes"},{"location":"api/Files/ReconstructSurface_8h.html#source-code","text":"#pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Reconstruction_8h.html","text":"Libs/Analyze/Reconstruction.h Namespaces Name itk Classes Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction Source code #ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#libsanalyzereconstructionh","text":"","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/Reconstruction_8h.html#classes","text":"Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction","title":"Classes"},{"location":"api/Files/Reconstruction_8h.html#source-code","text":"#ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Region_8h.html","text":"Libs/Common/Region.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space Source code #pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#libscommonregionh","text":"","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Region_8h.html#classes","text":"Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space","title":"Classes"},{"location":"api/Files/Region_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Sampler_8h.html","text":"Libs/Optimize/Sampler.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType Source code #pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#libsoptimizesamplerh","text":"","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Sampler_8h.html#classes","text":"Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType","title":"Classes"},{"location":"api/Files/Sampler_8h.html#source-code","text":"#pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/SamplingFunction_8h.html","text":"Libs/Optimize/Function/SamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#libsoptimizefunctionsamplingfunctionh","text":"","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SamplingFunction_8h.html#classes","text":"Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution.","title":"Classes"},{"location":"api/Files/SamplingFunction_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Session_8h.html","text":"Studio/Data/Session.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#studiodatasessionh","text":"","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Session_8h.html#classes","text":"Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session.","title":"Classes"},{"location":"api/Files/Session_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluationJob_8h.html","text":"Studio/Analysis/ShapeEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluationJob Functions Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( Eigen :: VectorXd ) function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ) Source code #pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#studioanalysisshapeevaluationjobh","text":"","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluationJob_8h.html#classes","text":"Name class shapeworks::ShapeEvaluationJob","title":"Classes"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions","text":"Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType )","title":"Functions"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( Eigen :: VectorXd )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype_1","text":"Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluation_8h.html","text":"Libs/Particles/ShapeEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluation Source code #pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#libsparticlesshapeevaluationh","text":"","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluation_8h.html#classes","text":"Name class shapeworks::ShapeEvaluation","title":"Classes"},{"location":"api/Files/ShapeEvaluation_8h.html#source-code","text":"#pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeGradientMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeGradientMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#libsoptimizematrixshapegradientmatrixh","text":"","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeGradientMatrix_8h.html#classes","text":"Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeGradientMatrix_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#libsoptimizematrixshapematrixh","text":"","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeMatrix_8h.html#classes","text":"Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksStudioApp_8h.html","text":"Studio/Interface/ShapeWorksStudioApp.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#studiointerfaceshapeworksstudioapph","text":"","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#classes","text":"Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window.","title":"Classes"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksWorker_8h.html","text":"Studio/Data/ShapeWorksWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksWorker Source code #pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#studiodatashapeworksworkerh","text":"","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksWorker_8h.html#classes","text":"Name class shapeworks::ShapeworksWorker","title":"Classes"},{"location":"api/Files/ShapeWorksWorker_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Shape_8h.html","text":"Libs/Analyze/Shape.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used. Source code #pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#libsanalyzeshapeh","text":"","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shape_8h.html#classes","text":"Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used.","title":"Classes"},{"location":"api/Files/Shape_8h.html#source-code","text":"#pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ShapeworksUtils_8h.html","text":"Libs/Common/ShapeworksUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksUtils Source code #pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#libscommonshapeworksutilsh","text":"","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeworksUtils_8h.html#classes","text":"Name class shapeworks::ShapeworksUtils","title":"Classes"},{"location":"api/Files/ShapeworksUtils_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Shapeworks_8h.html","text":"Libs/Common/Shapeworks.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#libscommonshapeworksh","text":"","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shapeworks_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/SharedCommandData_8h.html","text":"Applications/shapeworks/SharedCommandData.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::SharedCommandData Source code #pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#applicationsshapeworkssharedcommanddatah","text":"","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SharedCommandData_8h.html#classes","text":"Name struct shapeworks::SharedCommandData","title":"Classes"},{"location":"api/Files/SharedCommandData_8h.html#source-code","text":"#pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/SliceView_8h.html","text":"Studio/Visualization/SliceView.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SliceView SliceView . Source code #pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#studiovisualizationsliceviewh","text":"","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SliceView_8h.html#classes","text":"Name class shapeworks::SliceView SliceView .","title":"Classes"},{"location":"api/Files/SliceView_8h.html#source-code","text":"#pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/SplashScreen_8h.html","text":"Studio/Interface/SplashScreen.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SplashScreen Source code #pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#studiointerfacesplashscreenh","text":"","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SplashScreen_8h.html#classes","text":"Name class shapeworks::SplashScreen","title":"Classes"},{"location":"api/Files/SplashScreen_8h.html#source-code","text":"#pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StackWalker_8h.html","text":"Studio/Utils/StackWalker.h Source code #ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#studioutilsstackwalkerh","text":"","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#source-code","text":"#ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StatsGroupLDAJob_8h.html","text":"Studio/Job/StatsGroupLDAJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatsGroupLDAJob Source code #pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#studiojobstatsgroupldajobh","text":"","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatsGroupLDAJob_8h.html#classes","text":"Name class shapeworks::StatsGroupLDAJob","title":"Classes"},{"location":"api/Files/StatsGroupLDAJob_8h.html#source-code","text":"#pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StatusBarWidget_8h.html","text":"Studio/Interface/StatusBarWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatusBarWidget StatusBarWidget . Source code #pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#studiointerfacestatusbarwidgeth","text":"","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatusBarWidget_8h.html#classes","text":"Name class shapeworks::StatusBarWidget StatusBarWidget .","title":"Classes"},{"location":"api/Files/StatusBarWidget_8h.html#source-code","text":"#pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StringUtils_8h.html","text":"Libs/Utils/StringUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StringUtils String utility functions. Source code #pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#libsutilsstringutilsh","text":"","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StringUtils_8h.html#classes","text":"Name class shapeworks::StringUtils String utility functions.","title":"Classes"},{"location":"api/Files/StringUtils_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioEnums_8h.html","text":"Libs/Analyze/StudioEnums.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#libsanalyzestudioenumsh","text":"","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioEnums_8h.html#source-code","text":"#pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/StudioHandleWidget_8h.html","text":"Studio/Visualization/StudioHandleWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioHandleWidget Source code #include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#studiovisualizationstudiohandlewidgeth","text":"","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioHandleWidget_8h.html#classes","text":"Name class shapeworks::StudioHandleWidget","title":"Classes"},{"location":"api/Files/StudioHandleWidget_8h.html#source-code","text":"#include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioInteractorStyle_8h.html","text":"Studio/Visualization/StudioInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#studiovisualizationstudiointeractorstyleh","text":"","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioInteractorStyle","title":"Classes"},{"location":"api/Files/StudioInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioLogger_8h.html","text":"Studio/Interface/StudioLogger.h Classes Name class StudioLogger Handle logger callbacks via Qt for thread correctness. Source code #pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#studiointerfacestudiologgerh","text":"","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#classes","text":"Name class StudioLogger Handle logger callbacks via Qt for thread correctness.","title":"Classes"},{"location":"api/Files/StudioLogger_8h.html#source-code","text":"#pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioMesh_8h.html","text":"Libs/Analyze/StudioMesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioMesh Representation of a single mesh. Types Name using float PixelType using itk::Image< PixelType, 3 > ImageType Types Documentation using PixelType using PixelType = float ; using ImageType using ImageType = itk :: Image < PixelType , 3 > ; Source code #pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#libsanalyzestudiomeshh","text":"","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioMesh_8h.html#classes","text":"Name class shapeworks::StudioMesh Representation of a single mesh.","title":"Classes"},{"location":"api/Files/StudioMesh_8h.html#types","text":"Name using float PixelType using itk::Image< PixelType, 3 > ImageType","title":"Types"},{"location":"api/Files/StudioMesh_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/StudioMesh_8h.html#using-pixeltype","text":"using PixelType = float ;","title":"using PixelType"},{"location":"api/Files/StudioMesh_8h.html#using-imagetype","text":"using ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Files/StudioMesh_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html","text":"Studio/Visualization/StudioSliceInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioSliceInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#studiovisualizationstudiosliceinteractorstyleh","text":"","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioSliceInteractorStyle","title":"Classes"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioUtils_8h.html","text":"Studio/Utils/StudioUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioUtils Utilities for Studio. Source code #pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#studioutilsstudioutilsh","text":"","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioUtils_8h.html#classes","text":"Name class shapeworks::StudioUtils Utilities for Studio.","title":"Classes"},{"location":"api/Files/StudioUtils_8h.html#source-code","text":"#pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioVtkOutputWindow_8h.html","text":"Studio/Visualization/StudioVtkOutputWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. Source code #pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#studiovisualizationstudiovtkoutputwindowh","text":"","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#classes","text":"Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages.","title":"Classes"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Style_8h.html","text":"Studio/Interface/Style.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Style Source code #pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#studiointerfacestyleh","text":"","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Style_8h.html#classes","text":"Name class shapeworks::Style","title":"Classes"},{"location":"api/Files/Style_8h.html#source-code","text":"#pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Subject_8h.html","text":"Libs/Project/Subject.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Subject Representation of a single subject. Source code #pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#libsprojectsubjecth","text":"","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Subject_8h.html#classes","text":"Name class shapeworks::Subject Representation of a single subject.","title":"Classes"},{"location":"api/Files/Subject_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/SurfaceReconstructor_8h.html","text":"Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. More... Classes Name class SurfaceReconstructor Detailed Description Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method Source code #pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#libsanalyzesurfacereconstructorh","text":"Surface Reconstruction Layer. More...","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#classes","text":"Name class SurfaceReconstructor","title":"Classes"},{"location":"api/Files/SurfaceReconstructor_8h.html#detailed-description","text":"Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method","title":"Detailed Description"},{"location":"api/Files/SurfaceReconstructor_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Telemetry_8h.html","text":"Studio/Data/Telemetry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Telemetry Source code #pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#studiodatatelemetryh","text":"","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Telemetry_8h.html#classes","text":"Name class shapeworks::Telemetry","title":"Classes"},{"location":"api/Files/Telemetry_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/UpdateChecker_8h.html","text":"Studio/Interface/UpdateChecker.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::UpdateChecker Update Checker. Source code #pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#studiointerfaceupdatecheckerh","text":"","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/UpdateChecker_8h.html#classes","text":"Name class shapeworks::UpdateChecker Update Checker.","title":"Classes"},{"location":"api/Files/UpdateChecker_8h.html#source-code","text":"#pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Utils_8h.html","text":"Libs/Utils/Utils.h Namespaces Name utils Classes Name class Utils Defines Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN Macros Documentation define twopi_inv #define twopi_inv 0.5/M_PI define twopi #define twopi 2.0*M_PI define RANDU #define RANDU ((double) rand()/RAND_MAX) define RANDN2 #define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 )) define RANDN #define RANDN RANDN2(0, 1.0) Source code /*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#libsutilsutilsh","text":"","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#namespaces","text":"Name utils","title":"Namespaces"},{"location":"api/Files/Utils_8h.html#classes","text":"Name class Utils","title":"Classes"},{"location":"api/Files/Utils_8h.html#defines","text":"Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN","title":"Defines"},{"location":"api/Files/Utils_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Utils_8h.html#define-twopi_inv","text":"#define twopi_inv 0.5/M_PI","title":"define twopi_inv"},{"location":"api/Files/Utils_8h.html#define-twopi","text":"#define twopi 2.0*M_PI","title":"define twopi"},{"location":"api/Files/Utils_8h.html#define-randu","text":"#define RANDU ((double) rand()/RAND_MAX)","title":"define RANDU"},{"location":"api/Files/Utils_8h.html#define-randn2","text":"#define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 ))","title":"define RANDN2"},{"location":"api/Files/Utils_8h.html#define-randn","text":"#define RANDN RANDN2(0, 1.0)","title":"define RANDN"},{"location":"api/Files/Utils_8h.html#source-code","text":"/*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Variant_8h.html","text":"Libs/Project/Variant.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Variant Variant class to represent multiple types. Source code #pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#libsprojectvarianth","text":"","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Variant_8h.html#classes","text":"Name class shapeworks::Variant Variant class to represent multiple types.","title":"Classes"},{"location":"api/Files/Variant_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/VectorFunction_8h.html","text":"Libs/Optimize/Function/VectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorFunction Source code #pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#libsoptimizefunctionvectorfunctionh","text":"","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorFunction_8h.html#classes","text":"Name class shapeworks::VectorFunction","title":"Classes"},{"location":"api/Files/VectorFunction_8h.html#source-code","text":"#pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/VectorImage_8h.html","text":"Libs/Image/VectorImage.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorImage Gradient (vector) image. Source code #pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#libsimagevectorimageh","text":"","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorImage_8h.html#classes","text":"Name class shapeworks::VectorImage Gradient (vector) image.","title":"Classes"},{"location":"api/Files/VectorImage_8h.html#source-code","text":"#pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Viewer_8h.html","text":"Studio/Visualization/Viewer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer Source code #pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#studiovisualizationviewerh","text":"","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Viewer_8h.html#classes","text":"Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer","title":"Classes"},{"location":"api/Files/Viewer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Visualizer_8h.html","text":"Studio/Visualization/Visualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Visualizer Controls display of objects in viewers. Source code #pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#studiovisualizationvisualizerh","text":"","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Visualizer_8h.html#classes","text":"Name class shapeworks::Visualizer Controls display of objects in viewers.","title":"Classes"},{"location":"api/Files/Visualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/VtkMeshWrapper_8h.html","text":"Libs/Optimize/Domain/VtkMeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VtkMeshWrapper Source code #pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#libsoptimizedomainvtkmeshwrapperh","text":"","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VtkMeshWrapper_8h.html#classes","text":"Name class shapeworks::VtkMeshWrapper","title":"Classes"},{"location":"api/Files/VtkMeshWrapper_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/WheelEventForwarder_8h.html","text":"Studio/Interface/WheelEventForwarder.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::WheelEventForwarder Source code #pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#studiointerfacewheeleventforwarderh","text":"","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/WheelEventForwarder_8h.html#classes","text":"Name class shapeworks::WheelEventForwarder","title":"Classes"},{"location":"api/Files/WheelEventForwarder_8h.html#source-code","text":"#pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/WindowsCrashHandler_8h.html","text":"Studio/Utils/WindowsCrashHandler.h Functions Name int init_crash_handler () Functions Documentation function init_crash_handler int init_crash_handler () Source code int init_crash_handler (); Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#studioutilswindowscrashhandlerh","text":"","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions","text":"Name int init_crash_handler ()","title":"Functions"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/WindowsCrashHandler_8h.html#function-init_crash_handler","text":"int init_crash_handler ()","title":"function init_crash_handler"},{"location":"api/Files/WindowsCrashHandler_8h.html#source-code","text":"int init_crash_handler (); Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Worker_8h.html","text":"Studio/Data/Worker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Worker Source code #pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#studiodataworkerh","text":"","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Worker_8h.html#classes","text":"Name class shapeworks::Worker","title":"Classes"},{"location":"api/Files/Worker_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html","text":"Libs/Optimize/Function Files Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#libsoptimizefunction","text":"","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#files","text":"Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html","text":"Libs/Optimize/Matrix Files Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#libsoptimizematrix","text":"","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#files","text":"Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html","text":"Studio/Analysis Files Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#studioanalysis","text":"","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#files","text":"Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html","text":"Libs/Mesh Directories Name Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#libsmesh","text":"","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#directories","text":"Name Libs/Mesh/PreviewMeshQC","title":"Directories"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#files","text":"Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html","text":"Libs/Optimize/Neighborhood Files Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#libsoptimizeneighborhood","text":"","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#files","text":"Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html","text":"Libs/Alignment/Transforms Files Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#libsalignmenttransforms","text":"","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#files","text":"Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html","text":"Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#libsmeshpreviewmeshqc","text":"","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#files","text":"Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html","text":"Studio/Groom Files Name Studio/Groom/GroomTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#studiogroom","text":"","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#files","text":"Name Studio/Groom/GroomTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html","text":"Studio/Python Files Name Studio/Python/PythonWorker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#studiopython","text":"","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#files","text":"Name Studio/Python/PythonWorker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html","text":"Applications/shapeworks Files Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#applicationsshapeworks","text":"","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#files","text":"Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html","text":"Libs/Project Files Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#libsproject","text":"","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#files","text":"Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html","text":"Studio/Utils Files Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#studioutils","text":"","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#files","text":"Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html","text":"Libs/Python Files Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#libspython","text":"","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#files","text":"Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html","text":"Libs Directories Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#libs","text":"","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#directories","text":"Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-24 at 22:16:02 +0000","title":"Directories"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html","text":"Libs/Utils Files Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#libsutils","text":"","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#files","text":"Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html","text":"Studio/Job Files Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#studiojob","text":"","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#files","text":"Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html","text":"Libs/Optimize/Utils Files Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#libsoptimizeutils","text":"","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#files","text":"Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html","text":"Libs/Optimize/Container Files Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#libsoptimizecontainer","text":"","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#files","text":"Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html","text":"Applications Directories Name Applications/shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#applications","text":"","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#directories","text":"Name Applications/shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Directories"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html","text":"Libs/Image Files Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#libsimage","text":"","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#files","text":"Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html","text":"Studio/Optimize Files Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#studiooptimize","text":"","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#files","text":"Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html","text":"Studio/Resources Files Name Studio/Resources/resource.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#studioresources","text":"","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#files","text":"Name Studio/Resources/resource.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html","text":"Libs/Optimize/Constraints Files Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#libsoptimizeconstraints","text":"","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#files","text":"Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html","text":"Studio/Data Files Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#studiodata","text":"","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#files","text":"Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html","text":"Documentation/Doxygen Updated on 2023-10-24 at 22:16:02 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html#documentationdoxygen","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html","text":"Studio/Visualization Files Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#studiovisualization","text":"","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#files","text":"Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html","text":"Libs/Optimize/Domain Files Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#libsoptimizedomain","text":"","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#files","text":"Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html","text":"Studio Directories Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#studio","text":"","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#directories","text":"Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-24 at 22:16:03 +0000","title":"Directories"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html","text":"Libs/Common Files Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#libscommon","text":"","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#files","text":"Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html","text":"Libs/Alignment Directories Name Libs/Alignment/Transforms Files Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#libsalignment","text":"","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#directories","text":"Name Libs/Alignment/Transforms","title":"Directories"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#files","text":"Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html","text":"Libs/Groom Files Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#libsgroom","text":"","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#files","text":"Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html","text":"Documentation Directories Name Documentation/Doxygen Updated on 2023-10-24 at 22:16:02 +0000","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#documentation","text":"","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#directories","text":"Name Documentation/Doxygen Updated on 2023-10-24 at 22:16:02 +0000","title":"Directories"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html","text":"Libs/Analyze Files Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#libsanalyze","text":"","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#files","text":"Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html","text":"Studio/DeepSSM Files Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#studiodeepssm","text":"","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#files","text":"Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html","text":"Libs/Optimize Directories Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils Files Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#libsoptimize","text":"","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#directories","text":"Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils","title":"Directories"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#files","text":"Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html","text":"Studio/Interface Files Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#studiointerface","text":"","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#files","text":"Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html","text":"Libs/Particles Files Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#libsparticles","text":"","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#files","text":"Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/index_files.html","text":"Files dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/index_files.html#files","text":"dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/itkAdvancedTransform_8h.html","text":"Libs/Alignment/Transforms/itkAdvancedTransform.h Namespaces Name itk Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#libsalignmenttransformsitkadvancedtransformh","text":"","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkAdvancedTransform_8h.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space.","title":"Classes"},{"location":"api/Files/itkAdvancedTransform_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Namespaces Name itk Classes Name class itk::CompactlySupportedRBFSparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#libsalignmenttransformsitkcompactlysupportedrbfsparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#classes","text":"Name class itk::CompactlySupportedRBFSparseKernelTransform","title":"Classes"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkKernelTransform2.h Namespaces Name itk Classes Name class itk::KernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#libsalignmenttransformsitkkerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkKernelTransform2_8h.html#classes","text":"Name class itk::KernelTransform2","title":"Classes"},{"location":"api/Files/itkKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html","text":"Libs/Mesh/itkMultiplyByConstantImageFilter.h Namespaces Name itk itk::Functor Classes Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#libsmeshitkmultiplybyconstantimagefilterh","text":"","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#namespaces","text":"Name itk itk::Functor","title":"Namespaces"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#classes","text":"Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant.","title":"Classes"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkSparseKernelTransform.h Namespaces Name itk Classes Name class itk::SparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#libsalignmenttransformsitksparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkSparseKernelTransform_8h.html#classes","text":"Name class itk::SparseKernelTransform","title":"Classes"},{"location":"api/Files/itkSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html","text":"Libs/Image/itkTPGACLevelSetImageFilter.h Namespaces Name itk Classes Name class itk::TPGACLevelSetImageFilter Defines Name TPGAC_EPSILON Macros Documentation define TPGAC_EPSILON #define TPGAC_EPSILON 1e-5; Source code #ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#libsimageitktpgaclevelsetimagefilterh","text":"","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#classes","text":"Name class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#defines","text":"Name TPGAC_EPSILON","title":"Defines"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#define-tpgac_epsilon","text":"#define TPGAC_EPSILON 1e-5;","title":"define TPGAC_EPSILON"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#source-code","text":"#ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Namespaces Name itk Classes Name class itk::ThinPlateSplineKernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#libsalignmenttransformsitkthinplatesplinekerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#classes","text":"Name class itk::ThinPlateSplineKernelTransform2","title":"Classes"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/math3d_8h.html","text":"Libs/Mesh/PreviewMeshQC/math3d.h Classes Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR Types Name typedef unsigned char uchar Functions Name quatd operator* (const double a, const quatd & q) Types Documentation typedef uchar typedef unsigned char uchar ; Functions Documentation function operator* inline quatd operator * ( const double a , const quatd & q ) Source code #pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#libsmeshpreviewmeshqcmath3dh","text":"","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#classes","text":"Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR","title":"Classes"},{"location":"api/Files/math3d_8h.html#types","text":"Name typedef unsigned char uchar","title":"Types"},{"location":"api/Files/math3d_8h.html#functions","text":"Name quatd operator* (const double a, const quatd & q)","title":"Functions"},{"location":"api/Files/math3d_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/math3d_8h.html#typedef-uchar","text":"typedef unsigned char uchar ;","title":"typedef uchar"},{"location":"api/Files/math3d_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/math3d_8h.html#function-operator","text":"inline quatd operator * ( const double a , const quatd & q )","title":"function operator*"},{"location":"api/Files/math3d_8h.html#source-code","text":"#pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/meshFIM_8h.html","text":"Libs/Mesh/meshFIM.h Classes Name class meshFIM Defines Name _EPS ONE CURVATURE GENERATE_GEO_FILES Macros Documentation define _EPS #define _EPS 1e-06 define ONE #define ONE 1 define CURVATURE #define CURVATURE 2 define GENERATE_GEO_FILES #define GENERATE_GEO_FILES 1 Source code #ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#libsmeshmeshfimh","text":"","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#classes","text":"Name class meshFIM","title":"Classes"},{"location":"api/Files/meshFIM_8h.html#defines","text":"Name _EPS ONE CURVATURE GENERATE_GEO_FILES","title":"Defines"},{"location":"api/Files/meshFIM_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/meshFIM_8h.html#define-_eps","text":"#define _EPS 1e-06","title":"define _EPS"},{"location":"api/Files/meshFIM_8h.html#define-one","text":"#define ONE 1","title":"define ONE"},{"location":"api/Files/meshFIM_8h.html#define-curvature","text":"#define CURVATURE 2","title":"define CURVATURE"},{"location":"api/Files/meshFIM_8h.html#define-generate_geo_files","text":"#define GENERATE_GEO_FILES 1","title":"define GENERATE_GEO_FILES"},{"location":"api/Files/meshFIM_8h.html#source-code","text":"#ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/pybind__utils_8h.html","text":"Libs/Python/pybind_utils.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#libspythonpybind_utilsh","text":"","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/pybind__utils_8h.html#source-code","text":"#pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/resource_8h.html","text":"Studio/Resources/resource.h Defines Name IDI_ICON1 Macros Documentation define IDI_ICON1 #define IDI_ICON1 101 Source code //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#studioresourcesresourceh","text":"","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#defines","text":"Name IDI_ICON1","title":"Defines"},{"location":"api/Files/resource_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/resource_8h.html#define-idi_icon1","text":"#define IDI_ICON1 101","title":"define IDI_ICON1"},{"location":"api/Files/resource_8h.html#source-code","text":"//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/stdafx_8h.html","text":"Libs/Mesh/PreviewMeshQC/stdafx.h Source code // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#libsmeshpreviewmeshqcstdafxh","text":"","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#source-code","text":"// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/vtkPolyDataToImageData_8h.html","text":"Libs/Analyze/vtkPolyDataToImageData.h Classes Name class vtkPolyDataToImageData Source code // This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#libsanalyzevtkpolydatatoimagedatah","text":"","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#classes","text":"Name class vtkPolyDataToImageData","title":"Classes"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#source-code","text":"// This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Modules/group__Group-Common.html","text":"Common Classes Classes Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-24 at 22:16:02 +0000","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#common-classes","text":"","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#classes","text":"Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-24 at 22:16:02 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Constraint.html","text":"Constraint Classes Updated on 2023-10-24 at 22:16:02 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Constraint.html#constraint-classes","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Image.html","text":"Image Classes Classes Name class shapeworks::Image Updated on 2023-10-24 at 22:16:02 +0000","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#image-classes","text":"","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#classes","text":"Name class shapeworks::Image Updated on 2023-10-24 at 22:16:02 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Mesh.html","text":"Mesh Classes Classes Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-24 at 22:16:02 +0000","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#mesh-classes","text":"","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-24 at 22:16:02 +0000","title":"Classes"},{"location":"api/Modules/index_groups.html","text":"Modules group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-24 at 22:16:03 +0000","title":"Groups"},{"location":"api/Modules/index_groups.html#modules","text":"group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-24 at 22:16:03 +0000","title":"Modules"},{"location":"api/Namespaces/index_namespaces.html","text":"Namespaces namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-24 at 22:16:03 +0000","title":"Namespaces"},{"location":"api/Namespaces/index_namespaces.html#namespaces","text":"namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-24 at 22:16:03 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceUi.html","text":"Ui Updated on 2023-10-24 at 22:16:02 +0000","title":"Ui"},{"location":"api/Namespaces/namespaceUi.html#ui","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"Ui"},{"location":"api/Namespaces/namespacefmt.html","text":"fmt Classes Name struct fmt::formatter< QString > Updated on 2023-10-24 at 22:16:01 +0000","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#fmt","text":"","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#classes","text":"Name struct fmt::formatter< QString > Updated on 2023-10-24 at 22:16:01 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html","text":"itk Namespaces Name itk::Functor Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter Functions Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc) Attributes Name int nbh6Table int nbh26Table Functions Documentation function fillLocal6Neighbours static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination. function label6Neighbours static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel. function label26Neighbours static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel. function connectedComponents static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc ) Attributes Documentation variable nbh6Table static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } }; variable nbh26Table static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#itk","text":"","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#namespaces","text":"Name itk::Functor","title":"Namespaces"},{"location":"api/Namespaces/namespaceitk.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html#functions","text":"Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc)","title":"Functions"},{"location":"api/Namespaces/namespaceitk.html#attributes","text":"Name int nbh6Table int nbh26Table","title":"Attributes"},{"location":"api/Namespaces/namespaceitk.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceitk.html#function-filllocal6neighbours","text":"static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination.","title":"function fillLocal6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label6neighbours","text":"static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel.","title":"function label6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label26neighbours","text":"static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel.","title":"function label26Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-connectedcomponents","text":"static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc )","title":"function connectedComponents"},{"location":"api/Namespaces/namespaceitk.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh6table","text":"static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } };","title":"variable nbh6Table"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh26table","text":"static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable nbh26Table"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html","text":"itk::Functor Classes Name class itk::Functor::MultiplyByConstant Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#itkfunctor","text":"","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#classes","text":"Name class itk::Functor::MultiplyByConstant Updated on 2023-10-24 at 22:16:01 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html","text":"shapeworks User usage reporting (telemetry) More... Namespaces Name shapeworks::mesh shapeworks::particles shapeworks::project Classes Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker Types Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle Functions Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data) Attributes Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines Detailed Description User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes Types Documentation enum DisplayMode Enumerator Value Description Original 0 Groomed 1 Reconstructed 2 enum Axis Enumerator Value Description invalid -1 X Y Z handy way to specify an axis enum ConstraintType Enumerator Value Description CuttingPlane 'C' FreeForm 'F' enum CorrespondenceMode Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8 enum DomainType Enumerator Value Description Image 'I' Mesh 'M' Contour 'C' enum ArrayTransferOptions Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E enum LandmarkVisibility Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E enum MessageType Enumerator Value Description normal warning error debug using CacheMap using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ; using CacheList using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ; using ShapeHandle using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ; using ShapeList using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ; using MeshHandle using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ; using MeshList using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ; using Coord using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework. using Dims using shapeworks :: Dims = typedef itk :: Size < 3 > ; using Point3 using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ; using Vector3 using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ; using Matrix44 using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ; using Matrix33 using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ; using IPoint3 using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ; using FPoint3 using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ; using Covariant using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ; using Vector using shapeworks :: Vector = typedef Vector3 ; using Point using shapeworks :: Point = typedef Point3 ; using Matrix using shapeworks :: Matrix = typedef Matrix33 ; using Plane using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ; using Array using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ; using Field using shapeworks :: Field = typedef Array ; using PointArray using shapeworks :: PointArray = typedef std :: vector < Point3 > ; using GenericTransform using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer. using IdentityTransform using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ; using TransformPtr using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ; using AffineTransform using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands. using AffineTransformPtr using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ; using MeshTransform using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms. using ThinPlateSplineTransform using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface . using RBFSSparseTransform using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; using ProjectHandle using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ; using VnlMatrix template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; typedef SessionHandle typedef QSharedPointer < Session > shapeworks :: SessionHandle ; using TransformType using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this. typedef LightboxHandle typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ; typedef ViewerHandle typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ; typedef ViewerList typedef QVector < ViewerHandle > shapeworks :: ViewerList ; typedef VisualizerHandle typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ; Functions Documentation function COMMAND_DECLARE COMMAND_DECLARE ( ReadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageInfo , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Antialias , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResampleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResizeImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RecenterImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( PadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Rotate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ExtractLabel , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CloseHoles , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Binarize , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeDT , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CurvatureFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GradientFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SigmoidFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( IntensityFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Blur , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageBounds , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CropImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ICPRigid , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetOrigin , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetSpacing , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( NegateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( AddImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SubtractImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MultiplyImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( DivideImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageToMesh , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetRegion , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Isolate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Compactness , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Generalization , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Specificity , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshInfo , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Coverage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Smooth , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SmoothSinc , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Remesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RemeshPercent , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( InvertNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TransformMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FillHoles , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ProbeVolume , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshBounds , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Distance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldRange , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldMean , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldStd , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldNames , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FixElement , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClosestPoint , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeanNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Curvature , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToImage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToDT , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeThickness , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Seed , ShapeworksCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ) function display_mode_to_string std :: string display_mode_to_string ( DisplayMode display_mode ) function string_to_display_mode DisplayMode string_to_display_mode ( std :: string str ) function operator<< std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ) function operator<< std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ) function makeVector Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) function makePointArray PointArray makePointArray ( int size , Point3 value ) function createTransform TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) ) function makePlane Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane. function makePlane Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ) function getOrigin Point getOrigin ( const Plane plane ) Get origin and normal of plane. function getNormal Vector3 getNormal ( const Plane plane ) function createMeshTransform MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) function toPoint Point toPoint ( const Dims & d ) For deliberate conversions between types. function toPoint Point toPoint ( const Coord & c ) function toVector Vector toVector ( const Dims & d ) function toVector Vector toVector ( const Point & p ) function toVector Vector toVector ( const itk :: CovariantVector < double , 3 > & v ) function toPoint Point toPoint ( const Vector & v ) function toCoord Coord toCoord ( const Dims & d ) function toDims Dims toDims ( const Coord & c ) function toDims Dims toDims ( const Point & p ) function toCoord Coord toCoord ( const Point & p ) function negate template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) function negate Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector) function invertValue template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector. function invertValue Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector) function dotProduct Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products. function crossProduct Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ) function length double length ( const Vector3 & v ) function toAxis Axis toAxis ( const std :: string & str ) function axisToString std :: string axisToString ( Axis axis ) function axis_is_valid bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid. function axis_is_valid bool axis_is_valid ( const Axis & axis ) function degToRad double degToRad ( const double deg ) convert degrees to radians function mean double mean ( const Field field ) incrementally compute (single-component) mean of field function stddev double stddev ( const Field field ) compute (single-component) standard deviation of field function range std :: vector < double > range ( const Field field ) compute (single-component) range of field function operator+ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q ) function operator- template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q ) function operator+= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q ) function operator-= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x ) function operator*= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x ) function operator/= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x ) function epsEqual template < typename T > bool epsEqual ( T a , T b , T epsilon ) function epsEqual template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) function epsEqual bool epsEqual ( double a , double b , double eps ) function clamp template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17. function operator<< std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image function operator* Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h] function operator/ Image operator / ( const Image & img , const double x ) function operator*= Image & operator *= ( Image & img , const double x ) function operator/= Image & operator /= ( Image & img , const double x ) function operator<< std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh function itkEventMacro itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ) function SaveReconstructions void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) function variant_to_string template < typename T > std :: string variant_to_string ( T begin , T end ) function printNumpyArrayInfo void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc) function verifyOrderAndPacking void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not function setOwnership void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns function wrapNumpyArr Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign function pyToArr Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data function arrToPy py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer function itkTransformToEigen Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ) function eigen44ToItkTransform TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ) function vtkTransformToEigen Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ) function eigen44ToVtkTransform MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ) function itkToEigen template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix. function eigenToItk template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. function vnlToEigen template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix. function wrapDataWithEigen template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location. function wrapDataWithEigen template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix. function wrapDataWithItk template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data. Attributes Documentation variable Pi const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#shapeworks","text":"User usage reporting (telemetry) More...","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#namespaces","text":"Name shapeworks::mesh shapeworks::particles shapeworks::project","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks.html#classes","text":"Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html#types","text":"Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks.html#functions","text":"Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes","text":"Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks.html#detailed-description","text":"User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes","title":"Detailed Description"},{"location":"api/Namespaces/namespaceshapeworks.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-displaymode","text":"Enumerator Value Description Original 0 Groomed 1 Reconstructed 2","title":"enum DisplayMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-axis","text":"Enumerator Value Description invalid -1 X Y Z handy way to specify an axis","title":"enum Axis"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-constrainttype","text":"Enumerator Value Description CuttingPlane 'C' FreeForm 'F'","title":"enum ConstraintType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-correspondencemode","text":"Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8","title":"enum CorrespondenceMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-domaintype","text":"Enumerator Value Description Image 'I' Mesh 'M' Contour 'C'","title":"enum DomainType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-arraytransferoptions","text":"Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative","title":"enum ArrayTransferOptions"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkcolumns","text":"Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E","title":"enum LandmarkColumns"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkvisibility","text":"Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E","title":"enum LandmarkVisibility"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-messagetype","text":"Enumerator Value Description normal warning error debug","title":"enum MessageType"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachemap","text":"using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ;","title":"using CacheMap"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachelist","text":"using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ;","title":"using CacheList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapehandle","text":"using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ;","title":"using ShapeHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapelist","text":"using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ;","title":"using ShapeList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshhandle","text":"using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ;","title":"using MeshHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshlist","text":"using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ;","title":"using MeshList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-coord","text":"using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework.","title":"using Coord"},{"location":"api/Namespaces/namespaceshapeworks.html#using-dims","text":"using shapeworks :: Dims = typedef itk :: Size < 3 > ;","title":"using Dims"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point3","text":"using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector3","text":"using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ;","title":"using Vector3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix44","text":"using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ;","title":"using Matrix44"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix33","text":"using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ;","title":"using Matrix33"},{"location":"api/Namespaces/namespaceshapeworks.html#using-ipoint3","text":"using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ;","title":"using IPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-fpoint3","text":"using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ;","title":"using FPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-covariant","text":"using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ;","title":"using Covariant"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector","text":"using shapeworks :: Vector = typedef Vector3 ;","title":"using Vector"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point","text":"using shapeworks :: Point = typedef Point3 ;","title":"using Point"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix","text":"using shapeworks :: Matrix = typedef Matrix33 ;","title":"using Matrix"},{"location":"api/Namespaces/namespaceshapeworks.html#using-plane","text":"using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ;","title":"using Plane"},{"location":"api/Namespaces/namespaceshapeworks.html#using-array","text":"using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ;","title":"using Array"},{"location":"api/Namespaces/namespaceshapeworks.html#using-field","text":"using shapeworks :: Field = typedef Array ;","title":"using Field"},{"location":"api/Namespaces/namespaceshapeworks.html#using-pointarray","text":"using shapeworks :: PointArray = typedef std :: vector < Point3 > ;","title":"using PointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#using-generictransform","text":"using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer.","title":"using GenericTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-identitytransform","text":"using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ;","title":"using IdentityTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformptr","text":"using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ;","title":"using TransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransform","text":"using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands.","title":"using AffineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransformptr","text":"using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ;","title":"using AffineTransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshtransform","text":"using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms.","title":"using MeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-thinplatesplinetransform","text":"using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface .","title":"using ThinPlateSplineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-rbfssparsetransform","text":"using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ;","title":"using RBFSSparseTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-projecthandle","text":"using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ;","title":"using ProjectHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vnlmatrix","text":"template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ;","title":"using VnlMatrix"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-sessionhandle","text":"typedef QSharedPointer < Session > shapeworks :: SessionHandle ;","title":"typedef SessionHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformtype","text":"using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this.","title":"using TransformType"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-lightboxhandle","text":"typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ;","title":"typedef LightboxHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerhandle","text":"typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ;","title":"typedef ViewerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerlist","text":"typedef QVector < ViewerHandle > shapeworks :: ViewerList ;","title":"typedef ViewerList"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-visualizerhandle","text":"typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ;","title":"typedef VisualizerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare","text":"COMMAND_DECLARE ( ReadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_1","text":"COMMAND_DECLARE ( WriteImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_2","text":"COMMAND_DECLARE ( ImageInfo , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_3","text":"COMMAND_DECLARE ( Antialias , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_4","text":"COMMAND_DECLARE ( ResampleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_5","text":"COMMAND_DECLARE ( ResizeImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_6","text":"COMMAND_DECLARE ( RecenterImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_7","text":"COMMAND_DECLARE ( PadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_8","text":"COMMAND_DECLARE ( TranslateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_9","text":"COMMAND_DECLARE ( ScaleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_10","text":"COMMAND_DECLARE ( Rotate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_11","text":"COMMAND_DECLARE ( ExtractLabel , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_12","text":"COMMAND_DECLARE ( CloseHoles , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_13","text":"COMMAND_DECLARE ( Binarize , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_14","text":"COMMAND_DECLARE ( ComputeDT , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_15","text":"COMMAND_DECLARE ( CurvatureFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_16","text":"COMMAND_DECLARE ( GradientFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_17","text":"COMMAND_DECLARE ( SigmoidFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_18","text":"COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_19","text":"COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_20","text":"COMMAND_DECLARE ( IntensityFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_21","text":"COMMAND_DECLARE ( Blur , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_22","text":"COMMAND_DECLARE ( BoundingBoxImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_23","text":"COMMAND_DECLARE ( ImageBounds , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_24","text":"COMMAND_DECLARE ( CropImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_25","text":"COMMAND_DECLARE ( ICPRigid , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_26","text":"COMMAND_DECLARE ( ClipImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_27","text":"COMMAND_DECLARE ( ReflectImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_28","text":"COMMAND_DECLARE ( SetOrigin , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_29","text":"COMMAND_DECLARE ( SetSpacing , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_30","text":"COMMAND_DECLARE ( WarpImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_31","text":"COMMAND_DECLARE ( CompareImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_32","text":"COMMAND_DECLARE ( NegateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_33","text":"COMMAND_DECLARE ( AddImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_34","text":"COMMAND_DECLARE ( SubtractImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_35","text":"COMMAND_DECLARE ( MultiplyImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_36","text":"COMMAND_DECLARE ( DivideImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_37","text":"COMMAND_DECLARE ( ImageToMesh , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_38","text":"COMMAND_DECLARE ( SetRegion , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_39","text":"COMMAND_DECLARE ( Isolate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_40","text":"COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_41","text":"COMMAND_DECLARE ( Compactness , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_42","text":"COMMAND_DECLARE ( Generalization , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_43","text":"COMMAND_DECLARE ( Specificity , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_44","text":"COMMAND_DECLARE ( ReadMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_45","text":"COMMAND_DECLARE ( WriteMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_46","text":"COMMAND_DECLARE ( MeshInfo , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_47","text":"COMMAND_DECLARE ( Coverage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_48","text":"COMMAND_DECLARE ( Smooth , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_49","text":"COMMAND_DECLARE ( SmoothSinc , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_50","text":"COMMAND_DECLARE ( Remesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_51","text":"COMMAND_DECLARE ( RemeshPercent , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_52","text":"COMMAND_DECLARE ( InvertNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_53","text":"COMMAND_DECLARE ( ReflectMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_54","text":"COMMAND_DECLARE ( TransformMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_55","text":"COMMAND_DECLARE ( FillHoles , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_56","text":"COMMAND_DECLARE ( ProbeVolume , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_57","text":"COMMAND_DECLARE ( ClipMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_58","text":"COMMAND_DECLARE ( TranslateMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_59","text":"COMMAND_DECLARE ( ScaleMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_60","text":"COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_61","text":"COMMAND_DECLARE ( MeshBounds , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_62","text":"COMMAND_DECLARE ( Distance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_63","text":"COMMAND_DECLARE ( ComputeNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_64","text":"COMMAND_DECLARE ( SetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_65","text":"COMMAND_DECLARE ( GetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_66","text":"COMMAND_DECLARE ( SetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_67","text":"COMMAND_DECLARE ( GetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_68","text":"COMMAND_DECLARE ( FieldRange , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_69","text":"COMMAND_DECLARE ( FieldMean , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_70","text":"COMMAND_DECLARE ( FieldStd , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_71","text":"COMMAND_DECLARE ( FieldNames , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_72","text":"COMMAND_DECLARE ( FixElement , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_73","text":"COMMAND_DECLARE ( ClipClosedSurface , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_74","text":"COMMAND_DECLARE ( ClosestPoint , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_75","text":"COMMAND_DECLARE ( GeodesicDistance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_76","text":"COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_77","text":"COMMAND_DECLARE ( MeanNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_78","text":"COMMAND_DECLARE ( Curvature , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_79","text":"COMMAND_DECLARE ( MeshToImage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_80","text":"COMMAND_DECLARE ( MeshToDT , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_81","text":"COMMAND_DECLARE ( CompareMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_82","text":"COMMAND_DECLARE ( WarpMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_83","text":"COMMAND_DECLARE ( ComputeThickness , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_84","text":"COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_85","text":"COMMAND_DECLARE ( Seed , ShapeworksCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_86","text":"COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_87","text":"COMMAND_DECLARE ( GroomCommand , GroomCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_88","text":"COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_89","text":"COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-display_mode_to_string","text":"std :: string display_mode_to_string ( DisplayMode display_mode )","title":"function display_mode_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-string_to_display_mode","text":"DisplayMode string_to_display_mode ( std :: string str )","title":"function string_to_display_mode"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_1","text":"std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makevector","text":"Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version)","title":"function makeVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makepointarray","text":"PointArray makePointArray ( int size , Point3 value )","title":"function makePointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createtransform","text":"TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) )","title":"function createTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane","text":"Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane.","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane_1","text":"Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 )","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getorigin","text":"Point getOrigin ( const Plane plane ) Get origin and normal of plane.","title":"function getOrigin"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getnormal","text":"Vector3 getNormal ( const Plane plane )","title":"function getNormal"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createmeshtransform","text":"MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat )","title":"function createMeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint","text":"Point toPoint ( const Dims & d ) For deliberate conversions between types.","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_1","text":"Point toPoint ( const Coord & c )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector","text":"Vector toVector ( const Dims & d )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_1","text":"Vector toVector ( const Point & p )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_2","text":"Vector toVector ( const itk :: CovariantVector < double , 3 > & v )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_2","text":"Point toPoint ( const Vector & v )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord","text":"Coord toCoord ( const Dims & d )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims","text":"Dims toDims ( const Coord & c )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims_1","text":"Dims toDims ( const Point & p )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord_1","text":"Coord toCoord ( const Point & p )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate","text":"template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate_1","text":"Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue","text":"template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector.","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue_1","text":"Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector)","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-dotproduct","text":"Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products.","title":"function dotProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-crossproduct","text":"Vector3 crossProduct ( const Vector3 & a , const Vector3 & b )","title":"function crossProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-length","text":"double length ( const Vector3 & v )","title":"function length"},{"location":"api/Namespaces/namespaceshapeworks.html#function-toaxis","text":"Axis toAxis ( const std :: string & str )","title":"function toAxis"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axistostring","text":"std :: string axisToString ( Axis axis )","title":"function axisToString"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid","text":"bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid.","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid_1","text":"bool axis_is_valid ( const Axis & axis )","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-degtorad","text":"double degToRad ( const double deg ) convert degrees to radians","title":"function degToRad"},{"location":"api/Namespaces/namespaceshapeworks.html#function-mean","text":"double mean ( const Field field ) incrementally compute (single-component) mean of field","title":"function mean"},{"location":"api/Namespaces/namespaceshapeworks.html#function-stddev","text":"double stddev ( const Field field ) compute (single-component) standard deviation of field","title":"function stddev"},{"location":"api/Namespaces/namespaceshapeworks.html#function-range","text":"std :: vector < double > range ( const Field field ) compute (single-component) range of field","title":"function range"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_2","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q )","title":"function operator+"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q )","title":"function operator-"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_3","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_4","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_5","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q )","title":"function operator+="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q )","title":"function operator-="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_6","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_7","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_8","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_9","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal","text":"template < typename T > bool epsEqual ( T a , T b , T epsilon )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_2","text":"bool epsEqual ( double a , double b , double eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-clamp","text":"template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17.","title":"function clamp"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_10","text":"std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_11","text":"Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h]","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_12","text":"Image operator / ( const Image & img , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_13","text":"Image & operator *= ( Image & img , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_14","text":"Image & operator /= ( Image & img , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_15","text":"std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro","text":"itkEventMacro ( ParticleDomainAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_1","text":"itkEventMacro ( ParticleTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_2","text":"itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_3","text":"itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_4","text":"itkEventMacro ( ParticlePositionSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_5","text":"itkEventMacro ( ParticlePositionAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_6","text":"itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-savereconstructions","text":"void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo )","title":"function SaveReconstructions"},{"location":"api/Namespaces/namespaceshapeworks.html#function-variant_to_string","text":"template < typename T > std :: string variant_to_string ( T begin , T end )","title":"function variant_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-printnumpyarrayinfo","text":"void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc)","title":"function printNumpyArrayInfo"},{"location":"api/Namespaces/namespaceshapeworks.html#function-verifyorderandpacking","text":"void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not","title":"function verifyOrderAndPacking"},{"location":"api/Namespaces/namespaceshapeworks.html#function-setownership","text":"void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns","title":"function setOwnership"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapnumpyarr","text":"Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign","title":"function wrapNumpyArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-pytoarr","text":"Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data","title":"function pyToArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-arrtopy","text":"py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer","title":"function arrToPy"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktransformtoeigen","text":"Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform )","title":"function itkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44toitktransform","text":"TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat )","title":"function eigen44ToItkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vtktransformtoeigen","text":"Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform )","title":"function vtkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44tovtktransform","text":"MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat )","title":"function eigen44ToVtkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktoeigen","text":"template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix.","title":"function itkToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigentoitk","text":"template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix.","title":"function eigenToItk"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vnltoeigen","text":"template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix.","title":"function vnlToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen","text":"template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen_1","text":"template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawithitk","text":"template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data.","title":"function wrapDataWithItk"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#variable-pi","text":"const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-24 at 22:16:01 +0000","title":"variable Pi"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html","text":"shapeworks::mesh Functions Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT) Functions Documentation function compute_thickness void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#shapeworksmesh","text":"","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions","text":"Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#function-compute_thickness","text":"void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-24 at 22:16:02 +0000","title":"function compute_thickness"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html","text":"shapeworks::particles Functions Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points) Functions Documentation function read_particles Eigen :: VectorXd read_particles ( std :: string filename ) function read_particles_as_vector std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename ) function write_particles void write_particles ( std :: string filename , const Eigen :: VectorXd & points ) function write_particles_from_vector void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#shapeworksparticles","text":"","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions","text":"Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles","text":"Eigen :: VectorXd read_particles ( std :: string filename )","title":"function read_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles_as_vector","text":"std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename )","title":"function read_particles_as_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles","text":"void write_particles ( std :: string filename , const Eigen :: VectorXd & points )","title":"function write_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles_from_vector","text":"void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function write_particles_from_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html","text":"shapeworks::project Namespaces Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#shapeworksproject","text":"","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#namespaces","text":"Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-24 at 22:16:02 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html","text":"shapeworks::project::prefixes Attributes Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX Attributes Documentation variable SEGMENTATION_PREFIX static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; variable LANDMARKS_FILE_PREFIX static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; variable SHAPE_PREFIX static constexpr const char * SHAPE_PREFIX = \"shape_\" ; variable MESH_PREFIX static constexpr const char * MESH_PREFIX = \"mesh_\" ; variable CONTOUR_PREFIX static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; variable GROOMED_PREFIX static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; variable GROOMED_CONTOUR_PREFIX static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; variable CONSTRAINTS_PREFIX static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; variable GROOMED_TRANSFORMS_PREFIX static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; variable PROCRUSTES_TRANSFORMS_PREFIX static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; variable IMAGE_PREFIX static constexpr const char * IMAGE_PREFIX = \"image_\" ; variable FEATURE_PREFIX static constexpr const char * FEATURE_PREFIX = \"feature_\" ; variable GROUP_PREFIX static constexpr const char * GROUP_PREFIX = \"group_\" ; variable LOCAL_PARTICLES static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; variable WORLD_PARTICLES static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; variable LOCAL_PARTICLES_PREFIX static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; variable WORLD_PARTICLES_PREFIX static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#shapeworksprojectprefixes","text":"","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes","text":"Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-segmentation_prefix","text":"static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ;","title":"variable SEGMENTATION_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-landmarks_file_prefix","text":"static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ;","title":"variable LANDMARKS_FILE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-shape_prefix","text":"static constexpr const char * SHAPE_PREFIX = \"shape_\" ;","title":"variable SHAPE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-mesh_prefix","text":"static constexpr const char * MESH_PREFIX = \"mesh_\" ;","title":"variable MESH_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-contour_prefix","text":"static constexpr const char * CONTOUR_PREFIX = \"contour_\" ;","title":"variable CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_prefix","text":"static constexpr const char * GROOMED_PREFIX = \"groomed_\" ;","title":"variable GROOMED_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_contour_prefix","text":"static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ;","title":"variable GROOMED_CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-constraints_prefix","text":"static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ;","title":"variable CONSTRAINTS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_transforms_prefix","text":"static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ;","title":"variable GROOMED_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-procrustes_transforms_prefix","text":"static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ;","title":"variable PROCRUSTES_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-image_prefix","text":"static constexpr const char * IMAGE_PREFIX = \"image_\" ;","title":"variable IMAGE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-feature_prefix","text":"static constexpr const char * FEATURE_PREFIX = \"feature_\" ;","title":"variable FEATURE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-group_prefix","text":"static constexpr const char * GROUP_PREFIX = \"group_\" ;","title":"variable GROUP_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles","text":"static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ;","title":"variable LOCAL_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles","text":"static constexpr const char * WORLD_PARTICLES = \"world_particles\" ;","title":"variable WORLD_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles_prefix","text":"static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ;","title":"variable LOCAL_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles_prefix","text":"static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable WORLD_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html","text":"shapeworks::project::types Types Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap Types Documentation using StringMap using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ; using StringList using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ; using StringMapList using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ; using StringMultiMap using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#shapeworksprojecttypes","text":"","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types","text":"Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmap","text":"using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringlist","text":"using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ;","title":"using StringList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmaplist","text":"using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ;","title":"using StringMapList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmultimap","text":"using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-24 at 22:16:02 +0000","title":"using StringMultiMap"},{"location":"api/Namespaces/namespacestd.html","text":"std Updated on 2023-10-24 at 22:16:02 +0000","title":"std"},{"location":"api/Namespaces/namespacestd.html#std","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"std"},{"location":"api/Namespaces/namespaceutils.html","text":"utils Updated on 2023-10-24 at 22:16:02 +0000","title":"utils"},{"location":"api/Namespaces/namespaceutils.html#utils","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"utils"},{"location":"backlog/ShapeworksCmdTools.html","text":"ShapeWorks Tools The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below. [Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities] Image Tools Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing Read This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read. Write This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write. AntiAliasing This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims]. PadVolumeWithConstant This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels. ResampleVolumesToBeIsotropic This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image]. Binarize This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0]. Recenter This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image ReflectVolumes A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored. ClipVolume Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44 CloseHoles TODO Cropping Images This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction ExtractGivenLabelImage A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image. FastMarching A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background. FindLargestBoundingBox A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides ThresholdImages A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold TopologyPreservingSmoothing A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0]. WriteImageInfoToText A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing. Mesh Tools Mesh manipulation is used to blah blah blah... ClipClosedSurface ComputeCurvatureAndCoordFiles ComputeGeodesicDistanceToCurve ComputeGeodesicDistanceToLandmark ComputeGeodesicDistanceFromVerticesToPoints ComputeMeshGeodesics ComputeRasterizationVolumeOriginAndSize ExtractVertexFeatureFromMesh FillMeshHoles FixCuttingPlanes GenerateBinaryAndDTImagesFromMeshes GenerateFeatureGradientFiles GenerateFidsFiles GenerateFidsFilesFromMeshes GetFeatureVolume ParticleBasedSurfaceReconstruction PreviewCmd ProbeFeatureVolumesAtMeshVertices ProbeNormals ProjectPointsOntoMesh ComputeMeanNormals GenerateNormalFeaFiles Reflect Meshes RemoveFidsDTLeakage SmoothMesh ClipClosedSurface Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region ComputeCurvatureAndCoordFiles Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files ComputeGeodesicDistanceToCurve Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceToLandmark Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceFromVerticesToPoints Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName ComputeMeshGeodesics Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance ComputeRasterizationVolumeOriginAndSize Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information ExtractVertexFeatureFromMesh Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files FillMeshHoles Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced FixCuttingPlanes Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file GenerateBinaryAndDTImagesFromMeshes Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform GenerateFeatureGradientFiles Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\" GenerateFidsFiles Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GenerateFidsFilesFromMeshes Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GetFeatureVolume Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values. PreviewCmd This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5) ProbeFeatureVolumesAtMeshVertices Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced ProbeNormals Usage: ProbeNormals DTfilename pointsFilename outFileName ComputeMeanNormals Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt) GenerateNormalFeaFiles Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed Reflect Meshes A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply) RemoveFidsDTLeakage This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames SmoothMesh Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration Alignment Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape] ICPRigid3DImageRegistration A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image. ICPRigid3DMeshRegistration Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment ReflectMeshes Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis TranslateShapeToImageOrigin A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters Resize_origin_resampleShape TODO Analysis Analysis is used to blah blah blah... Optimization Optimization is used to blah blah blah... File Utilities The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT] GENERIC MESH FORMAT CONVERSION Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile fea2vtk Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. stl2ply Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply) stl2vtk Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk) vtk2ply Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply) VTKUnstructuredGridToPolyData Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles MeshFromDT TODO FeaFromVTK TODO","title":"ShapeworksCmdTools"},{"location":"backlog/ShapeworksCmdTools.html#_1","text":"","title":""},{"location":"backlog/ShapeworksCmdTools.html#shapeworks-tools","text":"","title":"ShapeWorks Tools"},{"location":"backlog/ShapeworksCmdTools.html#_2","text":"The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below.","title":""},{"location":"backlog/ShapeworksCmdTools.html#_3","text":"[Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities]","title":""},{"location":"backlog/ShapeworksCmdTools.html#image-tools","text":"Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing","title":"Image Tools"},{"location":"backlog/ShapeworksCmdTools.html#read","text":"This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read.","title":"Read"},{"location":"backlog/ShapeworksCmdTools.html#write","text":"This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write.","title":"Write"},{"location":"backlog/ShapeworksCmdTools.html#antialiasing","text":"This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims].","title":" AntiAliasing"},{"location":"backlog/ShapeworksCmdTools.html#padvolumewithconstant","text":"This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels.","title":"PadVolumeWithConstant"},{"location":"backlog/ShapeworksCmdTools.html#resamplevolumestobeisotropic","text":"This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image].","title":"ResampleVolumesToBeIsotropic"},{"location":"backlog/ShapeworksCmdTools.html#binarize","text":"This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0].","title":"Binarize"},{"location":"backlog/ShapeworksCmdTools.html#recenter","text":"This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image","title":"Recenter"},{"location":"backlog/ShapeworksCmdTools.html#reflectvolumes","text":"A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored.","title":"ReflectVolumes"},{"location":"backlog/ShapeworksCmdTools.html#clipvolume","text":"Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44","title":"ClipVolume"},{"location":"backlog/ShapeworksCmdTools.html#closeholes","text":"TODO","title":"CloseHoles"},{"location":"backlog/ShapeworksCmdTools.html#cropping-images","text":"This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction","title":"Cropping Images"},{"location":"backlog/ShapeworksCmdTools.html#extractgivenlabelimage","text":"A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image.","title":"ExtractGivenLabelImage"},{"location":"backlog/ShapeworksCmdTools.html#fastmarching","text":"A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background.","title":"FastMarching"},{"location":"backlog/ShapeworksCmdTools.html#findlargestboundingbox","text":"A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides","title":"FindLargestBoundingBox"},{"location":"backlog/ShapeworksCmdTools.html#thresholdimages","text":"A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold","title":"ThresholdImages"},{"location":"backlog/ShapeworksCmdTools.html#topologypreservingsmoothing","text":"A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0].","title":"TopologyPreservingSmoothing"},{"location":"backlog/ShapeworksCmdTools.html#writeimageinfototext","text":"A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing.","title":"WriteImageInfoToText"},{"location":"backlog/ShapeworksCmdTools.html#mesh-tools","text":"Mesh manipulation is used to blah blah blah...","title":"Mesh Tools"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface","text":"","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles","text":"","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve","text":"","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark","text":"","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints","text":"","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics","text":"","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize","text":"","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh","text":"","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes","text":"","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes","text":"","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes","text":"","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles","text":"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles","text":"","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes","text":"","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume","text":"","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#particlebasedsurfacereconstruction","text":"","title":"ParticleBasedSurfaceReconstruction"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd","text":"","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices","text":"","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals","text":"","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#projectpointsontomesh","text":"","title":"ProjectPointsOntoMesh"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals","text":"","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles","text":"","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes","text":"","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage","text":"","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh","text":"","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface_1","text":"Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles_1","text":"Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints_1","text":"Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics_1","text":"Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize_1","text":"Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh_1","text":"Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes_1","text":"Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes_1","text":"Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes_1","text":"Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles_1","text":"Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume_1","text":"Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values.","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd_1","text":"This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5)","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices_1","text":"Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals_1","text":"Usage: ProbeNormals DTfilename pointsFilename outFileName","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals_1","text":"Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt)","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles_1","text":"Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes_1","text":"A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply)","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage_1","text":"This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh_1","text":"Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#alignment","text":"Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape]","title":"Alignment"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dimageregistration","text":"A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image.","title":"ICPRigid3DImageRegistration"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dmeshregistration","text":"Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment","title":"ICPRigid3DMeshRegistration"},{"location":"backlog/ShapeworksCmdTools.html#reflectmeshes","text":"Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis","title":"ReflectMeshes"},{"location":"backlog/ShapeworksCmdTools.html#translateshapetoimageorigin","text":"A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters","title":"TranslateShapeToImageOrigin"},{"location":"backlog/ShapeworksCmdTools.html#resize_origin_resampleshape","text":"TODO","title":"Resize_origin_resampleShape"},{"location":"backlog/ShapeworksCmdTools.html#analysis","text":"Analysis is used to blah blah blah...","title":"Analysis"},{"location":"backlog/ShapeworksCmdTools.html#optimization","text":"Optimization is used to blah blah blah...","title":"Optimization"},{"location":"backlog/ShapeworksCmdTools.html#file-utilities","text":"The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT]","title":"File Utilities"},{"location":"backlog/ShapeworksCmdTools.html#generic-mesh-format-conversion","text":"Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile","title":"GENERIC MESH FORMAT CONVERSION"},{"location":"backlog/ShapeworksCmdTools.html#fea2vtk","text":"Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on.","title":"fea2vtk"},{"location":"backlog/ShapeworksCmdTools.html#stl2ply","text":"Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply)","title":"stl2ply"},{"location":"backlog/ShapeworksCmdTools.html#stl2vtk","text":"Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk)","title":"stl2vtk"},{"location":"backlog/ShapeworksCmdTools.html#vtk2ply","text":"Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply)","title":"vtk2ply"},{"location":"backlog/ShapeworksCmdTools.html#vtkunstructuredgridtopolydata","text":"Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles","title":"VTKUnstructuredGridToPolyData"},{"location":"backlog/ShapeworksCmdTools.html#meshfromdt","text":"TODO","title":"MeshFromDT"},{"location":"backlog/ShapeworksCmdTools.html#feafromvtk","text":"TODO","title":"FeaFromVTK"},{"location":"backlog/fim_v4.html","text":"FIM_V4 Library Overview TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) -- License fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Building To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables. Library Export This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#fim_v4-library","text":"","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#overview","text":"TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) --","title":"Overview"},{"location":"backlog/fim_v4.html#license","text":"fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"backlog/fim_v4.html#building","text":"To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables.","title":"Building"},{"location":"backlog/fim_v4.html#library-export","text":"This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"Library Export"},{"location":"cloud/cloud-analyze-module.html","text":"ShapeWorks Cloud Analyze Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer . View PCA The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Group Difference The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing. Charts The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view Shape Viewer While in the analyze tab, the Shape Viewer displays the mean (average) shape generated. Show Difference From Mean This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Analyze Module"},{"location":"cloud/cloud-analyze-module.html#shapeworks-cloud-analyze-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer .","title":"ShapeWorks Cloud Analyze Module"},{"location":"cloud/cloud-analyze-module.html#view-pca","text":"The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"View PCA"},{"location":"cloud/cloud-analyze-module.html#group-difference","text":"The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing.","title":"Group Difference"},{"location":"cloud/cloud-analyze-module.html#charts","text":"The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view","title":"Charts"},{"location":"cloud/cloud-analyze-module.html#shape-viewer","text":"While in the analyze tab, the Shape Viewer displays the mean (average) shape generated.","title":"Shape Viewer"},{"location":"cloud/cloud-analyze-module.html#show-difference-from-mean","text":"This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Show Difference From Mean"},{"location":"cloud/cloud-data-module.html","text":"ShapeWorks Cloud Data Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data. Anatomies Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here . Subjects Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . Landmarks Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Data Module"},{"location":"cloud/cloud-data-module.html#shapeworks-cloud-data-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data.","title":"ShapeWorks Cloud Data Module"},{"location":"cloud/cloud-data-module.html#anatomies","text":"Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here .","title":"Anatomies"},{"location":"cloud/cloud-data-module.html#subjects","text":"Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer .","title":"Subjects"},{"location":"cloud/cloud-data-module.html#landmarks","text":"Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Landmarks"},{"location":"cloud/cloud-dataset.html","text":"ShapeWorks Cloud Dataset Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations . Create Subset The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset. Thumbnail The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view. Upload Dataset Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Datasets"},{"location":"cloud/cloud-dataset.html#shapeworks-cloud-dataset","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations .","title":"ShapeWorks Cloud Dataset"},{"location":"cloud/cloud-dataset.html#create-subset","text":"The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset.","title":"Create Subset"},{"location":"cloud/cloud-dataset.html#thumbnail","text":"The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view.","title":"Thumbnail"},{"location":"cloud/cloud-dataset.html#upload-dataset","text":"Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Upload Dataset"},{"location":"cloud/cloud-groom-module.html","text":"ShapeWorks Cloud Groom Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"cloud/cloud-groom-module.html#shapeworks-cloud-groom-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Cloud Groom Module"},{"location":"cloud/cloud-optimize-module.html","text":"ShapeWorks Cloud Optimize Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"cloud/cloud-optimize-module.html#shapeworks-cloud-optimize-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Cloud Optimize Module"},{"location":"cloud/cloud-project.html","text":"ShapeWorks Cloud Project Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data. Create a Project To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client . Edit a Project To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Projects"},{"location":"cloud/cloud-project.html#shapeworks-cloud-project","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data.","title":"ShapeWorks Cloud Project"},{"location":"cloud/cloud-project.html#create-a-project","text":"To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client .","title":"Create a Project"},{"location":"cloud/cloud-project.html#edit-a-project","text":"To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Edit a Project"},{"location":"cloud/cloud-shape-viewer.html","text":"ShapeWorks Cloud Shape Viewer Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. Shape Viewer Options Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle Layers The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features Set Thumbnail Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shapeworks-cloud-shape-viewer","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean.","title":"ShapeWorks Cloud Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shape-viewer-options","text":"Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle","title":"Shape Viewer Options"},{"location":"cloud/cloud-shape-viewer.html#layers","text":"The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features","title":"Layers"},{"location":"cloud/cloud-shape-viewer.html#set-thumbnail","text":"Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Set Thumbnail"},{"location":"cloud/getting-started-with-cloud.html","text":"Getting Stared with ShapeWorks Cloud Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data. Login Screen To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ . Dataset List The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information. Project List The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information. Data Module The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information. Groom Module The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information. Optimize Module The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information. Analyze Module The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information. Shape Viewer The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Getting Started"},{"location":"cloud/getting-started-with-cloud.html#getting-stared-with-shapeworks-cloud","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data.","title":"Getting Stared with ShapeWorks Cloud"},{"location":"cloud/getting-started-with-cloud.html#login-screen","text":"To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ .","title":"Login Screen"},{"location":"cloud/getting-started-with-cloud.html#dataset-list","text":"The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information.","title":"Dataset List"},{"location":"cloud/getting-started-with-cloud.html#project-list","text":"The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information.","title":"Project List"},{"location":"cloud/getting-started-with-cloud.html#data-module","text":"The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information.","title":"Data Module"},{"location":"cloud/getting-started-with-cloud.html#groom-module","text":"The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information.","title":"Groom Module"},{"location":"cloud/getting-started-with-cloud.html#optimize-module","text":"The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information.","title":"Optimize Module"},{"location":"cloud/getting-started-with-cloud.html#analyze-module","text":"The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information.","title":"Analyze Module"},{"location":"cloud/getting-started-with-cloud.html#shape-viewer","text":"The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Shape Viewer"},{"location":"cloud/swcc.html","text":"ShapeWorks Cloud Client (SWCC) Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users. Authentication & Sessions This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out Datasets and Projects The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you. Datasets The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d ) Projects The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects The Project File The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run. Other Classes and Methods As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database Examples def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"ShapeWorks Cloud Client"},{"location":"cloud/swcc.html#shapeworks-cloud-client-swcc","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users.","title":"ShapeWorks Cloud Client (SWCC)"},{"location":"cloud/swcc.html#authentication-sessions","text":"This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out","title":"Authentication & Sessions"},{"location":"cloud/swcc.html#datasets-and-projects","text":"The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you.","title":"Datasets and Projects"},{"location":"cloud/swcc.html#datasets","text":"The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d )","title":"Datasets"},{"location":"cloud/swcc.html#projects","text":"The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects","title":"Projects"},{"location":"cloud/swcc.html#the-project-file","text":"The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run.","title":"The Project File"},{"location":"cloud/swcc.html#other-classes-and-methods","text":"As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database","title":"Other Classes and Methods"},{"location":"cloud/swcc.html#examples","text":"def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"Examples"},{"location":"deep-learning/data-augmentation.html","text":"Data Augmentation for Deep Learning ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations. Using the Data Augmentation Package The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils Running Data Augmentation To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . Visualizing Data Augmentation This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. Data Augmentation Steps 0. Collect Real Data As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM). 1. Embed Real Data First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA). 2. Fit a Parametric Distribution Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace. 3. Sample from the Distribution Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved. 4. Project Samples The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples. 5. Complete Sample Generation The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample. Sampling Distributions The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate). Multivariate Gaussian Distribution To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space. Mixture of Multivariate Gaussians Distribution A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space. Kernel Density Estimate Distribution Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#data-augmentation-for-deep-learning","text":"ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#using-the-data-augmentation-package","text":"The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils","title":"Using the Data Augmentation Package"},{"location":"deep-learning/data-augmentation.html#running-data-augmentation","text":"To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list .","title":"Running Data Augmentation"},{"location":"deep-learning/data-augmentation.html#visualizing-data-augmentation","text":"This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed.","title":"Visualizing Data Augmentation"},{"location":"deep-learning/data-augmentation.html#data-augmentation-steps","text":"","title":"Data Augmentation Steps"},{"location":"deep-learning/data-augmentation.html#0-collect-real-data","text":"As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM).","title":"0. Collect Real Data"},{"location":"deep-learning/data-augmentation.html#1-embed-real-data","text":"First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA).","title":"1. Embed Real Data"},{"location":"deep-learning/data-augmentation.html#2-fit-a-parametric-distribution","text":"Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace.","title":"2. Fit a Parametric Distribution"},{"location":"deep-learning/data-augmentation.html#3-sample-from-the-distribution","text":"Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved.","title":"3. Sample from the Distribution"},{"location":"deep-learning/data-augmentation.html#4-project-samples","text":"The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples.","title":"4. Project Samples"},{"location":"deep-learning/data-augmentation.html#5-complete-sample-generation","text":"The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample.","title":"5. Complete Sample Generation"},{"location":"deep-learning/data-augmentation.html#sampling-distributions","text":"The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate).","title":"Sampling Distributions"},{"location":"deep-learning/data-augmentation.html#multivariate-gaussian-distribution","text":"To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space.","title":"Multivariate Gaussian Distribution"},{"location":"deep-learning/data-augmentation.html#mixture-of-multivariate-gaussians-distribution","text":"A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space.","title":"Mixture of Multivariate Gaussians Distribution"},{"location":"deep-learning/data-augmentation.html#kernel-density-estimate-distribution","text":"Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Kernel Density Estimate Distribution"},{"location":"deep-learning/deep-ssm.html","text":"SSMs Directly from Images DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018. What is DeepSSM? The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning. Why DeepSSM? The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently. DeepSSM Steps 1. Data Augmentation The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction. 2. Creation of Data Loaders The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user. 3. Training PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder. 4. Testing The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image. 5. Evaluation To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate. Using the DeepSSM Python Package The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils Get train and validation torch loaders This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None . Get test torch loader This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None . Train DeepSSM This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters. Config File Parameter Descriptions model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing. Test DeepSSM This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict. Analyze Results This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset. Visualizing Error The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#ssms-directly-from-images","text":"DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#what-is-deepssm","text":"The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning.","title":"What is DeepSSM?"},{"location":"deep-learning/deep-ssm.html#why-deepssm","text":"The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently.","title":"Why DeepSSM?"},{"location":"deep-learning/deep-ssm.html#deepssm-steps","text":"","title":"DeepSSM Steps"},{"location":"deep-learning/deep-ssm.html#1-data-augmentation","text":"The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction.","title":"1. Data Augmentation"},{"location":"deep-learning/deep-ssm.html#2-creation-of-data-loaders","text":"The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user.","title":"2. Creation of Data Loaders"},{"location":"deep-learning/deep-ssm.html#3-training","text":"PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder.","title":"3. Training"},{"location":"deep-learning/deep-ssm.html#4-testing","text":"The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image.","title":"4. Testing"},{"location":"deep-learning/deep-ssm.html#5-evaluation","text":"To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate.","title":"5. Evaluation"},{"location":"deep-learning/deep-ssm.html#using-the-deepssm-python-package","text":"The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils","title":"Using the DeepSSM Python Package"},{"location":"deep-learning/deep-ssm.html#get-train-and-validation-torch-loaders","text":"This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None .","title":"Get train and validation torch loaders"},{"location":"deep-learning/deep-ssm.html#get-test-torch-loader","text":"This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None .","title":"Get test torch loader"},{"location":"deep-learning/deep-ssm.html#train-deepssm","text":"This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters.","title":"Train DeepSSM"},{"location":"deep-learning/deep-ssm.html#config-file-parameter-descriptions","text":"model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing.","title":"Config File Parameter Descriptions"},{"location":"deep-learning/deep-ssm.html#test-deepssm","text":"This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict.","title":"Test DeepSSM"},{"location":"deep-learning/deep-ssm.html#analyze-results","text":"This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset.","title":"Analyze Results"},{"location":"deep-learning/deep-ssm.html#visualizing-error","text":"The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"Visualizing Error"},{"location":"deep-learning/pytorch-gpu.html","text":"PyTorch GPU Support for ShapeWorks ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch. Checking if PyTorch installation has GPU support To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment. Reinstalling the Correct PyTorch Version If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#pytorch-gpu-support-for-shapeworks","text":"ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#checking-if-pytorch-installation-has-gpu-support","text":"To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment.","title":"Checking if PyTorch installation has GPU support"},{"location":"deep-learning/pytorch-gpu.html#reinstalling-the-correct-pytorch-version","text":"If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"Reinstalling the Correct PyTorch Version"},{"location":"dev/build.html","text":"How to Build ShapeWorks from Source? If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything. Minimum Requirements Linux CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0 Mac CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0 Windows CMake 3.11 (provided by conda below if not already installed) MSVC 2019 Clone source To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands. Install dependencies Linux and Mac Anaconda We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. VXL, VTK, ITK, Eigen and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Windows CMake Download and install [CMake] Download and install [Visual Studio 2019] Anaconda Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Configure and Build Linux & Mac Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake . Options If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables. Building Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there. Before running Examples/Python scripts and Examples/Python/notebooks Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory] Examples OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj Windows Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it. Examples An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON .. Options Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#how-to-build-shapeworks-from-source","text":"If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#minimum-requirements","text":"","title":"Minimum Requirements"},{"location":"dev/build.html#linux","text":"CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0","title":"Linux"},{"location":"dev/build.html#mac","text":"CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0","title":"Mac"},{"location":"dev/build.html#windows","text":"CMake 3.11 (provided by conda below if not already installed) MSVC 2019","title":"Windows"},{"location":"dev/build.html#clone-source","text":"To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands.","title":"Clone source"},{"location":"dev/build.html#install-dependencies","text":"","title":"Install dependencies"},{"location":"dev/build.html#linux-and-mac","text":"","title":"Linux and Mac"},{"location":"dev/build.html#anaconda","text":"We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"Anaconda"},{"location":"dev/build.html#vxl-vtk-itk-eigen-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VXL, VTK, ITK, Eigen and OpenVDB"},{"location":"dev/build.html#windows_1","text":"","title":"Windows"},{"location":"dev/build.html#cmake","text":"Download and install [CMake] Download and install [Visual Studio 2019]","title":"CMake"},{"location":"dev/build.html#anaconda_1","text":"Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments.","title":"Anaconda"},{"location":"dev/build.html#vtk-itk-eigen-xlnt-jkqtplotter-libigl-geometry-central-acvd-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB"},{"location":"dev/build.html#configure-and-build","text":"","title":"Configure and Build"},{"location":"dev/build.html#linux-mac","text":"Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake .","title":"Linux & Mac"},{"location":"dev/build.html#options","text":"If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables.","title":"Options"},{"location":"dev/build.html#building","text":"Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there.","title":"Building"},{"location":"dev/build.html#before-running-examplespython-scripts-and-examplespythonnotebooks","text":"Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory]","title":"Before running Examples/Python scripts and Examples/Python/notebooks"},{"location":"dev/build.html#examples","text":"OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj","title":"Examples"},{"location":"dev/build.html#windows_2","text":"Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it.","title":"Windows"},{"location":"dev/build.html#examples_1","text":"An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON ..","title":"Examples"},{"location":"dev/build.html#options_1","text":"Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"Options"},{"location":"dev/commands.html","text":"How to Add ShapeWorks Commands? To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/commands.html#how-to-add-shapeworks-commands","text":"To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/contribute.html","text":"How to Contribute to ShapeWorks? ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account . Source and Branches To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run] Commits Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch. Logs and diffs View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only Tags Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github. Advanced There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#how-to-contribute-to-shapeworks","text":"ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account .","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#source-and-branches","text":"To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run]","title":"Source and Branches"},{"location":"dev/contribute.html#commits","text":"Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch.","title":"Commits"},{"location":"dev/contribute.html#logs-and-diffs","text":"View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only ","title":"Logs and diffs"},{"location":"dev/contribute.html#tags","text":"Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github.","title":"Tags"},{"location":"dev/contribute.html#advanced","text":"There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"Advanced"},{"location":"dev/datasets.html","text":"How to Add New Datasets? ShapeWorks Data Portal Dataset Requirements Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory. images/ contents: 3D images of the data file types: itk supported image formats segmentations/ contents: 3D segmentations of the data file types: itk supported image formats meshes/ contents: meshes file types: ply, vtk, stl landmarks/ contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label distance_transforms/ contents: 3D distance transform volumes file types: itk supported image formats shape_models/ contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles Uploading a Dataset Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Datasets API DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure DatasetUtils.uploadNewDataset(datasetName, datasetPath) Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure DatasetUtils.getDatasetList() Returns: a list of all existing datasets on the data portal DatasetUtils.getFileList(datasetName) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#how-to-add-new-datasets","text":"ShapeWorks Data Portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#dataset-requirements","text":"Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory.","title":"Dataset Requirements"},{"location":"dev/datasets.html#images","text":"contents: 3D images of the data file types: itk supported image formats","title":"images/"},{"location":"dev/datasets.html#segmentations","text":"contents: 3D segmentations of the data file types: itk supported image formats","title":"segmentations/"},{"location":"dev/datasets.html#meshes","text":"contents: meshes file types: ply, vtk, stl","title":"meshes/"},{"location":"dev/datasets.html#landmarks","text":"contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label","title":"landmarks/"},{"location":"dev/datasets.html#distance_transforms","text":"contents: 3D distance transform volumes file types: itk supported image formats","title":"distance_transforms/"},{"location":"dev/datasets.html#shape_models","text":"contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles","title":"shape_models/"},{"location":"dev/datasets.html#uploading-a-dataset","text":"Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/","title":"Uploading a Dataset"},{"location":"dev/datasets.html#datasets-api","text":"","title":"Datasets API"},{"location":"dev/datasets.html#datasetutilsdownloaddatasetdatasetname-destinationpath-aszip-true-filelist-none","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure","title":"DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None)"},{"location":"dev/datasets.html#datasetutilsuploadnewdatasetdatasetname-datasetpath","text":"Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure","title":"DatasetUtils.uploadNewDataset(datasetName, datasetPath)"},{"location":"dev/datasets.html#datasetutilsgetdatasetlist","text":"Returns: a list of all existing datasets on the data portal","title":"DatasetUtils.getDatasetList()"},{"location":"dev/datasets.html#datasetutilsgetfilelistdatasetname","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"DatasetUtils.getFileList(datasetName)"},{"location":"dev/docs.html","text":"Getting Started with Documentation Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files Naming and Organization Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder. Adding Call-outs We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title. Locally Building Documentation To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt. Deploying on GitHub Pages As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed. Contributing to Documentation Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List . Inserting Videos in Documentation Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ . Auto-generating ShapeWorks Commands Documentation The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated Auto-generating C++ Doxygen API Documentation To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml See Also MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"Getting Started with Documentation"},{"location":"dev/docs.html#getting-started-with-documentation","text":"Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files","title":"Getting Started with Documentation"},{"location":"dev/docs.html#naming-and-organization","text":"Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder.","title":"Naming and Organization"},{"location":"dev/docs.html#adding-call-outs","text":"We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title.","title":"Adding Call-outs"},{"location":"dev/docs.html#locally-building-documentation","text":"To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt.","title":"Locally Building Documentation"},{"location":"dev/docs.html#deploying-on-github-pages","text":"As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed.","title":"Deploying on GitHub Pages"},{"location":"dev/docs.html#contributing-to-documentation","text":"Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List .","title":"Contributing to Documentation"},{"location":"dev/docs.html#inserting-videos-in-documentation","text":"Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ .","title":"Inserting Videos in Documentation"},{"location":"dev/docs.html#auto-generating-shapeworks-commands-documentation","text":"The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated","title":"Auto-generating ShapeWorks Commands Documentation"},{"location":"dev/docs.html#auto-generating-c-doxygen-api-documentation","text":"To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml","title":"Auto-generating C++ Doxygen API Documentation"},{"location":"dev/docs.html#see-also","text":"MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"See Also"},{"location":"dev/gh-actions.html","text":"Getting Started with GitHub Actions ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/gh-actions.html#getting-started-with-github-actions","text":"ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/markdown.html","text":"Getting Started with Markdown ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline. Grip To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing! Markdown Basics ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com See Also GitHub Markdown Markdown Guide Markdown Editors","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#getting-started-with-markdown","text":"ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline.","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#grip","text":"To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing!","title":"Grip"},{"location":"dev/markdown.html#markdown-basics","text":"ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com","title":"Markdown Basics"},{"location":"dev/markdown.html#see-also","text":"GitHub Markdown Markdown Guide Markdown Editors","title":"See Also"},{"location":"dev/modify-datasets.html","text":"When Modifying Existing Datasets When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/modify-datasets.html#when-modifying-existing-datasets","text":"When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/new-notebook.html","text":"How to Add a New Notebook? Adding a new use case entails the following. Creating a notebook Notebook documentation Creating a notebook To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output . Notebook documentation Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook. Adding a video to a notebook Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"How to Add New Notebooks?"},{"location":"dev/new-notebook.html#how-to-add-a-new-notebook","text":"Adding a new use case entails the following. Creating a notebook Notebook documentation","title":"How to Add a New Notebook?"},{"location":"dev/new-notebook.html#creating-a-notebook","text":"To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output .","title":"Creating a notebook"},{"location":"dev/new-notebook.html#notebook-documentation","text":"Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook.","title":"Notebook documentation"},{"location":"dev/new-notebook.html#adding-a-video-to-a-notebook","text":"Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"Adding a video to a notebook"},{"location":"dev/new-use-case.html","text":"How to Add New Use Cases? Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation Python-scripted workflow To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster. Use case dataset To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset . Use case documentation To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#how-to-add-new-use-cases","text":"Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#python-scripted-workflow","text":"To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster.","title":"Python-scripted workflow"},{"location":"dev/new-use-case.html#use-case-dataset","text":"To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset .","title":"Use case dataset"},{"location":"dev/new-use-case.html#use-case-documentation","text":"To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"Use case documentation"},{"location":"dev/onboarding.html","text":"ShapeWorks Developer Onboarding Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks. Git A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To . GitHub The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples. Coding Style Guide We adopt the Google Style Guide for C++ coding style. C++ Core Guidelines A highly recommended resource for C++ are the C++ Core Guidelines . Building ShapeWorks Please see: How to Build ShapeWorks from Source? Continuous Integration / Continuous Delivery Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Onboarding"},{"location":"dev/onboarding.html#shapeworks-developer-onboarding","text":"Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks.","title":"ShapeWorks Developer Onboarding"},{"location":"dev/onboarding.html#git","text":"A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To .","title":"Git"},{"location":"dev/onboarding.html#github","text":"The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples.","title":"GitHub"},{"location":"dev/onboarding.html#coding-style-guide","text":"We adopt the Google Style Guide for C++ coding style.","title":"Coding Style Guide"},{"location":"dev/onboarding.html#c-core-guidelines","text":"A highly recommended resource for C++ are the C++ Core Guidelines .","title":"C++ Core Guidelines"},{"location":"dev/onboarding.html#building-shapeworks","text":"Please see: How to Build ShapeWorks from Source?","title":"Building ShapeWorks"},{"location":"dev/onboarding.html#continuous-integration-continuous-delivery","text":"Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Continuous Integration / Continuous Delivery"},{"location":"dev/paths.html","text":"Adding Environment Variables for Development This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms. Using devenv script to configure developer environment The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug Manually adding paths While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths. OSX/Linux $ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH Windows $ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Adding to PATH Environment Variable"},{"location":"dev/paths.html#adding-environment-variables-for-development","text":"This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms.","title":"Adding Environment Variables for Development"},{"location":"dev/paths.html#using-devenv-script-to-configure-developer-environment","text":"The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug","title":"Using devenv script to configure developer environment"},{"location":"dev/paths.html#manually-adding-paths","text":"While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths.","title":"Manually adding paths"},{"location":"dev/paths.html#osxlinux","text":"$ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH","title":"OSX/Linux"},{"location":"dev/paths.html#windows","text":"$ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Windows"},{"location":"dev/python-apis.html","text":"How to Add Python APIs? Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/python-apis.html#how-to-add-python-apis","text":"Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/shapeworks-library.html","text":"Using ShapeWorks as a library ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=
    /lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH=
    Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"ShapeWorks as a Library"},{"location":"dev/shapeworks-library.html#using-shapeworks-as-a-library","text":"ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=/lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH= Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"Using ShapeWorks as a library"},{"location":"dev/tests.html","text":"How to Add and Run Unit Tests? Running ShapeWorks Automated Tests To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example Adding New ShapeWorks Automated Tests Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#how-to-add-and-run-unit-tests","text":"","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#running-shapeworks-automated-tests","text":"To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example","title":"Running ShapeWorks Automated Tests"},{"location":"dev/tests.html#adding-new-shapeworks-automated-tests","text":"Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"Adding New ShapeWorks Automated Tests"},{"location":"getting-started/examples.html","text":"Examples Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features. Segmentation Based Use Cases This use case set demonstrates the Shape Modeling Workflow on segmentation images. Ellipsoid: Basic Example This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process. Left Atrium: Shape Model from Segmentations This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models. Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Shape Model for Multiple Domains from Segmentations This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets. Mesh-Based Use Cases This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming. Ellipsoid Mesh: Basic Example This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms. Lumps: Shape Model directly from Mesh This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Thin Cavity Bean: Shape Model with Geodesic Distances This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation. Shape Model for Multiple Domains directly from Mesh This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms. Contour Based Use Cases Supershapes:Shape Model for Contour Domains This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop. Constraints Based Use Cases Ellipsoid: Shape Model with Cutting Planes This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data. Femur: Shape Model from Meshes with Cutting Planes This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples. Multi-Step Optimization Use Cases Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Incremental Supershapes: Building a Shape Model Incrementally This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions. Statistics Based Use Cases Femur: Group Difference Statistics in Python This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case. Ellipsoid: Shape Statistics in Python This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case. Ellipsoid: Shape Evaluation in Python This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation. Deep Learning Based Use Cases Femur Shape Model Directly from Images This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . Shared Boundary Use Cases Peanut: Shape Model of Multiple Domains with Shared Boundaries This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions. Your Use Case You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Examples"},{"location":"getting-started/examples.html#examples","text":"Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features.","title":"Examples"},{"location":"getting-started/examples.html#segmentation-based-use-cases","text":"This use case set demonstrates the Shape Modeling Workflow on segmentation images.","title":"Segmentation Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-basic-example","text":"This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process.","title":"Ellipsoid: Basic Example"},{"location":"getting-started/examples.html#left-atrium-shape-model-from-segmentations","text":"This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-from-segmentations","text":"This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"getting-started/examples.html#mesh-based-use-cases","text":"This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming.","title":"Mesh-Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-mesh-basic-example","text":"This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms.","title":"Ellipsoid Mesh: Basic Example"},{"location":"getting-started/examples.html#lumps-shape-model-directly-from-mesh","text":"This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"Lumps: Shape Model directly from Mesh"},{"location":"getting-started/examples.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-directly-from-mesh","text":"This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"getting-started/examples.html#contour-based-use-cases","text":"","title":"Contour Based Use Cases"},{"location":"getting-started/examples.html#supershapesshape-model-for-contour-domains","text":"This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop.","title":"Supershapes:Shape Model for Contour Domains"},{"location":"getting-started/examples.html#constraints-based-use-cases","text":"","title":"Constraints Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-shape-model-with-cutting-planes","text":"This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"getting-started/examples.html#femur-shape-model-from-meshes-with-cutting-planes","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples.","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"getting-started/examples.html#multi-step-optimization-use-cases","text":"","title":"Multi-Step Optimization Use Cases"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes_1","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#incremental-supershapes-building-a-shape-model-incrementally","text":"This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"getting-started/examples.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"getting-started/examples.html#statistics-based-use-cases","text":"","title":"Statistics Based Use Cases"},{"location":"getting-started/examples.html#femur-group-difference-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case.","title":"Femur: Group Difference Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-evaluation-in-python","text":"This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation.","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"getting-started/examples.html#deep-learning-based-use-cases","text":"","title":"Deep Learning Based Use Cases"},{"location":"getting-started/examples.html#femur-shape-model-directly-from-images","text":"This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images .","title":"Femur Shape Model Directly from Images"},{"location":"getting-started/examples.html#shared-boundary-use-cases","text":"","title":"Shared Boundary Use Cases"},{"location":"getting-started/examples.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions.","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"getting-started/examples.html#your-use-case","text":"You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Your Use Case"},{"location":"getting-started/how-tos.html","text":"How-Tos Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/how-tos.html#how-tos","text":"Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/interfaces.html","text":"ShapeWorks Interfaces ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds . ShapeWorks Command ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. ShapeWorks in Python We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility. ShapeWorks Studio ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here ShapeWorks in the Cloud Work in progress ... Stay tuned!","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-interfaces","text":"ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds .","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-command","text":"ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"ShapeWorks Command"},{"location":"getting-started/interfaces.html#shapeworks-in-python","text":"We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility.","title":"ShapeWorks in Python"},{"location":"getting-started/interfaces.html#shapeworks-studio","text":"ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here","title":"ShapeWorks Studio"},{"location":"getting-started/interfaces.html#shapeworks-in-the-cloud","text":"Work in progress ... Stay tuned!","title":"ShapeWorks in the Cloud"},{"location":"getting-started/shapes.html","text":"Shapes, What & From Where? What is Shape? The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class. Where Shapes Come From? In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer What surfaces are \u201dgood\u201d for shape modeling? The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow . What is Shape Modeling? Shape Parameters Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population. Discovering Shape Parameters via Optimization ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#shapes-what-from-where","text":"","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#what-is-shape","text":"The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class.","title":"What is Shape?"},{"location":"getting-started/shapes.html#where-shapes-come-from","text":"In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer","title":"Where Shapes Come From?"},{"location":"getting-started/shapes.html#what-surfaces-are-good-for-shape-modeling","text":"The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow .","title":"What surfaces are \u201dgood\u201d for shape modeling?"},{"location":"getting-started/shapes.html#what-is-shape-modeling","text":"","title":"What is Shape Modeling?"},{"location":"getting-started/shapes.html#shape-parameters","text":"Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population.","title":"Shape Parameters"},{"location":"getting-started/shapes.html#discovering-shape-parameters-via-optimization","text":"ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Discovering Shape Parameters via Optimization"},{"location":"getting-started/sw-stories.html","text":"ShapeWorks Success Stories (selected) Hip Joint FAI Pathology Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015. Pose and Shape of the Dysplastic Hip Joint Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021. Scapular Morphology in Hill-Sachs Patients Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017. Shape Changes in Atrial Fibrillation Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018. Benchmarking ShapeWorks in Clinical Applications A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878. Next Story Can be Yours!","title":"ShapeWorks Success Stories"},{"location":"getting-started/sw-stories.html#shapeworks-success-stories-selected","text":"","title":"ShapeWorks Success Stories (selected)"},{"location":"getting-started/sw-stories.html#hip-joint-fai-pathology","text":"Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015.","title":"Hip Joint FAI Pathology"},{"location":"getting-started/sw-stories.html#pose-and-shape-of-the-dysplastic-hip-joint","text":"Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021.","title":"Pose and Shape of the Dysplastic Hip Joint"},{"location":"getting-started/sw-stories.html#scapular-morphology-in-hill-sachs-patients","text":"Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017.","title":"Scapular Morphology in Hill-Sachs Patients"},{"location":"getting-started/sw-stories.html#shape-changes-in-atrial-fibrillation","text":"Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018.","title":"Shape Changes in Atrial Fibrillation"},{"location":"getting-started/sw-stories.html#benchmarking-shapeworks-in-clinical-applications","text":"A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878.","title":"Benchmarking ShapeWorks in Clinical Applications"},{"location":"getting-started/sw-stories.html#next-story-can-be-yours","text":"","title":"Next Story Can be Yours!"},{"location":"getting-started/workflow.html","text":"Shape Modeling Workflow ShapeWorks supports the typical three-stage workflow for shape modeling. Groom Stage The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping. Optimize Stage The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split. Analyze Stage The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#shape-modeling-workflow","text":"ShapeWorks supports the typical three-stage workflow for shape modeling.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#groom-stage","text":"The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping.","title":"Groom Stage"},{"location":"getting-started/workflow.html#optimize-stage","text":"The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split.","title":"Optimize Stage"},{"location":"getting-started/workflow.html#analyze-stage","text":"The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Analyze Stage"},{"location":"new/ellipsoid-joint-generation.html","text":"Ellipsoid Joint Generation About ShapeCohortGenerator ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families. What is new? We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts. Getting Started with Shape Cohort Generator Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#ellipsoid-joint-generation","text":"","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"new/ellipsoid-joint-generation.html#what-is-new","text":"We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts.","title":"What is new?"},{"location":"new/ellipsoid-joint-generation.html#getting-started-with-shape-cohort-generator","text":"Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Getting Started with Shape Cohort Generator"},{"location":"new/free-form-constraints.html","text":"Free-Form Constraints The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/free-form-constraints.html#free-form-constraints","text":"The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/new-studio.html","text":"New in ShapeWorks Studio 6.2 DeepSSM in Studio New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information. Multiple Domain Alignments New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information. Shape Evaluation Charts New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information. Usability Features Group p-value Display New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences. Scalar range controls New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values. Surface opacity controls Shape surface opacity can now be controlled on a per domain basis. Added narrow band optimization parameter The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification. New message history window A new button in the lower corner has been added that brings up the message history from the status bar. New suppressible error dialog The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages Multiple domain export options (combined + separate) When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain. Allow initial landmark points Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization. Mesh warping improvements Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved. New in ShapeWorks Studio 6.1 Multiple Domains As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information. Mesh Grooming As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information. Mesh Support As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction Improved Studio Interface As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast Surface Reconstruction ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction Dynamic Loading ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading Live Particles Movement ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters). Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"New in ShapeWorks Studio"},{"location":"new/new-studio.html#new-in-shapeworks-studio-62","text":"","title":"New in ShapeWorks Studio 6.2"},{"location":"new/new-studio.html#deepssm-in-studio","text":"New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information.","title":"DeepSSM in Studio"},{"location":"new/new-studio.html#multiple-domain-alignments","text":"New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information.","title":"Multiple Domain Alignments"},{"location":"new/new-studio.html#shape-evaluation-charts","text":"New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information.","title":"Shape Evaluation Charts"},{"location":"new/new-studio.html#usability-features","text":"","title":"Usability Features"},{"location":"new/new-studio.html#group-p-value-display","text":"New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences.","title":"Group p-value Display"},{"location":"new/new-studio.html#scalar-range-controls","text":"New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values.","title":"Scalar range controls"},{"location":"new/new-studio.html#surface-opacity-controls","text":"Shape surface opacity can now be controlled on a per domain basis.","title":"Surface opacity controls"},{"location":"new/new-studio.html#added-narrow-band-optimization-parameter","text":"The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification.","title":"Added narrow band optimization parameter"},{"location":"new/new-studio.html#new-message-history-window","text":"A new button in the lower corner has been added that brings up the message history from the status bar.","title":"New message history window"},{"location":"new/new-studio.html#new-suppressible-error-dialog","text":"The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages","title":"New suppressible error dialog"},{"location":"new/new-studio.html#multiple-domain-export-options-combined-separate","text":"When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain.","title":"Multiple domain export options (combined + separate)"},{"location":"new/new-studio.html#allow-initial-landmark-points","text":"Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization.","title":"Allow initial landmark points"},{"location":"new/new-studio.html#mesh-warping-improvements","text":"Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved.","title":"Mesh warping improvements"},{"location":"new/new-studio.html#new-in-shapeworks-studio-61","text":"","title":"New in ShapeWorks Studio 6.1"},{"location":"new/new-studio.html#multiple-domains","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information.","title":"Multiple Domains"},{"location":"new/new-studio.html#mesh-grooming","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information.","title":"Mesh Grooming"},{"location":"new/new-studio.html#mesh-support","text":"As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction","title":"Mesh Support"},{"location":"new/new-studio.html#improved-studio-interface","text":"As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast","title":"Improved Studio Interface"},{"location":"new/new-studio.html#surface-reconstruction","text":"ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction","title":"Surface Reconstruction"},{"location":"new/new-studio.html#dynamic-loading","text":"ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading","title":"Dynamic Loading"},{"location":"new/new-studio.html#live-particles-movement","text":"ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters).","title":"Live Particles Movement"},{"location":"new/new-studio.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"new/openvdb.html","text":"ShapeWorks Takes ~85% Less Memory ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/openvdb.html#shapeworks-takes-85-less-memory","text":"ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/shapeworks-command.html","text":"ShapeWorks Command ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use Example: ResampleVolumesToBeIsotropic Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool Resampling images Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > ); Resampling segmentations Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#shapeworks-command","text":"ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#example-resamplevolumestobeisotropic","text":"Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool","title":"Example: ResampleVolumesToBeIsotropic"},{"location":"new/shapeworks-command.html#resampling-images","text":"Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > );","title":"Resampling images"},{"location":"new/shapeworks-command.html#resampling-segmentations","text":"Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"Resampling segmentations"},{"location":"new/shapeworks-python.html","text":"ShapeWorks in Python ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! . Why ShapeWorks in Python? One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model. Diving into ShapeWorks' \"Clear\" Box A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server. Getting Started with Juypter Notebooks Getting Started with Segmentations Getting Started with Meshes Getting Started with Segmentations Getting Started with Exploring Segmentations Getting Started with Shape Cohort Generation Getting Started with Data Augmentation","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#shapeworks-in-python","text":"ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! .","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#why-shapeworks-in-python","text":"One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model.","title":"Why ShapeWorks in Python?"},{"location":"new/shapeworks-python.html#diving-into-shapeworks-clear-box","text":"A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server.","title":"Diving into ShapeWorks' \"Clear\" Box"},{"location":"new/shapeworks-python.html#getting-started-with-juypter-notebooks","text":"","title":"Getting Started with Juypter Notebooks"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations_1","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-shape-cohort-generation","text":"","title":"Getting Started with Shape Cohort Generation"},{"location":"new/shapeworks-python.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"new/ssm-eval.html","text":"Shape Model Evaluation ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact). ShapeWorks Commands shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1 ShapeWorks Python tools # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference Model Evaluation in Studio Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shape-model-evaluation","text":"ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact).","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shapeworks-commands","text":"shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1","title":"ShapeWorks Commands"},{"location":"new/ssm-eval.html#shapeworks-python-tools","text":"# Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference","title":"ShapeWorks Python tools"},{"location":"new/ssm-eval.html#model-evaluation-in-studio","text":"Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Model Evaluation in Studio"},{"location":"new/sw-meshes.html","text":"ShapeWorks Directly on Meshes Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"new/sw-meshes.html#shapeworks-directly-on-meshes","text":"Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"notebooks/array-passing-without-copying.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); In [ ]: Copied! import shapeworks as sw import shapeworks as sw In [ ]: Copied! import numpy as np import numpy as np shapeworks Image from numpy array \u00b6 In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean() While the numpy can still look at the memory, it no longer has ownership: \u00b6 In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean() ...so the safest thing to do now is let the array go out of scope: \u00b6 having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr Only dtype.float32 arrays can be used to initialize an image: \u00b6 In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg No unnecessary copies and no memory leaks! \u00b6 The numpy array still owns its data since a copy was passed to create the Image. \u00b6 Ownership of the copy's memory was taken by the image before it went out of scope. \u00b6 In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() Now for the other way around. \u00b6 numpy array from shapeworks Image \u00b6 In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims() The numpy array references the memory of the current Image and can change it: \u00b6 In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean() ...but it still doesn't have ownership. \u00b6 Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above. \u00b6 In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr If a copy is needed, pass copy=True to toArray() \u00b6 In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA'] This can be useful when the array is created from a temporary Image: \u00b6 In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True)) viewing the image using pyvista \u00b6 One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument: \u00b6 In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show() Finally, we can assign a numpy array to an existing Image \u00b6 This retains the Image's origin, scale, and coordsys. \u00b6 In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved) Let's use a scipy operation on the image: \u00b6 In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0) The return from this filter is the right size and type, but it's a copy: \u00b6 In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA'] Let's assign it back to Image so we can retain Image's origin, scale, and coordsys: \u00b6 In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA'] Now we can look at it again in the plotter: \u00b6 In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Array passing without copying"},{"location":"notebooks/array-passing-without-copying.html#shapeworks-image-from-numpy-array","text":"In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean()","title":"shapeworks Image from numpy array"},{"location":"notebooks/array-passing-without-copying.html#while-the-numpy-can-still-look-at-the-memory-it-no-longer-has-ownership","text":"In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean()","title":"While the numpy can still look at the memory, it no longer has ownership:"},{"location":"notebooks/array-passing-without-copying.html#so-the-safest-thing-to-do-now-is-let-the-array-go-out-of-scope","text":"having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr","title":"...so the safest thing to do now is let the array go out of scope:"},{"location":"notebooks/array-passing-without-copying.html#only-dtypefloat32-arrays-can-be-used-to-initialize-an-image","text":"In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg","title":"Only dtype.float32 arrays can be used to initialize an image:"},{"location":"notebooks/array-passing-without-copying.html#no-unnecessary-copies-and-no-memory-leaks","text":"","title":"No unnecessary copies and no memory leaks!"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-still-owns-its-data-since-a-copy-was-passed-to-create-the-image","text":"","title":"The numpy array still owns its data since a copy was passed to create the Image."},{"location":"notebooks/array-passing-without-copying.html#ownership-of-the-copys-memory-was-taken-by-the-image-before-it-went-out-of-scope","text":"In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean()","title":"Ownership of the copy's memory was taken by the image before it went out of scope."},{"location":"notebooks/array-passing-without-copying.html#now-for-the-other-way-around","text":"","title":"Now for the other way around."},{"location":"notebooks/array-passing-without-copying.html#numpy-array-from-shapeworks-image","text":"In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims()","title":"numpy array from shapeworks Image"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-references-the-memory-of-the-current-image-and-can-change-it","text":"In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean()","title":"The numpy array references the memory of the current Image and can change it:"},{"location":"notebooks/array-passing-without-copying.html#but-it-still-doesnt-have-ownership","text":"","title":"...but it still doesn't have ownership."},{"location":"notebooks/array-passing-without-copying.html#since-many-image-operations-reallocate-internally-its-still-safest-to-let-it-go-out-of-scope-as-shown-above","text":"In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr","title":"Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above."},{"location":"notebooks/array-passing-without-copying.html#if-a-copy-is-needed-pass-copytrue-to-toarray","text":"In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA']","title":"If a copy is needed, pass copy=True to toArray()"},{"location":"notebooks/array-passing-without-copying.html#this-can-be-useful-when-the-array-is-created-from-a-temporary-image","text":"In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True))","title":"This can be useful when the array is created from a temporary Image:"},{"location":"notebooks/array-passing-without-copying.html#viewing-the-image-using-pyvista","text":"","title":"viewing the image using pyvista"},{"location":"notebooks/array-passing-without-copying.html#one-common-reason-to-get-the-images-array-is-for-viewing-using-pyvista-using-the-for_viewing-argument","text":"In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument:"},{"location":"notebooks/array-passing-without-copying.html#finally-we-can-assign-a-numpy-array-to-an-existing-image","text":"","title":"Finally, we can assign a numpy array to an existing Image"},{"location":"notebooks/array-passing-without-copying.html#this-retains-the-images-origin-scale-and-coordsys","text":"In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved)","title":"This retains the Image's origin, scale, and coordsys."},{"location":"notebooks/array-passing-without-copying.html#lets-use-a-scipy-operation-on-the-image","text":"In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0)","title":"Let's use a scipy operation on the image:"},{"location":"notebooks/array-passing-without-copying.html#the-return-from-this-filter-is-the-right-size-and-type-but-its-a-copy","text":"In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA']","title":"The return from this filter is the right size and type, but it's a copy:"},{"location":"notebooks/array-passing-without-copying.html#lets-assign-it-back-to-image-so-we-can-retain-images-origin-scale-and-coordsys","text":"In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA']","title":"Let's assign it back to Image so we can retain Image's origin, scale, and coordsys:"},{"location":"notebooks/array-passing-without-copying.html#now-we-can-look-at-it-again-in-the-plotter","text":"In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Now we can look at it again in the plotter:"},{"location":"notebooks/create-and-apply-image-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can be used to center image data or to align two images \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\" Center of mass transforms \u00b6 Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() create and apply transform, noting that center of mass is now roughly in the center of the image \u00b6 In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass()) visualization of different resampling methods \u00b6 In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! Rigid registration transforms \u00b6 Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" compute distance transforms to be used to compute alignment of the segmentations \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! create distance transforms to be used to compute the images' alignment \u00b6 In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0) create image alignment transforms \u00b6 In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1) apply the transforms to the original images \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1) visualize the results \u00b6 Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#transforms-can-be-used-to-center-image-data-or-to-align-two-images","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\"","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#center-of-mass-transforms","text":"Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show()","title":"Center of mass transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#create-and-apply-transform-noting-that-center-of-mass-is-now-roughly-in-the-center-of-the-image","text":"In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass())","title":"create and apply transform, noting that center of mass is now roughly in the center of the image"},{"location":"notebooks/create-and-apply-image-transforms.html#visualization-of-different-resampling-methods","text":"In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualization of different resampling methods"},{"location":"notebooks/create-and-apply-image-transforms.html#rigid-registration-transforms","text":"Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\"","title":"Rigid registration transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#compute-distance-transforms-to-be-used-to-compute-alignment-of-the-segmentations","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"compute distance transforms to be used to compute alignment of the segmentations"},{"location":"notebooks/create-and-apply-image-transforms.html#create-distance-transforms-to-be-used-to-compute-the-images-alignment","text":"In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0)","title":"create distance transforms to be used to compute the images' alignment"},{"location":"notebooks/create-and-apply-image-transforms.html#create-image-alignment-transforms","text":"In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1)","title":"create image alignment transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#apply-the-transforms-to-the-original-images","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1)","title":"apply the transforms to the original images"},{"location":"notebooks/create-and-apply-image-transforms.html#visualize-the-results","text":"Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualize the results"},{"location":"notebooks/create-and-apply-mesh-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can also be used to align two meshes \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\" Mesh alignment \u00b6 A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" Load meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) Visualize original meshes \u00b6 In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Rigid transformation \u00b6 create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Similarity transformation \u00b6 This type of transformation is very similar to rigid transformations above. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Affine transformation \u00b6 This type of transformation warps the points of one mesh into the other as well as translating its position. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#transforms-can-also-be-used-to-align-two-meshes","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\"","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-alignment","text":"A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\"","title":"Mesh alignment"},{"location":"notebooks/create-and-apply-mesh-transforms.html#load-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Load meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-original-meshes","text":"In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Visualize original meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#rigid-transformation","text":"","title":"Rigid transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#similarity-transformation","text":"This type of transformation is very similar to rigid transformations above.","title":"Similarity transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#affine-transformation","text":"This type of transformation warps the points of one mesh into the other as well as translating its position.","title":"Affine transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/getting-started-with-data-augmentation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Data Augmentation \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data. Data Augmentation Overview \u00b6 ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning . Import shapeworks and relevant libraries \u00b6 In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks Import Data Augmentation Package \u00b6 In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils 1. Defining the original dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir) Get file lists \u00b6 Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list))) Run data augmentation using a Gaussian Distribution \u00b6 Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using a Mixture of Gaussian Distribution \u00b6 In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using Kernel Density Estimation \u00b6 In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-data-augmentation.html#in-this-notebook-you-will-learn","text":"How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-data-augmentation.html#data-augmentation-overview","text":"ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning .","title":"Data Augmentation Overview"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-shapeworks-and-relevant-libraries","text":"In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks","title":"Import shapeworks and relevant libraries"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-data-augmentation-package","text":"In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils","title":"Import Data Augmentation Package"},{"location":"notebooks/getting-started-with-data-augmentation.html#1-defining-the-original-dataset","text":"","title":"1. Defining the original dataset"},{"location":"notebooks/getting-started-with-data-augmentation.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-data-augmentation.html#get-file-lists","text":"Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list)))","title":"Get file lists"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-gaussian-distribution","text":"Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-mixture-of-gaussian-distribution","text":"In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Mixture of Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-kernel-density-estimation","text":"In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using Kernel Density Estimation"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-exploring-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Exploring Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Exploring your dataset \u00b6 We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling. Loading your dataset \u00b6 First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...') Visualizing your dataset \u00b6 Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views ) 3. Deciding the grooming pipeline needed for your dataset \u00b6 Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe? Voxel spacing \u00b6 Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk) Segmentations and image boundaries \u00b6 Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size. Shape alignment \u00b6 One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True ) Too much background \u00b6 Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) Binary segmentations \u00b6 In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform. Tentative grooming \u00b6 Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#2-exploring-your-dataset","text":"We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling.","title":"2. Exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#loading-your-dataset","text":"First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...')","title":"Loading your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#visualizing-your-dataset","text":"Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views )","title":"Visualizing your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#3-deciding-the-grooming-pipeline-needed-for-your-dataset","text":"Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe?","title":"3. Deciding the grooming pipeline needed for your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#voxel-spacing","text":"Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk)","title":"Voxel spacing"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#segmentations-and-image-boundaries","text":"Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size.","title":"Segmentations and image boundaries"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#shape-alignment","text":"One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True )","title":"Shape alignment"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#too-much-background","text":"Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk)","title":"Too much background"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#binary-segmentations","text":"In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform.","title":"Binary segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#tentative-grooming","text":"Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Tentative grooming"},{"location":"notebooks/getting-started-with-meshes.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Meshes \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single mesh \u00b6 We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh) 3. Convert to a VTK mesh \u00b6 To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) 4. Visualizing surface mesh using pyvista \u00b6 pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook) 5. Visualizing multiple meshes \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second mesh and convert it to vtk mesh \u00b6 First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-meshes.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-meshes.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-meshes.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-meshes.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-meshes.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-meshes.html#2-loading-a-single-mesh","text":"We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh)","title":"2. Loading a single mesh"},{"location":"notebooks/getting-started-with-meshes.html#3-convert-to-a-vtk-mesh","text":"To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh)","title":"3. Convert to a VTK mesh"},{"location":"notebooks/getting-started-with-meshes.html#4-visualizing-surface-mesh-using-pyvista","text":"pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook)","title":"4. Visualizing surface mesh using pyvista"},{"location":"notebooks/getting-started-with-meshes.html#5-visualizing-multiple-meshes","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing multiple meshes"},{"location":"notebooks/getting-started-with-meshes.html#loading-the-second-mesh-and-convert-it-to-vtk-mesh","text":"First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Loading the second mesh and convert it to vtk mesh"},{"location":"notebooks/getting-started-with-notebooks.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Jupyter Notebooks \u00b6 In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks ShapeWorks Jupyter Notebook Tutorials \u00b6 What is Jupyter Notebook? \u00b6 The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded. Running a Jupyter notebook tutorial \u00b6 ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks. Importing ShapeWorks \u00b6 The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us. Notebook keyboard shortcuts \u00b6 Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name Jupyter Notebook Resources \u00b6 Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#getting-started-with-jupyter-notebooks","text":"In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#shapeworks-jupyter-notebook-tutorials","text":"","title":"ShapeWorks Jupyter Notebook Tutorials"},{"location":"notebooks/getting-started-with-notebooks.html#what-is-jupyter-notebook","text":"The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded.","title":"What is Jupyter Notebook?"},{"location":"notebooks/getting-started-with-notebooks.html#running-a-jupyter-notebook-tutorial","text":"ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks.","title":"Running a Jupyter notebook tutorial"},{"location":"notebooks/getting-started-with-notebooks.html#importing-shapeworks","text":"The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us.","title":"Importing ShapeWorks"},{"location":"notebooks/getting-started-with-notebooks.html#notebook-keyboard-shortcuts","text":"Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name","title":"Notebook keyboard shortcuts"},{"location":"notebooks/getting-started-with-notebooks.html#jupyter-notebook-resources","text":"Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Jupyter Notebook Resources"},{"location":"notebooks/getting-started-with-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single segmentation \u00b6 We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg) 3. Converting shapeworks image to vtk image for visualization \u00b6 We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk) 4. Visualizing segmentation using pyvista \u00b6 pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading 5. Visualizing two segmentations side-by-side using pyvista \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second segmentation and convert it to vtk image \u00b6 First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2) Defining pyvista plotter \u00b6 Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) 6. Visualizing two segmentations in the same rendering window \u00b6 This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-segmentations.html#2-loading-a-single-segmentation","text":"We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg)","title":"2. Loading a single segmentation"},{"location":"notebooks/getting-started-with-segmentations.html#3-converting-shapeworks-image-to-vtk-image-for-visualization","text":"We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk)","title":"3. Converting shapeworks image to vtk image for visualization"},{"location":"notebooks/getting-started-with-segmentations.html#4-visualizing-segmentation-using-pyvista","text":"pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading","title":"4. Visualizing segmentation using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#5-visualizing-two-segmentations-side-by-side-using-pyvista","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing two segmentations side-by-side using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#loading-the-second-segmentation-and-convert-it-to-vtk-image","text":"First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2)","title":"Loading the second segmentation and convert it to vtk image"},{"location":"notebooks/getting-started-with-segmentations.html#defining-pyvista-plotter","text":"Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True )","title":"Defining pyvista plotter"},{"location":"notebooks/getting-started-with-segmentations.html#6-visualizing-two-segmentations-in-the-same-rendering-window","text":"This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"6. Visualizing two segmentations in the same rendering window"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Shape Cohort Generator \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes. About ShapeCohortGenerator \u00b6 ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families. What is a shape cohort ? \u00b6 A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized. Why ShapeCohortGenerator ? \u00b6 We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow. What families of shape can be generated by ShapeCohortGenerator ? \u00b6 ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes . Ellipsoids \u00b6 An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$ Supershapes \u00b6 Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below. 2D Supershapes \u00b6 2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images. Joint Ellipsoids \u00b6 Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation. Torus \u00b6 Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside). What you can do with ShapeCohortGenerator ? \u00b6 The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code. Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw Importing ShapeCohortGen library \u00b6 To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen Defining parameters for pyvista plotter \u00b6 In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges Generating an Ellipsoid Cohort \u00b6 Step 1: Initalize Ellipsoid Generator \u00b6 Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views Step 4: Generate Images - Turning segmentations into non-binary images \u00b6 For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0) Generating Supershapes Cohort \u00b6 SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$. Step 1: Initialize SuperShapes Generator \u00b6 Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views) Step 4: Generate Images \u00b6 This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#getting-started-with-shape-cohort-generator","text":"","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#in-this-notebook-you-will-learn","text":"How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-is-a-shape-cohort","text":"A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized.","title":"What is a shape cohort ?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#why-shapecohortgenerator","text":"We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow.","title":"Why ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-families-of-shape-can-be-generated-by-shapecohortgenerator","text":"ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes .","title":"What families of shape can be generated by ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#ellipsoids","text":"An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$","title":"Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#supershapes","text":"Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below.","title":"Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#2d-supershapes","text":"2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images.","title":"2D Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#joint-ellipsoids","text":"Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation.","title":"Joint Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#torus","text":"Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside).","title":"Torus"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-you-can-do-with-shapecohortgenerator","text":"The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code.","title":"What you can do with ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapecohortgen-library","text":"To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen","title":"Importing ShapeCohortGen library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#defining-parameters-for-pyvista-plotter","text":"In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges","title":"Defining parameters for pyvista plotter"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-an-ellipsoid-cohort","text":"","title":"Generating an Ellipsoid Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initalize-ellipsoid-generator","text":"Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir)","title":"Step 1: Initalize Ellipsoid Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images-turning-segmentations-into-non-binary-images","text":"For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0)","title":"Step 4: Generate Images - Turning segmentations into non-binary images"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-supershapes-cohort","text":"SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$.","title":"Generating Supershapes Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initialize-supershapes-generator","text":"Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir)","title":"Step 1: Initialize SuperShapes Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views)","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images","text":"This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Step 4: Generate Images"},{"location":"python/python-api.html","text":"ShapeWorks Python API ShapeWorks Python API ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor Pi = 3.141592653589793 Convert a string or number to a floating point number, if possible. X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z Analyze () Bases: pybind11_object create_shape_from_points () method descriptor create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape get_mean_shape () method descriptor get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh get_mean_shape_points () method descriptor get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]] get_mode_shape () method descriptor get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape get_num_modes () method descriptor get_num_modes(self: shapeworks_py.Analyze) -> int get_num_particles () method descriptor get_num_particles(self: shapeworks_py.Analyze) -> int get_num_subjects () method descriptor get_num_subjects(self: shapeworks_py.Analyze) -> int get_shape_points () method descriptor get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles get_shapes () method descriptor get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > > get_subject_features () method descriptor get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]] groups_active () method descriptor groups_active(self: shapeworks_py.Analyze) -> bool run_offline_analysis () method descriptor run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None Axis () Bases: pybind11_object Members: invalid X Y Z X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z name property name(self: handle) -> str DomainType () Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain name property name(self: handle) -> str Image () Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). antialias () method descriptor antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified) applyCurvatureFilter () method descriptor applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter applyGradientFilter () method descriptor applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter applyIntensityFilter () method descriptor applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter applySigmoidFilter () method descriptor applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter applyTPLevelSetFilter () method descriptor applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter applyTransform () method descriptor applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor) assign () method descriptor assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). binarize () method descriptor binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value center () method descriptor center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval] clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0) closeHoles () method descriptor closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value compare () method descriptor compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images computeDT () method descriptor computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue coordsys () method descriptor coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space copy () method descriptor copy(self: shapeworks_py.Image) -> shapeworks_py.Image createCenterOfMassTransform () method descriptor createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image createRigidRegistrationTransform () method descriptor createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations crop () method descriptor crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding dims () method descriptor dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image evaluate () method descriptor evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space extractLabel () method descriptor extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image gaussianBlur () method descriptor gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur isolate () method descriptor isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object logicalBoundingBox () method descriptor logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region logicalToPhysical () method descriptor logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space max () method descriptor max(self: shapeworks_py.Image) -> float maximum of image mean () method descriptor mean(self: shapeworks_py.Image) -> float mean of image min () method descriptor min(self: shapeworks_py.Image) -> float minimum of image origin () method descriptor origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin pad () method descriptor pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value physicalBoundingBox () method descriptor physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue physicalToLogical () method descriptor physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space physicalboundingBox () method descriptor physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image recenter () method descriptor recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image reflect () method descriptor reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis resample () method descriptor resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing resize () method descriptor resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing) rotate () method descriptor rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) scale () method descriptor scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin) setCoordsys () method descriptor setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image setOrigin () method descriptor setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value setSpacing () method descriptor setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel size () method descriptor size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing) spacing () method descriptor spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image std () method descriptor std(self: shapeworks_py.Image) -> float standard deviation of image toArray () method descriptor toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this). toMesh () method descriptor toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue topologyPreservingSmooth () method descriptor topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] translate () method descriptor translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image write () method descriptor write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension) ImageUtils ( args , kwargs ) Bases: pybind11_object boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images createWarpTransform () staticmethod createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points IndexRegion () Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None max property max point of region min property min point of region origin () method descriptor origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount size () method descriptor size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid InterpolationType () Bases: pybind11_object Members: Linear NearestNeighbor Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor name property name(self: handle) -> str Mesh () Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Face = < FieldType . Face : 1 > Members: Point Face Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Point = < FieldType . Point : 0 > Members: Point Face PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine AlignmentType () Bases: pybind11_object Members: Rigid Similarity Affine Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine name property name(self: handle) -> str CurvatureType () Bases: pybind11_object Members: Principal Gaussian Mean Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean name property name(self: handle) -> str DistanceMethod () Bases: pybind11_object Members: PointToPoint PointToCell PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell name property name(self: handle) -> str FieldType () Bases: pybind11_object Members: Point Face Face = < FieldType . Face : 1 > Members: Point Face Point = < FieldType . Point : 0 > Members: Point Face name property name(self: handle) -> str SubdivisionType () Bases: pybind11_object Members: Butterfly Loop Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop name property name(self: handle) -> str applySubdivisionFilter () method descriptor applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop) applyTransform () method descriptor applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh boundingBox () method descriptor boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh center () method descriptor center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clipClosedSurface () method descriptor clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface closestPoint () method descriptor closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh closestPointId () method descriptor closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space compareField () method descriptor compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields computeNormals () method descriptor computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals computeThickness () method descriptor computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness copy () method descriptor copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh coverage () method descriptor coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) createTransform () method descriptor createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10) curvature () method descriptor curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean) distance () method descriptor distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points faces () method descriptor faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed fillHoles () method descriptor fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them fixElement () method descriptor fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh geodesicDistance () method descriptor geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh getFace () method descriptor getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed getField () method descriptor getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field getFieldNames () method descriptor getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh getFieldValue () method descriptor getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field getMultiFieldValue () method descriptor getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field getPoint () method descriptor getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index invertNormals () method descriptor invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals numFaces () method descriptor numFaces(self: shapeworks_py.Mesh) -> int number of faces numPoints () method descriptor numPoints(self: shapeworks_py.Mesh) -> int number of points points () method descriptor points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point probeVolume () method descriptor probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image reflect () method descriptor reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis remesh () method descriptor remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity remeshPercent () method descriptor remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity rotate () method descriptor rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees) scale () method descriptor scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh setField () method descriptor setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array setFieldValue () method descriptor setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value smooth () method descriptor smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing smoothSinc () method descriptor smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing toDistanceTransform () method descriptor toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding) toImage () method descriptor toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing) translate () method descriptor translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh write () method descriptor write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension MeshUtils ( args , kwargs ) Bases: pybind11_object boundaryLoopExtractor () staticmethod boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes computeMeanNormals () staticmethod computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes findReferenceMesh () staticmethod findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes generateNormals () staticmethod generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes sharedBoundaryExtractor () staticmethod sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes MeshWarper () Bases: pybind11_object buildMesh () method descriptor buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3]) extractLandmarks () method descriptor extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3]) generateWarp () method descriptor generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping getGoodParticlesIndices () method descriptor getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles. getLandmarksMap () method descriptor getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices. getReferenceMesh () method descriptor getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping. getReferenceParticles () method descriptor getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping. getWarpMatrix () method descriptor getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control). hasBadParticles () method descriptor hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s). prepareMesh () staticmethod prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted). Optimize () Bases: pybind11_object GetParticleSystem () method descriptor GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]] LoadParameterFile () method descriptor LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool Run () method descriptor Run(self: shapeworks_py.Optimize) -> bool SetIterationCallbackFunction () method descriptor SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None SetUpOptimize () method descriptor SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool Parameters () Bases: pybind11_object as_map () method descriptor as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map get () method descriptor get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist key_exists () method descriptor key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not remove_entry () method descriptor remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry reset_parameters () method descriptor reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank set () method descriptor set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key ParticleShapeStatistics () Bases: pybind11_object PCA () method descriptor PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data eigenValues () method descriptor eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values eigenVectors () method descriptor eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors numDims () method descriptor numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system pcaLoadings () method descriptor pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed percentVarByMode () method descriptor percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components principalComponentProjections () method descriptor principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components sampleSize () method descriptor sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system ParticleSystem () Bases: pybind11_object D () method descriptor D(self: shapeworks_py.ParticleSystem) -> int EvaluationCompare () method descriptor EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool ExactCompare () method descriptor ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool N () method descriptor N(self: shapeworks_py.ParticleSystem) -> int Particles () method descriptor Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]] Paths () method descriptor Paths(self: shapeworks_py.ParticleSystem) -> List[str] ShapeAsPointSet () method descriptor ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape PhysicalRegion () Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None max property max point of region min property min point of region expand () method descriptor expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point origin () method descriptor origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount shrink () method descriptor shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both size () method descriptor size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid Project () Bases: pybind11_object clear_parameters () method descriptor clear_parameters(self: shapeworks_py.Project, name: str) -> None get_domain_names () method descriptor get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc) get_feature_names () method descriptor get_feature_names(self: shapeworks_py.Project) -> List[str] get_filename () method descriptor get_filename(self: shapeworks_py.Project) -> str Return the filename get_groomed_domain_types () method descriptor get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types get_groomed_present () method descriptor get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present get_group_names () method descriptor get_group_names(self: shapeworks_py.Project) -> List[str] get_group_values () method descriptor get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str] get_headers () method descriptor get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet get_images_present () method descriptor get_images_present(self: shapeworks_py.Project) -> bool get_number_of_domains_per_subject () method descriptor get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains get_number_of_subjects () method descriptor get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project get_original_domain_types () method descriptor get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types get_originals_present () method descriptor get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present get_parameters () method descriptor get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters get_particles_present () method descriptor get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present get_string_column () method descriptor get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name get_subjects () method descriptor get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects get_supported_version () method descriptor get_supported_version(self: shapeworks_py.Project) -> int get_version () method descriptor get_version(self: shapeworks_py.Project) -> int load () method descriptor load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file save () method descriptor save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file set_filename () method descriptor set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename set_groomed_domain_types () method descriptor set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types set_original_domain_types () method descriptor set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types set_parameters () method descriptor set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None set_subjects () method descriptor set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None store_subjects () method descriptor store_subjects(self: shapeworks_py.Project) -> None ReconstructSurface_RBFSSparseTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None ReconstructSurface_ThinPlateSplineTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None ShapeEvaluation ( args , kwargs ) Bases: pybind11_object ComputeCompactness () staticmethod ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system ComputeFullCompactness () staticmethod ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes ComputeFullGeneralization () staticmethod ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes ComputeFullSpecificity () staticmethod ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes ComputeGeneralization () staticmethod ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system ComputeSpecificity () staticmethod ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system Subject () Bases: pybind11_object get_constraints_filenames () method descriptor get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain) get_display_name () method descriptor get_display_name(self: shapeworks_py.Subject) -> str Get the display name get_extra_values () method descriptor get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret) get_feature_filenames () method descriptor get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames get_groomed_filenames () method descriptor get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames get_groomed_transforms () method descriptor get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain) get_group_value () method descriptor get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value get_group_values () method descriptor get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map get_landmarks_filenames () method descriptor get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain) get_local_particle_filenames () method descriptor get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames get_number_of_domains () method descriptor get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains get_original_filenames () method descriptor get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames get_procrustes_transforms () method descriptor get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain) get_world_particle_filenames () method descriptor get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames set_constraints_filenames () method descriptor set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain) set_display_name () method descriptor set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name set_extra_values () method descriptor set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values set_feature_filenames () method descriptor set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames set_groomed_filenames () method descriptor set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames set_groomed_transforms () method descriptor set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain) set_group_values () method descriptor set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None set_landmarks_filenames () method descriptor set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain) set_local_particle_filenames () method descriptor set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain) set_number_of_domains () method descriptor set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains set_original_filenames () method descriptor set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain) set_procrustes_transforms () method descriptor set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain) set_world_particle_filenames () method descriptor set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames Variant () Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None as_str () method descriptor as_str(self: shapeworks_py.Variant) -> str Return the variant string content VectorImage () Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space evaluate () method descriptor evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space WarpTransform ( args , kwargs ) Bases: pybind11_object axis_is_valid () builtin axis_is_valid(axis: List[float]) -> bool ensure an axis is valid degToRad () builtin degToRad(deg: float) -> float convert degrees to radians mean () builtin mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field range () builtin range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field seed () builtin seed(seed: int = 1698185790239257) -> None sets the seed for random number generation (internal use) stddev () builtin stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field toAxis () builtin toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"Python API Reference"},{"location":"python/python-api.html#shapeworks-python-api","text":"ShapeWorks Python API","title":"ShapeWorks Python API"},{"location":"python/python-api.html#shapeworks_py.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.Pi","text":"Convert a string or number to a floating point number, if possible.","title":"Pi"},{"location":"python/python-api.html#shapeworks_py.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Analyze","text":"Bases: pybind11_object","title":"Analyze"},{"location":"python/python-api.html#shapeworks_py.Analyze.create_shape_from_points","text":"create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape","title":"create_shape_from_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape","text":"get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh","title":"get_mean_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape_points","text":"get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]]","title":"get_mean_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mode_shape","text":"get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape","title":"get_mode_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_modes","text":"get_num_modes(self: shapeworks_py.Analyze) -> int","title":"get_num_modes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_particles","text":"get_num_particles(self: shapeworks_py.Analyze) -> int","title":"get_num_particles()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_subjects","text":"get_num_subjects(self: shapeworks_py.Analyze) -> int","title":"get_num_subjects()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shape_points","text":"get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles","title":"get_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shapes","text":"get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > >","title":"get_shapes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_subject_features","text":"get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]]","title":"get_subject_features()"},{"location":"python/python-api.html#shapeworks_py.Analyze.groups_active","text":"groups_active(self: shapeworks_py.Analyze) -> bool","title":"groups_active()"},{"location":"python/python-api.html#shapeworks_py.Analyze.run_offline_analysis","text":"run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None","title":"run_offline_analysis()"},{"location":"python/python-api.html#shapeworks_py.Axis","text":"Bases: pybind11_object Members: invalid X Y Z","title":"Axis"},{"location":"python/python-api.html#shapeworks_py.Axis.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Axis.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Axis.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.Axis.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Axis.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.DomainType","text":"Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain","title":"DomainType"},{"location":"python/python-api.html#shapeworks_py.DomainType.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Image","text":"Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"Image"},{"location":"python/python-api.html#shapeworks_py.Image.antialias","text":"antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified)","title":"antialias()"},{"location":"python/python-api.html#shapeworks_py.Image.applyCurvatureFilter","text":"applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter","title":"applyCurvatureFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyGradientFilter","text":"applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter","title":"applyGradientFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyIntensityFilter","text":"applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter","title":"applyIntensityFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applySigmoidFilter","text":"applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter","title":"applySigmoidFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTPLevelSetFilter","text":"applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter","title":"applyTPLevelSetFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTransform","text":"applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor)","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.assign","text":"assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"assign()"},{"location":"python/python-api.html#shapeworks_py.Image.binarize","text":"binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value","title":"binarize()"},{"location":"python/python-api.html#shapeworks_py.Image.center","text":"center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Image.centerOfMass","text":"centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval]","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Image.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0)","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Image.closeHoles","text":"closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value","title":"closeHoles()"},{"location":"python/python-api.html#shapeworks_py.Image.compare","text":"compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images","title":"compare()"},{"location":"python/python-api.html#shapeworks_py.Image.computeDT","text":"computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue","title":"computeDT()"},{"location":"python/python-api.html#shapeworks_py.Image.coordsys","text":"coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space","title":"coordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.copy","text":"copy(self: shapeworks_py.Image) -> shapeworks_py.Image","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Image.createCenterOfMassTransform","text":"createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image","title":"createCenterOfMassTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.createRigidRegistrationTransform","text":"createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"createRigidRegistrationTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.crop","text":"crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding","title":"crop()"},{"location":"python/python-api.html#shapeworks_py.Image.dims","text":"dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image","title":"dims()"},{"location":"python/python-api.html#shapeworks_py.Image.evaluate","text":"evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.Image.extractLabel","text":"extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image","title":"extractLabel()"},{"location":"python/python-api.html#shapeworks_py.Image.gaussianBlur","text":"gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur","title":"gaussianBlur()"},{"location":"python/python-api.html#shapeworks_py.Image.isolate","text":"isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object","title":"isolate()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalBoundingBox","text":"logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region","title":"logicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalToPhysical","text":"logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space","title":"logicalToPhysical()"},{"location":"python/python-api.html#shapeworks_py.Image.max","text":"max(self: shapeworks_py.Image) -> float maximum of image","title":"max()"},{"location":"python/python-api.html#shapeworks_py.Image.mean","text":"mean(self: shapeworks_py.Image) -> float mean of image","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.Image.min","text":"min(self: shapeworks_py.Image) -> float minimum of image","title":"min()"},{"location":"python/python-api.html#shapeworks_py.Image.origin","text":"origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.Image.pad","text":"pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalBoundingBox","text":"physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue","title":"physicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalToLogical","text":"physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space","title":"physicalToLogical()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalboundingBox","text":"physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image","title":"physicalboundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.recenter","text":"recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image","title":"recenter()"},{"location":"python/python-api.html#shapeworks_py.Image.reflect","text":"reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Image.resample","text":"resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing","title":"resample()"},{"location":"python/python-api.html#shapeworks_py.Image.resize","text":"resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing)","title":"resize()"},{"location":"python/python-api.html#shapeworks_py.Image.rotate","text":"rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Image.scale","text":"scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin)","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Image.setCoordsys","text":"setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image","title":"setCoordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.setOrigin","text":"setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value","title":"setOrigin()"},{"location":"python/python-api.html#shapeworks_py.Image.setSpacing","text":"setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel","title":"setSpacing()"},{"location":"python/python-api.html#shapeworks_py.Image.size","text":"size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing)","title":"size()"},{"location":"python/python-api.html#shapeworks_py.Image.spacing","text":"spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image","title":"spacing()"},{"location":"python/python-api.html#shapeworks_py.Image.std","text":"std(self: shapeworks_py.Image) -> float standard deviation of image","title":"std()"},{"location":"python/python-api.html#shapeworks_py.Image.toArray","text":"toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this).","title":"toArray()"},{"location":"python/python-api.html#shapeworks_py.Image.toMesh","text":"toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue","title":"toMesh()"},{"location":"python/python-api.html#shapeworks_py.Image.topologyPreservingSmooth","text":"topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"topologyPreservingSmooth()"},{"location":"python/python-api.html#shapeworks_py.Image.translate","text":"translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Image.write","text":"write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension)","title":"write()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils","text":"Bases: pybind11_object","title":"ImageUtils"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.createWarpTransform","text":"createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points","title":"createWarpTransform()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion","text":"Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None","title":"IndexRegion"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.origin","text":"origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.pad","text":"pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.size","text":"size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.valid","text":"valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.InterpolationType","text":"Bases: pybind11_object Members: Linear NearestNeighbor","title":"InterpolationType"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh","text":"Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None","title":"Mesh"},{"location":"python/python-api.html#shapeworks_py.Mesh.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType","text":"Bases: pybind11_object Members: Rigid Similarity Affine","title":"AlignmentType"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType","text":"Bases: pybind11_object Members: Principal Gaussian Mean","title":"CurvatureType"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod","text":"Bases: pybind11_object Members: PointToPoint PointToCell","title":"DistanceMethod"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType","text":"Bases: pybind11_object Members: Point Face","title":"FieldType"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType","text":"Bases: pybind11_object Members: Butterfly Loop","title":"SubdivisionType"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.applySubdivisionFilter","text":"applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop)","title":"applySubdivisionFilter()"},{"location":"python/python-api.html#shapeworks_py.Mesh.applyTransform","text":"applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.boundingBox","text":"boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.Mesh.center","text":"center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Mesh.centerOfMass","text":"centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clipClosedSurface","text":"clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface","title":"clipClosedSurface()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPoint","text":"closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh","title":"closestPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPointId","text":"closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space","title":"closestPointId()"},{"location":"python/python-api.html#shapeworks_py.Mesh.compareField","text":"compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields","title":"compareField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeNormals","text":"computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals","title":"computeNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeThickness","text":"computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness","title":"computeThickness()"},{"location":"python/python-api.html#shapeworks_py.Mesh.copy","text":"copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Mesh.coverage","text":"coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"coverage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.createTransform","text":"createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10)","title":"createTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.curvature","text":"curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean)","title":"curvature()"},{"location":"python/python-api.html#shapeworks_py.Mesh.distance","text":"distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points","title":"distance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.faces","text":"faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed","title":"faces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fillHoles","text":"fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them","title":"fillHoles()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fixElement","text":"fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh","title":"fixElement()"},{"location":"python/python-api.html#shapeworks_py.Mesh.geodesicDistance","text":"geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh","title":"geodesicDistance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFace","text":"getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed","title":"getFace()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getField","text":"getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field","title":"getField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldNames","text":"getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh","title":"getFieldNames()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldValue","text":"getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field","title":"getFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getMultiFieldValue","text":"getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field","title":"getMultiFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getPoint","text":"getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index","title":"getPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.invertNormals","text":"invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals","title":"invertNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numFaces","text":"numFaces(self: shapeworks_py.Mesh) -> int number of faces","title":"numFaces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numPoints","text":"numPoints(self: shapeworks_py.Mesh) -> int number of points","title":"numPoints()"},{"location":"python/python-api.html#shapeworks_py.Mesh.points","text":"points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point","title":"points()"},{"location":"python/python-api.html#shapeworks_py.Mesh.probeVolume","text":"probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image","title":"probeVolume()"},{"location":"python/python-api.html#shapeworks_py.Mesh.reflect","text":"reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remesh","text":"remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"remesh()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remeshPercent","text":"remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"remeshPercent()"},{"location":"python/python-api.html#shapeworks_py.Mesh.rotate","text":"rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.scale","text":"scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setField","text":"setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array","title":"setField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setFieldValue","text":"setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value","title":"setFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smooth","text":"smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing","title":"smooth()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smoothSinc","text":"smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing","title":"smoothSinc()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toDistanceTransform","text":"toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding)","title":"toDistanceTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toImage","text":"toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"toImage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.translate","text":"translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.write","text":"write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension","title":"write()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils","text":"Bases: pybind11_object","title":"MeshUtils"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundaryLoopExtractor","text":"boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file","title":"boundaryLoopExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.computeMeanNormals","text":"computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes","title":"computeMeanNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.findReferenceMesh","text":"findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes","title":"findReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.generateNormals","text":"generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes","title":"generateNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.sharedBoundaryExtractor","text":"sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes","title":"sharedBoundaryExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper","text":"Bases: pybind11_object","title":"MeshWarper"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.buildMesh","text":"buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3])","title":"buildMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.extractLandmarks","text":"extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3])","title":"extractLandmarks()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.generateWarp","text":"generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping","title":"generateWarp()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getGoodParticlesIndices","text":"getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles.","title":"getGoodParticlesIndices()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getLandmarksMap","text":"getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices.","title":"getLandmarksMap()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceMesh","text":"getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping.","title":"getReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceParticles","text":"getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping.","title":"getReferenceParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getWarpMatrix","text":"getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control).","title":"getWarpMatrix()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.hasBadParticles","text":"hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s).","title":"hasBadParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.prepareMesh","text":"prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted).","title":"prepareMesh()"},{"location":"python/python-api.html#shapeworks_py.Optimize","text":"Bases: pybind11_object","title":"Optimize"},{"location":"python/python-api.html#shapeworks_py.Optimize.GetParticleSystem","text":"GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]]","title":"GetParticleSystem()"},{"location":"python/python-api.html#shapeworks_py.Optimize.LoadParameterFile","text":"LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool","title":"LoadParameterFile()"},{"location":"python/python-api.html#shapeworks_py.Optimize.Run","text":"Run(self: shapeworks_py.Optimize) -> bool","title":"Run()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetIterationCallbackFunction","text":"SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None","title":"SetIterationCallbackFunction()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetUpOptimize","text":"SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool","title":"SetUpOptimize()"},{"location":"python/python-api.html#shapeworks_py.Parameters","text":"Bases: pybind11_object","title":"Parameters"},{"location":"python/python-api.html#shapeworks_py.Parameters.as_map","text":"as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map","title":"as_map()"},{"location":"python/python-api.html#shapeworks_py.Parameters.get","text":"get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist","title":"get()"},{"location":"python/python-api.html#shapeworks_py.Parameters.key_exists","text":"key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not","title":"key_exists()"},{"location":"python/python-api.html#shapeworks_py.Parameters.remove_entry","text":"remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry","title":"remove_entry()"},{"location":"python/python-api.html#shapeworks_py.Parameters.reset_parameters","text":"reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank","title":"reset_parameters()"},{"location":"python/python-api.html#shapeworks_py.Parameters.set","text":"set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key","title":"set()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics","text":"Bases: pybind11_object","title":"ParticleShapeStatistics"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.PCA","text":"PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data","title":"PCA()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenValues","text":"eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values","title":"eigenValues()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenVectors","text":"eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors","title":"eigenVectors()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.numDims","text":"numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system","title":"numDims()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.pcaLoadings","text":"pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed","title":"pcaLoadings()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.percentVarByMode","text":"percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components","title":"percentVarByMode()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.principalComponentProjections","text":"principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components","title":"principalComponentProjections()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.sampleSize","text":"sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system","title":"sampleSize()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem","text":"Bases: pybind11_object","title":"ParticleSystem"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.D","text":"D(self: shapeworks_py.ParticleSystem) -> int","title":"D()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.EvaluationCompare","text":"EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"EvaluationCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ExactCompare","text":"ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"ExactCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.N","text":"N(self: shapeworks_py.ParticleSystem) -> int","title":"N()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Particles","text":"Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]]","title":"Particles()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Paths","text":"Paths(self: shapeworks_py.ParticleSystem) -> List[str]","title":"Paths()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ShapeAsPointSet","text":"ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape","title":"ShapeAsPointSet()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion","text":"Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None","title":"PhysicalRegion"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.expand","text":"expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point","title":"expand()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.origin","text":"origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.pad","text":"pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.shrink","text":"shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both","title":"shrink()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.size","text":"size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.valid","text":"valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.Project","text":"Bases: pybind11_object","title":"Project"},{"location":"python/python-api.html#shapeworks_py.Project.clear_parameters","text":"clear_parameters(self: shapeworks_py.Project, name: str) -> None","title":"clear_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_domain_names","text":"get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc)","title":"get_domain_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_feature_names","text":"get_feature_names(self: shapeworks_py.Project) -> List[str]","title":"get_feature_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_filename","text":"get_filename(self: shapeworks_py.Project) -> str Return the filename","title":"get_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_domain_types","text":"get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types","title":"get_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_present","text":"get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present","title":"get_groomed_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_names","text":"get_group_names(self: shapeworks_py.Project) -> List[str]","title":"get_group_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_values","text":"get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str]","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Project.get_headers","text":"get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet","title":"get_headers()"},{"location":"python/python-api.html#shapeworks_py.Project.get_images_present","text":"get_images_present(self: shapeworks_py.Project) -> bool","title":"get_images_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_domains_per_subject","text":"get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains","title":"get_number_of_domains_per_subject()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_subjects","text":"get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project","title":"get_number_of_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_original_domain_types","text":"get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types","title":"get_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_originals_present","text":"get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present","title":"get_originals_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_parameters","text":"get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters","title":"get_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_particles_present","text":"get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present","title":"get_particles_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_string_column","text":"get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name","title":"get_string_column()"},{"location":"python/python-api.html#shapeworks_py.Project.get_subjects","text":"get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects","title":"get_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_supported_version","text":"get_supported_version(self: shapeworks_py.Project) -> int","title":"get_supported_version()"},{"location":"python/python-api.html#shapeworks_py.Project.get_version","text":"get_version(self: shapeworks_py.Project) -> int","title":"get_version()"},{"location":"python/python-api.html#shapeworks_py.Project.load","text":"load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file","title":"load()"},{"location":"python/python-api.html#shapeworks_py.Project.save","text":"save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file","title":"save()"},{"location":"python/python-api.html#shapeworks_py.Project.set_filename","text":"set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename","title":"set_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.set_groomed_domain_types","text":"set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types","title":"set_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_original_domain_types","text":"set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types","title":"set_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_parameters","text":"set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None","title":"set_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.set_subjects","text":"set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None","title":"set_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.store_subjects","text":"store_subjects(self: shapeworks_py.Project) -> None","title":"store_subjects()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_RBFSSparseTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_ThinPlateSplineTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation","text":"Bases: pybind11_object","title":"ShapeEvaluation"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeCompactness","text":"ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system","title":"ComputeCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullCompactness","text":"ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes","title":"ComputeFullCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullGeneralization","text":"ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes","title":"ComputeFullGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullSpecificity","text":"ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes","title":"ComputeFullSpecificity()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeGeneralization","text":"ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system","title":"ComputeGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeSpecificity","text":"ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system","title":"ComputeSpecificity()"},{"location":"python/python-api.html#shapeworks_py.Subject","text":"Bases: pybind11_object","title":"Subject"},{"location":"python/python-api.html#shapeworks_py.Subject.get_constraints_filenames","text":"get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain)","title":"get_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_display_name","text":"get_display_name(self: shapeworks_py.Subject) -> str Get the display name","title":"get_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_extra_values","text":"get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret)","title":"get_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_feature_filenames","text":"get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames","title":"get_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_filenames","text":"get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames","title":"get_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_transforms","text":"get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain)","title":"get_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_value","text":"get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value","title":"get_group_value()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_values","text":"get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_landmarks_filenames","text":"get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain)","title":"get_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_local_particle_filenames","text":"get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames","title":"get_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_number_of_domains","text":"get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains","title":"get_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_original_filenames","text":"get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames","title":"get_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_procrustes_transforms","text":"get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain)","title":"get_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_world_particle_filenames","text":"get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames","title":"get_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_constraints_filenames","text":"set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain)","title":"set_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_display_name","text":"set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name","title":"set_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_extra_values","text":"set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values","title":"set_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_feature_filenames","text":"set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames","title":"set_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_filenames","text":"set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames","title":"set_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_transforms","text":"set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain)","title":"set_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_group_values","text":"set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None","title":"set_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_landmarks_filenames","text":"set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain)","title":"set_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_local_particle_filenames","text":"set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain)","title":"set_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_number_of_domains","text":"set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains","title":"set_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_original_filenames","text":"set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain)","title":"set_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_procrustes_transforms","text":"set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain)","title":"set_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_world_particle_filenames","text":"set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames","title":"set_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Variant","text":"Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None","title":"Variant"},{"location":"python/python-api.html#shapeworks_py.Variant.as_str","text":"as_str(self: shapeworks_py.Variant) -> str Return the variant string content","title":"as_str()"},{"location":"python/python-api.html#shapeworks_py.VectorImage","text":"Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space","title":"VectorImage"},{"location":"python/python-api.html#shapeworks_py.VectorImage.evaluate","text":"evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.WarpTransform","text":"Bases: pybind11_object","title":"WarpTransform"},{"location":"python/python-api.html#shapeworks_py.axis_is_valid","text":"axis_is_valid(axis: List[float]) -> bool ensure an axis is valid","title":"axis_is_valid()"},{"location":"python/python-api.html#shapeworks_py.degToRad","text":"degToRad(deg: float) -> float convert degrees to radians","title":"degToRad()"},{"location":"python/python-api.html#shapeworks_py.mean","text":"mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.range","text":"range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field","title":"range()"},{"location":"python/python-api.html#shapeworks_py.seed","text":"seed(seed: int = 1698185790239257) -> None sets the seed for random number generation (internal use)","title":"seed()"},{"location":"python/python-api.html#shapeworks_py.stddev","text":"stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field","title":"stddev()"},{"location":"python/python-api.html#shapeworks_py.toAxis","text":"toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"toAxis()"},{"location":"studio/deepssm-in-studio.html","text":"DeepSSM in Studio ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps. Importing Data for DeepSSM In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see: Defining Data Split The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10. Data Augmentation The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data. Training The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains. Testing In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"DeepSSM Module"},{"location":"studio/deepssm-in-studio.html#deepssm-in-studio","text":"ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps.","title":"DeepSSM in Studio"},{"location":"studio/deepssm-in-studio.html#importing-data-for-deepssm","text":"In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see:","title":"Importing Data for DeepSSM"},{"location":"studio/deepssm-in-studio.html#defining-data-split","text":"The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10.","title":"Defining Data Split"},{"location":"studio/deepssm-in-studio.html#data-augmentation","text":"The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data.","title":"Data Augmentation"},{"location":"studio/deepssm-in-studio.html#training","text":"The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains.","title":"Training"},{"location":"studio/deepssm-in-studio.html#testing","text":"In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"Testing"},{"location":"studio/getting-started-with-studio.html","text":"Getting Started With ShapeWorks Studio ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface. Splash Screen The splash screen provides access to recent projects and an option to create a new blank project. Data Module The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information. Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information. Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information. Analysis Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information. Preferences Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software Data Collection ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run). Viewer Controls See Studio Viewer Controls for details on viewer controls. Menus File Menu New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom Export Menu See Studio Export Options for details on export options. Project setup ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Getting Started"},{"location":"studio/getting-started-with-studio.html#getting-started-with-shapeworks-studio","text":"ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface.","title":"Getting Started With ShapeWorks Studio"},{"location":"studio/getting-started-with-studio.html#splash-screen","text":"The splash screen provides access to recent projects and an option to create a new blank project.","title":"Splash Screen"},{"location":"studio/getting-started-with-studio.html#data-module","text":"The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information.","title":"Data Module"},{"location":"studio/getting-started-with-studio.html#groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information.","title":"Groom Module"},{"location":"studio/getting-started-with-studio.html#optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information.","title":"Optimize Module"},{"location":"studio/getting-started-with-studio.html#analysis-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information.","title":"Analysis Module"},{"location":"studio/getting-started-with-studio.html#preferences","text":"Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software","title":"Preferences"},{"location":"studio/getting-started-with-studio.html#data-collection","text":"ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run).","title":"Data Collection"},{"location":"studio/getting-started-with-studio.html#viewer-controls","text":"See Studio Viewer Controls for details on viewer controls.","title":"Viewer Controls"},{"location":"studio/getting-started-with-studio.html#menus","text":"","title":"Menus"},{"location":"studio/getting-started-with-studio.html#file-menu","text":"New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom","title":"File Menu"},{"location":"studio/getting-started-with-studio.html#export-menu","text":"See Studio Export Options for details on export options.","title":"Export Menu"},{"location":"studio/getting-started-with-studio.html#project-setup","text":"ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Project setup"},{"location":"studio/multiple-domains.html","text":"Multiple Domains SSM ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet: Importing Data for Multiple Domains In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see: Grooming Multiple Domains When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox. Optimizing Multi-Domain SSM For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process. Analyzing Multi-Domain SSM Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow. Mixed-type Domains Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation. Multiple Domain Alignments In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#multiple-domains-ssm","text":"ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet:","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#importing-data-for-multiple-domains","text":"In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see:","title":"Importing Data for Multiple Domains"},{"location":"studio/multiple-domains.html#grooming-multiple-domains","text":"When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox.","title":"Grooming Multiple Domains"},{"location":"studio/multiple-domains.html#optimizing-multi-domain-ssm","text":"For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process.","title":"Optimizing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#analyzing-multi-domain-ssm","text":"Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow.","title":"Analyzing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#mixed-type-domains","text":"Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation.","title":"Mixed-type Domains"},{"location":"studio/multiple-domains.html#multiple-domain-alignments","text":"In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domain Alignments"},{"location":"studio/studio-analyze.html","text":"ShapeWorks Studio Analyze Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. View Panel The View panel contains all of the options for controlling the analyis viewer options. Group The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences: Network Analysis The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D Samples The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample. PCA The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Multi-Level PCA The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure. Show Difference to Mean This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well. Metrics Panel The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation. Surface Reconstruction Panel The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option. Particles Panel The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Analyze Module"},{"location":"studio/studio-analyze.html#shapeworks-studio-analyze-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module.","title":"ShapeWorks Studio Analyze Module"},{"location":"studio/studio-analyze.html#view-panel","text":"The View panel contains all of the options for controlling the analyis viewer options.","title":"View Panel"},{"location":"studio/studio-analyze.html#group","text":"The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences:","title":"Group"},{"location":"studio/studio-analyze.html#network-analysis","text":"The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D","title":"Network Analysis"},{"location":"studio/studio-analyze.html#samples","text":"The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample.","title":"Samples"},{"location":"studio/studio-analyze.html#pca","text":"The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"PCA"},{"location":"studio/studio-analyze.html#multi-level-pca","text":"The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure.","title":"Multi-Level PCA"},{"location":"studio/studio-analyze.html#show-difference-to-mean","text":"This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well.","title":"Show Difference to Mean"},{"location":"studio/studio-analyze.html#metrics-panel","text":"The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation.","title":"Metrics Panel"},{"location":"studio/studio-analyze.html#surface-reconstruction-panel","text":"The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option.","title":"Surface Reconstruction Panel"},{"location":"studio/studio-analyze.html#particles-panel","text":"The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Particles Panel"},{"location":"studio/studio-data.html","text":"ShapeWorks Studio Data Module Importing data There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window Landmarks Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality. Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Data Module"},{"location":"studio/studio-data.html#shapeworks-studio-data-module","text":"","title":"ShapeWorks Studio Data Module"},{"location":"studio/studio-data.html#importing-data","text":"There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window","title":"Importing data"},{"location":"studio/studio-data.html#landmarks","text":"Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality.","title":"Landmarks"},{"location":"studio/studio-data.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/studio-data.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/studio-data.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/studio-data.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Removing a Constraint"},{"location":"studio/studio-export.html","text":"ShapeWorks Studio Export Options The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display Export Screenshot Dialog The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export Export PCA Montage The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export Creating Videos The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Export Options"},{"location":"studio/studio-export.html#shapeworks-studio-export-options","text":"The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display","title":"ShapeWorks Studio Export Options"},{"location":"studio/studio-export.html#export-screenshot-dialog","text":"The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export","title":"Export Screenshot Dialog"},{"location":"studio/studio-export.html#export-pca-montage","text":"The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export","title":"Export PCA Montage"},{"location":"studio/studio-export.html#creating-videos","text":"The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Creating Videos"},{"location":"studio/studio-groom.html","text":"ShapeWorks Studio Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"studio/studio-groom.html#shapeworks-studio-groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Studio Groom Module"},{"location":"studio/studio-optimize.html","text":"ShapeWorks Studio Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"studio/studio-optimize.html#shapeworks-studio-optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Studio Optimize Module"},{"location":"studio/studio-viewer.html","text":"ShapeWorks Studio Viewer Controls At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64) Comparing mesh types The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance: Feature maps and scalars controls When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set. Image volume support When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers Keyboard Shortcuts The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item. Point selection As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Viewer Controls"},{"location":"studio/studio-viewer.html#shapeworks-studio-viewer-controls","text":"At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64)","title":"ShapeWorks Studio Viewer Controls"},{"location":"studio/studio-viewer.html#comparing-mesh-types","text":"The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance:","title":"Comparing mesh types"},{"location":"studio/studio-viewer.html#feature-maps-and-scalars-controls","text":"When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set.","title":"Feature maps and scalars controls"},{"location":"studio/studio-viewer.html#image-volume-support","text":"When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers","title":"Image volume support"},{"location":"studio/studio-viewer.html#keyboard-shortcuts","text":"The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item.","title":"Keyboard Shortcuts"},{"location":"studio/studio-viewer.html#point-selection","text":"As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Point selection"},{"location":"studio/using-constraints.html","text":"Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/using-constraints.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/using-constraints.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Removing a Constraint"},{"location":"tools/ShapeWorksCommands.html","text":"ShapeWorks Commands shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable . shapeworks Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top Analyze Commands analyze Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands Groom Commands groom Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands Image Commands add Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands antialias Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands binarize Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands blur Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands bounding-box-image Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands clip-image Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands close-holes Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands compare-image Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands compute-dt Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands crop Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands curvature Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands divide Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands extract-label Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands gradient Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands icp-image Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands image-bounds Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands image-info Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands image-to-mesh Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands intensity Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands isolate Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands multiply Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands negate Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands pad Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands read-image Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands recenter Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands reflect-image Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands resample Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands resize Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands rotate Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands scale-image Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands set-origin Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands set-region Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands set-spacing Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands sigmoid Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands subtract Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands topo-preserving-smooth Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands tp-levelset Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands translate-image Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands warp-image Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands write-image Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands Mesh Commands bounding-box-mesh Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands clip-closed-surface Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands clip-mesh Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands closest-point Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands compare-mesh Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands compute-normals Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands compute-thickness Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands coverage Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands distance Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands field-mean Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-names Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands field-range Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-std Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands fill-holes Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands fix-element Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands geodesic-distance Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands geodesic-distance-landmark Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands get-field Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands get-field-value Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands invert-normal Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands landmark-geodesics Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands mean-normals Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands mesh-bounds Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands mesh-curvature Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands mesh-info Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands mesh-to-dt Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands mesh-to-image Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands probe-volume Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands read-mesh Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands reflect-mesh Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands remesh Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands remesh-percent Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands scale-mesh Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands set-field Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands set-field-value Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands smooth Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands smooth-sinc Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands transform-mesh Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands translate-mesh Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands warp-mesh Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands write-mesh Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands Optimize Commands optimize Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands ParticleSystem Commands compactness Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands generalization Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands read-particle-system Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands specificity Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands Project Commands convert-project Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands Shapeworks Commands seed Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands","text":"shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable .","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks","text":"Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top","title":"shapeworks"},{"location":"tools/ShapeWorksCommands.html#analyze-commands","text":"","title":"Analyze Commands"},{"location":"tools/ShapeWorksCommands.html#analyze","text":"Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands","title":"analyze"},{"location":"tools/ShapeWorksCommands.html#groom-commands","text":"","title":"Groom Commands"},{"location":"tools/ShapeWorksCommands.html#groom","text":"Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands","title":"groom"},{"location":"tools/ShapeWorksCommands.html#image-commands","text":"","title":"Image Commands"},{"location":"tools/ShapeWorksCommands.html#add","text":"Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands","title":"add"},{"location":"tools/ShapeWorksCommands.html#antialias","text":"Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands","title":"antialias"},{"location":"tools/ShapeWorksCommands.html#binarize","text":"Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands","title":"binarize"},{"location":"tools/ShapeWorksCommands.html#blur","text":"Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands","title":"blur"},{"location":"tools/ShapeWorksCommands.html#bounding-box-image","text":"Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands","title":"bounding-box-image"},{"location":"tools/ShapeWorksCommands.html#clip-image","text":"Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands","title":"clip-image"},{"location":"tools/ShapeWorksCommands.html#close-holes","text":"Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands","title":"close-holes"},{"location":"tools/ShapeWorksCommands.html#compare-image","text":"Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands","title":"compare-image"},{"location":"tools/ShapeWorksCommands.html#compute-dt","text":"Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands","title":"compute-dt"},{"location":"tools/ShapeWorksCommands.html#crop","text":"Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"crop"},{"location":"tools/ShapeWorksCommands.html#curvature","text":"Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands","title":"curvature"},{"location":"tools/ShapeWorksCommands.html#divide","text":"Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands","title":"divide"},{"location":"tools/ShapeWorksCommands.html#extract-label","text":"Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands","title":"extract-label"},{"location":"tools/ShapeWorksCommands.html#gradient","text":"Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"gradient"},{"location":"tools/ShapeWorksCommands.html#icp-image","text":"Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands","title":"icp-image"},{"location":"tools/ShapeWorksCommands.html#image-bounds","text":"Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands","title":"image-bounds"},{"location":"tools/ShapeWorksCommands.html#image-info","text":"Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands","title":"image-info"},{"location":"tools/ShapeWorksCommands.html#image-to-mesh","text":"Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands","title":"image-to-mesh"},{"location":"tools/ShapeWorksCommands.html#intensity","text":"Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands","title":"intensity"},{"location":"tools/ShapeWorksCommands.html#isolate","text":"Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"isolate"},{"location":"tools/ShapeWorksCommands.html#multiply","text":"Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands","title":"multiply"},{"location":"tools/ShapeWorksCommands.html#negate","text":"Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"negate"},{"location":"tools/ShapeWorksCommands.html#pad","text":"Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands","title":"pad"},{"location":"tools/ShapeWorksCommands.html#read-image","text":"Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands","title":"read-image"},{"location":"tools/ShapeWorksCommands.html#recenter","text":"Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"recenter"},{"location":"tools/ShapeWorksCommands.html#reflect-image","text":"Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands","title":"reflect-image"},{"location":"tools/ShapeWorksCommands.html#resample","text":"Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands","title":"resample"},{"location":"tools/ShapeWorksCommands.html#resize","text":"Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands","title":"resize"},{"location":"tools/ShapeWorksCommands.html#rotate","text":"Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands","title":"rotate"},{"location":"tools/ShapeWorksCommands.html#scale-image","text":"Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands","title":"scale-image"},{"location":"tools/ShapeWorksCommands.html#set-origin","text":"Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands","title":"set-origin"},{"location":"tools/ShapeWorksCommands.html#set-region","text":"Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands","title":"set-region"},{"location":"tools/ShapeWorksCommands.html#set-spacing","text":"Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands","title":"set-spacing"},{"location":"tools/ShapeWorksCommands.html#sigmoid","text":"Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands","title":"sigmoid"},{"location":"tools/ShapeWorksCommands.html#subtract","text":"Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands","title":"subtract"},{"location":"tools/ShapeWorksCommands.html#topo-preserving-smooth","text":"Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands","title":"topo-preserving-smooth"},{"location":"tools/ShapeWorksCommands.html#tp-levelset","text":"Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands","title":"tp-levelset"},{"location":"tools/ShapeWorksCommands.html#translate-image","text":"Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands","title":"translate-image"},{"location":"tools/ShapeWorksCommands.html#warp-image","text":"Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands","title":"warp-image"},{"location":"tools/ShapeWorksCommands.html#write-image","text":"Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands","title":"write-image"},{"location":"tools/ShapeWorksCommands.html#mesh-commands","text":"","title":"Mesh Commands"},{"location":"tools/ShapeWorksCommands.html#bounding-box-mesh","text":"Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands","title":"bounding-box-mesh"},{"location":"tools/ShapeWorksCommands.html#clip-closed-surface","text":"Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-closed-surface"},{"location":"tools/ShapeWorksCommands.html#clip-mesh","text":"Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-mesh"},{"location":"tools/ShapeWorksCommands.html#closest-point","text":"Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands","title":"closest-point"},{"location":"tools/ShapeWorksCommands.html#compare-mesh","text":"Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands","title":"compare-mesh"},{"location":"tools/ShapeWorksCommands.html#compute-normals","text":"Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"compute-normals"},{"location":"tools/ShapeWorksCommands.html#compute-thickness","text":"Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands","title":"compute-thickness"},{"location":"tools/ShapeWorksCommands.html#coverage","text":"Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands","title":"coverage"},{"location":"tools/ShapeWorksCommands.html#distance","text":"Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands","title":"distance"},{"location":"tools/ShapeWorksCommands.html#field-mean","text":"Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-mean"},{"location":"tools/ShapeWorksCommands.html#field-names","text":"Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"field-names"},{"location":"tools/ShapeWorksCommands.html#field-range","text":"Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-range"},{"location":"tools/ShapeWorksCommands.html#field-std","text":"Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-std"},{"location":"tools/ShapeWorksCommands.html#fill-holes","text":"Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fill-holes"},{"location":"tools/ShapeWorksCommands.html#fix-element","text":"Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fix-element"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance","text":"Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands","title":"geodesic-distance"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance-landmark","text":"Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands","title":"geodesic-distance-landmark"},{"location":"tools/ShapeWorksCommands.html#get-field","text":"Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"get-field"},{"location":"tools/ShapeWorksCommands.html#get-field-value","text":"Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands","title":"get-field-value"},{"location":"tools/ShapeWorksCommands.html#invert-normal","text":"Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"invert-normal"},{"location":"tools/ShapeWorksCommands.html#landmark-geodesics","text":"Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands","title":"landmark-geodesics"},{"location":"tools/ShapeWorksCommands.html#mean-normals","text":"Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands","title":"mean-normals"},{"location":"tools/ShapeWorksCommands.html#mesh-bounds","text":"Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"mesh-bounds"},{"location":"tools/ShapeWorksCommands.html#mesh-curvature","text":"Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands","title":"mesh-curvature"},{"location":"tools/ShapeWorksCommands.html#mesh-info","text":"Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands","title":"mesh-info"},{"location":"tools/ShapeWorksCommands.html#mesh-to-dt","text":"Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands","title":"mesh-to-dt"},{"location":"tools/ShapeWorksCommands.html#mesh-to-image","text":"Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands","title":"mesh-to-image"},{"location":"tools/ShapeWorksCommands.html#probe-volume","text":"Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands","title":"probe-volume"},{"location":"tools/ShapeWorksCommands.html#read-mesh","text":"Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands","title":"read-mesh"},{"location":"tools/ShapeWorksCommands.html#reflect-mesh","text":"Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands","title":"reflect-mesh"},{"location":"tools/ShapeWorksCommands.html#remesh","text":"Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh"},{"location":"tools/ShapeWorksCommands.html#remesh-percent","text":"Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh-percent"},{"location":"tools/ShapeWorksCommands.html#scale-mesh","text":"Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands","title":"scale-mesh"},{"location":"tools/ShapeWorksCommands.html#set-field","text":"Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"set-field"},{"location":"tools/ShapeWorksCommands.html#set-field-value","text":"Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands","title":"set-field-value"},{"location":"tools/ShapeWorksCommands.html#smooth","text":"Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands","title":"smooth"},{"location":"tools/ShapeWorksCommands.html#smooth-sinc","text":"Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands","title":"smooth-sinc"},{"location":"tools/ShapeWorksCommands.html#transform-mesh","text":"Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands","title":"transform-mesh"},{"location":"tools/ShapeWorksCommands.html#translate-mesh","text":"Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands","title":"translate-mesh"},{"location":"tools/ShapeWorksCommands.html#warp-mesh","text":"Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands","title":"warp-mesh"},{"location":"tools/ShapeWorksCommands.html#write-mesh","text":"Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands","title":"write-mesh"},{"location":"tools/ShapeWorksCommands.html#optimize-commands","text":"","title":"Optimize Commands"},{"location":"tools/ShapeWorksCommands.html#optimize","text":"Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands","title":"optimize"},{"location":"tools/ShapeWorksCommands.html#particlesystem-commands","text":"","title":"ParticleSystem Commands"},{"location":"tools/ShapeWorksCommands.html#compactness","text":"Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands","title":"compactness"},{"location":"tools/ShapeWorksCommands.html#generalization","text":"Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"generalization"},{"location":"tools/ShapeWorksCommands.html#read-particle-system","text":"Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands","title":"read-particle-system"},{"location":"tools/ShapeWorksCommands.html#specificity","text":"Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"specificity"},{"location":"tools/ShapeWorksCommands.html#project-commands","text":"","title":"Project Commands"},{"location":"tools/ShapeWorksCommands.html#convert-project","text":"Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands","title":"convert-project"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands_1","text":"","title":"Shapeworks Commands"},{"location":"tools/ShapeWorksCommands.html#seed","text":"Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"seed"},{"location":"use-cases/right-ventricle.html","text":"Right Ventricle: Highly Variable Shapes What is the Use Case? This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released! Grooming Steps For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Supported Tags --use_subsample --num_subsample --skip_grooming --tiny_test Optimizing Parameters Analyzing Shape Model","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#right-ventricle-highly-variable-shapes","text":"","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#what-is-the-use-case","text":"This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released!","title":"What is the Use Case?"},{"location":"use-cases/right-ventricle.html#grooming-steps","text":"For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase.","title":"Grooming Steps"},{"location":"use-cases/right-ventricle.html#supported-tags","text":"--use_subsample --num_subsample --skip_grooming --tiny_test","title":"Supported Tags"},{"location":"use-cases/right-ventricle.html#optimizing-parameters","text":"","title":"Optimizing Parameters"},{"location":"use-cases/right-ventricle.html#analyzing-shape-model","text":"","title":"Analyzing Shape Model"},{"location":"use-cases/use-cases.html","text":"Getting Started with Use Cases What is a Use Case? Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples . Running A Use Case The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case. Uploading a Dataset Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite) Downloading a Dataset Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory] Use Case Data When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj Use Cases Arguments When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below. --use_subsample Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10 --use_single_scale Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale --mesh_mode Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode --tiny_test Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test --verify Use Case Workflow Overview The use cases which demomstrate the Shape Modeling Workflow follow this general outline: Grooming Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet. Optimization Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters . Analysis of Results The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#getting-started-with-use-cases","text":"","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#what-is-a-use-case","text":"Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples .","title":"What is a Use Case?"},{"location":"use-cases/use-cases.html#running-a-use-case","text":"The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case.","title":"Running A Use Case"},{"location":"use-cases/use-cases.html#uploading-a-dataset","text":"Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite)","title":"Uploading a Dataset"},{"location":"use-cases/use-cases.html#downloading-a-dataset","text":"Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory]","title":"Downloading a Dataset"},{"location":"use-cases/use-cases.html#use-case-data","text":"When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj","title":"Use Case Data"},{"location":"use-cases/use-cases.html#use-cases-arguments","text":"When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below.","title":"Use Cases Arguments"},{"location":"use-cases/use-cases.html#-use_subsample","text":"Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10","title":"--use_subsample"},{"location":"use-cases/use-cases.html#-use_single_scale","text":"Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale","title":"--use_single_scale"},{"location":"use-cases/use-cases.html#-mesh_mode","text":"Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode","title":"--mesh_mode"},{"location":"use-cases/use-cases.html#-tiny_test","text":"Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test","title":"--tiny_test"},{"location":"use-cases/use-cases.html#-verify","text":"","title":"--verify"},{"location":"use-cases/use-cases.html#use-case-workflow-overview","text":"The use cases which demomstrate the Shape Modeling Workflow follow this general outline:","title":"Use Case Workflow Overview"},{"location":"use-cases/use-cases.html#grooming","text":"Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet.","title":"Grooming"},{"location":"use-cases/use-cases.html#optimization","text":"Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters .","title":"Optimization"},{"location":"use-cases/use-cases.html#analysis-of-results","text":"The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Analysis of Results"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html","text":"Ellipsoid: Cutting Planes What is the Use Case? The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid: Grooming Steps This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15. Analyzing Shape Models Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#ellipsoid-cutting-planes","text":"","title":"Ellipsoid: Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#what-is-the-use-case","text":"The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid:","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#grooming-steps","text":"This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation.","title":"Grooming Steps"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#analyzing-shape-models","text":"Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Analyzing Shape Models"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html","text":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP) What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results. Starting a New Project with Constraints Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs. Grooming Steps You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs: Optimization Parameters We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure: Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio-wip","text":"","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP)"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#starting-a-new-project-with-constraints","text":"Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs.","title":"Starting a New Project with Constraints"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#grooming-steps","text":"You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#optimization-parameters","text":"We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure:","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Analyzing Shape Model"},{"location":"use-cases/constraint-based/femur-cutting-planes.html","text":"Femur: Shape Model from Meshes with Cutting Planes What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case. Grooming Steps Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur. Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Femur:Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#femur-shape-model-from-meshes-with-cutting-planes","text":"","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#grooming-steps","text":"Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Analyzing Shape Model"},{"location":"use-cases/contour-based/supershapes-contour.html","text":"Supershapes:Shape Model for Contour Domains What is the Use Case? The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data: Grooming Steps In this use case, we download pre-groomed data. The input contours are: Relevant Arguments This use case does not support any arguments Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#supershapesshape-model-for-contour-domains","text":"","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#what-is-the-use-case","text":"The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data:","title":"What is the Use Case?"},{"location":"use-cases/contour-based/supershapes-contour.html#grooming-steps","text":"In this use case, we download pre-groomed data. The input contours are:","title":"Grooming Steps"},{"location":"use-cases/contour-based/supershapes-contour.html#relevant-arguments","text":"This use case does not support any arguments","title":"Relevant Arguments"},{"location":"use-cases/contour-based/supershapes-contour.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , }","title":"Optimization Parameters"},{"location":"use-cases/contour-based/supershapes-contour.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Analyzing Shape Model"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html","text":"Femur Shape Model Directly from Images What is the Use Case? The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU. Relevant Arguments --tiny_test Use Case Pipeline The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below. Step 1: Getting the original data The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green). Step 2: Define the data split The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing. Step 3: Find training alignment transforms Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed. Step 4: Optimize training particles Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model. Step 5: Groom training images Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4. Step 6: Data augmentation Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots. Step 7: Find validation and test alignment transforms and groom images To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images. Step 8: Optimize validation particles with fixed domains In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs. Step 9: Create PyTorch loaders from data The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased. Step 10: Training DeepSSM A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch. Step 11: Predict validation particles and analyze accuracy The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults . Step 12: Predict test particles and analyze accuracy Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Femur SSM Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#femur-shape-model-directly-from-images","text":"","title":"Femur Shape Model Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#what-is-the-use-case","text":"The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU.","title":"What is the Use Case?"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#use-case-pipeline","text":"The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below.","title":"Use Case Pipeline"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-1-getting-the-original-data","text":"The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green).","title":"Step 1: Getting the original data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-2-define-the-data-split","text":"The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing.","title":"Step 2: Define the data split"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-3-find-training-alignment-transforms","text":"Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed.","title":"Step 3: Find training alignment transforms"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-4-optimize-training-particles","text":"Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model.","title":"Step 4: Optimize training particles"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-5-groom-training-images","text":"Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4.","title":"Step 5: Groom training images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-6-data-augmentation","text":"Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots.","title":"Step 6: Data augmentation"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-7-find-validation-and-test-alignment-transforms-and-groom-images","text":"To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images.","title":"Step 7: Find validation and test alignment transforms and groom images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-8-optimize-validation-particles-with-fixed-domains","text":"In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs.","title":"Step 8: Optimize validation particles with fixed domains"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-9-create-pytorch-loaders-from-data","text":"The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased.","title":"Step 9: Create PyTorch loaders from data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-10-training-deepssm","text":"A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch.","title":"Step 10: Training DeepSSM"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-11-predict-validation-particles-and-analyze-accuracy","text":"The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults .","title":"Step 11: Predict validation particles and analyze accuracy"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-12-predict-test-particles-and-analyze-accuracy","text":"Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Step 12: Predict test particles and analyze accuracy"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Data This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#grooming-data","text":"This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Data"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html","text":"Ellipsoid Mesh: Basic Example What is the Use Case? The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks. Grooming Steps This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#ellipsoid-mesh-basic-example","text":"","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#what-is-the-use-case","text":"The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#analyzing-shape-model","text":"Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/hip.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones. Grooming Data This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Hip: Multiple Domains Alignment"},{"location":"use-cases/mesh-based/hip.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/hip.html#what-is-the-use-case","text":"The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/hip.html#grooming-data","text":"This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint:","title":"Grooming Data"},{"location":"use-cases/mesh-based/hip.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/hip.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/hip.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/lumps.html","text":"Lumps: Shape Model directly from Mesh What is the Use Case? The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Grooming Steps This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#lumps-shape-model-directly-from-mesh","text":"","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#what-is-the-use-case","text":"The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/lumps.html#grooming-steps","text":"This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/lumps.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/lumps.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/lumps.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/thin-cavity-bean.html","text":"Thin Cavity Bean: Shape Model with Geodesic Distances What is the Use Case? The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation. Grooming Steps In this use case, we download pre-groomed data. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on. Analyzing Shape Model Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#what-is-the-use-case","text":"The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#grooming-steps","text":"In this use case, we download pre-groomed data. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on.","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#analyzing-shape-model","text":"Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html","text":"Fixed Domains Ellipsoid: Shape Model on New Shapes What is the Use Case? The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids. Grooming Steps This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms. Relevant Arguments --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" } Analyzing Shape Model Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#what-is-the-use-case","text":"The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids.","title":"What is the Use Case?"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#grooming-steps","text":"This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms.","title":"Grooming Steps"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" }","title":"Optimization Parameters"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#analyzing-shape-model","text":"Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html","text":"Incremental Supershapes: Building a Shape Model Incrementally What is the Use Case? The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script. Use Case Options When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size. Sorting Method The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median. Initial Model Size The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed. Incremental Batch Size The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization. Grooming Steps In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --tiny_test --interactive Incremental Optimization In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized. Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch. Analyzing Shape Model The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes. Evaluation of the Benefits of Incremental Optimization To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model. Subsample of Dataset The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-supershapes-building-a-shape-model-incrementally","text":"","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#what-is-the-use-case","text":"The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script.","title":"What is the Use Case?"},{"location":"use-cases/multistep/incremental_supershapes.html#use-case-options","text":"When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size.","title":"Use Case Options"},{"location":"use-cases/multistep/incremental_supershapes.html#sorting-method","text":"The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median.","title":"Sorting Method"},{"location":"use-cases/multistep/incremental_supershapes.html#initial-model-size","text":"The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed.","title":"Initial Model Size"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-batch-size","text":"The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization.","title":"Incremental Batch Size"},{"location":"use-cases/multistep/incremental_supershapes.html#grooming-steps","text":"In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/multistep/incremental_supershapes.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test --interactive","title":"Relevant Arguments"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-optimization","text":"In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized.","title":"Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch.","title":"Optimization Parameters"},{"location":"use-cases/multistep/incremental_supershapes.html#analyzing-shape-model","text":"The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html#evaluation-of-the-benefits-of-incremental-optimization","text":"To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model.","title":"Evaluation of the Benefits of Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#subsample-of-dataset","text":"The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Subsample of Dataset"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html","text":"Shape Model for Multiple Domains from Segmentations What is the Use Case? The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#shape-model-for-multiple-domains-from-segmentations","text":"","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/ellipsoid.html","text":"Ellipsoid: Basic Example What is the Use Case? The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#ellipsoid-basic-example","text":"","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#what-is-the-use-case","text":"The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid.html#relevant-arguments","text":"--use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/left-atrium.html","text":"Left Atrium: Shape Model from Segmentations What is the Use Case? The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#left-atrium-shape-model-from-segmentations","text":"","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#what-is-the-use-case","text":"The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/left-atrium.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/left-atrium.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/left-atrium.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/left-atrium.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Analyzing Shape Model"},{"location":"use-cases/shared-boundary-based/peanut.html","text":"Peanut: Shape Model of Multiple Domains with Shared Boundaries What is the Use Case? The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller. Grooming Steps This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset. Relevant Arguments --use_subsample --num_subsample --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Peanut:Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#what-is-the-use-case","text":"The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller.","title":"What is the Use Case?"},{"location":"use-cases/shared-boundary-based/peanut.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset.","title":"Grooming Steps"},{"location":"use-cases/shared-boundary-based/peanut.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/shared-boundary-based/peanut.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/shared-boundary-based/peanut.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Analyzing Shape Model"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html","text":"Ellipsoid: Shape Evaluation in Python What is the Use Case? The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#ellipsoid-shape-evaluation-in-python","text":"","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#what-is-the-use-case","text":"The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#analyzing-shape-model-using-python-apis","text":"The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/ellipsoid-pca.html","text":"Ellipsoid: Shape Statistics in Python What is the Use Case? The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#ellipsoid-shape-statistics-in-python","text":"","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#what-is-the-use-case","text":"The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-pca.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-pca.html#analyzing-shape-model-using-python-apis","text":"The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/femur-pvalues.html","text":"Femur: Group Difference Statistics in Python What and Where is the Use Case? This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution. Relevant Arguments --tiny_test Analyzing Shape Model For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#femur-group-difference-statistics-in-python","text":"","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#what-and-where-is-the-use-case","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution.","title":"What and Where is the Use Case?"},{"location":"use-cases/stats-based/femur-pvalues.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/femur-pvalues.html#analyzing-shape-model","text":"For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Analyzing Shape Model"},{"location":"users/citation.html","text":"How to Cite ShapeWorks? Acknowledgements If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\" Citation When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#how-to-cite-shapeworks","text":"","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#acknowledgements","text":"If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\"","title":"Acknowledgements"},{"location":"users/citation.html#citation","text":"When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"Citation"},{"location":"users/install.html","text":"How to Install ShapeWorks? First, download ShapeWorks Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases. Next, follow the instructions for your platform. Windows Mac Linux Installing ShapeWorks on Windows Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\ Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid ShapeWorks also includes interactive Jupyter Python notebook examples. Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Mac Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Linux Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"How to Install ShapeWorks?"},{"location":"users/install.html#how-to-install-shapeworks","text":"","title":"How to Install ShapeWorks?"},{"location":"users/install.html#first-download-shapeworks","text":"Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases.","title":"First, download ShapeWorks"},{"location":"users/install.html#next-follow-the-instructions-for-your-platform","text":"Windows Mac Linux","title":"Next, follow the instructions for your platform."},{"location":"users/install.html#installing-shapeworks-on-windows","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Windows"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started","text":"Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-mac","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Mac"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_1","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_1","text":"Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-linux","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Linux"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_2","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_2","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/papers.html","text":"Relevant Papers Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Revelant Papers"},{"location":"users/papers.html#relevant-papers","text":"Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Relevant Papers"},{"location":"workflow/analyze.html","text":"How to Analyze Your Shape Model? Surface Correspondences ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out Running ShapeWorks Studio When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen Using XML Files You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml Using Spreadsheets ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets Surface Reconstruction For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... . Statistical Analysis Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis. Group Differences If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups) Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#how-to-analyze-your-shape-model","text":"","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#surface-correspondences","text":"ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out","title":"Surface Correspondences"},{"location":"workflow/analyze.html#running-shapeworks-studio","text":"When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen","title":"Running ShapeWorks Studio"},{"location":"workflow/analyze.html#using-xml-files","text":"You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml","title":"Using XML Files"},{"location":"workflow/analyze.html#using-spreadsheets","text":"ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets","title":"Using Spreadsheets"},{"location":"workflow/analyze.html#surface-reconstruction","text":"For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... .","title":"Surface Reconstruction"},{"location":"workflow/analyze.html#statistical-analysis","text":"Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis.","title":"Statistical Analysis"},{"location":"workflow/analyze.html#group-differences","text":"If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups)","title":"Group Differences"},{"location":"workflow/analyze.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"workflow/groom.html","text":"How to Groom Your Dataset? ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands . Common Pre-Processing Steps for Segmentations Resampling images and segmentations This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing. Aligning segmentations Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Clip segmentations In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename ) Cropping and padding segmentations In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename ) Converting segmentations to smooth signed distance transforms For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon. Common Pre-Processing Steps for Meshes Reflect meshes It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename ) Meshes to volumes Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands Remesh Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 ) Aligning meshes Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform ) Extract Shared Boundary In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol ) Input shapes with shared surface Output extracted surfaces Extract Contour The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes ) Smoothing Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#how-to-groom-your-dataset","text":"ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands .","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#common-pre-processing-steps-for-segmentations","text":"","title":"Common Pre-Processing Steps for Segmentations"},{"location":"workflow/groom.html#resampling-images-and-segmentations","text":"This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing.","title":"Resampling images and segmentations"},{"location":"workflow/groom.html#aligning-segmentations","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename )","title":"Aligning segmentations"},{"location":"workflow/groom.html#clip-segmentations","text":"In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename )","title":"Clip segmentations"},{"location":"workflow/groom.html#cropping-and-padding-segmentations","text":"In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename )","title":"Cropping and padding segmentations"},{"location":"workflow/groom.html#converting-segmentations-to-smooth-signed-distance-transforms","text":"For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon.","title":"Converting segmentations to smooth signed distance transforms"},{"location":"workflow/groom.html#common-pre-processing-steps-for-meshes","text":"","title":"Common Pre-Processing Steps for Meshes"},{"location":"workflow/groom.html#reflect-meshes","text":"It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename )","title":"Reflect meshes"},{"location":"workflow/groom.html#meshes-to-volumes","text":"Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands","title":"Meshes to volumes"},{"location":"workflow/groom.html#remesh","text":"Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 )","title":"Remesh"},{"location":"workflow/groom.html#aligning-meshes","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform )","title":"Aligning meshes"},{"location":"workflow/groom.html#extract-shared-boundary","text":"In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol )","title":"Extract Shared Boundary"},{"location":"workflow/groom.html#input-shapes-with-shared-surface","text":"","title":"Input shapes with shared surface"},{"location":"workflow/groom.html#output-extracted-surfaces","text":"","title":"Output extracted surfaces"},{"location":"workflow/groom.html#extract-contour","text":"The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes )","title":"Extract Contour"},{"location":"workflow/groom.html#smoothing","text":"Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"Smoothing"},{"location":"workflow/optimize.html","text":"How to Optimize Your Shape Model? Particle-based Shape Modeling ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term) Particle-based Representation More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration . Shape vs. Configuration Spaces This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization. World vs. Local Coordinates For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) . Optimization Cost Function Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces. Particles Initialization & Optimization ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes. On Algorithmic Parameters Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand. Correspondence Relative Weighting One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape) Shape Statistics in Initialization and Optimization Steps At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles Starting and Ending Regularization Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure. Optimizing Correspondences You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format. Parameter Tuning General Process The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model. Qualitative Assessment To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors. Tips and Tricks Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this. Correspondences on New Samples ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#how-to-optimize-your-shape-model","text":"","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#particle-based-shape-modeling","text":"ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term)","title":"Particle-based Shape Modeling"},{"location":"workflow/optimize.html#particle-based-representation","text":"More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration .","title":"Particle-based Representation"},{"location":"workflow/optimize.html#shape-vs-configuration-spaces","text":"This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization.","title":"Shape vs. Configuration Spaces"},{"location":"workflow/optimize.html#world-vs-local-coordinates","text":"For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) .","title":"World vs. Local Coordinates"},{"location":"workflow/optimize.html#optimization-cost-function","text":"Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces.","title":"Optimization Cost Function"},{"location":"workflow/optimize.html#particles-initialization-optimization","text":"ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes.","title":"Particles Initialization & Optimization"},{"location":"workflow/optimize.html#on-algorithmic-parameters","text":"Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand.","title":"On Algorithmic Parameters"},{"location":"workflow/optimize.html#correspondence-relative-weighting","text":"One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape)","title":"Correspondence Relative Weighting"},{"location":"workflow/optimize.html#shape-statistics-in-initialization-and-optimization-steps","text":"At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles","title":"Shape Statistics in Initialization and Optimization Steps"},{"location":"workflow/optimize.html#starting-and-ending-regularization","text":"Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure.","title":"Starting and Ending Regularization"},{"location":"workflow/optimize.html#optimizing-correspondences","text":"You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format.","title":"Optimizing Correspondences"},{"location":"workflow/optimize.html#parameter-tuning","text":"","title":"Parameter Tuning"},{"location":"workflow/optimize.html#general-process","text":"The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model.","title":"General Process"},{"location":"workflow/optimize.html#qualitative-assessment","text":"To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors.","title":"Qualitative Assessment"},{"location":"workflow/optimize.html#tips-and-tricks","text":"Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this.","title":"Tips and Tricks"},{"location":"workflow/optimize.html#correspondences-on-new-samples","text":"ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"Correspondences on New Samples"},{"location":"workflow/parameters.html","text":"ShapeWorks supports two formats for handling the data for performing grooming and optimization via the python interface and ShapeWorksStudio : XML Parameter file Project excel file Project JSON file (swproj) The project excel/json file formats are the current standard project file format. The older XML format is deprecated and will not have newer features added to it. Users are encouraged to use the project excel/json file. XML Parameter File (deprecated) Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed. Parameter Dictionary in Python Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , } Project Excel File ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings. Project JSON File ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ... Python API for Generation Project Sheet The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Optimization Parameters"},{"location":"workflow/parameters.html#xml-parameter-file-deprecated","text":"Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed.","title":"XML Parameter File (deprecated)"},{"location":"workflow/parameters.html#parameter-dictionary-in-python","text":"Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , }","title":"Parameter Dictionary in Python"},{"location":"workflow/parameters.html#project-excel-file","text":"ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings.","title":"Project Excel File"},{"location":"workflow/parameters.html#project-json-file","text":"ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ...","title":"Project JSON File"},{"location":"workflow/parameters.html#python-api-for-generation-project-sheet","text":"The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Python API for Generation Project Sheet"}]} \ No newline at end of file +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"Welcome to ShapeWorks! What is ShapeWorks? ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results. Latest & Greatest Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements. Why use ShapeWorks? ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages ShapeWorks Get-Togethers Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu . ShapeWorks Workshops & Webinars ShapeWorks @SB3C 2021 Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia ShapeWorks in Action! The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"Home"},{"location":"index.html#welcome-to-shapeworks","text":"","title":"Welcome to ShapeWorks!"},{"location":"index.html#what-is-shapeworks","text":"ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results.","title":"What is ShapeWorks?"},{"location":"index.html#latest-greatest","text":"Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements.","title":"Latest & Greatest"},{"location":"index.html#why-use-shapeworks","text":"ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages","title":"Why use ShapeWorks?"},{"location":"index.html#shapeworks-get-togethers","text":"Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu .","title":"ShapeWorks Get-Togethers"},{"location":"index.html#shapeworks-workshops-webinars","text":"","title":"ShapeWorks Workshops & Webinars"},{"location":"index.html#shapeworks-sb3c-2021","text":"Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia","title":"ShapeWorks @SB3C 2021"},{"location":"index.html#shapeworks-in-action","text":"The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"ShapeWorks in Action!"},{"location":"todo.html","text":"Documentation ToDo List To add/edit for docs index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal. To investigate for docs How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics? For ShapeWorks repo Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case Misc Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Documentation ToDo List"},{"location":"todo.html#documentation-todo-list","text":"","title":"Documentation ToDo List"},{"location":"todo.html#to-addedit-for-docs","text":"index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal.","title":"To add/edit for docs"},{"location":"todo.html#to-investigate-for-docs","text":"How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics?","title":"To investigate for docs"},{"location":"todo.html#for-shapeworks-repo","text":"Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case","title":"For ShapeWorks repo"},{"location":"todo.html#misc","text":"Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Misc"},{"location":"about/contact.html","text":"Contact Us Users Forum Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Users Mailing List Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu. Developers Mailing List You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Contact Us"},{"location":"about/contact.html#contact-us","text":"","title":"Contact Us"},{"location":"about/contact.html#users-forum","text":"Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community.","title":"Users Forum"},{"location":"about/contact.html#users-mailing-list","text":"Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu.","title":"Users Mailing List"},{"location":"about/contact.html#developers-mailing-list","text":"You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Developers Mailing List"},{"location":"about/license.html","text":"ShapeWorks License ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"about/license.html#shapeworks-license","text":"ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"ShapeWorks License"},{"location":"about/release-notes.html","text":"Release Notes ShapeWorks 6.4.2 - 2023-07-05 Fixes Fix python module versions preventing python import from working (#2104) ShapeWorks 6.4.1 - 2023-05-10 Fixes Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079) ShapeWorks 6.4.0 - 2023-05-05 What is new? ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944) ShapeWorks 6.3.2 - 2022-10-04 Fixes Fix install_shapeworks.sh on Linux (#1883) ShapeWorks 6.3.1 - 2022-07-22 Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) ShapeWorks 6.3.0 - 2022-06-09 What is new? ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation. Fixes Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank ShapeWorks 6.2.1 - 2022-01-07 What is new? ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint. Fixes Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes ShapeWorks 6.2 - 2021-11-16 What is new? ShapeWorks Back-end New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details. ShapeWorks Front-end Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details. User's Support Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details. Deep Learning DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details. Improvements ShapeWorks Back-end Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary. User's Support Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details. Fixes ShapeWorks Back-end Memory leak: Fixed memory leak issues in FEMesh operations ShapeWorks Front-end Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools. ShapeWorks 6.1 - 2021-06-28 What is new? ShapeWorks Back-end Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings. ShapeWorks Front-end Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example. User's Support Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively. Improvements ShapeWorks Back-end Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality. ShapeWorks Front-end Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers. Deep Learning & Shape Modeling Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU. User's Support Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import. Fixes ShapeWorks Back-end Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image. ShapeWorks Front-end Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved. Deep Learning & Shape Modeling DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command. ShapeWorks 6.0 - 2021-03-30 What's New User's Support New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort. ShapeWorks Back-end Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests. All-in-one Studio Front-end Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step. Deep Learning & Shape Modeling DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually. Improvements User's Support Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools. ShapeWorks Back-end Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups. All-in-one Studio Front-end Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems. Deep Learning & Shape Modeling More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding. Fixes ShapeWorks Back-end Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks. All-in-one Studio Front-end Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation. ShapeWorks 5.5.0 - 2020-10-15 What's New User's Support Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models. ShapeWorks Back-end ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details. All-in-one Studio Front-end Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet. Deep Learning & Shape Modeling New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details. Improvements User's Support Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming. ShapeWorks Back-end Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases. All-in-one Studio Front-end Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects. Fixes ShapeWorks Back-end Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints. ShapeWorks 5.4.1 - 2020-06-15 Fixes ShapeWorks Studio: Fixed crash when importing data on a new/blank project. ShapeWorks 5.4.0 - 2020-06-10 What's New New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases. Improvements Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models. Fixes Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare ShapeWorks 5.3.0 - 2020-02-20 What's New Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md) Improvements Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart ShapeWorks 5.2.2 - 2020-01-09 Fixes Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes ShapeWorks 5.2.1 - 2019-11-09 Fixes Fix examples, binaries ShapeWorks 5.2.0 - 2019-11-07 What's New Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically Improvements Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun Fixes Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Release Notes"},{"location":"about/release-notes.html#release-notes","text":"","title":"Release Notes"},{"location":"about/release-notes.html#shapeworks-642-2023-07-05","text":"","title":"ShapeWorks 6.4.2 - 2023-07-05"},{"location":"about/release-notes.html#fixes","text":"Fix python module versions preventing python import from working (#2104)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-641-2023-05-10","text":"","title":"ShapeWorks 6.4.1 - 2023-05-10"},{"location":"about/release-notes.html#fixes_1","text":"Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-640-2023-05-05","text":"","title":"ShapeWorks 6.4.0 - 2023-05-05"},{"location":"about/release-notes.html#what-is-new","text":"ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site","title":"What is new?"},{"location":"about/release-notes.html#fixes_2","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-632-2022-10-04","text":"","title":"ShapeWorks 6.3.2 - 2022-10-04"},{"location":"about/release-notes.html#fixes_3","text":"Fix install_shapeworks.sh on Linux (#1883)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-631-2022-07-22","text":"","title":"ShapeWorks 6.3.1 - 2022-07-22"},{"location":"about/release-notes.html#fixes_4","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-630-2022-06-09","text":"","title":"ShapeWorks 6.3.0 - 2022-06-09"},{"location":"about/release-notes.html#what-is-new_1","text":"ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation.","title":"What is new?"},{"location":"about/release-notes.html#fixes_5","text":"Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-621-2022-01-07","text":"","title":"ShapeWorks 6.2.1 - 2022-01-07"},{"location":"about/release-notes.html#what-is-new_2","text":"ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint.","title":"What is new?"},{"location":"about/release-notes.html#fixes_6","text":"Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-62-2021-11-16","text":"","title":"ShapeWorks 6.2 - 2021-11-16"},{"location":"about/release-notes.html#what-is-new_3","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end","text":"New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end","text":"Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support","text":"Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details.","title":"User's Support"},{"location":"about/release-notes.html#deep-learning","text":"DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details.","title":"Deep Learning"},{"location":"about/release-notes.html#improvements","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_1","text":"Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#users-support_1","text":"Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details.","title":"User's Support"},{"location":"about/release-notes.html#fixes_7","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_2","text":"Memory leak: Fixed memory leak issues in FEMesh operations","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_1","text":"Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#shapeworks-61-2021-06-28","text":"","title":"ShapeWorks 6.1 - 2021-06-28"},{"location":"about/release-notes.html#what-is-new_4","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end_3","text":"Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_2","text":"Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support_2","text":"Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively.","title":"User's Support"},{"location":"about/release-notes.html#improvements_1","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_4","text":"Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_3","text":"Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling","text":"Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#users-support_3","text":"Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import.","title":"User's Support"},{"location":"about/release-notes.html#fixes_8","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_5","text":"Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_4","text":"Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_1","text":"DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#shapeworks-60-2021-03-30","text":"","title":"ShapeWorks 6.0 - 2021-03-30"},{"location":"about/release-notes.html#whats-new","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_4","text":"New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_6","text":"Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end","text":"Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_2","text":"DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_2","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_5","text":"Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_7","text":"Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_1","text":"Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_3","text":"More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#fixes_9","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_8","text":"Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_2","text":"Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#shapeworks-550-2020-10-15","text":"","title":"ShapeWorks 5.5.0 - 2020-10-15"},{"location":"about/release-notes.html#whats-new_1","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_6","text":"Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_9","text":"ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_3","text":"Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_4","text":"New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_3","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_7","text":"Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_10","text":"Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_4","text":"Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#fixes_10","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_11","text":"Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-541-2020-06-15","text":"","title":"ShapeWorks 5.4.1 - 2020-06-15"},{"location":"about/release-notes.html#fixes_11","text":"ShapeWorks Studio: Fixed crash when importing data on a new/blank project.","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-540-2020-06-10","text":"","title":"ShapeWorks 5.4.0 - 2020-06-10"},{"location":"about/release-notes.html#whats-new_2","text":"New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases.","title":"What's New"},{"location":"about/release-notes.html#improvements_4","text":"Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models.","title":"Improvements"},{"location":"about/release-notes.html#fixes_12","text":"Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-530-2020-02-20","text":"","title":"ShapeWorks 5.3.0 - 2020-02-20"},{"location":"about/release-notes.html#whats-new_3","text":"Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md)","title":"What's New"},{"location":"about/release-notes.html#improvements_5","text":"Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-522-2020-01-09","text":"","title":"ShapeWorks 5.2.2 - 2020-01-09"},{"location":"about/release-notes.html#fixes_13","text":"Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-521-2019-11-09","text":"","title":"ShapeWorks 5.2.1 - 2019-11-09"},{"location":"about/release-notes.html#fixes_14","text":"Fix examples, binaries","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-520-2019-11-07","text":"","title":"ShapeWorks 5.2.0 - 2019-11-07"},{"location":"about/release-notes.html#whats-new_4","text":"Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically","title":"What's New"},{"location":"about/release-notes.html#improvements_6","text":"Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun","title":"Improvements"},{"location":"about/release-notes.html#fixes_15","text":"Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Fixes"},{"location":"about/team.html","text":"Meet ShapeWorkers! Principal Investigators Shireen Elhabian Ross Whitaker Software Developers Alan Morris Cameron Christensen Archanasri Subramanian Researchers Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria Past Contributors Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Meet ShapeWorkers!"},{"location":"about/team.html#meet-shapeworkers","text":"","title":"Meet ShapeWorkers!"},{"location":"about/team.html#principal-investigators","text":"Shireen Elhabian Ross Whitaker","title":"Principal Investigators"},{"location":"about/team.html#software-developers","text":"Alan Morris Cameron Christensen Archanasri Subramanian","title":"Software Developers"},{"location":"about/team.html#researchers","text":"Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria","title":"Researchers"},{"location":"about/team.html#past-contributors","text":"Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Past Contributors"},{"location":"api/Classes/classColorScheme.html","text":"ColorScheme Public Classes Name struct rgb Public Functions Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme () Public Attributes Name rgb foreground rgb background rgb alt Public Functions Documentation function background_qcolor inline QColor background_qcolor ( int alpha ) function foreground_qcolor inline QColor foreground_qcolor () function get_text_color inline QColor get_text_color () function get_text_intensity inline double get_text_intensity () function ColorScheme inline ColorScheme () function ~ColorScheme inline ~ ColorScheme () Public Attributes Documentation variable foreground rgb foreground ; variable background rgb background ; variable alt rgb alt ; Updated on 2023-10-25 at 15:40:27 +0000","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#colorscheme","text":"","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-classes","text":"Name struct rgb","title":"Public Classes"},{"location":"api/Classes/classColorScheme.html#public-functions","text":"Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme ()","title":"Public Functions"},{"location":"api/Classes/classColorScheme.html#public-attributes","text":"Name rgb foreground rgb background rgb alt","title":"Public Attributes"},{"location":"api/Classes/classColorScheme.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorScheme.html#function-background_qcolor","text":"inline QColor background_qcolor ( int alpha )","title":"function background_qcolor"},{"location":"api/Classes/classColorScheme.html#function-foreground_qcolor","text":"inline QColor foreground_qcolor ()","title":"function foreground_qcolor"},{"location":"api/Classes/classColorScheme.html#function-get_text_color","text":"inline QColor get_text_color ()","title":"function get_text_color"},{"location":"api/Classes/classColorScheme.html#function-get_text_intensity","text":"inline double get_text_intensity ()","title":"function get_text_intensity"},{"location":"api/Classes/classColorScheme.html#function-colorscheme","text":"inline ColorScheme ()","title":"function ColorScheme"},{"location":"api/Classes/classColorScheme.html#function-colorscheme_1","text":"inline ~ ColorScheme ()","title":"function ~ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classColorScheme.html#variable-foreground","text":"rgb foreground ;","title":"variable foreground"},{"location":"api/Classes/classColorScheme.html#variable-background","text":"rgb background ;","title":"variable background"},{"location":"api/Classes/classColorScheme.html#variable-alt","text":"rgb alt ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable alt"},{"location":"api/Classes/classColorSchemes.html","text":"ColorSchemes Inherits from std::vector< ColorScheme > Public Functions Name ColorSchemes () ~ColorSchemes () Public Functions Documentation function ColorSchemes inline ColorSchemes () function ~ColorSchemes inline ~ ColorSchemes () Updated on 2023-10-25 at 15:40:27 +0000","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#colorschemes","text":"Inherits from std::vector< ColorScheme >","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#public-functions","text":"Name ColorSchemes () ~ColorSchemes ()","title":"Public Functions"},{"location":"api/Classes/classColorSchemes.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes","text":"inline ColorSchemes ()","title":"function ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes_1","text":"inline ~ ColorSchemes () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ColorSchemes"},{"location":"api/Classes/classCustomSlider.html","text":"CustomSlider Inherits from QSlider Public Functions Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr) Protected Functions Name virtual void paintEvent (QPaintEvent * ev) Public Functions Documentation function CustomSlider inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) function CustomSlider explicit CustomSlider ( QWidget * parent = nullptr ) Protected Functions Documentation function paintEvent virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-25 at 15:40:27 +0000","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#customslider","text":"Inherits from QSlider","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#public-functions","text":"Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr)","title":"Public Functions"},{"location":"api/Classes/classCustomSlider.html#protected-functions","text":"Name virtual void paintEvent (QPaintEvent * ev)","title":"Protected Functions"},{"location":"api/Classes/classCustomSlider.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-customslider","text":"inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#function-customslider_1","text":"explicit CustomSlider ( QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-paintevent","text":"virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function paintEvent"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html","text":"CustomSurfaceReconstructionFilter Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New () Protected Functions Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * ) Protected Attributes Name int NeighborhoodSize double SampleSpacing Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkGetMacro vtkGetMacro ( NeighborhoodSize , int ) function vtkSetMacro vtkSetMacro ( NeighborhoodSize , int ) function vtkGetMacro vtkGetMacro ( SampleSpacing , double ) function vtkSetMacro vtkSetMacro ( SampleSpacing , double ) function New static CustomSurfaceReconstructionFilter * New () Protected Functions Documentation function CustomSurfaceReconstructionFilter CustomSurfaceReconstructionFilter () function ~CustomSurfaceReconstructionFilter inline ~ CustomSurfaceReconstructionFilter () function RequestInformation virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function RequestData virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function FillInputPortInformation virtual int FillInputPortInformation ( int , vtkInformation * ) Protected Attributes Documentation variable NeighborhoodSize int NeighborhoodSize ; variable SampleSpacing double SampleSpacing ; Updated on 2023-10-25 at 15:40:27 +0000","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#customsurfacereconstructionfilter","text":"Inherits from vtkImageAlgorithm","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions","text":"Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New ()","title":"Public Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions","text":"Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * )","title":"Protected Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes","text":"Name int NeighborhoodSize double SampleSpacing","title":"Protected Attributes"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtktypemacro","text":"vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro","text":"vtkGetMacro ( NeighborhoodSize , int )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro","text":"vtkSetMacro ( NeighborhoodSize , int )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro_1","text":"vtkGetMacro ( SampleSpacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro_1","text":"vtkSetMacro ( SampleSpacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-new","text":"static CustomSurfaceReconstructionFilter * New ()","title":"function New"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter","text":"CustomSurfaceReconstructionFilter ()","title":"function CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter_1","text":"inline ~ CustomSurfaceReconstructionFilter ()","title":"function ~CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestData"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int , vtkInformation * )","title":"function FillInputPortInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-neighborhoodsize","text":"int NeighborhoodSize ;","title":"variable NeighborhoodSize"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-samplespacing","text":"double SampleSpacing ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable SampleSpacing"},{"location":"api/Classes/classFEAreaCoverage.html","text":"FEAreaCoverage Public Functions Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const Protected Functions Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q) Protected Attributes Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius Public Functions Documentation function FEAreaCoverage FEAreaCoverage () function SetSelection1 inline void SetSelection1 ( vector < int > & s ) function SetSelection2 inline void SetSelection2 ( vector < int > & s ) function Apply vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ) function AllowBackIntersection void AllowBackIntersection ( bool b ) function AllowBackIntersection bool AllowBackIntersection () const function SetAngleThreshold void SetAngleThreshold ( double w ) function GetAngleThreshold double GetAngleThreshold () const function SetBackSearchRadius void SetBackSearchRadius ( double R ) function GetBackSearchRadius double GetBackSearchRadius () const Protected Functions Documentation function UpdateSurface void UpdateSurface ( FEAreaCoverage :: Surface & s ) function intersect bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ) function faceIntersect bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ) Protected Attributes Documentation variable m_surf1 Surface m_surf1 ; variable m_surf2 Surface m_surf2 ; variable m_ballowBackIntersections bool m_ballowBackIntersections ; variable m_angleThreshold double m_angleThreshold ; variable m_backSearchRadius double m_backSearchRadius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#feareacoverage","text":"","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions","text":"Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions","text":"Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q)","title":"Protected Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes","text":"Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius","title":"Protected Attributes"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-feareacoverage","text":"FEAreaCoverage ()","title":"function FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection1","text":"inline void SetSelection1 ( vector < int > & s )","title":"function SetSelection1"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection2","text":"inline void SetSelection2 ( vector < int > & s )","title":"function SetSelection2"},{"location":"api/Classes/classFEAreaCoverage.html#function-apply","text":"vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 )","title":"function Apply"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection","text":"void AllowBackIntersection ( bool b )","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection_1","text":"bool AllowBackIntersection () const","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-setanglethreshold","text":"void SetAngleThreshold ( double w )","title":"function SetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-getanglethreshold","text":"double GetAngleThreshold () const","title":"function GetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-setbacksearchradius","text":"void SetBackSearchRadius ( double R )","title":"function SetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#function-getbacksearchradius","text":"double GetBackSearchRadius () const","title":"function GetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-updatesurface","text":"void UpdateSurface ( FEAreaCoverage :: Surface & s )","title":"function UpdateSurface"},{"location":"api/Classes/classFEAreaCoverage.html#function-intersect","text":"bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q )","title":"function intersect"},{"location":"api/Classes/classFEAreaCoverage.html#function-faceintersect","text":"bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q )","title":"function faceIntersect"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf1","text":"Surface m_surf1 ;","title":"variable m_surf1"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf2","text":"Surface m_surf2 ;","title":"variable m_surf2"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_ballowbackintersections","text":"bool m_ballowBackIntersections ;","title":"variable m_ballowBackIntersections"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_anglethreshold","text":"double m_angleThreshold ;","title":"variable m_angleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_backsearchradius","text":"double m_backSearchRadius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_backSearchRadius"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html","text":"FEAreaCoverage::Surface Public Functions Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes () Public Attributes Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT Public Functions Documentation function Surface inline Surface () function Faces inline int Faces () function Create void Create ( std :: shared_ptr < FEMesh > m ) function Nodes inline int Nodes () Public Attributes Documentation variable m_mesh std :: shared_ptr < FEMesh > m_mesh ; variable m_face vector < int > m_face ; variable m_node vector < int > m_node ; variable m_pos vector < vec3d > m_pos ; variable m_lnode vector < int > m_lnode ; variable m_norm vector < vec3d > m_norm ; variable m_fnorm vector < vec3d > m_fnorm ; variable m_NLT vector < vector < int > > m_NLT ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#feareacoveragesurface","text":"","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions","text":"Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes ()","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes","text":"Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT","title":"Public Attributes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-surface","text":"inline Surface ()","title":"function Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-faces","text":"inline int Faces ()","title":"function Faces"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-create","text":"void Create ( std :: shared_ptr < FEMesh > m )","title":"function Create"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_mesh","text":"std :: shared_ptr < FEMesh > m_mesh ;","title":"variable m_mesh"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_face","text":"vector < int > m_face ;","title":"variable m_face"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_pos","text":"vector < vec3d > m_pos ;","title":"variable m_pos"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_lnode","text":"vector < int > m_lnode ;","title":"variable m_lnode"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_norm","text":"vector < vec3d > m_norm ;","title":"variable m_norm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_fnorm","text":"vector < vec3d > m_fnorm ;","title":"variable m_fnorm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_nlt","text":"vector < vector < int > > m_NLT ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_NLT"},{"location":"api/Classes/classFEAutoMesher.html","text":"FEAutoMesher Public Functions Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle () Protected Functions Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m) Protected Attributes Name FEMesh * m_pm double m_wsmooth Public Functions Documentation function FEAutoMesher FEAutoMesher () function BuildMesh void BuildMesh ( FEMesh * pm ) function AutoPartitionSurface void AutoPartitionSurface ( FEMesh & m ) function AutoPartitionEdges void AutoPartitionEdges ( FEMesh & m ) function AutoPartitionNodes void AutoPartitionNodes ( FEMesh & m ) function Repartition void Repartition ( FEMesh & m ) function SetSmoothingAngle inline void SetSmoothingAngle ( double w ) function GetSmoothingAngle inline double GetSmoothingAngle () Protected Functions Documentation function BuildFaces void BuildFaces ( FEMesh & m ) function BuildEdges void BuildEdges ( FEMesh & m ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_wsmooth double m_wsmooth ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#feautomesher","text":"","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#public-functions","text":"Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle ()","title":"Public Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions","text":"Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m)","title":"Protected Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes","text":"Name FEMesh * m_pm double m_wsmooth","title":"Protected Attributes"},{"location":"api/Classes/classFEAutoMesher.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-feautomesher","text":"FEAutoMesher ()","title":"function FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#function-buildmesh","text":"void BuildMesh ( FEMesh * pm )","title":"function BuildMesh"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionsurface","text":"void AutoPartitionSurface ( FEMesh & m )","title":"function AutoPartitionSurface"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionedges","text":"void AutoPartitionEdges ( FEMesh & m )","title":"function AutoPartitionEdges"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionnodes","text":"void AutoPartitionNodes ( FEMesh & m )","title":"function AutoPartitionNodes"},{"location":"api/Classes/classFEAutoMesher.html#function-repartition","text":"void Repartition ( FEMesh & m )","title":"function Repartition"},{"location":"api/Classes/classFEAutoMesher.html#function-setsmoothingangle","text":"inline void SetSmoothingAngle ( double w )","title":"function SetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#function-getsmoothingangle","text":"inline double GetSmoothingAngle ()","title":"function GetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-buildfaces","text":"void BuildFaces ( FEMesh & m )","title":"function BuildFaces"},{"location":"api/Classes/classFEAutoMesher.html#function-buildedges","text":"void BuildEdges ( FEMesh & m )","title":"function BuildEdges"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_wsmooth","text":"double m_wsmooth ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_wsmooth"},{"location":"api/Classes/classFECVDDecimationModifier.html","text":"FECVDDecimationModifier More... #include Public Functions Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier. Public Attributes Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient Detailed Description class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FECVDDecimationModifier FECVDDecimationModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier. Public Attributes Documentation variable m_pct double m_pct ; percentage of target number of clusters/vertices variable m_bcvd bool m_bcvd ; variable m_sel_pct double m_sel_pct ; variable m_gradient double m_gradient ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#fecvddecimationmodifier","text":"More... #include ","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions","text":"Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier.","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes","text":"Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier.html#detailed-description","text":"class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-fecvddecimationmodifier","text":"FECVDDecimationModifier () Constructor.","title":"function FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier.","title":"function Apply"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_pct","text":"double m_pct ; percentage of target number of clusters/vertices","title":"variable m_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_bcvd","text":"bool m_bcvd ;","title":"variable m_bcvd"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_sel_pct","text":"double m_sel_pct ;","title":"variable m_sel_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_gradient","text":"double m_gradient ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_gradient"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html","text":"FECVDDecimationModifier::Cluster Public Functions Name Cluster () int faces () const Public Attributes Name vec3d m_sgamma double m_srho vector< int > m_fid Public Functions Documentation function Cluster inline Cluster () function faces inline int faces () const Public Attributes Documentation variable m_sgamma vec3d m_sgamma ; variable m_srho double m_srho ; variable m_fid vector < int > m_fid ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#fecvddecimationmodifiercluster","text":"","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions","text":"Name Cluster () int faces () const","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes","text":"Name vec3d m_sgamma double m_srho vector< int > m_fid","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-cluster","text":"inline Cluster ()","title":"function Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-faces","text":"inline int faces () const","title":"function faces"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_sgamma","text":"vec3d m_sgamma ;","title":"variable m_sgamma"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_srho","text":"double m_srho ;","title":"variable m_srho"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_fid","text":"vector < int > m_fid ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_fid"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html","text":"FECVDDecimationModifier::NODE Public Types Name enum @0 Public Functions Name NODE () bool AttachToCluster (int n) Public Attributes Name int c int nc Public Types Documentation enum @0 Enumerator Value Description MAX_CLUSTERS =23 Public Functions Documentation function NODE inline NODE () function AttachToCluster bool AttachToCluster ( int n ) Public Attributes Documentation variable c int c ; variable nc int nc ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#fecvddecimationmodifiernode","text":"","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types","text":"Name enum @0","title":"Public Types"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions","text":"Name NODE () bool AttachToCluster (int n)","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes","text":"Name int c int nc","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#enum-0","text":"Enumerator Value Description MAX_CLUSTERS =23","title":"enum @0"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-node","text":"inline NODE ()","title":"function NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-attachtocluster","text":"bool AttachToCluster ( int n )","title":"function AttachToCluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-c","text":"int c ;","title":"variable c"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-nc","text":"int nc ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable nc"},{"location":"api/Classes/classFECoreMesh.html","text":"FECoreMesh More... #include Inherited by FEMesh Public Functions Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Detailed Description class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data. Public Functions Documentation function FECoreMesh FECoreMesh () constructor function ~FECoreMesh virtual ~ FECoreMesh () destructor function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create function IsType bool IsType ( int ntype ) check the type of the mesh function Elements virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements function ElementRef virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef function ElementPtr virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr function Nodes inline int Nodes () const function Edges inline int Edges () const function Faces inline int Faces () const function Node inline FENode & Node ( int n ) function Edge inline FEEdge & Edge ( int n ) function Face inline FEFace & Face ( int n ) function NodePtr inline FENode * NodePtr ( int n = 0 ) function EdgePtr inline FEEdge * EdgePtr ( int n = 0 ) function FacePtr inline FEFace * FacePtr ( int n = 0 ) Protected Attributes Documentation variable m_Node std :: vector < FENode > m_Node ; FE nodes. variable m_Edge std :: vector < FEEdge > m_Edge ; FE edges. variable m_Face std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-25 at 15:40:27 +0000","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#fecoremesh","text":"More... #include Inherited by FEMesh","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#public-functions","text":"Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0)","title":"Public Functions"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes","text":"Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Protected Attributes"},{"location":"api/Classes/classFECoreMesh.html#detailed-description","text":"class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data.","title":"Detailed Description"},{"location":"api/Classes/classFECoreMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh","text":"FECoreMesh () constructor","title":"function FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh_1","text":"virtual ~ FECoreMesh () destructor","title":"function ~FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create","title":"function Create"},{"location":"api/Classes/classFECoreMesh.html#function-istype","text":"bool IsType ( int ntype ) check the type of the mesh","title":"function IsType"},{"location":"api/Classes/classFECoreMesh.html#function-elements","text":"virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFECoreMesh.html#function-elementref","text":"virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFECoreMesh.html#function-elementptr","text":"virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFECoreMesh.html#function-nodes","text":"inline int Nodes () const","title":"function Nodes"},{"location":"api/Classes/classFECoreMesh.html#function-edges","text":"inline int Edges () const","title":"function Edges"},{"location":"api/Classes/classFECoreMesh.html#function-faces","text":"inline int Faces () const","title":"function Faces"},{"location":"api/Classes/classFECoreMesh.html#function-node","text":"inline FENode & Node ( int n )","title":"function Node"},{"location":"api/Classes/classFECoreMesh.html#function-edge","text":"inline FEEdge & Edge ( int n )","title":"function Edge"},{"location":"api/Classes/classFECoreMesh.html#function-face","text":"inline FEFace & Face ( int n )","title":"function Face"},{"location":"api/Classes/classFECoreMesh.html#function-nodeptr","text":"inline FENode * NodePtr ( int n = 0 )","title":"function NodePtr"},{"location":"api/Classes/classFECoreMesh.html#function-edgeptr","text":"inline FEEdge * EdgePtr ( int n = 0 )","title":"function EdgePtr"},{"location":"api/Classes/classFECoreMesh.html#function-faceptr","text":"inline FEFace * FacePtr ( int n = 0 )","title":"function FacePtr"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFECoreMesh.html#variable-m_node","text":"std :: vector < FENode > m_Node ; FE nodes.","title":"variable m_Node"},{"location":"api/Classes/classFECoreMesh.html#variable-m_edge","text":"std :: vector < FEEdge > m_Edge ; FE edges.","title":"variable m_Edge"},{"location":"api/Classes/classFECoreMesh.html#variable-m_face","text":"std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_Face"},{"location":"api/Classes/classFEEdge.html","text":"FEEdge Inherits from FEItem Public Types Name enum @1 Public Functions Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node Public Attributes Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @1 Enumerator Value Description MAX_NODES 3 Public Functions Documentation function FEEdge FEEdge () constructor function operator== bool operator == ( const FEEdge & e ) edge comparison function Nodes inline int Nodes () return number of nodes function FindNode int FindNode ( int node ) find a node Public Attributes Documentation variable n int n ; edge nodes variable m_elem int m_elem ; the element to which this edge belongs (used only by beams) variable m_nbr int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-25 at 15:40:27 +0000","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#feedge","text":"Inherits from FEItem","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#public-types","text":"Name enum @1","title":"Public Types"},{"location":"api/Classes/classFEEdge.html#public-functions","text":"Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node","title":"Public Functions"},{"location":"api/Classes/classFEEdge.html#public-attributes","text":"Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1)","title":"Public Attributes"},{"location":"api/Classes/classFEEdge.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEEdge.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEEdge.html#enum-1","text":"Enumerator Value Description MAX_NODES 3","title":"enum @1"},{"location":"api/Classes/classFEEdge.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEEdge.html#function-feedge","text":"FEEdge () constructor","title":"function FEEdge"},{"location":"api/Classes/classFEEdge.html#function-operator","text":"bool operator == ( const FEEdge & e ) edge comparison","title":"function operator=="},{"location":"api/Classes/classFEEdge.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEEdge.html#function-findnode","text":"int FindNode ( int node ) find a node","title":"function FindNode"},{"location":"api/Classes/classFEEdge.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEEdge.html#variable-n","text":"int n ; edge nodes","title":"variable n"},{"location":"api/Classes/classFEEdge.html#variable-m_elem","text":"int m_elem ; the element to which this edge belongs (used only by beams)","title":"variable m_elem"},{"location":"api/Classes/classFEEdge.html#variable-m_nbr","text":"int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_nbr"},{"location":"api/Classes/classFEElement.html","text":"FEElement Inherits from FEElement_ , FEItem Public Types Name enum @3 Public Functions Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type. Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @3 Enumerator Value Description MAX_NODES 27 Public Functions Documentation function FEElement FEElement () constructor function FEElement FEElement ( const FEElement & el ) copy constructor function operator= FEElement & operator = ( const FEElement & el ) assignment operator function SetType void SetType ( int ntype ) Set the element type. Updated on 2023-10-25 at 15:40:27 +0000","title":"FEElement"},{"location":"api/Classes/classFEElement.html#feelement","text":"Inherits from FEElement_ , FEItem","title":"FEElement"},{"location":"api/Classes/classFEElement.html#public-types","text":"Name enum @3","title":"Public Types"},{"location":"api/Classes/classFEElement.html#public-functions","text":"Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type.","title":"Public Functions"},{"location":"api/Classes/classFEElement.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEElement.html#enum-3","text":"Enumerator Value Description MAX_NODES 27","title":"enum @3"},{"location":"api/Classes/classFEElement.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement.html#function-feelement","text":"FEElement () constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-feelement_1","text":"FEElement ( const FEElement & el ) copy constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-operator","text":"FEElement & operator = ( const FEElement & el ) assignment operator","title":"function operator="},{"location":"api/Classes/classFEElement.html#function-settype","text":"void SetType ( int ntype ) Set the element type. Updated on 2023-10-25 at 15:40:27 +0000","title":"function SetType"},{"location":"api/Classes/classFEElementData.html","text":"FEElementData Public Functions Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax) Public Functions Documentation function FEElementData FEElementData () function FEElementData FEElementData ( const FEElementData & d ) function operator= FEElementData & operator = ( const FEElementData & d ) function Create void Create ( FEMesh * pm , double v = 0.0 ) function Size inline int Size () function get inline double get ( int i ) function set inline void set ( int i , double v ) function operator[] inline double & operator []( int i ) function SetName void SetName ( const char * sz ) function GetName inline const char * GetName () function FillRandomBox void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#feelementdata","text":"","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#public-functions","text":"Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax)","title":"Public Functions"},{"location":"api/Classes/classFEElementData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElementData.html#function-feelementdata","text":"FEElementData ()","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-feelementdata_1","text":"FEElementData ( const FEElementData & d )","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-operator","text":"FEElementData & operator = ( const FEElementData & d )","title":"function operator="},{"location":"api/Classes/classFEElementData.html#function-create","text":"void Create ( FEMesh * pm , double v = 0.0 )","title":"function Create"},{"location":"api/Classes/classFEElementData.html#function-size","text":"inline int Size ()","title":"function Size"},{"location":"api/Classes/classFEElementData.html#function-get","text":"inline double get ( int i )","title":"function get"},{"location":"api/Classes/classFEElementData.html#function-set","text":"inline void set ( int i , double v )","title":"function set"},{"location":"api/Classes/classFEElementData.html#function-operator_1","text":"inline double & operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEElementData.html#function-setname","text":"void SetName ( const char * sz )","title":"function SetName"},{"location":"api/Classes/classFEElementData.html#function-getname","text":"inline const char * GetName ()","title":"function GetName"},{"location":"api/Classes/classFEElementData.html#function-fillrandombox","text":"void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function FillRandomBox"},{"location":"api/Classes/classFEElement__.html","text":"FEElement_ Inherits from FEItem Inherited by FEElement , FETri3 Public Functions Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions Name void copy (const FEElement_ & el) Public Attributes Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEElement_ FEElement_ () constructor function is_equal bool is_equal ( FEElement_ & e ) function GetType inline int GetType () const return the element type function IsType inline bool IsType ( int ntype ) const Is the element of this type. function Nodes inline int Nodes () const number of nodes function Faces inline int Faces () const Number of faces (shells have no faces) function Edges inline int Edges () const Number of edges (solids have no edges) function GetFace int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces) function GetFace FEFace GetFace ( int i ) Get the face i (only solids have faces) function GetShellFace FEFace GetShellFace () Get the face of a shell. function GetEdge FEEdge GetEdge ( int i ) Get the edge. function IsExterior bool IsExterior () Is this an exterior element. function IsSolid inline bool IsSolid () function IsShell inline bool IsShell () function IsBeam inline bool IsBeam () Protected Functions Documentation function copy void copy ( const FEElement_ & el ) Public Attributes Documentation variable m_node int * m_node ; pointer to node data variable m_nbr int * m_nbr ; neighbour elements variable m_face int * m_face ; faces (-1 for interior faces) variable m_h double * m_h ; element thickness (only used by shells) variable m_fiber vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section variable m_Q mat3d m_Q ; local material orientation variable m_Qactive bool m_Qactive ; active local material orientation variable m_a0 double m_a0 ; cross-sectional area (only used by truss elements) Protected Attributes Documentation variable m_ntype int m_ntype ; type of element variable m_nodes int m_nodes ; nr of nodes variable m_nfaces int m_nfaces ; nr of faces ( 0 for shells) variable m_nedges int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#feelement_","text":"Inherits from FEItem Inherited by FEElement , FETri3","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#public-functions","text":"Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam ()","title":"Public Functions"},{"location":"api/Classes/classFEElement__.html#protected-functions","text":"Name void copy (const FEElement_ & el)","title":"Protected Functions"},{"location":"api/Classes/classFEElement__.html#public-attributes","text":"Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements)","title":"Public Attributes"},{"location":"api/Classes/classFEElement__.html#protected-attributes","text":"Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids)","title":"Protected Attributes"},{"location":"api/Classes/classFEElement__.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement__.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-feelement_","text":"FEElement_ () constructor","title":"function FEElement_"},{"location":"api/Classes/classFEElement__.html#function-is_equal","text":"bool is_equal ( FEElement_ & e )","title":"function is_equal"},{"location":"api/Classes/classFEElement__.html#function-gettype","text":"inline int GetType () const return the element type","title":"function GetType"},{"location":"api/Classes/classFEElement__.html#function-istype","text":"inline bool IsType ( int ntype ) const Is the element of this type.","title":"function IsType"},{"location":"api/Classes/classFEElement__.html#function-nodes","text":"inline int Nodes () const number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEElement__.html#function-faces","text":"inline int Faces () const Number of faces (shells have no faces)","title":"function Faces"},{"location":"api/Classes/classFEElement__.html#function-edges","text":"inline int Edges () const Number of edges (solids have no edges)","title":"function Edges"},{"location":"api/Classes/classFEElement__.html#function-getface","text":"int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getface_1","text":"FEFace GetFace ( int i ) Get the face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getshellface","text":"FEFace GetShellFace () Get the face of a shell.","title":"function GetShellFace"},{"location":"api/Classes/classFEElement__.html#function-getedge","text":"FEEdge GetEdge ( int i ) Get the edge.","title":"function GetEdge"},{"location":"api/Classes/classFEElement__.html#function-isexterior","text":"bool IsExterior () Is this an exterior element.","title":"function IsExterior"},{"location":"api/Classes/classFEElement__.html#function-issolid","text":"inline bool IsSolid ()","title":"function IsSolid"},{"location":"api/Classes/classFEElement__.html#function-isshell","text":"inline bool IsShell ()","title":"function IsShell"},{"location":"api/Classes/classFEElement__.html#function-isbeam","text":"inline bool IsBeam ()","title":"function IsBeam"},{"location":"api/Classes/classFEElement__.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-copy","text":"void copy ( const FEElement_ & el )","title":"function copy"},{"location":"api/Classes/classFEElement__.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_node","text":"int * m_node ; pointer to node data","title":"variable m_node"},{"location":"api/Classes/classFEElement__.html#variable-m_nbr","text":"int * m_nbr ; neighbour elements","title":"variable m_nbr"},{"location":"api/Classes/classFEElement__.html#variable-m_face","text":"int * m_face ; faces (-1 for interior faces)","title":"variable m_face"},{"location":"api/Classes/classFEElement__.html#variable-m_h","text":"double * m_h ; element thickness (only used by shells)","title":"variable m_h"},{"location":"api/Classes/classFEElement__.html#variable-m_fiber","text":"vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section","title":"variable m_fiber"},{"location":"api/Classes/classFEElement__.html#variable-m_q","text":"mat3d m_Q ; local material orientation","title":"variable m_Q"},{"location":"api/Classes/classFEElement__.html#variable-m_qactive","text":"bool m_Qactive ; active local material orientation","title":"variable m_Qactive"},{"location":"api/Classes/classFEElement__.html#variable-m_a0","text":"double m_a0 ; cross-sectional area (only used by truss elements)","title":"variable m_a0"},{"location":"api/Classes/classFEElement__.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_ntype","text":"int m_ntype ; type of element","title":"variable m_ntype"},{"location":"api/Classes/classFEElement__.html#variable-m_nodes","text":"int m_nodes ; nr of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEElement__.html#variable-m_nfaces","text":"int m_nfaces ; nr of faces ( 0 for shells)","title":"variable m_nfaces"},{"location":"api/Classes/classFEElement__.html#variable-m_nedges","text":"int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_nedges"},{"location":"api/Classes/classFEFace.html","text":"FEFace Inherits from FEItem Public Types Name enum @2 Public Functions Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external. Public Attributes Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @2 Enumerator Value Description MAX_NODES 9 Public Functions Documentation function FEFace FEFace () constructor function operator== bool operator == ( const FEFace & f ) comparison operator function Nodes inline int Nodes () return number of nodes function Edges int Edges () return number of edges function GetEdgeNodes void GetEdgeNodes ( int i , int * n ) get the edge node numbers function HasEdge bool HasEdge ( int n1 , int n2 ) See if this face has an edge. function HasNode bool HasNode ( int i ) See if this face has node with ID i. function FindNode int FindNode ( int i ) Fine the array index of node with ID i. function IsExternal inline bool IsExternal () Is this face internal or external. Public Attributes Documentation variable n int n ; nodal ID's variable m_nodes int m_nodes ; number of nodes variable m_nbr int m_nbr ; neighbour faces variable m_fn vec3d m_fn ; face normal variable m_nn vec3d m_nn ; node normals variable m_sid int m_sid ; smoothing ID variable m_elem int m_elem ; the elements to which this face belongs Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFace"},{"location":"api/Classes/classFEFace.html#feface","text":"Inherits from FEItem","title":"FEFace"},{"location":"api/Classes/classFEFace.html#public-types","text":"Name enum @2","title":"Public Types"},{"location":"api/Classes/classFEFace.html#public-functions","text":"Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external.","title":"Public Functions"},{"location":"api/Classes/classFEFace.html#public-attributes","text":"Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs","title":"Public Attributes"},{"location":"api/Classes/classFEFace.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEFace.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEFace.html#enum-2","text":"Enumerator Value Description MAX_NODES 9","title":"enum @2"},{"location":"api/Classes/classFEFace.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFace.html#function-feface","text":"FEFace () constructor","title":"function FEFace"},{"location":"api/Classes/classFEFace.html#function-operator","text":"bool operator == ( const FEFace & f ) comparison operator","title":"function operator=="},{"location":"api/Classes/classFEFace.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEFace.html#function-edges","text":"int Edges () return number of edges","title":"function Edges"},{"location":"api/Classes/classFEFace.html#function-getedgenodes","text":"void GetEdgeNodes ( int i , int * n ) get the edge node numbers","title":"function GetEdgeNodes"},{"location":"api/Classes/classFEFace.html#function-hasedge","text":"bool HasEdge ( int n1 , int n2 ) See if this face has an edge.","title":"function HasEdge"},{"location":"api/Classes/classFEFace.html#function-hasnode","text":"bool HasNode ( int i ) See if this face has node with ID i.","title":"function HasNode"},{"location":"api/Classes/classFEFace.html#function-findnode","text":"int FindNode ( int i ) Fine the array index of node with ID i.","title":"function FindNode"},{"location":"api/Classes/classFEFace.html#function-isexternal","text":"inline bool IsExternal () Is this face internal or external.","title":"function IsExternal"},{"location":"api/Classes/classFEFace.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFace.html#variable-n","text":"int n ; nodal ID's","title":"variable n"},{"location":"api/Classes/classFEFace.html#variable-m_nodes","text":"int m_nodes ; number of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEFace.html#variable-m_nbr","text":"int m_nbr ; neighbour faces","title":"variable m_nbr"},{"location":"api/Classes/classFEFace.html#variable-m_fn","text":"vec3d m_fn ; face normal","title":"variable m_fn"},{"location":"api/Classes/classFEFace.html#variable-m_nn","text":"vec3d m_nn ; node normals","title":"variable m_nn"},{"location":"api/Classes/classFEFace.html#variable-m_sid","text":"int m_sid ; smoothing ID","title":"variable m_sid"},{"location":"api/Classes/classFEFace.html#variable-m_elem","text":"int m_elem ; the elements to which this face belongs Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_elem"},{"location":"api/Classes/classFEFillHole.html","text":"FEFillHole Public Classes Name class EdgeRing struct FACE Public Functions Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm) Public Attributes Name bool optimize bool insertNodes Public Functions Documentation function FEFillHole inline FEFillHole () function Apply FEMesh * Apply ( FEMesh * pm ) function AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list ) function newNode vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ) function DivideRing bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list ) function DivideRing1 bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list ) function FillAllHoles void FillAllHoles ( FEMesh * pm ) Public Attributes Documentation variable optimize bool optimize ; variable insertNodes bool insertNodes ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#fefillhole","text":"","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#public-classes","text":"Name class EdgeRing struct FACE","title":"Public Classes"},{"location":"api/Classes/classFEFillHole.html#public-functions","text":"Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole.html#public-attributes","text":"Name bool optimize bool insertNodes","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole.html#function-fefillhole","text":"inline FEFillHole ()","title":"function FEFillHole"},{"location":"api/Classes/classFEFillHole.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFillHole.html#function-afm","text":"bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list )","title":"function AFM"},{"location":"api/Classes/classFEFillHole.html#function-newnode","text":"vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave )","title":"function newNode"},{"location":"api/Classes/classFEFillHole.html#function-dividering","text":"bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing"},{"location":"api/Classes/classFEFillHole.html#function-dividering1","text":"bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing1"},{"location":"api/Classes/classFEFillHole.html#function-fillallholes","text":"void FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFillHole.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole.html#variable-optimize","text":"bool optimize ;","title":"variable optimize"},{"location":"api/Classes/classFEFillHole.html#variable-insertnodes","text":"bool insertNodes ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable insertNodes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html","text":"FEFillHole::EdgeRing Public Functions Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear) Public Attributes Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal Public Functions Documentation function EdgeRing inline EdgeRing () function EdgeRing inline EdgeRing ( const EdgeRing & ring ) function operator= inline void operator = ( const EdgeRing & ring ) function empty inline bool empty () function add inline void add ( int n , const vec3d & r , const vec3d & nn ) function clear inline void clear () function size inline int size () function operator[] inline int operator []( int i ) function GetLeftEar void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ) function GetRightEar void GetRightEar ( int n0 , int n1 , EdgeRing & ear ) Public Attributes Documentation variable m_r vector < vec3d > m_r ; variable m_node vector < int > m_node ; variable m_winding int m_winding ; variable m_normal vector < vec3d > m_normal ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#fefillholeedgering","text":"","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions","text":"Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes","text":"Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering","text":"inline EdgeRing ()","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering_1","text":"inline EdgeRing ( const EdgeRing & ring )","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator","text":"inline void operator = ( const EdgeRing & ring )","title":"function operator="},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-empty","text":"inline bool empty ()","title":"function empty"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-add","text":"inline void add ( int n , const vec3d & r , const vec3d & nn )","title":"function add"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-size","text":"inline int size ()","title":"function size"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator_1","text":"inline int operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getleftear","text":"void GetLeftEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetLeftEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getrightear","text":"void GetRightEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetRightEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_r","text":"vector < vec3d > m_r ;","title":"variable m_r"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_winding","text":"int m_winding ;","title":"variable m_winding"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_normal","text":"vector < vec3d > m_normal ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_normal"},{"location":"api/Classes/classFEFixMesh.html","text":"FEFixMesh Public Functions Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm) Public Functions Documentation function FEFixMesh inline FEFixMesh () function Apply FEMesh * Apply ( FEMesh * pm ) function SetTask void SetTask ( int n ) function SetThickness void SetThickness ( double m ) function RemoveDuplicateElements FEMesh * RemoveDuplicateElements ( FEMesh * pm ) function RemoveNonManifoldElements FEMesh * RemoveNonManifoldElements ( FEMesh * pm ) function FixElementWinding FEMesh * FixElementWinding ( FEMesh * pm ) function FillAllHoles FEMesh * FillAllHoles ( FEMesh * pm ) function FixinvertedElements FEMesh * FixinvertedElements ( FEMesh * pm ) function FixReferenceSurface FEMesh * FixReferenceSurface ( FEMesh * pm ) function InterpolateShellThickness FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#fefixmesh","text":"","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#public-functions","text":"Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFixMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFixMesh.html#function-fefixmesh","text":"inline FEFixMesh ()","title":"function FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFixMesh.html#function-settask","text":"void SetTask ( int n )","title":"function SetTask"},{"location":"api/Classes/classFEFixMesh.html#function-setthickness","text":"void SetThickness ( double m )","title":"function SetThickness"},{"location":"api/Classes/classFEFixMesh.html#function-removeduplicateelements","text":"FEMesh * RemoveDuplicateElements ( FEMesh * pm )","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEFixMesh.html#function-removenonmanifoldelements","text":"FEMesh * RemoveNonManifoldElements ( FEMesh * pm )","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixelementwinding","text":"FEMesh * FixElementWinding ( FEMesh * pm )","title":"function FixElementWinding"},{"location":"api/Classes/classFEFixMesh.html#function-fillallholes","text":"FEMesh * FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFixMesh.html#function-fixinvertedelements","text":"FEMesh * FixinvertedElements ( FEMesh * pm )","title":"function FixinvertedElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixreferencesurface","text":"FEMesh * FixReferenceSurface ( FEMesh * pm )","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEFixMesh.html#function-interpolateshellthickness","text":"FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEItem.html","text":"FEItem Inherited by FEEdge , FEElement_ , FEFace , FENode Public Functions Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEItem inline FEItem () function IsVisible inline bool IsVisible () const function IsSelected inline bool IsSelected () const function Select inline void Select () function UnSelect inline void UnSelect () function Show inline void Show () function Hide inline void Hide () function GetFEState inline unsigned int GetFEState () const function SetFEState inline void SetFEState ( unsigned int state ) Public Attributes Documentation variable m_ntag int m_ntag ; variable m_gid int m_gid ; variable m_nid int m_nid ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEItem"},{"location":"api/Classes/classFEItem.html#feitem","text":"Inherited by FEEdge , FEElement_ , FEFace , FENode","title":"FEItem"},{"location":"api/Classes/classFEItem.html#public-functions","text":"Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state)","title":"Public Functions"},{"location":"api/Classes/classFEItem.html#public-attributes","text":"Name int m_ntag int m_gid int m_nid","title":"Public Attributes"},{"location":"api/Classes/classFEItem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEItem.html#function-feitem","text":"inline FEItem ()","title":"function FEItem"},{"location":"api/Classes/classFEItem.html#function-isvisible","text":"inline bool IsVisible () const","title":"function IsVisible"},{"location":"api/Classes/classFEItem.html#function-isselected","text":"inline bool IsSelected () const","title":"function IsSelected"},{"location":"api/Classes/classFEItem.html#function-select","text":"inline void Select ()","title":"function Select"},{"location":"api/Classes/classFEItem.html#function-unselect","text":"inline void UnSelect ()","title":"function UnSelect"},{"location":"api/Classes/classFEItem.html#function-show","text":"inline void Show ()","title":"function Show"},{"location":"api/Classes/classFEItem.html#function-hide","text":"inline void Hide ()","title":"function Hide"},{"location":"api/Classes/classFEItem.html#function-getfestate","text":"inline unsigned int GetFEState () const","title":"function GetFEState"},{"location":"api/Classes/classFEItem.html#function-setfestate","text":"inline void SetFEState ( unsigned int state )","title":"function SetFEState"},{"location":"api/Classes/classFEItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEItem.html#variable-m_ntag","text":"int m_ntag ;","title":"variable m_ntag"},{"location":"api/Classes/classFEItem.html#variable-m_gid","text":"int m_gid ;","title":"variable m_gid"},{"location":"api/Classes/classFEItem.html#variable-m_nid","text":"int m_nid ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_nid"},{"location":"api/Classes/classFEMesh.html","text":"FEMesh Inherits from FECoreMesh Public Functions Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET) Protected Functions Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) Protected Attributes Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map Additional inherited members Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Public Functions Documentation function FEMesh FEMesh () function FEMesh FEMesh ( FEMesh & m ) function ~FEMesh virtual ~ FEMesh () function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create function ShallowCopy void ShallowCopy ( FEMesh * pm ) function Clear void Clear () \u2014 C L E A N U P \u2014 function DeleteEdges inline void DeleteEdges () function Elements inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements function Element inline FEElement & Element ( int n ) return element function ElementRef inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef function ElementPtr inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr function FindFace int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ) function FindNodesFromPart void FindNodesFromPart ( int gid , vector < int > & node ) function NodeArray inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array function FaceArray inline std :: vector < FEFace > & FaceArray () function ElementArray inline std :: vector < FEElement > & ElementArray () function GetElementValue inline double GetElementValue ( int n ) function SetElementValue inline void SetElementValue ( int n , double v ) function UpdateValueRange void UpdateValueRange () function GetValueRange void GetValueRange ( double & vmin , double & vmax ) function ProjectToSurface vec3d ProjectToSurface ( vec3d r , vec3d t ) function ProjectToFace vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ) function ProjectToEdge vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ) function FindIntersection bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ) function Update void Update () function UpdateElementNeighbors void UpdateElementNeighbors () function UpdateFaces void UpdateFaces () function UpdateEdges void UpdateEdges () function UpdateNodes void UpdateNodes () function AutoSmooth void AutoSmooth ( double w ) function UpdateNormals void UpdateNormals () function PartitionSelection void PartitionSelection () function RemoveIsolatedNodes void RemoveIsolatedNodes () function AddNode inline void AddNode ( FENode & n ) function DetachSelectedMesh FEMesh * DetachSelectedMesh () function DetachSelectedPart void DetachSelectedPart () function ExtractSelectedFaces FEMesh * ExtractSelectedFaces () function DeleteTaggedElements void DeleteTaggedElements ( int tag ) function DeleteTaggedFaces void DeleteTaggedFaces ( int tag ) function DeleteTaggedEdges void DeleteTaggedEdges ( int tag ) function FindDuplicateFaces void FindDuplicateFaces ( vector < int > & l ) function FindDuplicateEdges void FindDuplicateEdges ( vector < int > & l ) function DeleteSelectedElements void DeleteSelectedElements () function DeleteSelectedFaces void DeleteSelectedFaces () function DeleteSelectedNodes void DeleteSelectedNodes () function InvertTaggedElements void InvertTaggedElements ( int ntag ) function InvertSelectedElements void InvertSelectedElements () function ShellJacobian double ShellJacobian ( FEElement & el ) function RemoveDuplicateElements void RemoveDuplicateElements () function FixinvertedElements void FixinvertedElements () function FixReferenceSurface void FixReferenceSurface () function InterpolateShellThickness void InterpolateShellThickness ( double ) function RemoveNonManifoldElements void RemoveNonManifoldElements () function FixElementWinding void FixElementWinding () function FixElementWinding2 void FixElementWinding2 () function TagAllElements void TagAllElements ( int ntag ) function DataFields inline int DataFields () function AddDataField FEElementData * AddDataField ( const char * szname , double v = 0.0 ) function GetDataField inline FEElementData & GetDataField ( int i ) function ShortestEdge double ShortestEdge () function BuildNodeElementTable void BuildNodeElementTable ( vector < vector < int > > & NET ) function BuildNodeFaceTable void BuildNodeFaceTable ( vector < vector < int > > & NFT ) function BuildNodeEdgeTable void BuildNodeEdgeTable ( vector < vector < int > > & NET ) function BuildEdgeTable void BuildEdgeTable ( vector < pair < int , int > > & ET ) function BuildNodeNodeTable void BuildNodeNodeTable ( vector < set < int > > & NNT ) function BuildSurfaceNodeNodeTable void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT ) function BuildElementEdgeTable void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET ) function BuildFaceTable void BuildFaceTable ( vector < FEFace > & FT ) function BuildElementFaceTable void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT ) function BuildFaceEdgeTable void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET ) function BuildFaceFaceTable void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT ) function BuildEdgeEdgeTable void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET ) Protected Functions Documentation function IntersectTri bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) function IntersectQuad bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) Protected Attributes Documentation variable m_Elem std :: vector < FEElement > m_Elem ; FE elements. variable m_data std :: vector < double > m_data ; element values variable m_min double m_min ; variable m_max double m_max ; value range of element data variable m_map vector < FEElementData > m_map ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#femesh","text":"Inherits from FECoreMesh","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#public-functions","text":"Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET)","title":"Public Functions"},{"location":"api/Classes/classFEMesh.html#protected-functions","text":"Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g)","title":"Protected Functions"},{"location":"api/Classes/classFEMesh.html#protected-attributes","text":"Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map","title":"Protected Attributes"},{"location":"api/Classes/classFEMesh.html#additional-inherited-members","text":"Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Additional inherited members"},{"location":"api/Classes/classFEMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-femesh","text":"FEMesh ()","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_1","text":"FEMesh ( FEMesh & m )","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_2","text":"virtual ~ FEMesh ()","title":"function ~FEMesh"},{"location":"api/Classes/classFEMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create","title":"function Create"},{"location":"api/Classes/classFEMesh.html#function-shallowcopy","text":"void ShallowCopy ( FEMesh * pm )","title":"function ShallowCopy"},{"location":"api/Classes/classFEMesh.html#function-clear","text":"void Clear () \u2014 C L E A N U P \u2014","title":"function Clear"},{"location":"api/Classes/classFEMesh.html#function-deleteedges","text":"inline void DeleteEdges ()","title":"function DeleteEdges"},{"location":"api/Classes/classFEMesh.html#function-elements","text":"inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFEMesh.html#function-element","text":"inline FEElement & Element ( int n ) return element","title":"function Element"},{"location":"api/Classes/classFEMesh.html#function-elementref","text":"inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFEMesh.html#function-elementptr","text":"inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFEMesh.html#function-findface","text":"int FindFace ( FEElement * pe , FEFace & f , FEFace & fe )","title":"function FindFace"},{"location":"api/Classes/classFEMesh.html#function-findnodesfrompart","text":"void FindNodesFromPart ( int gid , vector < int > & node )","title":"function FindNodesFromPart"},{"location":"api/Classes/classFEMesh.html#function-nodearray","text":"inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array","title":"function NodeArray"},{"location":"api/Classes/classFEMesh.html#function-facearray","text":"inline std :: vector < FEFace > & FaceArray ()","title":"function FaceArray"},{"location":"api/Classes/classFEMesh.html#function-elementarray","text":"inline std :: vector < FEElement > & ElementArray ()","title":"function ElementArray"},{"location":"api/Classes/classFEMesh.html#function-getelementvalue","text":"inline double GetElementValue ( int n )","title":"function GetElementValue"},{"location":"api/Classes/classFEMesh.html#function-setelementvalue","text":"inline void SetElementValue ( int n , double v )","title":"function SetElementValue"},{"location":"api/Classes/classFEMesh.html#function-updatevaluerange","text":"void UpdateValueRange ()","title":"function UpdateValueRange"},{"location":"api/Classes/classFEMesh.html#function-getvaluerange","text":"void GetValueRange ( double & vmin , double & vmax )","title":"function GetValueRange"},{"location":"api/Classes/classFEMesh.html#function-projecttosurface","text":"vec3d ProjectToSurface ( vec3d r , vec3d t )","title":"function ProjectToSurface"},{"location":"api/Classes/classFEMesh.html#function-projecttoface","text":"vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s )","title":"function ProjectToFace"},{"location":"api/Classes/classFEMesh.html#function-projecttoedge","text":"vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r )","title":"function ProjectToEdge"},{"location":"api/Classes/classFEMesh.html#function-findintersection","text":"bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g )","title":"function FindIntersection"},{"location":"api/Classes/classFEMesh.html#function-update","text":"void Update ()","title":"function Update"},{"location":"api/Classes/classFEMesh.html#function-updateelementneighbors","text":"void UpdateElementNeighbors ()","title":"function UpdateElementNeighbors"},{"location":"api/Classes/classFEMesh.html#function-updatefaces","text":"void UpdateFaces ()","title":"function UpdateFaces"},{"location":"api/Classes/classFEMesh.html#function-updateedges","text":"void UpdateEdges ()","title":"function UpdateEdges"},{"location":"api/Classes/classFEMesh.html#function-updatenodes","text":"void UpdateNodes ()","title":"function UpdateNodes"},{"location":"api/Classes/classFEMesh.html#function-autosmooth","text":"void AutoSmooth ( double w )","title":"function AutoSmooth"},{"location":"api/Classes/classFEMesh.html#function-updatenormals","text":"void UpdateNormals ()","title":"function UpdateNormals"},{"location":"api/Classes/classFEMesh.html#function-partitionselection","text":"void PartitionSelection ()","title":"function PartitionSelection"},{"location":"api/Classes/classFEMesh.html#function-removeisolatednodes","text":"void RemoveIsolatedNodes ()","title":"function RemoveIsolatedNodes"},{"location":"api/Classes/classFEMesh.html#function-addnode","text":"inline void AddNode ( FENode & n )","title":"function AddNode"},{"location":"api/Classes/classFEMesh.html#function-detachselectedmesh","text":"FEMesh * DetachSelectedMesh ()","title":"function DetachSelectedMesh"},{"location":"api/Classes/classFEMesh.html#function-detachselectedpart","text":"void DetachSelectedPart ()","title":"function DetachSelectedPart"},{"location":"api/Classes/classFEMesh.html#function-extractselectedfaces","text":"FEMesh * ExtractSelectedFaces ()","title":"function ExtractSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedelements","text":"void DeleteTaggedElements ( int tag )","title":"function DeleteTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedfaces","text":"void DeleteTaggedFaces ( int tag )","title":"function DeleteTaggedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggededges","text":"void DeleteTaggedEdges ( int tag )","title":"function DeleteTaggedEdges"},{"location":"api/Classes/classFEMesh.html#function-findduplicatefaces","text":"void FindDuplicateFaces ( vector < int > & l )","title":"function FindDuplicateFaces"},{"location":"api/Classes/classFEMesh.html#function-findduplicateedges","text":"void FindDuplicateEdges ( vector < int > & l )","title":"function FindDuplicateEdges"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedelements","text":"void DeleteSelectedElements ()","title":"function DeleteSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedfaces","text":"void DeleteSelectedFaces ()","title":"function DeleteSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deleteselectednodes","text":"void DeleteSelectedNodes ()","title":"function DeleteSelectedNodes"},{"location":"api/Classes/classFEMesh.html#function-inverttaggedelements","text":"void InvertTaggedElements ( int ntag )","title":"function InvertTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-invertselectedelements","text":"void InvertSelectedElements ()","title":"function InvertSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-shelljacobian","text":"double ShellJacobian ( FEElement & el )","title":"function ShellJacobian"},{"location":"api/Classes/classFEMesh.html#function-removeduplicateelements","text":"void RemoveDuplicateElements ()","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEMesh.html#function-fixinvertedelements","text":"void FixinvertedElements ()","title":"function FixinvertedElements"},{"location":"api/Classes/classFEMesh.html#function-fixreferencesurface","text":"void FixReferenceSurface ()","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEMesh.html#function-interpolateshellthickness","text":"void InterpolateShellThickness ( double )","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEMesh.html#function-removenonmanifoldelements","text":"void RemoveNonManifoldElements ()","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding","text":"void FixElementWinding ()","title":"function FixElementWinding"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding2","text":"void FixElementWinding2 ()","title":"function FixElementWinding2"},{"location":"api/Classes/classFEMesh.html#function-tagallelements","text":"void TagAllElements ( int ntag )","title":"function TagAllElements"},{"location":"api/Classes/classFEMesh.html#function-datafields","text":"inline int DataFields ()","title":"function DataFields"},{"location":"api/Classes/classFEMesh.html#function-adddatafield","text":"FEElementData * AddDataField ( const char * szname , double v = 0.0 )","title":"function AddDataField"},{"location":"api/Classes/classFEMesh.html#function-getdatafield","text":"inline FEElementData & GetDataField ( int i )","title":"function GetDataField"},{"location":"api/Classes/classFEMesh.html#function-shortestedge","text":"double ShortestEdge ()","title":"function ShortestEdge"},{"location":"api/Classes/classFEMesh.html#function-buildnodeelementtable","text":"void BuildNodeElementTable ( vector < vector < int > > & NET )","title":"function BuildNodeElementTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodefacetable","text":"void BuildNodeFaceTable ( vector < vector < int > > & NFT )","title":"function BuildNodeFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodeedgetable","text":"void BuildNodeEdgeTable ( vector < vector < int > > & NET )","title":"function BuildNodeEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgetable","text":"void BuildEdgeTable ( vector < pair < int , int > > & ET )","title":"function BuildEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodenodetable","text":"void BuildNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildsurfacenodenodetable","text":"void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildSurfaceNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementedgetable","text":"void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET )","title":"function BuildElementEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacetable","text":"void BuildFaceTable ( vector < FEFace > & FT )","title":"function BuildFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementfacetable","text":"void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT )","title":"function BuildElementFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildfaceedgetable","text":"void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET )","title":"function BuildFaceEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacefacetable","text":"void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT )","title":"function BuildFaceFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgeedgetable","text":"void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET )","title":"function BuildEdgeEdgeTable"},{"location":"api/Classes/classFEMesh.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-intersecttri","text":"bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectTri"},{"location":"api/Classes/classFEMesh.html#function-intersectquad","text":"bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectQuad"},{"location":"api/Classes/classFEMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEMesh.html#variable-m_elem","text":"std :: vector < FEElement > m_Elem ; FE elements.","title":"variable m_Elem"},{"location":"api/Classes/classFEMesh.html#variable-m_data","text":"std :: vector < double > m_data ; element values","title":"variable m_data"},{"location":"api/Classes/classFEMesh.html#variable-m_min","text":"double m_min ;","title":"variable m_min"},{"location":"api/Classes/classFEMesh.html#variable-m_max","text":"double m_max ; value range of element data","title":"variable m_max"},{"location":"api/Classes/classFEMesh.html#variable-m_map","text":"vector < FEElementData > m_map ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_map"},{"location":"api/Classes/classFEMeshSmoothingModifier.html","text":"FEMeshSmoothingModifier More... #include Public Functions Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier. Protected Functions Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap) Public Attributes Name double m_threshold1 double m_threshold2 double m_iteration int m_method Detailed Description class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FEMeshSmoothingModifier FEMeshSmoothingModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier. Protected Functions Documentation function area_triangle double area_triangle ( vec3d r [ 3 ] ) function distance double distance ( vec3d x , vec3d y ) function random double random () function Laplacian_Smoothing void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Laplacian_Smoothing2 void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ) function Taubin_Smoothing void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Crease_Enhancing_Diffusion void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ) function Add_Noise void Add_Noise ( FEMesh * pm , vector < int > hashmap ) Public Attributes Documentation variable m_threshold1 double m_threshold1 ; variable m_threshold2 double m_threshold2 ; variable m_iteration double m_iteration ; variable m_method int m_method ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#femeshsmoothingmodifier","text":"More... #include ","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions","text":"Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier.","title":"Public Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions","text":"Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap)","title":"Protected Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes","text":"Name double m_threshold1 double m_threshold2 double m_iteration int m_method","title":"Public Attributes"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#detailed-description","text":"class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-femeshsmoothingmodifier","text":"FEMeshSmoothingModifier () Constructor.","title":"function FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier.","title":"function Apply"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-distance","text":"double distance ( vec3d x , vec3d y )","title":"function distance"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-random","text":"double random ()","title":"function random"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing","text":"void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing2","text":"void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-taubin_smoothing","text":"void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Taubin_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-crease_enhancing_diffusion","text":"void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap )","title":"function Crease_Enhancing_Diffusion"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-add_noise","text":"void Add_Noise ( FEMesh * pm , vector < int > hashmap )","title":"function Add_Noise"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold1","text":"double m_threshold1 ;","title":"variable m_threshold1"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold2","text":"double m_threshold2 ;","title":"variable m_threshold2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_iteration","text":"double m_iteration ;","title":"variable m_iteration"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_method","text":"int m_method ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_method"},{"location":"api/Classes/classFENode.html","text":"FENode Inherits from FEItem Public Functions Name FENode () Public Attributes Name vec3d r bool m_bext double m_ndata Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FENode inline FENode () Public Attributes Documentation variable r vec3d r ; variable m_bext bool m_bext ; variable m_ndata double m_ndata ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENode"},{"location":"api/Classes/classFENode.html#fenode","text":"Inherits from FEItem","title":"FENode"},{"location":"api/Classes/classFENode.html#public-functions","text":"Name FENode ()","title":"Public Functions"},{"location":"api/Classes/classFENode.html#public-attributes","text":"Name vec3d r bool m_bext double m_ndata","title":"Public Attributes"},{"location":"api/Classes/classFENode.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFENode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENode.html#function-fenode","text":"inline FENode ()","title":"function FENode"},{"location":"api/Classes/classFENode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFENode.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/classFENode.html#variable-m_bext","text":"bool m_bext ;","title":"variable m_bext"},{"location":"api/Classes/classFENode.html#variable-m_ndata","text":"double m_ndata ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_ndata"},{"location":"api/Classes/classFENodeElementList.html","text":"FENodeElementList Public Functions Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem Public Functions Documentation function FENodeElementList FENodeElementList ( FEMesh * pm ) function ~FENodeElementList ~ FENodeElementList () function Build void Build () function Valence inline int Valence ( int n ) function Element inline FEElement * Element ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_pelem vector < FEElement * > m_pelem ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#fenodeelementlist","text":"","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#public-functions","text":"Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem","title":"Protected Attributes"},{"location":"api/Classes/classFENodeElementList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist","text":"FENodeElementList ( FEMesh * pm )","title":"function FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist_1","text":"~ FENodeElementList ()","title":"function ~FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeElementList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeElementList.html#function-element","text":"inline FEElement * Element ( int n , int j )","title":"function Element"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeElementList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeElementList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pelem","text":"vector < FEElement * > m_pelem ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_pelem"},{"location":"api/Classes/classFENodeFaceList.html","text":"FENodeFaceList Public Functions Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf) Protected Functions Name void Sort (int node) Protected Attributes Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off Public Functions Documentation function FENodeFaceList FENodeFaceList ( FEMesh * pm ) function ~FENodeFaceList ~ FENodeFaceList ( void ) function Build void Build () function BuildSorted void BuildSorted () function Nodes inline int Nodes () function Node inline FENode & Node ( int i ) function Valence inline int Valence ( int i ) function Face inline FEFace * Face ( int n , int i ) function HasFace bool HasFace ( int n , FEFace * pf ) Protected Functions Documentation function Sort void Sort ( int node ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_node vector < int > m_node ; variable m_val vector < int > m_val ; variable m_pface vector < FEFace * > m_pface ; variable m_off vector < int > m_off ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#fenodefacelist","text":"","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#public-functions","text":"Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf)","title":"Public Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions","text":"Name void Sort (int node)","title":"Protected Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off","title":"Protected Attributes"},{"location":"api/Classes/classFENodeFaceList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist","text":"FENodeFaceList ( FEMesh * pm )","title":"function FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist_1","text":"~ FENodeFaceList ( void )","title":"function ~FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeFaceList.html#function-buildsorted","text":"void BuildSorted ()","title":"function BuildSorted"},{"location":"api/Classes/classFENodeFaceList.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFENodeFaceList.html#function-node","text":"inline FENode & Node ( int i )","title":"function Node"},{"location":"api/Classes/classFENodeFaceList.html#function-valence","text":"inline int Valence ( int i )","title":"function Valence"},{"location":"api/Classes/classFENodeFaceList.html#function-face","text":"inline FEFace * Face ( int n , int i )","title":"function Face"},{"location":"api/Classes/classFENodeFaceList.html#function-hasface","text":"bool HasFace ( int n , FEFace * pf )","title":"function HasFace"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-sort","text":"void Sort ( int node )","title":"function Sort"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pface","text":"vector < FEFace * > m_pface ;","title":"variable m_pface"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_off","text":"vector < int > m_off ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html","text":"FENodeNodeList Public Functions Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node Public Functions Documentation function FENodeNodeList FENodeNodeList ( FEMesh * pm ) function ~FENodeNodeList ~ FENodeNodeList () function Build void Build () function Valence inline int Valence ( int n ) function Node inline int Node ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_node vector < int > m_node ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#fenodenodelist","text":"","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#public-functions","text":"Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node","title":"Protected Attributes"},{"location":"api/Classes/classFENodeNodeList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist","text":"FENodeNodeList ( FEMesh * pm )","title":"function FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist_1","text":"~ FENodeNodeList ()","title":"function ~FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeNodeList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeNodeList.html#function-node","text":"inline int Node ( int n , int j )","title":"function Node"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_node","text":"vector < int > m_node ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_node"},{"location":"api/Classes/classFETri3.html","text":"FETri3 Inherits from FEElement_ , FEItem Public Functions Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FETri3 FETri3 () Constructor. function FETri3 FETri3 ( FETri3 & el ) copy constructor function operator= FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-25 at 15:40:28 +0000","title":"FETri3"},{"location":"api/Classes/classFETri3.html#fetri3","text":"Inherits from FEElement_ , FEItem","title":"FETri3"},{"location":"api/Classes/classFETri3.html#public-functions","text":"Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator","title":"Public Functions"},{"location":"api/Classes/classFETri3.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFETri3.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFETri3.html#function-fetri3","text":"FETri3 () Constructor.","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-fetri3_1","text":"FETri3 ( FETri3 & el ) copy constructor","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-operator","text":"FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-25 at 15:40:28 +0000","title":"function operator="},{"location":"api/Classes/classFEVTKExport.html","text":"FEVTKExport Public Functions Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh) Public Functions Documentation function FEVTKExport FEVTKExport () function ~FEVTKExport ~ FEVTKExport () = default function Export bool Export ( FEMesh & mesh , const char * szfile ) function ExportToString std :: string ExportToString ( FEMesh & mesh ) function ExportToStream bool ExportToStream ( FEMesh & mesh , std :: ostream & out ) function SetOptions inline void SetOptions ( VTKEXPORT o ) function ExportToVTK vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#fevtkexport","text":"","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#public-functions","text":"Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh)","title":"Public Functions"},{"location":"api/Classes/classFEVTKExport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport","text":"FEVTKExport ()","title":"function FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport_1","text":"~ FEVTKExport () = default","title":"function ~FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-export","text":"bool Export ( FEMesh & mesh , const char * szfile )","title":"function Export"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostring","text":"std :: string ExportToString ( FEMesh & mesh )","title":"function ExportToString"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostream","text":"bool ExportToStream ( FEMesh & mesh , std :: ostream & out )","title":"function ExportToStream"},{"location":"api/Classes/classFEVTKExport.html#function-setoptions","text":"inline void SetOptions ( VTKEXPORT o )","title":"function SetOptions"},{"location":"api/Classes/classFEVTKExport.html#function-exporttovtk","text":"vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function ExportToVTK"},{"location":"api/Classes/classFEVTKimport.html","text":"FEVTKimport Public Functions Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata) Protected Functions Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close () Public Functions Documentation function FEVTKimport FEVTKimport () function ~FEVTKimport ~ FEVTKimport ( void ) function Load FEMesh * Load ( const char * szfile ) function Load FEMesh * Load ( istream & stream ) function Load FEMesh * Load ( vtkPolyData * polydata ) Protected Functions Documentation function BuildMesh bool BuildMesh () function errf FEMesh * errf ( const char * sz , ... ) function Close void Close () Updated on 2023-10-25 at 15:40:28 +0000","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#fevtkimport","text":"","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#public-functions","text":"Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata)","title":"Public Functions"},{"location":"api/Classes/classFEVTKimport.html#protected-functions","text":"Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close ()","title":"Protected Functions"},{"location":"api/Classes/classFEVTKimport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport","text":"FEVTKimport ()","title":"function FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport_1","text":"~ FEVTKimport ( void )","title":"function ~FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-load","text":"FEMesh * Load ( const char * szfile )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_1","text":"FEMesh * Load ( istream & stream )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_2","text":"FEMesh * Load ( vtkPolyData * polydata )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-buildmesh","text":"bool BuildMesh ()","title":"function BuildMesh"},{"location":"api/Classes/classFEVTKimport.html#function-errf","text":"FEMesh * errf ( const char * sz , ... )","title":"function errf"},{"location":"api/Classes/classFEVTKimport.html#function-close","text":"void Close () Updated on 2023-10-25 at 15:40:28 +0000","title":"function Close"},{"location":"api/Classes/classGLCOLOR.html","text":"GLCOLOR Public Functions Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c) Public Attributes Name uchar a uchar b uchar g uchar r Public Functions Documentation function GLCOLOR inline GLCOLOR () function GLCOLOR inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) function operator* inline GLCOLOR operator * ( double f ) function operator+ inline GLCOLOR operator + ( GLCOLOR & c ) Public Attributes Documentation variable a uchar a ; variable b uchar b ; variable g uchar g ; variable r uchar r ; Updated on 2023-10-25 at 15:40:28 +0000","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#glcolor","text":"","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#public-functions","text":"Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c)","title":"Public Functions"},{"location":"api/Classes/classGLCOLOR.html#public-attributes","text":"Name uchar a uchar b uchar g uchar r","title":"Public Attributes"},{"location":"api/Classes/classGLCOLOR.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor","text":"inline GLCOLOR ()","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor_1","text":"inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 )","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-operator","text":"inline GLCOLOR operator * ( double f )","title":"function operator*"},{"location":"api/Classes/classGLCOLOR.html#function-operator_1","text":"inline GLCOLOR operator + ( GLCOLOR & c )","title":"function operator+"},{"location":"api/Classes/classGLCOLOR.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classGLCOLOR.html#variable-a","text":"uchar a ;","title":"variable a"},{"location":"api/Classes/classGLCOLOR.html#variable-b","text":"uchar b ;","title":"variable b"},{"location":"api/Classes/classGLCOLOR.html#variable-g","text":"uchar g ;","title":"variable g"},{"location":"api/Classes/classGLCOLOR.html#variable-r","text":"uchar r ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable r"},{"location":"api/Classes/classLegacyMeshGenerator.html","text":"LegacyMeshGenerator Public Functions Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape) Public Functions Documentation function LegacyMeshGenerator LegacyMeshGenerator () function ~LegacyMeshGenerator ~ LegacyMeshGenerator () function setNeighborhoodSize void setNeighborhoodSize ( int size ) function setSampleSpacing void setSampleSpacing ( double spacing ) function setUsePowerCrust void setUsePowerCrust ( bool enabled ) function setSmoothingAmount void setSmoothingAmount ( float amount ) function buildMesh vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#legacymeshgenerator","text":"","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions","text":"Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator","text":"LegacyMeshGenerator ()","title":"function LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator_1","text":"~ LegacyMeshGenerator ()","title":"function ~LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setneighborhoodsize","text":"void setNeighborhoodSize ( int size )","title":"function setNeighborhoodSize"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsamplespacing","text":"void setSampleSpacing ( double spacing )","title":"function setSampleSpacing"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setusepowercrust","text":"void setUsePowerCrust ( bool enabled )","title":"function setUsePowerCrust"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsmoothingamount","text":"void setSmoothingAmount ( float amount )","title":"function setSmoothingAmount"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-buildmesh","text":"vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function buildMesh"},{"location":"api/Classes/classMeshSettings.html","text":"MeshSettings Settings for creating a mesh. More... #include Public Functions Name MeshSettings () Constructor. ~MeshSettings () Destructor. Detailed Description class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh. Public Functions Documentation function MeshSettings MeshSettings () Constructor. function ~MeshSettings ~ MeshSettings () Destructor. Updated on 2023-10-25 at 15:40:28 +0000","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#meshsettings","text":"Settings for creating a mesh. More... #include ","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#public-functions","text":"Name MeshSettings () Constructor. ~MeshSettings () Destructor.","title":"Public Functions"},{"location":"api/Classes/classMeshSettings.html#detailed-description","text":"class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh.","title":"Detailed Description"},{"location":"api/Classes/classMeshSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings","text":"MeshSettings () Constructor.","title":"function MeshSettings"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings_1","text":"~ MeshSettings () Destructor. Updated on 2023-10-25 at 15:40:28 +0000","title":"function ~MeshSettings"},{"location":"api/Classes/classObjectReader.html","text":"ObjectReader More... Public Types Name typedef ObjectReader Self typedef T ObjectType Public Functions Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader () Detailed Description template < class T > class ObjectReader ; Public Types Documentation typedef Self typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectReader < T >:: ObjectType ; Public Functions Documentation function GetOutput inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType. function GetOutput inline std :: vector < ObjectType > & GetOutput () function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Read inline void Read () Read the file. function Update inline void Update () function ObjectReader inline ObjectReader () function ~ObjectReader inline virtual ~ ObjectReader () Updated on 2023-10-25 at 15:40:28 +0000","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#objectreader","text":"More...","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#public-types","text":"Name typedef ObjectReader Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectReader.html#public-functions","text":"Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader ()","title":"Public Functions"},{"location":"api/Classes/classObjectReader.html#detailed-description","text":"template < class T > class ObjectReader ;","title":"Detailed Description"},{"location":"api/Classes/classObjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectReader.html#typedef-self","text":"typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectReader.html#typedef-objecttype","text":"typedef T ObjectReader < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectReader.html#function-getoutput","text":"inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType.","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-getoutput_1","text":"inline std :: vector < ObjectType > & GetOutput ()","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectReader.html#function-read","text":"inline void Read () Read the file.","title":"function Read"},{"location":"api/Classes/classObjectReader.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectReader.html#function-objectreader","text":"inline ObjectReader ()","title":"function ObjectReader"},{"location":"api/Classes/classObjectReader.html#function-objectreader_1","text":"inline virtual ~ ObjectReader () Updated on 2023-10-25 at 15:40:28 +0000","title":"function ~ObjectReader"},{"location":"api/Classes/classObjectWriter.html","text":"ObjectWriter More... Public Types Name typedef ObjectWriter Self typedef T ObjectType Public Functions Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter () Detailed Description template < class T > class ObjectWriter ; Public Types Documentation typedef Self typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectWriter < T >:: ObjectType ; Public Functions Documentation function SetInput inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType. function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Write inline void Write () Write the file. function Update inline void Update () function ObjectWriter inline ObjectWriter () function ~ObjectWriter inline virtual ~ ObjectWriter () Updated on 2023-10-25 at 15:40:28 +0000","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#objectwriter","text":"More...","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#public-types","text":"Name typedef ObjectWriter Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectWriter.html#public-functions","text":"Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter ()","title":"Public Functions"},{"location":"api/Classes/classObjectWriter.html#detailed-description","text":"template < class T > class ObjectWriter ;","title":"Detailed Description"},{"location":"api/Classes/classObjectWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectWriter.html#typedef-self","text":"typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectWriter.html#typedef-objecttype","text":"typedef T ObjectWriter < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectWriter.html#function-setinput","text":"inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType.","title":"function SetInput"},{"location":"api/Classes/classObjectWriter.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectWriter.html#function-write","text":"inline void Write () Write the file.","title":"function Write"},{"location":"api/Classes/classObjectWriter.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter","text":"inline ObjectWriter ()","title":"function ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter_1","text":"inline virtual ~ ObjectWriter () Updated on 2023-10-25 at 15:40:28 +0000","title":"function ~ObjectWriter"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html","text":"title: ParticleEvent:: Parent ParticleEvent:: Parent More... Detailed Description class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-25 at 15:40:27 +0000","title":"classParticleEvent 1 1 01Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#particleevent-parent","text":"More...","title":"ParticleEvent:: Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#detailed-description","text":"class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-25 at 15:40:27 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html","text":"ParticleGradientDescentPositionOptimizer More... #include Detailed Description class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#particlegradientdescentpositionoptimizer","text":"More... #include ","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#detailed-description","text":"class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomain.html","text":"ParticleImageDomain More... #include Detailed Description class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#particleimagedomain","text":"More... #include ","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#detailed-description","text":"class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html","text":"ParticleImageDomainWithCurvature More... #include Detailed Description class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#particleimagedomainwithcurvature","text":"More... #include ","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#detailed-description","text":"class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradN.html","text":"ParticleImageDomainWithGradN More... #include Detailed Description class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#particleimagedomainwithgradn","text":"More... #include ","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#detailed-description","text":"class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradients.html","text":"ParticleImageDomainWithGradients More... #include Detailed Description class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#particleimagedomainwithgradients","text":"More... #include ","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#detailed-description","text":"class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html","text":"ParticleImplicitSurfaceDomain More... #include Detailed Description class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#particleimplicitsurfacedomain","text":"More... #include ","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#detailed-description","text":"class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html","text":"ParticleMeanCurvatureAttribute Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html#particlemeancurvatureattribute","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleProcrustesRegistration.html","text":"ParticleProcrustesRegistration Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleProcrustesRegistration.html#particleprocrustesregistration","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html","text":"ParticleShapeLinearRegressionMatrixAttribute Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html#particleshapelinearregressionmatrixattribute","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html","text":"ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Detailed Description class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#particleshapematrixattribute","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include ","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#detailed-description","text":"class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html","text":"ParticleShapeMixedEffectsMatrixAttribute Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html#particleshapemixedeffectsmatrixattribute","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classPreferences.html","text":"Preferences Application preferences. More... #include Inherits from QObject Public Types Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4 Public Signals Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal () Public Functions Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events) Detailed Description class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class. Public Types Documentation enum OrientationMarkerType Enumerator Value Description medical 0 triad 1 none 2 enum OrientationMarkerCorner Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3 enum @4 Enumerator Value Description MAX_RECENT_FILES 64 Public Signals Documentation signal color_scheme_changed void color_scheme_changed ( int newIndex ) signal glyph_properties_changed void glyph_properties_changed () signal threading_changed_signal void threading_changed_signal () signal sliders_changed_signal void sliders_changed_signal () Public Functions Documentation function Preferences Preferences () function restore_defaults void restore_defaults () function add_recent_file void add_recent_file ( QString file , QString path ) function get_recent_files QStringList get_recent_files () function get_recent_paths QStringList get_recent_paths () function not_saved bool not_saved () function set_saved void set_saved ( bool saved = true ) function get_window_geometry QByteArray get_window_geometry () function set_window_geometry void set_window_geometry ( QByteArray geometry ) function get_window_state QByteArray get_window_state () function set_window_state void set_window_state ( QByteArray state ) function get_last_directory QString get_last_directory () function set_last_directory void set_last_directory ( QString value ) function get_cache_enabled bool get_cache_enabled () function set_cache_enabled void set_cache_enabled ( bool value ) function get_parallel_enabled bool get_parallel_enabled () function set_parallel_enabled void set_parallel_enabled ( bool value ) function get_memory_cache_percent int get_memory_cache_percent () function set_memory_cache_percent void set_memory_cache_percent ( int value ) function get_num_threads int get_num_threads () function set_num_threads void set_num_threads ( int num_threads ) function get_glyph_size float get_glyph_size () function set_glyph_size void set_glyph_size ( float value ) function get_glyph_quality float get_glyph_quality () function set_glyph_quality void set_glyph_quality ( float value ) function get_glyph_auto_size bool get_glyph_auto_size () function set_glyph_auto_size void set_glyph_auto_size ( bool value ) function get_glyph_scale_arrows bool get_glyph_scale_arrows () function set_glyph_scale_arrows void set_glyph_scale_arrows ( bool value ) function get_pca_range float get_pca_range () function set_pca_range void set_pca_range ( float value ) function get_pca_steps int get_pca_steps () function set_pca_steps void set_pca_steps ( int value ) function set_color_scheme void set_color_scheme ( int value ) function get_color_scheme int get_color_scheme () function set_particle_colors void set_particle_colors ( int value ) function get_particle_colors int get_particle_colors () function set_color_map void set_color_map ( int value ) function get_color_map int get_color_map () function set_discrete_color_mode void set_discrete_color_mode ( bool value ) function get_discrete_color_mode bool get_discrete_color_mode () function set_reverse_color_map void set_reverse_color_map ( bool value ) function get_reverse_color_map bool get_reverse_color_map () function get_center_checked bool get_center_checked () function set_center_checked void set_center_checked ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_orientation_marker_type OrientationMarkerType get_orientation_marker_type () function set_orientation_marker_type void set_orientation_marker_type ( OrientationMarkerType type ) function get_orientation_marker_corner OrientationMarkerCorner get_orientation_marker_corner () function set_orientation_marker_corner void set_orientation_marker_corner ( OrientationMarkerCorner corner ) function get_groom_file_template QString get_groom_file_template () function set_groom_file_template void set_groom_file_template ( QString groom_file_template ) function get_optimize_file_template QString get_optimize_file_template () function set_optimize_file_template void set_optimize_file_template ( QString optimize_file_template ) function get_export_override_size QSize get_export_override_size () function set_export_override_size void set_export_override_size ( QSize size ) function get_export_override_size_enabled bool get_export_override_size_enabled () function set_export_override_size_enabled void set_export_override_size_enabled ( bool enabled ) function get_export_show_orientation_marker bool get_export_show_orientation_marker () function set_export_show_orientation_marker void set_export_show_orientation_marker ( bool value ) function get_export_show_color_scale bool get_export_show_color_scale () function set_export_show_color_scale void set_export_show_color_scale ( bool value ) function get_export_num_pca_images int get_export_num_pca_images () function set_export_num_pca_images void set_export_num_pca_images ( int number ) function get_export_pca_range double get_export_pca_range () function set_export_pca_range void set_export_pca_range ( double range ) function set_export_pca_modes void set_export_pca_modes ( QString string ) function get_export_pca_modes QString get_export_pca_modes () function get_auto_update_check bool get_auto_update_check () function set_auto_update_check void set_auto_update_check ( bool enabled ) function get_update_snooze_until QDateTime get_update_snooze_until () function set_update_snooze_until void set_update_snooze_until ( QDateTime date ) function get_device_id QString get_device_id () function get_telemetry_enabled bool get_telemetry_enabled () function set_telemetry_enabled void set_telemetry_enabled ( bool enabled ) function get_telemetry_asked bool get_telemetry_asked () function set_telemetry_asked void set_telemetry_asked ( bool asked ) function get_pending_telemetry_events QStringList get_pending_telemetry_events () function set_pending_telemetry_events void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-25 at 15:40:28 +0000","title":"Preferences"},{"location":"api/Classes/classPreferences.html#preferences","text":"Application preferences. More... #include Inherits from QObject","title":"Preferences"},{"location":"api/Classes/classPreferences.html#public-types","text":"Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4","title":"Public Types"},{"location":"api/Classes/classPreferences.html#public-signals","text":"Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal ()","title":"Public Signals"},{"location":"api/Classes/classPreferences.html#public-functions","text":"Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events)","title":"Public Functions"},{"location":"api/Classes/classPreferences.html#detailed-description","text":"class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class.","title":"Detailed Description"},{"location":"api/Classes/classPreferences.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkertype","text":"Enumerator Value Description medical 0 triad 1 none 2","title":"enum OrientationMarkerType"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkercorner","text":"Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3","title":"enum OrientationMarkerCorner"},{"location":"api/Classes/classPreferences.html#enum-4","text":"Enumerator Value Description MAX_RECENT_FILES 64","title":"enum @4"},{"location":"api/Classes/classPreferences.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classPreferences.html#signal-color_scheme_changed","text":"void color_scheme_changed ( int newIndex )","title":"signal color_scheme_changed"},{"location":"api/Classes/classPreferences.html#signal-glyph_properties_changed","text":"void glyph_properties_changed ()","title":"signal glyph_properties_changed"},{"location":"api/Classes/classPreferences.html#signal-threading_changed_signal","text":"void threading_changed_signal ()","title":"signal threading_changed_signal"},{"location":"api/Classes/classPreferences.html#signal-sliders_changed_signal","text":"void sliders_changed_signal ()","title":"signal sliders_changed_signal"},{"location":"api/Classes/classPreferences.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classPreferences.html#function-preferences","text":"Preferences ()","title":"function Preferences"},{"location":"api/Classes/classPreferences.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classPreferences.html#function-add_recent_file","text":"void add_recent_file ( QString file , QString path )","title":"function add_recent_file"},{"location":"api/Classes/classPreferences.html#function-get_recent_files","text":"QStringList get_recent_files ()","title":"function get_recent_files"},{"location":"api/Classes/classPreferences.html#function-get_recent_paths","text":"QStringList get_recent_paths ()","title":"function get_recent_paths"},{"location":"api/Classes/classPreferences.html#function-not_saved","text":"bool not_saved ()","title":"function not_saved"},{"location":"api/Classes/classPreferences.html#function-set_saved","text":"void set_saved ( bool saved = true )","title":"function set_saved"},{"location":"api/Classes/classPreferences.html#function-get_window_geometry","text":"QByteArray get_window_geometry ()","title":"function get_window_geometry"},{"location":"api/Classes/classPreferences.html#function-set_window_geometry","text":"void set_window_geometry ( QByteArray geometry )","title":"function set_window_geometry"},{"location":"api/Classes/classPreferences.html#function-get_window_state","text":"QByteArray get_window_state ()","title":"function get_window_state"},{"location":"api/Classes/classPreferences.html#function-set_window_state","text":"void set_window_state ( QByteArray state )","title":"function set_window_state"},{"location":"api/Classes/classPreferences.html#function-get_last_directory","text":"QString get_last_directory ()","title":"function get_last_directory"},{"location":"api/Classes/classPreferences.html#function-set_last_directory","text":"void set_last_directory ( QString value )","title":"function set_last_directory"},{"location":"api/Classes/classPreferences.html#function-get_cache_enabled","text":"bool get_cache_enabled ()","title":"function get_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool value )","title":"function set_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-get_parallel_enabled","text":"bool get_parallel_enabled ()","title":"function get_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-set_parallel_enabled","text":"void set_parallel_enabled ( bool value )","title":"function set_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-get_memory_cache_percent","text":"int get_memory_cache_percent ()","title":"function get_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-set_memory_cache_percent","text":"void set_memory_cache_percent ( int value )","title":"function set_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-get_num_threads","text":"int get_num_threads ()","title":"function get_num_threads"},{"location":"api/Classes/classPreferences.html#function-set_num_threads","text":"void set_num_threads ( int num_threads )","title":"function set_num_threads"},{"location":"api/Classes/classPreferences.html#function-get_glyph_size","text":"float get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_size","text":"void set_glyph_size ( float value )","title":"function set_glyph_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_quality","text":"float get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-set_glyph_quality","text":"void set_glyph_quality ( float value )","title":"function set_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-get_glyph_auto_size","text":"bool get_glyph_auto_size ()","title":"function get_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_auto_size","text":"void set_glyph_auto_size ( bool value )","title":"function set_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_scale_arrows","text":"bool get_glyph_scale_arrows ()","title":"function get_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-set_glyph_scale_arrows","text":"void set_glyph_scale_arrows ( bool value )","title":"function set_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-get_pca_range","text":"float get_pca_range ()","title":"function get_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_pca_range","text":"void set_pca_range ( float value )","title":"function set_pca_range"},{"location":"api/Classes/classPreferences.html#function-get_pca_steps","text":"int get_pca_steps ()","title":"function get_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_pca_steps","text":"void set_pca_steps ( int value )","title":"function set_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_color_scheme","text":"void set_color_scheme ( int value )","title":"function set_color_scheme"},{"location":"api/Classes/classPreferences.html#function-get_color_scheme","text":"int get_color_scheme ()","title":"function get_color_scheme"},{"location":"api/Classes/classPreferences.html#function-set_particle_colors","text":"void set_particle_colors ( int value )","title":"function set_particle_colors"},{"location":"api/Classes/classPreferences.html#function-get_particle_colors","text":"int get_particle_colors ()","title":"function get_particle_colors"},{"location":"api/Classes/classPreferences.html#function-set_color_map","text":"void set_color_map ( int value )","title":"function set_color_map"},{"location":"api/Classes/classPreferences.html#function-get_color_map","text":"int get_color_map ()","title":"function get_color_map"},{"location":"api/Classes/classPreferences.html#function-set_discrete_color_mode","text":"void set_discrete_color_mode ( bool value )","title":"function set_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-get_discrete_color_mode","text":"bool get_discrete_color_mode ()","title":"function get_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-set_reverse_color_map","text":"void set_reverse_color_map ( bool value )","title":"function set_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_reverse_color_map","text":"bool get_reverse_color_map ()","title":"function get_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_center_checked","text":"bool get_center_checked ()","title":"function get_center_checked"},{"location":"api/Classes/classPreferences.html#function-set_center_checked","text":"void set_center_checked ( bool value )","title":"function set_center_checked"},{"location":"api/Classes/classPreferences.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_type","text":"OrientationMarkerType get_orientation_marker_type ()","title":"function get_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_type","text":"void set_orientation_marker_type ( OrientationMarkerType type )","title":"function set_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_corner","text":"OrientationMarkerCorner get_orientation_marker_corner ()","title":"function get_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_corner","text":"void set_orientation_marker_corner ( OrientationMarkerCorner corner )","title":"function set_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-get_groom_file_template","text":"QString get_groom_file_template ()","title":"function get_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-set_groom_file_template","text":"void set_groom_file_template ( QString groom_file_template )","title":"function set_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-get_optimize_file_template","text":"QString get_optimize_file_template ()","title":"function get_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-set_optimize_file_template","text":"void set_optimize_file_template ( QString optimize_file_template )","title":"function set_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size","text":"QSize get_export_override_size ()","title":"function get_export_override_size"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size","text":"void set_export_override_size ( QSize size )","title":"function set_export_override_size"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size_enabled","text":"bool get_export_override_size_enabled ()","title":"function get_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size_enabled","text":"void set_export_override_size_enabled ( bool enabled )","title":"function set_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-get_export_show_orientation_marker","text":"bool get_export_show_orientation_marker ()","title":"function get_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-set_export_show_orientation_marker","text":"void set_export_show_orientation_marker ( bool value )","title":"function set_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-get_export_show_color_scale","text":"bool get_export_show_color_scale ()","title":"function get_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-set_export_show_color_scale","text":"void set_export_show_color_scale ( bool value )","title":"function set_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-get_export_num_pca_images","text":"int get_export_num_pca_images ()","title":"function get_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-set_export_num_pca_images","text":"void set_export_num_pca_images ( int number )","title":"function set_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_range","text":"double get_export_pca_range ()","title":"function get_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_range","text":"void set_export_pca_range ( double range )","title":"function set_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_modes","text":"void set_export_pca_modes ( QString string )","title":"function set_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_modes","text":"QString get_export_pca_modes ()","title":"function get_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_auto_update_check","text":"bool get_auto_update_check ()","title":"function get_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-set_auto_update_check","text":"void set_auto_update_check ( bool enabled )","title":"function set_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-get_update_snooze_until","text":"QDateTime get_update_snooze_until ()","title":"function get_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-set_update_snooze_until","text":"void set_update_snooze_until ( QDateTime date )","title":"function set_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-get_device_id","text":"QString get_device_id ()","title":"function get_device_id"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_enabled","text":"bool get_telemetry_enabled ()","title":"function get_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_enabled","text":"void set_telemetry_enabled ( bool enabled )","title":"function set_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_asked","text":"bool get_telemetry_asked ()","title":"function get_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_asked","text":"void set_telemetry_asked ( bool asked )","title":"function set_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-get_pending_telemetry_events","text":"QStringList get_pending_telemetry_events ()","title":"function get_pending_telemetry_events"},{"location":"api/Classes/classPreferences.html#function-set_pending_telemetry_events","text":"void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function set_pending_telemetry_events"},{"location":"api/Classes/classProcrustes3D.html","text":"Procrustes3D Public Types Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType Public Functions Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes) Public Types Documentation typedef RealType typedef double Procrustes3D :: RealType ; typedef PointType typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ; typedef ShapeType typedef std :: vector < PointType > Procrustes3D :: ShapeType ; typedef ShapeIteratorType typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ; typedef ShapeListType typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ; typedef ShapeListIteratorType typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ; typedef SimilarityTransformListType typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ; typedef SimilarityTransformListIteratorType typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ; typedef TransformMatrixType typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ; typedef TransformMatrixListType typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ; typedef TransformMatrixIteratorType typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ; Public Functions Documentation function Procrustes3D inline Procrustes3D () function Procrustes3D inline Procrustes3D ( bool do_scaling , bool do_rotation_translation ) function GetScaling inline bool GetScaling () const function ScalingOn inline void ScalingOn () function ScalingOff inline void ScalingOff () function GetRotationTranslation inline bool GetRotationTranslation () const function RotationTranslationOn inline void RotationTranslationOn () function RotationTranslationOff inline void RotationTranslationOff () function AlignShapes void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function RemoveTranslation void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function ConstructTransformMatrices void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ) function ConstructTransformMatrix void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ) function ComputeMeanShape void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ) function ComputeCenterOfMass void ComputeCenterOfMass ( ShapeType & shape , PointType & center ) function CenterShape void CenterShape ( ShapeType & shape ) function ComputeCommonCenter void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ) function AlignSourceToTarget void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ) function ComputeMedianShape int ComputeMedianShape ( ShapeListType & shapeList ) function TransformShape static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ) function TransformShapes static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ) function ComputeSumOfSquares static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-25 at 15:40:28 +0000","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#procrustes3d","text":"","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#public-types","text":"Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType","title":"Public Types"},{"location":"api/Classes/classProcrustes3D.html#public-functions","text":"Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes)","title":"Public Functions"},{"location":"api/Classes/classProcrustes3D.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classProcrustes3D.html#typedef-realtype","text":"typedef double Procrustes3D :: RealType ;","title":"typedef RealType"},{"location":"api/Classes/classProcrustes3D.html#typedef-pointtype","text":"typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapetype","text":"typedef std :: vector < PointType > Procrustes3D :: ShapeType ;","title":"typedef ShapeType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapeiteratortype","text":"typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ;","title":"typedef ShapeIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelisttype","text":"typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ;","title":"typedef ShapeListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelistiteratortype","text":"typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ;","title":"typedef ShapeListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlisttype","text":"typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ;","title":"typedef SimilarityTransformListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlistiteratortype","text":"typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ;","title":"typedef SimilarityTransformListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixtype","text":"typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ;","title":"typedef TransformMatrixType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixlisttype","text":"typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ;","title":"typedef TransformMatrixListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixiteratortype","text":"typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ;","title":"typedef TransformMatrixIteratorType"},{"location":"api/Classes/classProcrustes3D.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d","text":"inline Procrustes3D ()","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d_1","text":"inline Procrustes3D ( bool do_scaling , bool do_rotation_translation )","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classProcrustes3D.html#function-scalingon","text":"inline void ScalingOn ()","title":"function ScalingOn"},{"location":"api/Classes/classProcrustes3D.html#function-scalingoff","text":"inline void ScalingOff ()","title":"function ScalingOff"},{"location":"api/Classes/classProcrustes3D.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationon","text":"inline void RotationTranslationOn ()","title":"function RotationTranslationOn"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationoff","text":"inline void RotationTranslationOff ()","title":"function RotationTranslationOff"},{"location":"api/Classes/classProcrustes3D.html#function-alignshapes","text":"void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function AlignShapes"},{"location":"api/Classes/classProcrustes3D.html#function-removetranslation","text":"void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function RemoveTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrices","text":"void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices )","title":"function ConstructTransformMatrices"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrix","text":"void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix )","title":"function ConstructTransformMatrix"},{"location":"api/Classes/classProcrustes3D.html#function-computemeanshape","text":"void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList )","title":"function ComputeMeanShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecenterofmass","text":"void ComputeCenterOfMass ( ShapeType & shape , PointType & center )","title":"function ComputeCenterOfMass"},{"location":"api/Classes/classProcrustes3D.html#function-centershape","text":"void CenterShape ( ShapeType & shape )","title":"function CenterShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecommoncenter","text":"void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center )","title":"function ComputeCommonCenter"},{"location":"api/Classes/classProcrustes3D.html#function-alignsourcetotarget","text":"void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source )","title":"function AlignSourceToTarget"},{"location":"api/Classes/classProcrustes3D.html#function-computemedianshape","text":"int ComputeMedianShape ( ShapeListType & shapeList )","title":"function ComputeMedianShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshape","text":"static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform )","title":"function TransformShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshapes","text":"static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms )","title":"function TransformShapes"},{"location":"api/Classes/classProcrustes3D.html#function-computesumofsquares","text":"static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function ComputeSumOfSquares"},{"location":"api/Classes/classReconstruction.html","text":"Reconstruction More... Public Types Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType Public Functions Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad () Detailed Description template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ; Public Types Documentation typedef GradientFilterType typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ; typedef GradientMagnitudeFilterType typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ; typedef GradientImageType typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ; typedef GradientImageIteratorType typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ; typedef ImageIteratorType typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ; typedef WriterType typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ; typedef ITK2VTKConnectorType typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ; typedef AddImageFilterType typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ; typedef ResampleFilterType typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ; typedef InterpolatorType typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ; typedef MultiplyByConstantImageFilterType typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ; typedef DuplicatorType typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ; typedef TransformType typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ; typedef PointType typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ; typedef PointArrayType typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ; typedef PointSetType typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ; typedef PointIdType typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ; Public Functions Documentation function Reconstruction Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ) function ~Reconstruction ~ Reconstruction () function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ) function reset void reset () function setDecimation void setDecimation ( float dec ) function setNumClusters void setNumClusters ( int num ) function setMaxAngle void setMaxAngle ( double angleDegrees ) function setFixWinding void setFixWinding ( bool fixWinding ) function setLaplacianSmoothingBeforeDecimation void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ) function setLaplacianSmoothingAfterDecimation void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ) function setSmoothingLambda void setSmoothingLambda ( float smoothingLambda ) function setSmoothingIterations void setSmoothingIterations ( int smoothingIterations ) function setOutputEnabled void setOutputEnabled ( bool enabled ) function setMeanBeforeWarpEnabled void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins function getMesh vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function sparseDone bool sparseDone () function denseDone bool denseDone () function writeMeanInfo void writeMeanInfo ( std :: string nameBase ) function SparseMean inline vtkSmartPointer < vtkPoints > SparseMean () function DenseMean inline vtkSmartPointer < vtkPolyData > DenseMean () function GoodPoints inline std :: vector < bool > GoodPoints () function OutPrefix inline std :: string OutPrefix () function setOutPrefix inline void setOutPrefix ( std :: string out_prefix ) function computeSparseMean std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ) function setOrigin inline void setOrigin ( typename ImageType :: PointType origin ) function EnablePairwiseNormalsDifferencesForGoodBad inline void EnablePairwiseNormalsDifferencesForGoodBad () function DisablePairwiseNormalsDifferencesForGoodBad inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-25 at 15:40:28 +0000","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#reconstruction","text":"More...","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#public-types","text":"Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classReconstruction.html#public-functions","text":"Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad ()","title":"Public Functions"},{"location":"api/Classes/classReconstruction.html#detailed-description","text":"template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ;","title":"Detailed Description"},{"location":"api/Classes/classReconstruction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classReconstruction.html#typedef-gradientfiltertype","text":"typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ;","title":"typedef GradientFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientmagnitudefiltertype","text":"typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ;","title":"typedef GradientMagnitudeFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimagetype","text":"typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ;","title":"typedef GradientImageType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimageiteratortype","text":"typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ;","title":"typedef GradientImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-imageiteratortype","text":"typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ;","title":"typedef ImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-writertype","text":"typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ;","title":"typedef WriterType"},{"location":"api/Classes/classReconstruction.html#typedef-itk2vtkconnectortype","text":"typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ;","title":"typedef ITK2VTKConnectorType"},{"location":"api/Classes/classReconstruction.html#typedef-addimagefiltertype","text":"typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ;","title":"typedef AddImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-resamplefiltertype","text":"typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ;","title":"typedef ResampleFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-interpolatortype","text":"typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ;","title":"typedef InterpolatorType"},{"location":"api/Classes/classReconstruction.html#typedef-multiplybyconstantimagefiltertype","text":"typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ;","title":"typedef MultiplyByConstantImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-duplicatortype","text":"typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ;","title":"typedef DuplicatorType"},{"location":"api/Classes/classReconstruction.html#typedef-transformtype","text":"typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ;","title":"typedef TransformType"},{"location":"api/Classes/classReconstruction.html#typedef-pointtype","text":"typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classReconstruction.html#typedef-pointarraytype","text":"typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ;","title":"typedef PointArrayType"},{"location":"api/Classes/classReconstruction.html#typedef-pointsettype","text":"typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classReconstruction.html#typedef-pointidtype","text":"typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ;","title":"typedef PointIdType"},{"location":"api/Classes/classReconstruction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classReconstruction.html#function-reconstruction","text":"Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false )","title":"function Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-reconstruction_1","text":"~ Reconstruction ()","title":"function ~Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () )","title":"function getDenseMean"},{"location":"api/Classes/classReconstruction.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classReconstruction.html#function-setdecimation","text":"void setDecimation ( float dec )","title":"function setDecimation"},{"location":"api/Classes/classReconstruction.html#function-setnumclusters","text":"void setNumClusters ( int num )","title":"function setNumClusters"},{"location":"api/Classes/classReconstruction.html#function-setmaxangle","text":"void setMaxAngle ( double angleDegrees )","title":"function setMaxAngle"},{"location":"api/Classes/classReconstruction.html#function-setfixwinding","text":"void setFixWinding ( bool fixWinding )","title":"function setFixWinding"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingbeforedecimation","text":"void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation )","title":"function setLaplacianSmoothingBeforeDecimation"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingafterdecimation","text":"void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation )","title":"function setLaplacianSmoothingAfterDecimation"},{"location":"api/Classes/classReconstruction.html#function-setsmoothinglambda","text":"void setSmoothingLambda ( float smoothingLambda )","title":"function setSmoothingLambda"},{"location":"api/Classes/classReconstruction.html#function-setsmoothingiterations","text":"void setSmoothingIterations ( int smoothingIterations )","title":"function setSmoothingIterations"},{"location":"api/Classes/classReconstruction.html#function-setoutputenabled","text":"void setOutputEnabled ( bool enabled )","title":"function setOutputEnabled"},{"location":"api/Classes/classReconstruction.html#function-setmeanbeforewarpenabled","text":"void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins","title":"function setMeanBeforeWarpEnabled"},{"location":"api/Classes/classReconstruction.html#function-getmesh","text":"vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts )","title":"function getMesh"},{"location":"api/Classes/classReconstruction.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsedone","text":"bool sparseDone ()","title":"function sparseDone"},{"location":"api/Classes/classReconstruction.html#function-densedone","text":"bool denseDone ()","title":"function denseDone"},{"location":"api/Classes/classReconstruction.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string nameBase )","title":"function writeMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsemean","text":"inline vtkSmartPointer < vtkPoints > SparseMean ()","title":"function SparseMean"},{"location":"api/Classes/classReconstruction.html#function-densemean","text":"inline vtkSmartPointer < vtkPolyData > DenseMean ()","title":"function DenseMean"},{"location":"api/Classes/classReconstruction.html#function-goodpoints","text":"inline std :: vector < bool > GoodPoints ()","title":"function GoodPoints"},{"location":"api/Classes/classReconstruction.html#function-outprefix","text":"inline std :: string OutPrefix ()","title":"function OutPrefix"},{"location":"api/Classes/classReconstruction.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string out_prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classReconstruction.html#function-computesparsemean","text":"std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false )","title":"function computeSparseMean"},{"location":"api/Classes/classReconstruction.html#function-setorigin","text":"inline void setOrigin ( typename ImageType :: PointType origin )","title":"function setOrigin"},{"location":"api/Classes/classReconstruction.html#function-enablepairwisenormalsdifferencesforgoodbad","text":"inline void EnablePairwiseNormalsDifferencesForGoodBad ()","title":"function EnablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classReconstruction.html#function-disablepairwisenormalsdifferencesforgoodbad","text":"inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-25 at 15:40:28 +0000","title":"function DisablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classStudioLogger.html","text":"StudioLogger Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject Public Signals Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str) Public Functions Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str) Public Signals Documentation signal message void message ( std :: string str ) signal error void error ( std :: string str ) signal warning void warning ( std :: string str ) signal debug void debug ( std :: string str ) signal status void status ( std :: string str ) signal progress void progress ( int value , std :: string str ) Public Functions Documentation function StudioLogger inline StudioLogger () function ~StudioLogger inline virtual ~ StudioLogger () function register_callbacks void register_callbacks () function handle_message void handle_message ( std :: string str ) function handle_error void handle_error ( std :: string str ) function handle_warning void handle_warning ( std :: string str ) function handle_debug void handle_debug ( std :: string str ) function handle_status void handle_status ( std :: string str ) function handle_progress void handle_progress ( double value , std :: string str ) Updated on 2023-10-25 at 15:40:28 +0000","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#studiologger","text":"Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#public-signals","text":"Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str)","title":"Public Signals"},{"location":"api/Classes/classStudioLogger.html#public-functions","text":"Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str)","title":"Public Functions"},{"location":"api/Classes/classStudioLogger.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classStudioLogger.html#signal-message","text":"void message ( std :: string str )","title":"signal message"},{"location":"api/Classes/classStudioLogger.html#signal-error","text":"void error ( std :: string str )","title":"signal error"},{"location":"api/Classes/classStudioLogger.html#signal-warning","text":"void warning ( std :: string str )","title":"signal warning"},{"location":"api/Classes/classStudioLogger.html#signal-debug","text":"void debug ( std :: string str )","title":"signal debug"},{"location":"api/Classes/classStudioLogger.html#signal-status","text":"void status ( std :: string str )","title":"signal status"},{"location":"api/Classes/classStudioLogger.html#signal-progress","text":"void progress ( int value , std :: string str )","title":"signal progress"},{"location":"api/Classes/classStudioLogger.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classStudioLogger.html#function-studiologger","text":"inline StudioLogger ()","title":"function StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-studiologger_1","text":"inline virtual ~ StudioLogger ()","title":"function ~StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-register_callbacks","text":"void register_callbacks ()","title":"function register_callbacks"},{"location":"api/Classes/classStudioLogger.html#function-handle_message","text":"void handle_message ( std :: string str )","title":"function handle_message"},{"location":"api/Classes/classStudioLogger.html#function-handle_error","text":"void handle_error ( std :: string str )","title":"function handle_error"},{"location":"api/Classes/classStudioLogger.html#function-handle_warning","text":"void handle_warning ( std :: string str )","title":"function handle_warning"},{"location":"api/Classes/classStudioLogger.html#function-handle_debug","text":"void handle_debug ( std :: string str )","title":"function handle_debug"},{"location":"api/Classes/classStudioLogger.html#function-handle_status","text":"void handle_status ( std :: string str )","title":"function handle_status"},{"location":"api/Classes/classStudioLogger.html#function-handle_progress","text":"void handle_progress ( double value , std :: string str ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function handle_progress"},{"location":"api/Classes/classSurfaceReconstructor.html","text":"SurfaceReconstructor Public Functions Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape) Public Functions Documentation function SurfaceReconstructor SurfaceReconstructor () function ~SurfaceReconstructor ~ SurfaceReconstructor () function initializeReconstruction void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ) function hasDenseMean bool hasDenseMean () function setMean void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ) function writeMeanInfo void writeMeanInfo ( std :: string baseName ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function resetReconstruct void resetReconstruct () function set_number_of_clusters void set_number_of_clusters ( int num_clusters ) function set_normal_angle void set_normal_angle ( double angle ) function set_decimation_percent void set_decimation_percent ( double decimation ) function get_surface_reconstruction_available bool get_surface_reconstruction_available () function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#surfacereconstructor","text":"","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions","text":"Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor","text":"SurfaceReconstructor ()","title":"function SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor_1","text":"~ SurfaceReconstructor ()","title":"function ~SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-initializereconstruction","text":"void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters )","title":"function initializeReconstruction"},{"location":"api/Classes/classSurfaceReconstructor.html#function-hasdensemean","text":"bool hasDenseMean ()","title":"function hasDenseMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-setmean","text":"void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints )","title":"function setMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string baseName )","title":"function writeMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-resetreconstruct","text":"void resetReconstruct ()","title":"function resetReconstruct"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_number_of_clusters","text":"void set_number_of_clusters ( int num_clusters )","title":"function set_number_of_clusters"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_normal_angle","text":"void set_normal_angle ( double angle )","title":"function set_normal_angle"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_decimation_percent","text":"void set_decimation_percent ( double decimation )","title":"function set_decimation_percent"},{"location":"api/Classes/classSurfaceReconstructor.html#function-get_surface_reconstruction_available","text":"bool get_surface_reconstruction_available ()","title":"function get_surface_reconstruction_available"},{"location":"api/Classes/classSurfaceReconstructor.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function build_mesh"},{"location":"api/Classes/classUtils.html","text":"Utils Public Functions Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas) Public Functions Documentation function randperm static std :: vector < int > randperm ( int n ) function readSparseShape static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ) function readSparseShape static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ) function readParticleIds static std :: vector < int > readParticleIds ( char * filename ) function writeParticleIds static void writeParticleIds ( char * filename , std :: vector < int > ids ) function computeCenterOfMassForShapeEnsemble static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ) function computeCenterOfMassForShape static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ) function updateMin static void updateMin ( double curVal , double & minVal ) function updateMax static void updateMax ( double curVal , double & maxVal ) function getBoundingBoxForShapeEnsemble static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function getBoundingBoxForShape static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function spherical2cartesian static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function cartesian2spherical static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function convertToPhysicalCoordinates static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function convertToImageCoordinates static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function num2str static std :: string num2str ( float num ) function num2str static std :: string num2str ( int num ) function linspace static std :: vector < double > linspace ( double a , double b , size_t N ) function int2str static std :: string int2str ( int n , int number_of_zeros ) function multiply_into template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ) function averageThetaBruteForce static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle. APPROXIMATE CHORD SOLUTION This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x ) EXACT SOLUTION This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted. SUMMARY method runtime memory notes brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah function averageThetaChord static double averageThetaChord ( std :: vector < double > thetas ) function averageThetaArc static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-25 at 15:40:28 +0000","title":"Utils"},{"location":"api/Classes/classUtils.html#utils","text":"","title":"Utils"},{"location":"api/Classes/classUtils.html#public-functions","text":"Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas)","title":"Public Functions"},{"location":"api/Classes/classUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classUtils.html#function-randperm","text":"static std :: vector < int > randperm ( int n )","title":"function randperm"},{"location":"api/Classes/classUtils.html#function-readsparseshape","text":"static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape","text":"static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readsparseshape_1","text":"static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape_1","text":"static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readparticleids","text":"static std :: vector < int > readParticleIds ( char * filename )","title":"function readParticleIds"},{"location":"api/Classes/classUtils.html#function-writeparticleids","text":"static void writeParticleIds ( char * filename , std :: vector < int > ids )","title":"function writeParticleIds"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshapeensemble","text":"static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshape","text":"static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShape"},{"location":"api/Classes/classUtils.html#function-updatemin","text":"static void updateMin ( double curVal , double & minVal )","title":"function updateMin"},{"location":"api/Classes/classUtils.html#function-updatemax","text":"static void updateMax ( double curVal , double & maxVal )","title":"function updateMax"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshapeensemble","text":"static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshape","text":"static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShape"},{"location":"api/Classes/classUtils.html#function-spherical2cartesian","text":"static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function spherical2cartesian"},{"location":"api/Classes/classUtils.html#function-cartesian2spherical","text":"static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function cartesian2spherical"},{"location":"api/Classes/classUtils.html#function-converttophysicalcoordinates","text":"static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToPhysicalCoordinates"},{"location":"api/Classes/classUtils.html#function-converttoimagecoordinates","text":"static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classUtils.html#function-num2str","text":"static std :: string num2str ( float num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-num2str_1","text":"static std :: string num2str ( int num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-linspace","text":"static std :: vector < double > linspace ( double a , double b , size_t N )","title":"function linspace"},{"location":"api/Classes/classUtils.html#function-int2str","text":"static std :: string int2str ( int n , int number_of_zeros )","title":"function int2str"},{"location":"api/Classes/classUtils.html#function-multiply_into","text":"template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs )","title":"function multiply_into"},{"location":"api/Classes/classUtils.html#function-averagethetabruteforce","text":"static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle.","title":"function averageThetaBruteForce"},{"location":"api/Classes/classUtils.html#approximate-chord-solution","text":"This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x )","title":"APPROXIMATE CHORD SOLUTION"},{"location":"api/Classes/classUtils.html#exact-solution","text":"This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted.","title":"EXACT SOLUTION"},{"location":"api/Classes/classUtils.html#summary","text":"","title":"SUMMARY"},{"location":"api/Classes/classUtils.html#method-runtime-memory-notes","text":"brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah","title":"method runtime memory notes"},{"location":"api/Classes/classUtils.html#function-averagethetachord","text":"static double averageThetaChord ( std :: vector < double > thetas )","title":"function averageThetaChord"},{"location":"api/Classes/classUtils.html#function-averagethetaarc","text":"static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function averageThetaArc"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html","text":"itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 > Public Types Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() . Public Types Documentation typedef Self typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass. typedef ParametersType typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ; typedef ParametersValueType typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ; typedef DerivativeType typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ; typedef JacobianType typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ; typedef InputPointType typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ; typedef InverseTransformBaseType typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ; typedef InverseTransformBasePointer typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ; typedef TransformType typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass. typedef TransformTypePointer typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ; typedef TransformTypeConstPointer typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ; typedef NonZeroJacobianIndicesType typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType. typedef SpatialJacobianType typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ; typedef MovingImageGradientType typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical. typedef MovingImageGradientValueType typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space. function itkStaticConstMacro itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ) function GetNumberOfNonZeroJacobianIndices virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all. function itkGetConstMacro itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices. function itkGetConstMacro itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ) function GetJacobian virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function EvaluateJacobianWithImageGradientProduct virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned. function GetSpatialJacobian virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function ComputeJacobianWithRespectToParameters inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions. function ComputeJacobianWithRespectToPosition inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const function GetSpatialHessian virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function AdvancedTransform AdvancedTransform () function AdvancedTransform AdvancedTransform ( NumberOfParametersType numberOfParameters ) function ~AdvancedTransform inline virtual ~ AdvancedTransform () Protected Attributes Documentation variable m_HasNonZeroSpatialHessian bool m_HasNonZeroSpatialHessian ; variable m_HasNonZeroJacobianOfSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#itkadvancedtransform","text":"Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 >","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types","text":"Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType","title":"Public Types"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions","text":"Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0","title":"Public Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions","text":"Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform ()","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes","text":"Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() .","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-self","text":"typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parametersvaluetype","text":"typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ;","title":"typedef ParametersValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-derivativetype","text":"typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ;","title":"typedef DerivativeType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasetype","text":"typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ;","title":"typedef InverseTransformBaseType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasepointer","text":"typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ;","title":"typedef InverseTransformBasePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtype","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass.","title":"typedef TransformType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypepointer","text":"typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ;","title":"typedef TransformTypePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypeconstpointer","text":"typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ;","title":"typedef TransformTypeConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-nonzerojacobianindicestype","text":"typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialjacobiantype","text":"typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialjacobiantype","text":"typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialhessiantype","text":"typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialhessiantype","text":"typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-internalmatrixtype","text":"typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradienttype","text":"typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical.","title":"typedef MovingImageGradientType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradientvaluetype","text":"typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ;","title":"typedef MovingImageGradientValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itktypemacro","text":"itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions )","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getnumberofnonzerojacobianindices","text":"virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all.","title":"function GetNumberOfNonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro","text":"itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices.","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro_1","text":"itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool )","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-evaluatejacobianwithimagegradientproduct","text":"virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned.","title":"function EvaluateJacobianWithImageGradientProduct"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialjacobian","text":"virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoparameters","text":"inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions.","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoposition","text":"inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const","title":"function ComputeJacobianWithRespectToPosition"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialhessian","text":"virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian_1","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian_1","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform","text":"AdvancedTransform ()","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_1","text":"AdvancedTransform ( NumberOfParametersType numberOfParameters )","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_2","text":"inline virtual ~ AdvancedTransform ()","title":"function ~AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerospatialhessian","text":"bool m_HasNonZeroSpatialHessian ;","title":"variable m_HasNonZeroSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerojacobianofspatialhessian","text":"bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_HasNonZeroJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html","text":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double > Detailed Description template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#itkbsplineinterpolateimagefunctionwithdoublecoefficents","text":"More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double >","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#detailed-description","text":"template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-25 at 15:40:26 +0000","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html","text":"itk::CompactlySupportedRBFSparseKernelTransform More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const Protected Functions Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override Additional inherited members Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ; Public Types Documentation typedef Self typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited typedef OutputPointType typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters Protected Functions Documentation function CompactlySupportedRBFSparseKernelTransform inline CompactlySupportedRBFSparseKernelTransform () function ~CompactlySupportedRBFSparseKernelTransform inline virtual ~ CompactlySupportedRBFSparseKernelTransform () function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#itkcompactlysupportedrbfsparsekerneltransform","text":"More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions >","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types","text":"Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions","text":"Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#additional-inherited-members","text":"Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-self","text":"typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-superclass","text":"typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform","text":"inline CompactlySupportedRBFSparseKernelTransform ()","title":"function CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform_1","text":"inline virtual ~ CompactlySupportedRBFSparseKernelTransform ()","title":"function ~CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-25 at 15:40:26 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html","text":"itk::Functor::MultiplyByConstant More... Public Functions Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const Public Attributes Name TConstant m_Constant Detailed Description template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ; Public Functions Documentation function MultiplyByConstant inline MultiplyByConstant () function ~MultiplyByConstant inline ~ MultiplyByConstant () function operator!= inline bool operator != ( const MultiplyByConstant & other ) const function operator== inline bool operator == ( const MultiplyByConstant & other ) const function operator() inline TOutput operator ()( const TInput & A ) const function SetConstant inline void SetConstant ( TConstant ct ) function GetConstant inline const TConstant & GetConstant () const Public Attributes Documentation variable m_Constant TConstant m_Constant ; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#itkfunctormultiplybyconstant","text":"More...","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions","text":"Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes","text":"Name TConstant m_Constant","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#detailed-description","text":"template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant","text":"inline MultiplyByConstant ()","title":"function MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant_1","text":"inline ~ MultiplyByConstant ()","title":"function ~MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator","text":"inline bool operator != ( const MultiplyByConstant & other ) const","title":"function operator!="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_1","text":"inline bool operator == ( const MultiplyByConstant & other ) const","title":"function operator=="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_2","text":"inline TOutput operator ()( const TInput & A ) const","title":"function operator()"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-setconstant","text":"inline void SetConstant ( TConstant ct )","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#variable-m_constant","text":"TConstant m_Constant ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_Constant"},{"location":"api/Classes/classitk_1_1KernelTransform2.html","text":"itk::KernelTransform2 More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Additional inherited members Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms. Public Types Documentation typedef Self typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs. typedef ParametersType typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ; typedef JacobianType typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ; typedef InputPointType typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ; typedef NonZeroJacobianIndicesType typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs. typedef SpatialJacobianType typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef GMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Protected Types Documentation typedef SVDDecompositionType typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition. typedef QRDecompositionType typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer. function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function GetNumberOfParameters inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) Compute W matrix. function ComputeLInverse void ComputeLInverse ( void ) Compute L matrix inverse. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space function TransformVector inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform. function TransformVector inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const function TransformCovariantVector inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const function GetJacobian virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation. function SetIdentity virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform. function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks. function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks. function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) function SetAlpha inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetAlpha inline virtual TScalarType GetAlpha ( void ) const function itkSetMacro itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetPoissonRatio inline virtual const TScalarType GetPoissonRatio ( void ) const function itkSetMacro itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition. function itkGetConstReferenceMacro itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ) function GetSpatialJacobian inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided. function GetSpatialHessian inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function KernelTransform2 KernelTransform2 () function ~KernelTransform2 virtual ~ KernelTransform2 () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline. function ComputeReflexiveG virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. function ComputeK void ComputeK ( void ) Compute K matrix. function ComputeL void ComputeL ( void ) Compute L matrix. function ComputeP void ComputeP ( void ) Compute P matrix. function ComputeY void ComputeY ( void ) Compute Y matrix. function ComputeD void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter. variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function. variable m_AMatrix AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation. variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation. variable m_WMatrixComputed bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_LMatrixDecompositionComputed bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed? variable m_LMatrixDecompositionSVD SVDDecompositionType * m_LMatrixDecompositionSVD ; variable m_LMatrixDecompositionQR QRDecompositionType * m_LMatrixDecompositionQR ; variable m_I IMatrixType m_I ; Identity matrix. variable m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params) variable m_NonZeroJacobianIndicesTemp NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method: variable m_FastComputationPossible bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#itkkerneltransform2","text":"More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types","text":"Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types","text":"Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions","text":"Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions","text":"Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void )","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms.","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-self","text":"typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-superclass","text":"typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-nonzerojacobianindicestype","text":"typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialjacobiantype","text":"typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialjacobiantype","text":"typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialhessiantype","text":"typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialhessiantype","text":"typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-internalmatrixtype","text":"typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsettype","text":"typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-imatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-gmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-lmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-kmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-ymatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-wmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-dmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-amatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-bmatrixtype","text":"typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-rowmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-columnmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-svddecompositiontype","text":"typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition.","title":"typedef SVDDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-qrdecompositiontype","text":"typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ;","title":"typedef QRDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getnumberofparameters","text":"inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform.","title":"function GetNumberOfParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computelinverse","text":"void ComputeLInverse ( void ) Compute L matrix inverse.","title":"function ComputeLInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector","text":"inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform.","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector_1","text":"inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformcovariantvector","text":"inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const","title":"function TransformCovariantVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setidentity","text":"virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform.","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks.","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks.","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setalpha","text":"inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function SetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getalpha","text":"inline virtual TScalarType GetAlpha ( void ) const","title":"function GetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro","text":"itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getpoissonratio","text":"inline virtual const TScalarType GetPoissonRatio ( void ) const","title":"function GetPoissonRatio"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro_1","text":"itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetconstreferencemacro","text":"itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string )","title":"function itkGetConstReferenceMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialjacobian","text":"inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialhessian","text":"inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian_1","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian_1","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2","text":"KernelTransform2 ()","title":"function KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2_1","text":"virtual ~ KernelTransform2 ()","title":"function ~KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computereflexiveg","text":"virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space.","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computek","text":"void ComputeK ( void ) Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computel","text":"void ComputeL ( void ) Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computep","text":"void ComputeP ( void ) Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computey","text":"void ComputeY ( void ) Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computed","text":"void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-reorganizew","text":"void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter.","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function.","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation.","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation.","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositioncomputed","text":"bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed?","title":"variable m_LMatrixDecompositionComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionsvd","text":"SVDDecompositionType * m_LMatrixDecompositionSVD ;","title":"variable m_LMatrixDecompositionSVD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionqr","text":"QRDecompositionType * m_LMatrixDecompositionQR ;","title":"variable m_LMatrixDecompositionQR"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix.","title":"variable m_I"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindices","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params)","title":"variable m_NonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindicestemp","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method:","title":"variable m_NonZeroJacobianIndicesTemp"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_fastcomputationpossible","text":"bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_FastComputationPossible"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html","text":"itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > > Public Types Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const Protected Functions Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const Detailed Description template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510 Public Types Documentation typedef Self typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs. typedef Superclass typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods). function SetConstant inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels function GetConstant inline const TConstant & GetConstant () const Protected Functions Documentation function MultiplyByConstantImageFilter inline MultiplyByConstantImageFilter () function ~MultiplyByConstantImageFilter inline virtual ~ MultiplyByConstantImageFilter () function PrintSelf inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#itkmultiplybyconstantimagefilter","text":"Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > >","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types","text":"Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer","title":"Public Types"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions","text":"Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#detailed-description","text":"template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-self","text":"typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-superclass","text":"typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-setconstant","text":"inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter","text":"inline MultiplyByConstantImageFilter ()","title":"function MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter_1","text":"inline virtual ~ MultiplyByConstantImageFilter ()","title":"function ~MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html","text":"itk::SparseKernelTransform More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Public Types Documentation typedef Self typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type. typedef InputPointType typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class. typedef OutputPointType typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class. typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef TripletType typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices. typedef GMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Public Functions Documentation function itkTypeMacro itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) const Compute W matrix. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space function SetIdentity virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) Protected Functions Documentation function SparseKernelTransform SparseKernelTransform () function ~SparseKernelTransform virtual ~ SparseKernelTransform () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeReflexiveG virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space function ComputeK void ComputeK () const Compute K matrix. function ComputeL void ComputeL () const Compute L matrix. function ComputeP void ComputeP () const Compute P matrix. function ComputeY void ComputeY () const Compute Y matrix. function ComputeD void ComputeD () const Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function variable m_AMatrix AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation variable m_GMatrix GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time variable m_WMatrixComputed bool m_WMatrixComputed ; Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_I IMatrixType m_I ; Identity matrix. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#itksparsekerneltransform","text":"More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions >","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types","text":"Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions","text":"Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions","text":"Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\"","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-self","text":"typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type.","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class.","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsettype","text":"typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-imatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-triplettype","text":"typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices.","title":"typedef TripletType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-lmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-kmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-ymatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-wmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-dmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-amatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-bmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-rowmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-columnmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) const Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setidentity","text":"virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform","text":"SparseKernelTransform ()","title":"function SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform_1","text":"virtual ~ SparseKernelTransform ()","title":"function ~SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computereflexiveg","text":"virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computek","text":"void ComputeK () const Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computel","text":"void ComputeL () const Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computep","text":"void ComputeP () const Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computey","text":"void ComputeY () const Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computed","text":"void ComputeD () const Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-reorganizew","text":"void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_gmatrix","text":"GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time","title":"variable m_GMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix. Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_I"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html","text":"itk::TPGACLevelSetImageFilter More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float > Public Types Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Protected Functions Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change) Detailed Description template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ; Public Types Documentation typedef Self typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs typedef Superclass typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ; typedef ImageType typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ; typedef IndexType typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ; typedef TimeStepType typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ; typedef ValueType typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass. typedef OutputImageType typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ; typedef FeatureImageType typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory function itkTypeMacro itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods). Protected Functions Documentation function ~TPGACLevelSetImageFilter inline ~ TPGACLevelSetImageFilter () function TPGACLevelSetImageFilter TPGACLevelSetImageFilter () function PrintSelf virtual void PrintSelf ( std :: ostream & os , Indent indent ) const function TPGACLevelSetImageFilter TPGACLevelSetImageFilter ( const Self & ) function operator= void operator = ( const Self & ) function CalculateUpdateValue inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#itktpgaclevelsetimagefilter","text":"More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float >","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types","text":"Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType","title":"Public Types"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions","text":"Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change)","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#detailed-description","text":"template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-self","text":"typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-superclass","text":"typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-imagetype","text":"typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-indextype","text":"typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ;","title":"typedef IndexType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-timesteptype","text":"typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ;","title":"typedef TimeStepType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-valuetype","text":"typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass.","title":"typedef ValueType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-outputimagetype","text":"typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ;","title":"typedef OutputImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-featureimagetype","text":"typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ;","title":"typedef FeatureImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter","text":"inline ~ TPGACLevelSetImageFilter ()","title":"function ~TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_1","text":"TPGACLevelSetImageFilter ()","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-printself","text":"virtual void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_2","text":"TPGACLevelSetImageFilter ( const Self & )","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-operator","text":"void operator = ( const Self & )","title":"function operator="},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-calculateupdatevalue","text":"inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-25 at 15:40:26 +0000","title":"function CalculateUpdateValue"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html","text":"itk::ThinPlateSplineKernelTransform2 More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) Protected Functions Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const Additional inherited members Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997 Public Types Documentation typedef Self typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. typedef OutputPointType typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) Protected Functions Documentation function ThinPlateSplineKernelTransform2 inline ThinPlateSplineKernelTransform2 () function ~ThinPlateSplineKernelTransform2 inline virtual ~ ThinPlateSplineKernelTransform2 () function ComputeG virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#itkthinplatesplinekerneltransform2","text":"More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types","text":"Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma)","title":"Public Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions","text":"Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-self","text":"typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-superclass","text":"typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2","text":"inline ThinPlateSplineKernelTransform2 ()","title":"function ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2_1","text":"inline virtual ~ ThinPlateSplineKernelTransform2 ()","title":"function ~ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-25 at 15:40:26 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classmat3d.html","text":"mat3d Public Functions Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose () Protected Attributes Name double m_data Public Functions Documentation function mat3d inline mat3d () function mat3d mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ) function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function operator* inline mat3d operator * ( mat3d & m ) function operator*= inline mat3d & operator *= ( mat3d & m ) function operator+= inline mat3d & operator += ( mat3d & m ) function operator-= inline mat3d & operator -= ( mat3d & m ) function operator/= inline mat3d & operator /= ( const double f ) function operator* inline vec3d operator * ( vec3d b ) function det inline double det () const function Invert double Invert () function inverse mat3d inverse () const function zero inline void zero () function unit inline void unit () function transpose mat3d transpose () Protected Attributes Documentation variable m_data double m_data ; Updated on 2023-10-25 at 15:40:28 +0000","title":"mat3d"},{"location":"api/Classes/classmat3d.html#mat3d","text":"","title":"mat3d"},{"location":"api/Classes/classmat3d.html#public-functions","text":"Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose ()","title":"Public Functions"},{"location":"api/Classes/classmat3d.html#protected-attributes","text":"Name double m_data","title":"Protected Attributes"},{"location":"api/Classes/classmat3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmat3d.html#function-mat3d","text":"inline mat3d ()","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-mat3d_1","text":"mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 )","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmat3d.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmat3d.html#function-operator_2","text":"inline mat3d operator * ( mat3d & m )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-operator_3","text":"inline mat3d & operator *= ( mat3d & m )","title":"function operator*="},{"location":"api/Classes/classmat3d.html#function-operator_4","text":"inline mat3d & operator += ( mat3d & m )","title":"function operator+="},{"location":"api/Classes/classmat3d.html#function-operator-","text":"inline mat3d & operator -= ( mat3d & m )","title":"function operator-="},{"location":"api/Classes/classmat3d.html#function-operator_5","text":"inline mat3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classmat3d.html#function-operator_6","text":"inline vec3d operator * ( vec3d b )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-det","text":"inline double det () const","title":"function det"},{"location":"api/Classes/classmat3d.html#function-invert","text":"double Invert ()","title":"function Invert"},{"location":"api/Classes/classmat3d.html#function-inverse","text":"mat3d inverse () const","title":"function inverse"},{"location":"api/Classes/classmat3d.html#function-zero","text":"inline void zero ()","title":"function zero"},{"location":"api/Classes/classmat3d.html#function-unit","text":"inline void unit ()","title":"function unit"},{"location":"api/Classes/classmat3d.html#function-transpose","text":"mat3d transpose ()","title":"function transpose"},{"location":"api/Classes/classmat3d.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classmat3d.html#variable-m_data","text":"double m_data ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_data"},{"location":"api/Classes/classmatrix.html","text":"matrix Public Functions Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt) Public Functions Documentation function matrix matrix ( int r , int c ) function ~matrix inline ~ matrix () function zero void zero () function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function solve bool solve ( vector < double > & x , vector < double > & b ) function lsq_solve bool lsq_solve ( vector < double > & x , vector < double > & b ) function eigen_vectors bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values ) function Rows inline int Rows () function mult_transpose void mult_transpose ( vector < double > & x , vector < double > & y ) function mult_transpose_self void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-25 at 15:40:28 +0000","title":"matrix"},{"location":"api/Classes/classmatrix.html#matrix","text":"","title":"matrix"},{"location":"api/Classes/classmatrix.html#public-functions","text":"Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt)","title":"Public Functions"},{"location":"api/Classes/classmatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmatrix.html#function-matrix","text":"matrix ( int r , int c )","title":"function matrix"},{"location":"api/Classes/classmatrix.html#function-matrix_1","text":"inline ~ matrix ()","title":"function ~matrix"},{"location":"api/Classes/classmatrix.html#function-zero","text":"void zero ()","title":"function zero"},{"location":"api/Classes/classmatrix.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmatrix.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmatrix.html#function-solve","text":"bool solve ( vector < double > & x , vector < double > & b )","title":"function solve"},{"location":"api/Classes/classmatrix.html#function-lsq_solve","text":"bool lsq_solve ( vector < double > & x , vector < double > & b )","title":"function lsq_solve"},{"location":"api/Classes/classmatrix.html#function-eigen_vectors","text":"bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values )","title":"function eigen_vectors"},{"location":"api/Classes/classmatrix.html#function-rows","text":"inline int Rows ()","title":"function Rows"},{"location":"api/Classes/classmatrix.html#function-mult_transpose","text":"void mult_transpose ( vector < double > & x , vector < double > & y )","title":"function mult_transpose"},{"location":"api/Classes/classmatrix.html#function-mult_transpose_self","text":"void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function mult_transpose_self"},{"location":"api/Classes/classmeshFIM.html","text":"meshFIM Public Types Name enum LabelType typedef int VoxelIndexType typedef int index Public Functions Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM () Public Attributes Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors Public Types Documentation enum LabelType Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint typedef VoxelIndexType typedef int meshFIM :: VoxelIndexType ; typedef index typedef int meshFIM :: index ; Public Functions Documentation function ComputeDistanceToLandmarksGivenTriangleInfo void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ) function computeFIM void computeFIM ( TriMesh * mesh , const char * vertT_filename ) function GetFeatureValues void GetFeatureValues ( point x , std :: vector < float > & vals ) function ReadFaceIndexMap void ReadFaceIndexMap ( const char * infilename ) function ReadFeatureFromFile void ReadFeatureFromFile ( const char * infilename ) function ReadFeatureGradientFromFile void ReadFeatureGradientFromFile ( const char * infilename ) function GetFeatureDerivative point GetFeatureDerivative ( point p , int fIndex ) function need_abs_curvatures void need_abs_curvatures () function need_edge_lengths void need_edge_lengths () function need_speed void need_speed () function need_oneringfaces void need_oneringfaces () function need_kdtree void need_kdtree () function SetMesh void SetMesh ( TriMesh * mesh ) function SetStopDistance inline void SetStopDistance ( float d ) function setSpeedType inline void setSpeedType ( int st ) function meshFIM inline meshFIM () function ~meshFIM inline ~ meshFIM () Public Attributes Documentation variable m_meshPtr TriMesh * m_meshPtr ; variable NumComputation int NumComputation ; variable imageOrigin float imageOrigin ; variable imageSpacing float imageSpacing ; variable imageSize int imageSize ; variable imageIndex int imageIndex ; variable colors std :: vector < Color > colors ; Updated on 2023-10-25 at 15:40:28 +0000","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#meshfim","text":"","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-types","text":"Name enum LabelType typedef int VoxelIndexType typedef int index","title":"Public Types"},{"location":"api/Classes/classmeshFIM.html#public-functions","text":"Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM ()","title":"Public Functions"},{"location":"api/Classes/classmeshFIM.html#public-attributes","text":"Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors","title":"Public Attributes"},{"location":"api/Classes/classmeshFIM.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classmeshFIM.html#enum-labeltype","text":"Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint","title":"enum LabelType"},{"location":"api/Classes/classmeshFIM.html#typedef-voxelindextype","text":"typedef int meshFIM :: VoxelIndexType ;","title":"typedef VoxelIndexType"},{"location":"api/Classes/classmeshFIM.html#typedef-index","text":"typedef int meshFIM :: index ;","title":"typedef index"},{"location":"api/Classes/classmeshFIM.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmeshFIM.html#function-computedistancetolandmarksgiventriangleinfo","text":"void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename )","title":"function ComputeDistanceToLandmarksGivenTriangleInfo"},{"location":"api/Classes/classmeshFIM.html#function-computefim","text":"void computeFIM ( TriMesh * mesh , const char * vertT_filename )","title":"function computeFIM"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturevalues","text":"void GetFeatureValues ( point x , std :: vector < float > & vals )","title":"function GetFeatureValues"},{"location":"api/Classes/classmeshFIM.html#function-readfaceindexmap","text":"void ReadFaceIndexMap ( const char * infilename )","title":"function ReadFaceIndexMap"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturefromfile","text":"void ReadFeatureFromFile ( const char * infilename )","title":"function ReadFeatureFromFile"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturegradientfromfile","text":"void ReadFeatureGradientFromFile ( const char * infilename )","title":"function ReadFeatureGradientFromFile"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturederivative","text":"point GetFeatureDerivative ( point p , int fIndex )","title":"function GetFeatureDerivative"},{"location":"api/Classes/classmeshFIM.html#function-need_abs_curvatures","text":"void need_abs_curvatures ()","title":"function need_abs_curvatures"},{"location":"api/Classes/classmeshFIM.html#function-need_edge_lengths","text":"void need_edge_lengths ()","title":"function need_edge_lengths"},{"location":"api/Classes/classmeshFIM.html#function-need_speed","text":"void need_speed ()","title":"function need_speed"},{"location":"api/Classes/classmeshFIM.html#function-need_oneringfaces","text":"void need_oneringfaces ()","title":"function need_oneringfaces"},{"location":"api/Classes/classmeshFIM.html#function-need_kdtree","text":"void need_kdtree ()","title":"function need_kdtree"},{"location":"api/Classes/classmeshFIM.html#function-setmesh","text":"void SetMesh ( TriMesh * mesh )","title":"function SetMesh"},{"location":"api/Classes/classmeshFIM.html#function-setstopdistance","text":"inline void SetStopDistance ( float d )","title":"function SetStopDistance"},{"location":"api/Classes/classmeshFIM.html#function-setspeedtype","text":"inline void setSpeedType ( int st )","title":"function setSpeedType"},{"location":"api/Classes/classmeshFIM.html#function-meshfim","text":"inline meshFIM ()","title":"function meshFIM"},{"location":"api/Classes/classmeshFIM.html#function-meshfim_1","text":"inline ~ meshFIM ()","title":"function ~meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classmeshFIM.html#variable-m_meshptr","text":"TriMesh * m_meshPtr ;","title":"variable m_meshPtr"},{"location":"api/Classes/classmeshFIM.html#variable-numcomputation","text":"int NumComputation ;","title":"variable NumComputation"},{"location":"api/Classes/classmeshFIM.html#variable-imageorigin","text":"float imageOrigin ;","title":"variable imageOrigin"},{"location":"api/Classes/classmeshFIM.html#variable-imagespacing","text":"float imageSpacing ;","title":"variable imageSpacing"},{"location":"api/Classes/classmeshFIM.html#variable-imagesize","text":"int imageSize ;","title":"variable imageSize"},{"location":"api/Classes/classmeshFIM.html#variable-imageindex","text":"int imageIndex ;","title":"variable imageIndex"},{"location":"api/Classes/classmeshFIM.html#variable-colors","text":"std :: vector < Color > colors ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable colors"},{"location":"api/Classes/classobject__reader.html","text":"object_reader More... #include Detailed Description class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-25 at 15:40:28 +0000","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#object_reader","text":"More... #include ","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#detailed-description","text":"class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classobject__writer.html","text":"object_writer Updated on 2023-10-25 at 15:40:28 +0000","title":"object_writer"},{"location":"api/Classes/classobject__writer.html#object_writer","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"object_writer"},{"location":"api/Classes/classquatd.html","text":"quatd Public Functions Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t) Public Attributes Name double x double y double z double w Public Functions Documentation function quatd inline quatd () function quatd inline quatd ( const double angle , vec3d v ) function quatd inline quatd ( vec3d v1 , vec3d v2 ) function quatd inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) function operator!= inline bool operator != ( const quatd & q ) function operator- inline quatd operator - () function operator+ inline quatd operator + ( const quatd & q ) const function operator- inline quatd operator - ( const quatd & q ) const function operator+= inline quatd & operator += ( const quatd & q ) function operator-= inline quatd & operator -= ( const quatd & q ) function operator* inline quatd operator * ( const quatd & q ) const function operator*= inline quatd & operator *= ( const quatd & q ) function operator* inline quatd operator * ( const double a ) const function operator/ inline quatd operator / ( const double a ) const function operator/= inline quatd & operator /= ( const double a ) function Conjugate inline quatd Conjugate () const function Norm inline double Norm () const function MakeUnit inline void MakeUnit () function Inverse inline quatd Inverse () const function DotProduct inline double DotProduct ( const quatd & q ) const function GetVector inline vec3d GetVector () const function GetAngle inline double GetAngle () const function RotateVector inline void RotateVector ( vec3d & v ) const function operator* inline vec3d operator * ( const vec3d & r ) function operator* inline mat3d operator * ( mat3d m ) function RotateVectorP inline void RotateVectorP ( double * v , double * r ) const function dot static inline double dot ( quatd & q1 , quatd & q2 ) function lerp static inline quatd lerp ( quatd & q1 , quatd & q2 , double t ) function slerp static quatd slerp ( quatd & q1 , quatd & q2 , double t ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable w double w ; Updated on 2023-10-25 at 15:40:28 +0000","title":"quatd"},{"location":"api/Classes/classquatd.html#quatd","text":"","title":"quatd"},{"location":"api/Classes/classquatd.html#public-functions","text":"Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t)","title":"Public Functions"},{"location":"api/Classes/classquatd.html#public-attributes","text":"Name double x double y double z double w","title":"Public Attributes"},{"location":"api/Classes/classquatd.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classquatd.html#function-quatd","text":"inline quatd ()","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_1","text":"inline quatd ( const double angle , vec3d v )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_2","text":"inline quatd ( vec3d v1 , vec3d v2 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_3","text":"inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-operator","text":"inline bool operator != ( const quatd & q )","title":"function operator!="},{"location":"api/Classes/classquatd.html#function-operator-","text":"inline quatd operator - ()","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_1","text":"inline quatd operator + ( const quatd & q ) const","title":"function operator+"},{"location":"api/Classes/classquatd.html#function-operator-_1","text":"inline quatd operator - ( const quatd & q ) const","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_2","text":"inline quatd & operator += ( const quatd & q )","title":"function operator+="},{"location":"api/Classes/classquatd.html#function-operator-_2","text":"inline quatd & operator -= ( const quatd & q )","title":"function operator-="},{"location":"api/Classes/classquatd.html#function-operator_3","text":"inline quatd operator * ( const quatd & q ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_4","text":"inline quatd & operator *= ( const quatd & q )","title":"function operator*="},{"location":"api/Classes/classquatd.html#function-operator_5","text":"inline quatd operator * ( const double a ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_6","text":"inline quatd operator / ( const double a ) const","title":"function operator/"},{"location":"api/Classes/classquatd.html#function-operator_7","text":"inline quatd & operator /= ( const double a )","title":"function operator/="},{"location":"api/Classes/classquatd.html#function-conjugate","text":"inline quatd Conjugate () const","title":"function Conjugate"},{"location":"api/Classes/classquatd.html#function-norm","text":"inline double Norm () const","title":"function Norm"},{"location":"api/Classes/classquatd.html#function-makeunit","text":"inline void MakeUnit ()","title":"function MakeUnit"},{"location":"api/Classes/classquatd.html#function-inverse","text":"inline quatd Inverse () const","title":"function Inverse"},{"location":"api/Classes/classquatd.html#function-dotproduct","text":"inline double DotProduct ( const quatd & q ) const","title":"function DotProduct"},{"location":"api/Classes/classquatd.html#function-getvector","text":"inline vec3d GetVector () const","title":"function GetVector"},{"location":"api/Classes/classquatd.html#function-getangle","text":"inline double GetAngle () const","title":"function GetAngle"},{"location":"api/Classes/classquatd.html#function-rotatevector","text":"inline void RotateVector ( vec3d & v ) const","title":"function RotateVector"},{"location":"api/Classes/classquatd.html#function-operator_8","text":"inline vec3d operator * ( const vec3d & r )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_9","text":"inline mat3d operator * ( mat3d m )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-rotatevectorp","text":"inline void RotateVectorP ( double * v , double * r ) const","title":"function RotateVectorP"},{"location":"api/Classes/classquatd.html#function-dot","text":"static inline double dot ( quatd & q1 , quatd & q2 )","title":"function dot"},{"location":"api/Classes/classquatd.html#function-lerp","text":"static inline quatd lerp ( quatd & q1 , quatd & q2 , double t )","title":"function lerp"},{"location":"api/Classes/classquatd.html#function-slerp","text":"static quatd slerp ( quatd & q1 , quatd & q2 , double t )","title":"function slerp"},{"location":"api/Classes/classquatd.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classquatd.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classquatd.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classquatd.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classquatd.html#variable-w","text":"double w ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable w"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html","text":"shapeworks::AnalysisTool Inherits from QWidget Public Types Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType Public Slots Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed () Public Signals Name void update_view () void pca_update () void progress (int ) void reconstruction_complete () Public Functions Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type () Public Attributes Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C Public Types Documentation enum GroupAnalysisType Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3 enum McaMode Enumerator Value Description Vanilla Within Between using AlignmentType using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ; using PointType using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ; Public Slots Documentation slot on_tabWidget_currentChanged void on_tabWidget_currentChanged () slot handle_analysis_options void handle_analysis_options () slot handle_median void handle_median () slot on_mean_button_clicked void on_mean_button_clicked () slot on_group1_button_clicked void on_group1_button_clicked () slot on_group2_button_clicked void on_group2_button_clicked () slot on_difference_button_clicked void on_difference_button_clicked () slot on_pcaSlider_valueChanged void on_pcaSlider_valueChanged () slot on_group_slider_valueChanged void on_group_slider_valueChanged () slot on_pcaModeSpinBox_valueChanged void on_pcaModeSpinBox_valueChanged ( int i ) slot handle_pca_animate_state_changed void handle_pca_animate_state_changed () slot handle_pca_timer void handle_pca_timer () slot handle_group_animate_state_changed void handle_group_animate_state_changed () slot handle_group_timer void handle_group_timer () slot handle_reconstruction_complete void handle_reconstruction_complete () slot on_reconstructionButton_clicked void on_reconstructionButton_clicked () slot set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. slot get_display_feature_map std :: string get_display_feature_map () slot group_changed void group_changed () slot groups_active bool groups_active () slot on_view_open_button_toggled void on_view_open_button_toggled () slot on_surface_open_button_toggled void on_surface_open_button_toggled () slot on_metrics_open_button_toggled void on_metrics_open_button_toggled () slot is_group_active bool is_group_active ( int shape_index ) slot reconstruction_method_changed void reconstruction_method_changed () slot initialize_mesh_warper void initialize_mesh_warper () slot group_p_values_clicked void group_p_values_clicked () slot network_analysis_clicked void network_analysis_clicked () slot handle_eval_thread_complete void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) slot handle_eval_thread_progress void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ) slot handle_eval_particle_normals_progress void handle_eval_particle_normals_progress ( float progress ) slot handle_eval_particle_normals_complete void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ) slot handle_group_pvalues_complete void handle_group_pvalues_complete () slot handle_alignment_changed void handle_alignment_changed ( int new_alignment ) slot run_good_bad_particles void run_good_bad_particles () slot handle_lda_progress void handle_lda_progress ( double progress ) slot handle_lda_complete void handle_lda_complete () slot handle_network_analysis_progress void handle_network_analysis_progress ( int progress ) slot handle_network_analysis_complete void handle_network_analysis_complete () slot show_difference_to_mean_clicked void show_difference_to_mean_clicked () slot group_analysis_combo_changed void group_analysis_combo_changed () Public Signals Documentation signal update_view void update_view () signal pca_update void pca_update () signal progress void progress ( int ) signal reconstruction_complete void reconstruction_complete () Public Functions Documentation function AnalysisTool AnalysisTool ( Preferences & prefs ) function ~AnalysisTool ~ AnalysisTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function get_session QSharedPointer < Session > get_session () Return the session. function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function get_app inline ShapeWorksStudioApp * get_app () function set_active void set_active ( bool active ) Set if this tool is active. function get_active bool get_active () Return if this tool is active. function get_group_difference_mode bool get_group_difference_mode () function get_group_difference_vectors std :: vector < Shape :: Point > get_group_difference_vectors () function get_analysis_mode std :: string get_analysis_mode () function set_analysis_mode void set_analysis_mode ( std :: string mode ) function set_labels void set_labels ( QString which , QString value ) function get_pca_mode int get_pca_mode () function get_group_ratio double get_group_ratio () function get_pca_value double get_pca_value () function pca_animate bool pca_animate () function get_mca_level McaMode get_mca_level () const function get_sample_number int get_sample_number () function compute_stats bool compute_stats () function update_slider void update_slider () function reset_stats void reset_stats () function enable_actions void enable_actions ( bool newly_enabled = false ) function get_mean_shape_points Particles get_mean_shape_points () function get_mean_shape ShapeHandle get_mean_shape () function get_shape_points Particles get_shape_points ( int mode , double value ) function get_multi_level_shape_points Particles get_multi_level_shape_points ( int mode , double value , McaMode level ) function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) function get_mca_mode_shape ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ) function get_current_shape ShapeHandle get_current_shape () function get_stats ParticleShapeStatistics get_stats () function load_settings void load_settings () function store_settings void store_settings () function shutdown void shutdown () function export_variance_graph bool export_variance_graph ( QString filename ) function compute_shape_evaluations void compute_shape_evaluations () function get_group_analysis_type GroupAnalysisType get_group_analysis_type () Public Attributes Documentation variable MODE_ALL_SAMPLES_C static const std :: string MODE_ALL_SAMPLES_C ; variable MODE_MEAN_C static const std :: string MODE_MEAN_C ; variable MODE_PCA_C static const std :: string MODE_PCA_C ; variable MODE_SINGLE_SAMPLE_C static const std :: string MODE_SINGLE_SAMPLE_C ; variable MODE_REGRESSION_C static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#shapeworksanalysistool","text":"Inherits from QWidget","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types","text":"Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots","text":"Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals","text":"Name void update_view () void pca_update () void progress (int ) void reconstruction_complete ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions","text":"Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes","text":"Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-groupanalysistype","text":"Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3","title":"enum GroupAnalysisType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-mcamode","text":"Enumerator Value Description Vanilla Within Between","title":"enum McaMode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-alignmenttype","text":"using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ;","title":"using AlignmentType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-pointtype","text":"using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_tabwidget_currentchanged","text":"void on_tabWidget_currentChanged ()","title":"slot on_tabWidget_currentChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_analysis_options","text":"void handle_analysis_options ()","title":"slot handle_analysis_options"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_median","text":"void handle_median ()","title":"slot handle_median"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_mean_button_clicked","text":"void on_mean_button_clicked ()","title":"slot on_mean_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group1_button_clicked","text":"void on_group1_button_clicked ()","title":"slot on_group1_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group2_button_clicked","text":"void on_group2_button_clicked ()","title":"slot on_group2_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_difference_button_clicked","text":"void on_difference_button_clicked ()","title":"slot on_difference_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcaslider_valuechanged","text":"void on_pcaSlider_valueChanged ()","title":"slot on_pcaSlider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group_slider_valuechanged","text":"void on_group_slider_valueChanged ()","title":"slot on_group_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcamodespinbox_valuechanged","text":"void on_pcaModeSpinBox_valueChanged ( int i )","title":"slot on_pcaModeSpinBox_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_animate_state_changed","text":"void handle_pca_animate_state_changed ()","title":"slot handle_pca_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_timer","text":"void handle_pca_timer ()","title":"slot handle_pca_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_animate_state_changed","text":"void handle_group_animate_state_changed ()","title":"slot handle_group_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_timer","text":"void handle_group_timer ()","title":"slot handle_group_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_reconstructionbutton_clicked","text":"void on_reconstructionButton_clicked ()","title":"slot on_reconstructionButton_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"slot set_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-get_display_feature_map","text":"std :: string get_display_feature_map ()","title":"slot get_display_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_changed","text":"void group_changed ()","title":"slot group_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-groups_active","text":"bool groups_active ()","title":"slot groups_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_view_open_button_toggled","text":"void on_view_open_button_toggled ()","title":"slot on_view_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_surface_open_button_toggled","text":"void on_surface_open_button_toggled ()","title":"slot on_surface_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_metrics_open_button_toggled","text":"void on_metrics_open_button_toggled ()","title":"slot on_metrics_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-is_group_active","text":"bool is_group_active ( int shape_index )","title":"slot is_group_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-reconstruction_method_changed","text":"void reconstruction_method_changed ()","title":"slot reconstruction_method_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-initialize_mesh_warper","text":"void initialize_mesh_warper ()","title":"slot initialize_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_p_values_clicked","text":"void group_p_values_clicked ()","title":"slot group_p_values_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-network_analysis_clicked","text":"void network_analysis_clicked ()","title":"slot network_analysis_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_complete","text":"void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"slot handle_eval_thread_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_progress","text":"void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress )","title":"slot handle_eval_thread_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_progress","text":"void handle_eval_particle_normals_progress ( float progress )","title":"slot handle_eval_particle_normals_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_complete","text":"void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad )","title":"slot handle_eval_particle_normals_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_pvalues_complete","text":"void handle_group_pvalues_complete ()","title":"slot handle_group_pvalues_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ( int new_alignment )","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-run_good_bad_particles","text":"void run_good_bad_particles ()","title":"slot run_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_progress","text":"void handle_lda_progress ( double progress )","title":"slot handle_lda_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_complete","text":"void handle_lda_complete ()","title":"slot handle_lda_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_progress","text":"void handle_network_analysis_progress ( int progress )","title":"slot handle_network_analysis_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_complete","text":"void handle_network_analysis_complete ()","title":"slot handle_network_analysis_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-show_difference_to_mean_clicked","text":"void show_difference_to_mean_clicked ()","title":"slot show_difference_to_mean_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_analysis_combo_changed","text":"void group_analysis_combo_changed ()","title":"slot group_analysis_combo_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-pca_update","text":"void pca_update ()","title":"signal pca_update"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-reconstruction_complete","text":"void reconstruction_complete ()","title":"signal reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool","text":"AnalysisTool ( Preferences & prefs )","title":"function AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool_1","text":"~ AnalysisTool ()","title":"function ~AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_session","text":"QSharedPointer < Session > get_session () Return the session.","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_app","text":"inline ShapeWorksStudioApp * get_app ()","title":"function get_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_active","text":"void set_active ( bool active ) Set if this tool is active.","title":"function set_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_active","text":"bool get_active () Return if this tool is active.","title":"function get_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_mode","text":"bool get_group_difference_mode ()","title":"function get_group_difference_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_vectors","text":"std :: vector < Shape :: Point > get_group_difference_vectors ()","title":"function get_group_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_analysis_mode","text":"std :: string get_analysis_mode ()","title":"function get_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_analysis_mode","text":"void set_analysis_mode ( std :: string mode )","title":"function set_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_labels","text":"void set_labels ( QString which , QString value )","title":"function set_labels"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_mode","text":"int get_pca_mode ()","title":"function get_pca_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_ratio","text":"double get_group_ratio ()","title":"function get_group_ratio"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_value","text":"double get_pca_value ()","title":"function get_pca_value"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-pca_animate","text":"bool pca_animate ()","title":"function pca_animate"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_level","text":"McaMode get_mca_level () const","title":"function get_mca_level"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_sample_number","text":"int get_sample_number ()","title":"function get_sample_number"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_stats","text":"bool compute_stats ()","title":"function compute_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-update_slider","text":"void update_slider ()","title":"function update_slider"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-reset_stats","text":"void reset_stats ()","title":"function reset_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-enable_actions","text":"void enable_actions ( bool newly_enabled = false )","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points ()","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value )","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_multi_level_shape_points","text":"Particles get_multi_level_shape_points ( int mode , double value , McaMode level )","title":"function get_multi_level_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value )","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_mode_shape","text":"ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level )","title":"function get_mca_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_current_shape","text":"ShapeHandle get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_stats","text":"ParticleShapeStatistics get_stats ()","title":"function get_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-load_settings","text":"void load_settings ()","title":"function load_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-store_settings","text":"void store_settings ()","title":"function store_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-export_variance_graph","text":"bool export_variance_graph ( QString filename )","title":"function export_variance_graph"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_shape_evaluations","text":"void compute_shape_evaluations ()","title":"function compute_shape_evaluations"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_analysis_type","text":"GroupAnalysisType get_group_analysis_type ()","title":"function get_group_analysis_type"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_all_samples_c","text":"static const std :: string MODE_ALL_SAMPLES_C ;","title":"variable MODE_ALL_SAMPLES_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_mean_c","text":"static const std :: string MODE_MEAN_C ;","title":"variable MODE_MEAN_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_pca_c","text":"static const std :: string MODE_PCA_C ;","title":"variable MODE_PCA_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_single_sample_c","text":"static const std :: string MODE_SINGLE_SAMPLE_C ;","title":"variable MODE_SINGLE_SAMPLE_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_regression_c","text":"static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable MODE_REGRESSION_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html","text":"shapeworks::AnalysisUtils Public Functions Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain) Public Functions Documentation function get_local_particle_system static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#shapeworksanalysisutils","text":"","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions","text":"Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#function-get_local_particle_system","text":"static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Analyze.html","text":"shapeworks::Analyze High level analyze API. More... #include Public Types Name enum AlignmentType Public Functions Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain) Detailed Description class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project . Public Types Documentation enum AlignmentType Enumerator Value Description Global -2 Local -1 Public Functions Documentation function Analyze Analyze ( ProjectHandle project ) function run_offline_analysis void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile. function get_shapes ShapeList get_shapes () Return the list of shapes. function get_num_subjects int get_num_subjects () Return the number of subjects. function get_num_modes int get_num_modes () Return the number of modes. function get_num_particles int get_num_particles () Return the number of particles. function get_mean_shape_points Particles get_mean_shape_points () Return the mean shape. function get_mean_shape ShapeHandle get_mean_shape () Return the mean shape. function get_group_shape_particles Particles get_group_shape_particles ( double ratio ) function get_group_shape ShapeHandle get_group_shape ( double ratio ) function get_shape_points Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value. function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value. function groups_active inline bool groups_active () function create_shape_from_points ShapeHandle create_shape_from_points ( Particles points ) function get_subject_features Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ) function set_group_selection void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ) function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#shapeworksanalyze","text":"High level analyze API. More... #include ","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types","text":"Name enum AlignmentType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions","text":"Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#detailed-description","text":"class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project .","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#enum-alignmenttype","text":"Enumerator Value Description Global -2 Local -1","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-analyze","text":"Analyze ( ProjectHandle project )","title":"function Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-run_offline_analysis","text":"void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile.","title":"function run_offline_analysis"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shapes","text":"ShapeList get_shapes () Return the list of shapes.","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_subjects","text":"int get_num_subjects () Return the number of subjects.","title":"function get_num_subjects"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_modes","text":"int get_num_modes () Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_particles","text":"int get_num_particles () Return the number of particles.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points () Return the mean shape.","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape () Return the mean shape.","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape_particles","text":"Particles get_group_shape_particles ( double ratio )","title":"function get_group_shape_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape","text":"ShapeHandle get_group_shape ( double ratio )","title":"function get_group_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value.","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value.","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-groups_active","text":"inline bool groups_active ()","title":"function groups_active"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-create_shape_from_points","text":"ShapeHandle create_shape_from_points ( Particles points )","title":"function create_shape_from_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_subject_features","text":"Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name )","title":"function get_subject_features"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-set_group_selection","text":"void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 )","title":"function set_group_selection"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html","text":"shapeworks::AnalyzeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#shapeworksanalyzecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:26 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html","text":"shapeworks::ColorMap Public Functions Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color) Public Attributes Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_ Public Functions Documentation function construct_lookup_table void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ) function set_discrete_mode inline void set_discrete_mode ( bool discrete_mode ) function set_reverse_mode inline void set_reverse_mode ( bool reverse_mode ) function convert static vtkColor3ub convert ( QColor color ) Public Attributes Documentation variable name_ QString name_ ; variable color_series_ vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#shapeworkscolormap","text":"","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions","text":"Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes","text":"Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-construct_lookup_table","text":"void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut )","title":"function construct_lookup_table"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_discrete_mode","text":"inline void set_discrete_mode ( bool discrete_mode )","title":"function set_discrete_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_reverse_mode","text":"inline void set_reverse_mode ( bool reverse_mode )","title":"function set_reverse_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-convert","text":"static vtkColor3ub convert ( QColor color )","title":"function convert"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-name_","text":"QString name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-color_series_","text":"vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable color_series_"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html","text":"shapeworks::ColorMaps Inherits from std::vector< ColorMap > Public Functions Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index) Public Functions Documentation function ColorMaps ColorMaps () function get_color_series inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) function get_color_map inline ColorMap get_color_map ( int index ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#shapeworkscolormaps","text":"Inherits from std::vector< ColorMap >","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions","text":"Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-colormaps","text":"ColorMaps ()","title":"function ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_series","text":"inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index )","title":"function get_color_series"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_map","text":"inline ColorMap get_color_map ( int index ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_color_map"},{"location":"api/Classes/classshapeworks_1_1Command.html","text":"shapeworks::Command Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand Public Functions Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions Name virtual void buildParser () Protected Attributes Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type function name inline const std :: string name () const function usage inline const std :: string usage () const function desc inline const std :: string desc () const function parse_args std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers function run int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value Protected Functions Documentation function buildParser virtual void buildParser () Protected Attributes Documentation variable parser optparse :: OptionParser parser ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#shapeworkscommand","text":"Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions","text":"Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions","text":"Name virtual void buildParser ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes","text":"Name optparse::OptionParser parser","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-type","text":"inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type","title":"function type"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-name","text":"inline const std :: string name () const","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-usage","text":"inline const std :: string usage () const","title":"function usage"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-desc","text":"inline const std :: string desc () const","title":"function desc"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-parse_args","text":"std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers","title":"function parse_args"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-run","text":"int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-buildparser","text":"virtual void buildParser ()","title":"function buildParser"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#variable-parser","text":"optparse :: OptionParser parser ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable parser"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html","text":"shapeworks::CompareSettings Public Functions Name DisplayMode get_display_mode () bool get_mean_shape_checked () Public Attributes Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_ Public Functions Documentation function get_display_mode inline DisplayMode get_display_mode () function get_mean_shape_checked inline bool get_mean_shape_checked () Public Attributes Documentation variable compare_enabled_ bool compare_enabled_ = false ; variable surface_distance_mode_ bool surface_distance_mode_ = false ; variable original_checked_ bool original_checked_ = false ; variable groomed_checked_ bool groomed_checked_ = false ; variable reconstructed_checked_ bool reconstructed_checked_ = false ; variable mean_shape_checked_ bool mean_shape_checked_ = false ; variable opacity_ float opacity_ = 1.0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#shapeworkscomparesettings","text":"","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions","text":"Name DisplayMode get_display_mode () bool get_mean_shape_checked ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes","text":"Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_display_mode","text":"inline DisplayMode get_display_mode ()","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_mean_shape_checked","text":"inline bool get_mean_shape_checked ()","title":"function get_mean_shape_checked"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-compare_enabled_","text":"bool compare_enabled_ = false ;","title":"variable compare_enabled_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-surface_distance_mode_","text":"bool surface_distance_mode_ = false ;","title":"variable surface_distance_mode_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-original_checked_","text":"bool original_checked_ = false ;","title":"variable original_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-groomed_checked_","text":"bool groomed_checked_ = false ;","title":"variable groomed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-reconstructed_checked_","text":"bool reconstructed_checked_ = false ;","title":"variable reconstructed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-mean_shape_checked_","text":"bool mean_shape_checked_ = false ;","title":"variable mean_shape_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-opacity_","text":"float opacity_ = 1.0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable opacity_"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html","text":"shapeworks::CompareWidget Inherits from QWidget Public Signals Name void settings_changed () Public Functions Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available () Public Signals Documentation signal settings_changed void settings_changed () Public Functions Documentation function CompareWidget explicit CompareWidget ( QWidget * parent = nullptr ) function ~CompareWidget ~ CompareWidget () function get_settings CompareSettings get_settings () function set_available void set_available ( DisplayMode mode , bool available ) function set_mean_shape_available void set_mean_shape_available ( bool available ) function check_any_available bool check_any_available () Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#shapeworkscomparewidget","text":"Inherits from QWidget","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals","text":"Name void settings_changed ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions","text":"Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#signal-settings_changed","text":"void settings_changed ()","title":"signal settings_changed"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget","text":"explicit CompareWidget ( QWidget * parent = nullptr )","title":"function CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget_1","text":"~ CompareWidget ()","title":"function ~CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-get_settings","text":"CompareSettings get_settings ()","title":"function get_settings"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_available","text":"void set_available ( DisplayMode mode , bool available )","title":"function set_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_mean_shape_available","text":"void set_mean_shape_available ( bool available )","title":"function set_mean_shape_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-check_any_available","text":"bool check_any_available () Updated on 2023-10-25 at 15:40:26 +0000","title":"function check_any_available"},{"location":"api/Classes/classshapeworks_1_1Constraint.html","text":"shapeworks::Constraint More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint Public Functions Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Name int sgn (double val) Returns the sign of the double. Protected Attributes Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better. Public Functions Documentation function isViolated inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated function print virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print function setMus inline void setMus ( std :: vector < double > inmu ) Initializes mu. function getMus inline std :: vector < double > getMus () Gets mu. function constraintGradient virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval function updateMu void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update. function lagragianGradient Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Documentation function sgn inline int sgn ( double val ) Returns the sign of the double. Protected Attributes Documentation variable mus_ std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#shapeworksconstraint","text":"More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions","text":"Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions","text":"Name int sgn (double val) Returns the sign of the double.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes","text":"Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#detailed-description","text":"class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated","text":"inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint.","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated_1","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-print","text":"virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-setmus","text":"inline void setMus ( std :: vector < double > inmu ) Initializes mu.","title":"function setMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-getmus","text":"inline std :: vector < double > getMus () Gets mu.","title":"function getMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constraintgradient","text":"virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-updatemu","text":"void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update.","title":"function updateMu"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-lagragiangradient","text":"Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"function lagragianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-sgn","text":"inline int sgn ( double val ) Returns the sign of the double.","title":"function sgn"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#variable-mus_","text":"std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-25 at 15:40:26 +0000","title":"variable mus_"},{"location":"api/Classes/classshapeworks_1_1Constraints.html","text":"shapeworks::Constraints More... #include Public Types Name using itk::Point< double, 3 > Point3 Public Functions Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object. Detailed Description class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap Public Types Documentation using Point3 using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ; Public Functions Documentation function Constraints inline Constraints () Constraints are inactive when initialized. function ~Constraints inline ~ Constraints () function addPlane void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. function addFreeFormConstraint void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. function transformConstraints bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs) function transformPlanes bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints. function getPlaneConstraints inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. function getFreeformConstraint FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. function isAnyViolated bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos. function printAll void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. function violationReport std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. function violationReportData std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. function constraintsLagrangianGradient vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. function InitializeLagrangianParameters void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus. function UpdateMus void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian. function GetActive inline bool GetActive () Gets the variable active, which determines whether constraints are being used. function SetActive inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used. function read void read ( std :: string filename ) Reads in a constraint json file named filename. function write void write ( std :: string filename ) Writes out a constraint json file named filename. function hasConstraints bool hasConstraints () function clipMesh void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#shapeworksconstraints","text":"More... #include ","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types","text":"Name using itk::Point< double, 3 > Point3","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions","text":"Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#detailed-description","text":"class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#using-point3","text":"using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints","text":"inline Constraints () Constraints are inactive when initialized.","title":"function Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints_1","text":"inline ~ Constraints ()","title":"function ~Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addplane","text":"void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addPlane"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addfreeformconstraint","text":"void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformconstraints","text":"bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs)","title":"function transformConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformplanes","text":"bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints.","title":"function transformPlanes"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getplaneconstraints","text":"inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info.","title":"function getPlaneConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getfreeformconstraint","text":"FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info.","title":"function getFreeformConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-isanyviolated","text":"bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos.","title":"function isAnyViolated"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-printall","text":"void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output.","title":"function printAll"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreport","text":"std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index.","title":"function violationReport"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreportdata","text":"std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC.","title":"function violationReportData"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraintslagrangiangradient","text":"vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle.","title":"function constraintsLagrangianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-initializelagrangianparameters","text":"void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus.","title":"function InitializeLagrangianParameters"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-updatemus","text":"void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian.","title":"function UpdateMus"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getactive","text":"inline bool GetActive () Gets the variable active, which determines whether constraints are being used.","title":"function GetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-setactive","text":"inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used.","title":"function SetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-read","text":"void read ( std :: string filename ) Reads in a constraint json file named filename.","title":"function read"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-write","text":"void write ( std :: string filename ) Writes out a constraint json file named filename.","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-hasconstraints","text":"bool hasConstraints ()","title":"function hasConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-clipmesh","text":"void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-25 at 15:40:26 +0000","title":"function clipMesh"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html","text":"shapeworks::ContourDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< ContourDomain > Pointer Public Functions Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ; Public Functions Documentation function ContourDomain inline explicit ContourDomain () function ~ContourDomain inline virtual ~ ContourDomain () function SetPolyLine void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ) function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleNormalAtPoint inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradientAtPoint inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function Distance virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetPositionAfterSplit virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#shapeworkscontourdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types","text":"Name using std::shared_ptr< ContourDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions","text":"Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#using-pointer","text":"using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain","text":"inline explicit ContourDomain ()","title":"function ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain_1","text":"inline virtual ~ ContourDomain ()","title":"function ~ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-setpolyline","text":"void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function SetPolyLine"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplenormalatpoint","text":"inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradientatpoint","text":"inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-distance","text":"virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-squareddistance","text":"virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getpositionaftersplit","text":"virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-25 at 15:40:26 +0000","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html","text":"shapeworks::CorrespondenceFunction Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone () Protected Functions Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c) Public Attributes Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension Protected Attributes Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ; typedef DataType typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function SetShapeData inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix. function GetShapeData inline ShapeDataType * GetShapeData () function GetShapeData inline const ShapeDataType * GetShapeData () const function SetShapeGradient inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix. function GetShapeGradient inline ShapeGradientType * GetShapeGradient () function GetShapeGradient inline const ShapeGradientType * GetShapeGradient () const function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function CheckForNans inline bool CheckForNans ( vnl_matrix_type mat ) function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function CorrespondenceFunction inline CorrespondenceFunction () function ~CorrespondenceFunction inline virtual ~ CorrespondenceFunction () function operator= void operator = ( const CorrespondenceFunction & ) function CorrespondenceFunction CorrespondenceFunction ( const CorrespondenceFunction & ) function ComputeUpdates virtual void ComputeUpdates ( const ParticleSystem * c ) Public Attributes Documentation variable ShapeGradientType itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeData ShapeDataType :: Pointer m_ShapeData ; variable m_ShapeGradient ShapeGradientType :: Pointer m_ShapeGradient ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_Counter int m_Counter ; variable m_AttributeScales std :: vector < double > m_AttributeScales ; variable m_DomainsPerShape int m_DomainsPerShape ; variable m_AttributesPerDomain std :: vector < int > m_AttributesPerDomain ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_UseXYZ std :: vector < bool > m_UseXYZ ; variable m_UseNormals std :: vector < bool > m_UseNormals ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; variable num_dims int num_dims ; variable num_samples int num_samples ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#shapeworkscorrespondencefunction","text":"Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types","text":"Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions","text":"Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions","text":"Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes","text":"Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes","text":"Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-self","text":"typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapedata","text":"inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix.","title":"function SetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata","text":"inline ShapeDataType * GetShapeData ()","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata_1","text":"inline const ShapeDataType * GetShapeData () const","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapegradient","text":"inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix.","title":"function SetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient","text":"inline ShapeGradientType * GetShapeGradient ()","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient_1","text":"inline const ShapeGradientType * GetShapeGradient () const","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-checkfornans","text":"inline bool CheckForNans ( vnl_matrix_type mat )","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction","text":"inline CorrespondenceFunction ()","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_1","text":"inline virtual ~ CorrespondenceFunction ()","title":"function ~CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-operator","text":"void operator = ( const CorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_2","text":"CorrespondenceFunction ( const CorrespondenceFunction & )","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-computeupdates","text":"virtual void ComputeUpdates ( const ParticleSystem * c )","title":"function ComputeUpdates"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-shapegradienttype","text":"itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ;","title":"variable ShapeGradientType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapedata","text":"ShapeDataType :: Pointer m_ShapeData ;","title":"variable m_ShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapegradient","text":"ShapeGradientType :: Pointer m_ShapeGradient ;","title":"variable m_ShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributescales","text":"std :: vector < double > m_AttributeScales ;","title":"variable m_AttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_domainspershape","text":"int m_DomainsPerShape ;","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributesperdomain","text":"std :: vector < int > m_AttributesPerDomain ;","title":"variable m_AttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usexyz","text":"std :: vector < bool > m_UseXYZ ;","title":"variable m_UseXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usenormals","text":"std :: vector < bool > m_UseNormals ;","title":"variable m_UseNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ;","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_dims","text":"int num_dims ;","title":"variable num_dims"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_samples","text":"int num_samples ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable num_samples"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html","text":"title: shapeworks::CurvatureSamplingFunction summary: Please note: This is the sampling function currently being used. shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject Protected Classes Name struct CrossDomainNeighborhood Public Types Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType Public Functions Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone () Protected Functions Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system) Public Attributes Name constexpr static int VDimension Protected Attributes Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor Additional inherited members Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature. Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ; typedef Self typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ; typedef Superclass typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ; typedef GradientNumericType typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs. typedef VectorType typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ; typedef GradientVectorType typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ; typedef MeanCurvatureCacheType typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ; typedef VnlMatrixType typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate function BeforeEvaluate virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy function ComputeKappa inline double ComputeKappa ( double mc , unsigned int d ) const function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function SetMeanCurvatureCache inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function GetMeanCurvatureCache inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const function SetRho inline void SetRho ( double g ) function GetRho inline double GetRho () const function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double w ) function GetSharedBoundaryWeight inline double GetSharedBoundaryWeight () const function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function GetSharedBoundaryEnabled inline bool GetSharedBoundaryEnabled () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone Protected Functions Documentation function CurvatureSamplingFunction inline CurvatureSamplingFunction () function ~CurvatureSamplingFunction inline virtual ~ CurvatureSamplingFunction () function operator= void operator = ( const CurvatureSamplingFunction & ) function CurvatureSamplingFunction CurvatureSamplingFunction ( const CurvatureSamplingFunction & ) function UpdateNeighborhood void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MeanCurvatureCache MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; variable m_Counter unsigned int m_Counter ; variable m_Rho double m_Rho ; variable m_avgKappa double m_avgKappa ; variable m_IsSharedBoundaryEnabled bool m_IsSharedBoundaryEnabled { false }; variable m_SharedBoundaryWeight double m_SharedBoundaryWeight { 1.0 }; variable m_CurrentSigma double m_CurrentSigma ; variable m_CurrentNeighborhood std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; variable m_MaxMoveFactor float m_MaxMoveFactor = 0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"classshapeworks 1 1CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#shapeworkscurvaturesamplingfunction","text":"Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-classes","text":"Name struct CrossDomainNeighborhood","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions","text":"Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions","text":"Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes","text":"Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#additional-inherited-members","text":"Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#detailed-description","text":"class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-self","text":"typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-superclass","text":"typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientnumerictype","text":"typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientvectortype","text":"typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-meancurvaturecachetype","text":"typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ;","title":"typedef MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vnlmatrixtype","text":"typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeevaluate","text":"virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-computekappa","text":"inline double ComputeKappa ( double mc , unsigned int d ) const","title":"function ComputeKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setmeancurvaturecache","text":"inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s )","title":"function SetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache_1","text":"inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setrho","text":"inline void SetRho ( double g )","title":"function SetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getrho","text":"inline double GetRho () const","title":"function GetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double w )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryweight","text":"inline double GetSharedBoundaryWeight () const","title":"function GetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryenabled","text":"inline bool GetSharedBoundaryEnabled () const","title":"function GetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction","text":"inline CurvatureSamplingFunction ()","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_1","text":"inline virtual ~ CurvatureSamplingFunction ()","title":"function ~CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-operator","text":"void operator = ( const CurvatureSamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_2","text":"CurvatureSamplingFunction ( const CurvatureSamplingFunction & )","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-updateneighborhood","text":"void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system )","title":"function UpdateNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_meancurvaturecache","text":"MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ;","title":"variable m_MeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_counter","text":"unsigned int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_rho","text":"double m_Rho ;","title":"variable m_Rho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_avgkappa","text":"double m_avgKappa ;","title":"variable m_avgKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_issharedboundaryenabled","text":"bool m_IsSharedBoundaryEnabled { false };","title":"variable m_IsSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_sharedboundaryweight","text":"double m_SharedBoundaryWeight { 1.0 };","title":"variable m_SharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentsigma","text":"double m_CurrentSigma ;","title":"variable m_CurrentSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentneighborhood","text":"std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ;","title":"variable m_CurrentNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_maxmovefactor","text":"float m_MaxMoveFactor = 0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_MaxMoveFactor"},{"location":"api/Classes/classshapeworks_1_1DataTool.html","text":"shapeworks::DataTool Inherits from QWidget Public Slots Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked () Public Signals Name void import_button_clicked () Public Functions Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data () Public Slots Documentation slot delete_button_clicked void delete_button_clicked () slot delete_landmarks_clicked void delete_landmarks_clicked () slot set_placing_button_clicked void set_placing_button_clicked ( int id ) slot handle_landmark_mode_changed void handle_landmark_mode_changed () slot handle_constraints_mode_changed void handle_constraints_mode_changed () slot constraints_table_right_click void constraints_table_right_click ( const QPoint & point ) slot copy_ffc_clicked void copy_ffc_clicked () Public Signals Documentation signal import_button_clicked void import_button_clicked () Public Functions Documentation function DataTool DataTool ( Preferences & prefs ) function ~DataTool ~ DataTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function disable_actions void disable_actions () function enable_actions void enable_actions () function update_table void update_table () function update_landmark_table void update_landmark_table () function landmark_domain_changed void landmark_domain_changed () function constraints_domain_changed void constraints_domain_changed () function delete_planes_clicked void delete_planes_clicked () function delete_ffc_clicked void delete_ffc_clicked () function update_notes void update_notes () function get_notes std :: string get_notes () function store_data void store_data () Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#shapeworksdatatool","text":"Inherits from QWidget","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots","text":"Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals","text":"Name void import_button_clicked ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions","text":"Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_button_clicked","text":"void delete_button_clicked ()","title":"slot delete_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_landmarks_clicked","text":"void delete_landmarks_clicked ()","title":"slot delete_landmarks_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-set_placing_button_clicked","text":"void set_placing_button_clicked ( int id )","title":"slot set_placing_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_landmark_mode_changed","text":"void handle_landmark_mode_changed ()","title":"slot handle_landmark_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_constraints_mode_changed","text":"void handle_constraints_mode_changed ()","title":"slot handle_constraints_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-constraints_table_right_click","text":"void constraints_table_right_click ( const QPoint & point )","title":"slot constraints_table_right_click"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-copy_ffc_clicked","text":"void copy_ffc_clicked ()","title":"slot copy_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#signal-import_button_clicked","text":"void import_button_clicked ()","title":"signal import_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool","text":"DataTool ( Preferences & prefs )","title":"function DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool_1","text":"~ DataTool ()","title":"function ~DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-disable_actions","text":"void disable_actions ()","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-enable_actions","text":"void enable_actions ()","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_table","text":"void update_table ()","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_landmark_table","text":"void update_landmark_table ()","title":"function update_landmark_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-landmark_domain_changed","text":"void landmark_domain_changed ()","title":"function landmark_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-constraints_domain_changed","text":"void constraints_domain_changed ()","title":"function constraints_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_planes_clicked","text":"void delete_planes_clicked ()","title":"function delete_planes_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_ffc_clicked","text":"void delete_ffc_clicked ()","title":"function delete_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_notes","text":"void update_notes ()","title":"function update_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-get_notes","text":"std :: string get_notes ()","title":"function get_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-store_data","text":"void store_data () Updated on 2023-10-25 at 15:40:26 +0000","title":"function store_data"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html","text":"shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject Public Types Name enum class FileType enum class SplitType Public Functions Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Detailed Description class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object Public Types Documentation enum FileType Enumerator Value Description ID IMAGE PARTICLES enum SplitType Enumerator Value Description TRAIN TEST Public Functions Documentation function DeepSSMJob DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ) function ~DeepSSMJob ~ DeepSSMJob () function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function run_augmentation void run_augmentation () function run_training void run_training () function run_testing void run_testing () function python_message void python_message ( std :: string str ) function get_list std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#shapeworksdeepssmjob","text":"Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types","text":"Name enum class FileType enum class SplitType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions","text":"Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#detailed-description","text":"class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-filetype","text":"Enumerator Value Description ID IMAGE PARTICLES","title":"enum FileType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-splittype","text":"Enumerator Value Description TRAIN TEST","title":"enum SplitType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob","text":"DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode )","title":"function DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob_1","text":"~ DeepSSMJob ()","title":"function ~DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_augmentation","text":"void run_augmentation ()","title":"function run_augmentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_training","text":"void run_training ()","title":"function run_training"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_testing","text":"void run_testing ()","title":"function run_testing"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-python_message","text":"void python_message ( std :: string str )","title":"function python_message"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-get_list","text":"std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_list"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html","text":"shapeworks::DeepSSMParameters Public Functions Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults () Public Attributes Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C Public Functions Documentation function DeepSSMParameters explicit DeepSSMParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_aug_num_samples int get_aug_num_samples () function set_aug_num_samples void set_aug_num_samples ( int num_samples ) function get_aug_num_dims int get_aug_num_dims () function set_aug_num_dims void set_aug_num_dims ( int num_dims ) function get_training_num_dims int get_training_num_dims () function set_training_num_dims void set_training_num_dims ( int num_dims ) function get_aug_percent_variability double get_aug_percent_variability () function set_aug_percent_variability void set_aug_percent_variability ( double percent_variability ) function get_aug_sampler_type std :: string get_aug_sampler_type () function set_aug_sampler_type void set_aug_sampler_type ( std :: string sampler_type ) function get_training_epochs int get_training_epochs () function set_training_epochs void set_training_epochs ( int epochs ) function get_training_learning_rate double get_training_learning_rate () function set_training_learning_rate void set_training_learning_rate ( double rate ) function get_training_decay_learning_rate bool get_training_decay_learning_rate () function set_training_decay_learning_rate void set_training_decay_learning_rate ( bool decay ) function get_training_fine_tuning bool get_training_fine_tuning () function set_training_fine_tuning void set_training_fine_tuning ( bool fine_tuning ) function get_training_fine_tuning_epochs int get_training_fine_tuning_epochs () function set_training_fine_tuning_epochs void set_training_fine_tuning_epochs ( int epochs ) function get_training_fine_tuning_learning_rate double get_training_fine_tuning_learning_rate () function set_training_fine_tuning_learning_rate void set_training_fine_tuning_learning_rate ( double rate ) function get_training_batch_size int get_training_batch_size () function set_training_batch_size void set_training_batch_size ( int batch_size ) function get_training_split double get_training_split () function set_training_split void set_training_split ( double value ) function get_validation_split double get_validation_split () function set_validation_split void set_validation_split ( double value ) function get_testing_split double get_testing_split () function set_testing_split void set_testing_split ( double value ) function restore_split_defaults void restore_split_defaults () function restore_augmentation_defaults void restore_augmentation_defaults () function restore_training_defaults void restore_training_defaults () function restore_defaults void restore_defaults () Public Attributes Documentation variable DEEPSSM_SAMPLER_GAUSSIAN_C static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; variable DEEPSSM_SAMPLER_MIXTURE_C static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ; variable DEEPSSM_SAMPLER_KDE_C static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#shapeworksdeepssmparameters","text":"","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions","text":"Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes","text":"Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-deepssmparameters","text":"explicit DeepSSMParameters ( ProjectHandle project )","title":"function DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_samples","text":"int get_aug_num_samples ()","title":"function get_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_samples","text":"void set_aug_num_samples ( int num_samples )","title":"function set_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_dims","text":"int get_aug_num_dims ()","title":"function get_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_dims","text":"void set_aug_num_dims ( int num_dims )","title":"function set_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_num_dims","text":"int get_training_num_dims ()","title":"function get_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_num_dims","text":"void set_training_num_dims ( int num_dims )","title":"function set_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_percent_variability","text":"double get_aug_percent_variability ()","title":"function get_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_percent_variability","text":"void set_aug_percent_variability ( double percent_variability )","title":"function set_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_sampler_type","text":"std :: string get_aug_sampler_type ()","title":"function get_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_sampler_type","text":"void set_aug_sampler_type ( std :: string sampler_type )","title":"function set_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_epochs","text":"int get_training_epochs ()","title":"function get_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_epochs","text":"void set_training_epochs ( int epochs )","title":"function set_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_learning_rate","text":"double get_training_learning_rate ()","title":"function get_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_learning_rate","text":"void set_training_learning_rate ( double rate )","title":"function set_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_decay_learning_rate","text":"bool get_training_decay_learning_rate ()","title":"function get_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_decay_learning_rate","text":"void set_training_decay_learning_rate ( bool decay )","title":"function set_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning","text":"bool get_training_fine_tuning ()","title":"function get_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning","text":"void set_training_fine_tuning ( bool fine_tuning )","title":"function set_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_epochs","text":"int get_training_fine_tuning_epochs ()","title":"function get_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_epochs","text":"void set_training_fine_tuning_epochs ( int epochs )","title":"function set_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_learning_rate","text":"double get_training_fine_tuning_learning_rate ()","title":"function get_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_learning_rate","text":"void set_training_fine_tuning_learning_rate ( double rate )","title":"function set_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_batch_size","text":"int get_training_batch_size ()","title":"function get_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_batch_size","text":"void set_training_batch_size ( int batch_size )","title":"function set_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_split","text":"double get_training_split ()","title":"function get_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_split","text":"void set_training_split ( double value )","title":"function set_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_validation_split","text":"double get_validation_split ()","title":"function get_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_validation_split","text":"void set_validation_split ( double value )","title":"function set_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_testing_split","text":"double get_testing_split ()","title":"function get_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_testing_split","text":"void set_testing_split ( double value )","title":"function set_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_split_defaults","text":"void restore_split_defaults ()","title":"function restore_split_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_augmentation_defaults","text":"void restore_augmentation_defaults ()","title":"function restore_augmentation_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_training_defaults","text":"void restore_training_defaults ()","title":"function restore_training_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_gaussian_c","text":"static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ;","title":"variable DEEPSSM_SAMPLER_GAUSSIAN_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_mixture_c","text":"static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ;","title":"variable DEEPSSM_SAMPLER_MIXTURE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_kde_c","text":"static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable DEEPSSM_SAMPLER_KDE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html","text":"shapeworks::DeepSSMTool Inherits from QWidget Public Types Name enum class ToolMode Public Slots Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed () Public Signals Name void update_view () void progress (int ) Public Functions Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature () Public Types Documentation enum ToolMode Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType Public Slots Documentation slot run_clicked void run_clicked () slot restore_defaults void restore_defaults () slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) slot tab_changed void tab_changed ( int tab ) slot update_panels void update_panels () slot update_split void update_split ( QLineEdit * source ) slot handle_new_mesh void handle_new_mesh () slot training_fine_tuning_changed void training_fine_tuning_changed () Public Signals Documentation signal update_view void update_view () signal progress void progress ( int ) Public Functions Documentation function DeepSSMTool DeepSSMTool ( Preferences & prefs ) function ~DeepSSMTool ~ DeepSSMTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function is_active bool is_active () Return if this tool is active. function load_params void load_params () function store_params void store_params () function shutdown void shutdown () function get_shapes ShapeList get_shapes () function resizeEvent void resizeEvent ( QResizeEvent * event ) override function get_display_feature std :: string get_display_feature () Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#shapeworksdeepssmtool","text":"Inherits from QWidget","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types","text":"Name enum class ToolMode","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots","text":"Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals","text":"Name void update_view () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions","text":"Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#enum-toolmode","text":"Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType","title":"enum ToolMode"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-tab_changed","text":"void tab_changed ( int tab )","title":"slot tab_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_panels","text":"void update_panels ()","title":"slot update_panels"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_split","text":"void update_split ( QLineEdit * source )","title":"slot update_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-training_fine_tuning_changed","text":"void training_fine_tuning_changed ()","title":"slot training_fine_tuning_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool","text":"DeepSSMTool ( Preferences & prefs )","title":"function DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool_1","text":"~ DeepSSMTool ()","title":"function ~DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-is_active","text":"bool is_active () Return if this tool is active.","title":"function is_active"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-load_params","text":"void load_params ()","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-store_params","text":"void store_params ()","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_display_feature","text":"std :: string get_display_feature () Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_display_feature"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html","text":"shapeworks::DisentangledCorrespondenceFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type Public Functions Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM. Public Types Documentation typedef Self typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ; typedef shared_vnl_matrix_array_type typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DisentangledCorrespondenceFunction inline DisentangledCorrespondenceFunction () function ~DisentangledCorrespondenceFunction inline virtual ~ DisentangledCorrespondenceFunction () function operator= void operator = ( const DisentangledCorrespondenceFunction & ) function DisentangledCorrespondenceFunction DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ) function ComputeCovarianceMatrices virtual void ComputeCovarianceMatrices () function Initialize inline void Initialize () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_MinimumEigenValue_time_cohort std :: vector < double > m_MinimumEigenValue_time_cohort ; variable m_MinimumEigenValue_shape_cohort std :: vector < double > m_MinimumEigenValue_shape_cohort ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_InverseCovMatrices_time_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ; variable m_InverseCovMatrices_shape_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ; variable m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; variable m_points_mean_shape_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort ; variable m_Time_PointsUpdate shared_vnl_matrix_array_type m_Time_PointsUpdate ; variable m_Shape_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#shapeworksdisentangledcorrespondencefunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types","text":"Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions","text":"Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#detailed-description","text":"class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-self","text":"typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shared_vnl_matrix_array_type","text":"typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ;","title":"typedef shared_vnl_matrix_array_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction","text":"inline DisentangledCorrespondenceFunction ()","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_1","text":"inline virtual ~ DisentangledCorrespondenceFunction ()","title":"function ~DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-operator","text":"void operator = ( const DisentangledCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_2","text":"DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & )","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-computecovariancematrices","text":"virtual void ComputeCovarianceMatrices ()","title":"function ComputeCovarianceMatrices"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_time_cohort","text":"std :: vector < double > m_MinimumEigenValue_time_cohort ;","title":"variable m_MinimumEigenValue_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_shape_cohort","text":"std :: vector < double > m_MinimumEigenValue_shape_cohort ;","title":"variable m_MinimumEigenValue_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_time_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ;","title":"variable m_InverseCovMatrices_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_shape_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ;","title":"variable m_InverseCovMatrices_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_time_cohort","text":"shared_vnl_matrix_array_type m_points_mean_time_cohort ;","title":"variable m_points_mean_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_shape_cohort","text":"shared_vnl_matrix_array_type m_points_mean_shape_cohort ;","title":"variable m_points_mean_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_time_pointsupdate","text":"shared_vnl_matrix_array_type m_Time_PointsUpdate ;","title":"variable m_Time_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shape_pointsupdate","text":"shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_Shape_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html","text":"shapeworks::DualVectorFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType Public Functions Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone () Protected Functions Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff(). Public Types Documentation typedef Self typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type. Public Functions Documentation function itkTypeMacro itkTypeMacro ( DualVectorFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function EnergyA inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function EnergyB inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function Energy inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber function SetFunctionA inline void SetFunctionA ( VectorFunction * o ) function GetFunctionA inline VectorFunction * GetFunctionA () function GetFunctionB inline VectorFunction * GetFunctionB () function SetFunctionB inline void SetFunctionB ( VectorFunction * o ) function SetAOn inline void SetAOn () Turn each term on and off. function SetAOff inline void SetAOff () function SetAOn inline void SetAOn ( bool s ) function GetAOn inline bool GetAOn () const function SetBOn inline void SetBOn () function SetBOff inline void SetBOff () function SetBOn inline void SetBOn ( bool s ) function GetBOn inline bool GetBOn () const function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0. function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling function SetRelativeGradientScaling inline void SetRelativeGradientScaling ( double r ) function GetRelativeGradientScaling inline double GetRelativeGradientScaling () const function GetAverageGradMagA inline double GetAverageGradMagA () const function GetAverageGradMagB inline double GetAverageGradMagB () const function GetAverageEnergyA inline double GetAverageEnergyA () const function GetAverageEnergyB inline double GetAverageEnergyB () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DualVectorFunction inline DualVectorFunction () function ~DualVectorFunction inline virtual ~ DualVectorFunction () function operator= void operator = ( const DualVectorFunction & ) function DualVectorFunction DualVectorFunction ( const DualVectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_AOn bool m_AOn ; variable m_BOn bool m_BOn ; variable m_RelativeGradientScaling double m_RelativeGradientScaling ; variable m_RelativeEnergyScaling double m_RelativeEnergyScaling ; variable m_AverageGradMagA double m_AverageGradMagA ; variable m_AverageGradMagB double m_AverageGradMagB ; variable m_AverageEnergyA double m_AverageEnergyA ; variable m_AverageEnergyB double m_AverageEnergyB ; variable m_Counter double m_Counter ; variable m_FunctionA VectorFunction :: Pointer m_FunctionA ; variable m_FunctionB VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#shapeworksdualvectorfunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types","text":"Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions","text":"Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions","text":"Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes","text":"Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#detailed-description","text":"class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff().","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-self","text":"typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( DualVectorFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energya","text":"inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energyb","text":"inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctiona","text":"inline void SetFunctionA ( VectorFunction * o )","title":"function SetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctiona","text":"inline VectorFunction * GetFunctionA ()","title":"function GetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctionb","text":"inline VectorFunction * GetFunctionB ()","title":"function GetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctionb","text":"inline void SetFunctionB ( VectorFunction * o )","title":"function SetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon","text":"inline void SetAOn () Turn each term on and off.","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaoff","text":"inline void SetAOff ()","title":"function SetAOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon_1","text":"inline void SetAOn ( bool s )","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaon","text":"inline bool GetAOn () const","title":"function GetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon","text":"inline void SetBOn ()","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setboff","text":"inline void SetBOff ()","title":"function SetBOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon_1","text":"inline void SetBOn ( bool s )","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getbon","text":"inline bool GetBOn () const","title":"function GetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0.","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativegradientscaling","text":"inline void SetRelativeGradientScaling ( double r )","title":"function SetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativegradientscaling","text":"inline double GetRelativeGradientScaling () const","title":"function GetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmaga","text":"inline double GetAverageGradMagA () const","title":"function GetAverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmagb","text":"inline double GetAverageGradMagB () const","title":"function GetAverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergya","text":"inline double GetAverageEnergyA () const","title":"function GetAverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergyb","text":"inline double GetAverageEnergyB () const","title":"function GetAverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction","text":"inline DualVectorFunction ()","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_1","text":"inline virtual ~ DualVectorFunction ()","title":"function ~DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-operator","text":"void operator = ( const DualVectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_2","text":"DualVectorFunction ( const DualVectorFunction & )","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_aon","text":"bool m_AOn ;","title":"variable m_AOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_bon","text":"bool m_BOn ;","title":"variable m_BOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativegradientscaling","text":"double m_RelativeGradientScaling ;","title":"variable m_RelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativeenergyscaling","text":"double m_RelativeEnergyScaling ;","title":"variable m_RelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmaga","text":"double m_AverageGradMagA ;","title":"variable m_AverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmagb","text":"double m_AverageGradMagB ;","title":"variable m_AverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergya","text":"double m_AverageEnergyA ;","title":"variable m_AverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergyb","text":"double m_AverageEnergyB ;","title":"variable m_AverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_counter","text":"double m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functiona","text":"VectorFunction :: Pointer m_FunctionA ;","title":"variable m_FunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functionb","text":"VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_FunctionB"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html","text":"shapeworks::EigenUtils Public Functions Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index) Public Functions Documentation function compute_mean_and_stddev static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#shapeworkseigenutils","text":"","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions","text":"Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#function-compute_mean_and_stddev","text":"static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_mean_and_stddev"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html","text":"shapeworks::ExcelProjectReader Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format Public Functions Documentation function ExcelProjectReader ExcelProjectReader ( Project & project ) function ~ExcelProjectReader ~ ExcelProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#shapeworksexcelprojectreader","text":"Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions","text":"Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#detailed-description","text":"class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader","text":"ExcelProjectReader ( Project & project )","title":"function ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader_1","text":"~ ExcelProjectReader ()","title":"function ~ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html","text":"shapeworks::ExcelProjectWriter Excel file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, const std::string & filename) Detailed Description class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format Public Functions Documentation function write_project static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#shapeworksexcelprojectwriter","text":"Excel file format writer for Project . More... #include ","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, const std::string & filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#detailed-description","text":"class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1Executable.html","text":"shapeworks::Executable Public Functions Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv) Public Functions Documentation function Executable Executable () function addCommand void addCommand ( Command & command ) function run int run ( int argc , char const * const * argv ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#shapeworksexecutable","text":"","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions","text":"Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-executable","text":"Executable ()","title":"function Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-addcommand","text":"void addCommand ( Command & command )","title":"function addCommand"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-run","text":"int run ( int argc , char const * const * argv ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html","text":"shapeworks::ExportImageDialog More... #include Inherits from QDialog Public Functions Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode) Detailed Description class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images Public Functions Documentation function ExportImageDialog ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#shapeworksexportimagedialog","text":"More... #include Inherits from QDialog","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions","text":"Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#detailed-description","text":"class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#function-exportimagedialog","text":"ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html","text":"shapeworks::ExportUtils Export utilities for Studio. #include Public Functions Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename) Public Functions Documentation function get_save_filename static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ) function export_all_subjects_particle_scalars static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ) function write_scalars static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ) function write_particle_scalars static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#shapeworksexportutils","text":"Export utilities for Studio. #include ","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions","text":"Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-get_save_filename","text":"static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext )","title":"function get_save_filename"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-export_all_subjects_particle_scalars","text":"static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session )","title":"function export_all_subjects_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_scalars","text":"static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename )","title":"function write_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_particle_scalars","text":"static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html","text":"shapeworks::FreeFormConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function FreeFormConstraint inline FreeFormConstraint () function setMesh inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC. function getMesh inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC. function readyForOptimize bool readyForOptimize () const Prepares for optimize. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function constraintEval inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function setDefinition void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists. function getDefinition inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. function applyToPolyData void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata. function boundaries std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries function getQueryPoint inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point function setQueryPoint inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point function computeBoundaries void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars function setInoutPolyData inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata. function getInoutPolyData inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata. function createInoutPolyData void createInoutPolyData () Create the in/out poly data from the definition poly data. function isSet bool isSet () Return if this FFC is set or not. function setPainted void setPainted ( bool painted ) Set if this FFC has paint on it or not. function reset void reset () Reset to initial state. function computeGradientFields void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh. function convertLegacyFFC void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#shapeworksfreeformconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions","text":"Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#detailed-description","text":"class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-freeformconstraint","text":"inline FreeFormConstraint ()","title":"function FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setmesh","text":"inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC.","title":"function setMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getmesh","text":"inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC.","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-readyforoptimize","text":"bool readyForOptimize () const Prepares for optimize.","title":"function readyForOptimize"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-print","text":"inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constrainteval","text":"inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setdefinition","text":"void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists.","title":"function setDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getdefinition","text":"inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists.","title":"function getDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-applytopolydata","text":"void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata.","title":"function applyToPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-boundaries","text":"std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries","title":"function boundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getquerypoint","text":"inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point","title":"function getQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setquerypoint","text":"inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point","title":"function setQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computeboundaries","text":"void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars","title":"function computeBoundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setinoutpolydata","text":"inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata.","title":"function setInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getinoutpolydata","text":"inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata.","title":"function getInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-createinoutpolydata","text":"void createInoutPolyData () Create the in/out poly data from the definition poly data.","title":"function createInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isset","text":"bool isSet () Return if this FFC is set or not.","title":"function isSet"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setpainted","text":"void setPainted ( bool painted ) Set if this FFC has paint on it or not.","title":"function setPainted"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-reset","text":"void reset () Reset to initial state.","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computegradientfields","text":"void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh.","title":"function computeGradientFields"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-convertlegacyffc","text":"void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-25 at 15:40:27 +0000","title":"function convertLegacyFFC"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html","text":"shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject Public Types Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const Protected Functions Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer () Detailed Description template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ; typedef Superclass typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods). function operator[] inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k. function Get inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator function GetSize inline unsigned long int GetSize () const Number of objects in the container. Protected Functions Documentation function GenericContainer inline GenericContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GenericContainer inline virtual ~ GenericContainer () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#shapeworksgenericcontainer","text":"This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types","text":"Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions","text":"Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-self","text":"typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-superclass","text":"typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-operator","text":"inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k.","title":"function operator[]"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-get","text":"inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator","title":"function Get"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-getsize","text":"inline unsigned long int GetSize () const Number of objects in the container.","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer","text":"inline GenericContainer ()","title":"function GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer_1","text":"inline virtual ~ GenericContainer () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html","text":"shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ; typedef Superclass typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function ZeroAllValues inline void ZeroAllValues () Protected Functions Documentation function GenericContainerArray inline GenericContainerArray () function ~GenericContainerArray inline virtual ~ GenericContainerArray () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#shapeworksgenericcontainerarray","text":"This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types","text":"Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions","text":"Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-self","text":"typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-superclass","text":"typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-zeroallvalues","text":"inline void ZeroAllValues ()","title":"function ZeroAllValues"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray","text":"inline GenericContainerArray ()","title":"function GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray_1","text":"inline virtual ~ GenericContainerArray ()","title":"function ~GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html","text":"shapeworks::GradientDescentOptimizer Inherits from itk::Object Public Types Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization. Protected Functions Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer () Public Attributes Name constexpr static unsigned int VDimension Public Types Documentation using TGradientNumericType using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ; typedef Self typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs typedef Superclass typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ; typedef DomainType typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain. typedef ParticleSystemType typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality. typedef GradientFunctionType typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function. typedef VectorType typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function StartOptimization inline void StartOptimization () Start the optimization. function StartAdaptiveGaussSeidelOptimization void StartAdaptiveGaussSeidelOptimization () function AugmentedLagrangianConstraints void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ) function StopOptimization inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration. function AbortProcessing inline void AbortProcessing () function itkGetMacro itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver. function itkSetMacro itkSetMacro ( NumberOfIterations , unsigned int ) function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function itkGetMacro itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value. function itkSetMacro itkSetMacro ( TimeStep , double ) function itkGetMacro itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use. function itkSetMacro itkSetMacro ( MaximumNumberOfIterations , unsigned int ) function itkGetMacro itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution. function itkSetMacro itkSetMacro ( Tolerance , double ) function itkGetObjectMacro itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) function itkGetObjectMacro itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( GradientFunction , GradientFunctionType ) function SetInitializationMode inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false) function SetCheckIterations inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence. function SetInitializationStartScalingFactor inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization. Protected Functions Documentation function GradientDescentOptimizer GradientDescentOptimizer () function GradientDescentOptimizer GradientDescentOptimizer ( const GradientDescentOptimizer & ) function operator= const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GradientDescentOptimizer inline virtual ~ GradientDescentOptimizer () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#shapeworksgradientdescentoptimizer","text":"Inherits from itk::Object","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types","text":"Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions","text":"Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#using-tgradientnumerictype","text":"using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ;","title":"using TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-self","text":"typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-superclass","text":"typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-domaintype","text":"typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain.","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-gradientfunctiontype","text":"typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function.","title":"typedef GradientFunctionType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-vectortype","text":"typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startoptimization","text":"inline void StartOptimization () Start the optimization.","title":"function StartOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startadaptivegaussseideloptimization","text":"void StartAdaptiveGaussSeidelOptimization ()","title":"function StartAdaptiveGaussSeidelOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-augmentedlagrangianconstraints","text":"void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index )","title":"function AugmentedLagrangianConstraints"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-stopoptimization","text":"inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration.","title":"function StopOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-abortprocessing","text":"inline void AbortProcessing ()","title":"function AbortProcessing"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro","text":"itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro","text":"itkSetMacro ( NumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_1","text":"itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_1","text":"itkSetMacro ( TimeStep , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_2","text":"itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_2","text":"itkSetMacro ( MaximumNumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_3","text":"itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_3","text":"itkSetMacro ( Tolerance , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( ParticleSystem , ParticleSystemType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro_1","text":"itkSetObjectMacro ( GradientFunction , GradientFunctionType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationmode","text":"inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false)","title":"function SetInitializationMode"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setcheckiterations","text":"inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence.","title":"function SetCheckIterations"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationstartscalingfactor","text":"inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization.","title":"function SetInitializationStartScalingFactor"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer","text":"GradientDescentOptimizer ()","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_1","text":"GradientDescentOptimizer ( const GradientDescentOptimizer & )","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-operator","text":"const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_2","text":"inline virtual ~ GradientDescentOptimizer ()","title":"function ~GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1Groom.html","text":"shapeworks::Groom High level groom API. More... #include Public Functions Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform. Protected Attributes Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_ Detailed Description class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations. Public Functions Documentation function Groom Groom ( ProjectHandle project ) function run bool run () Run the grooming. function abort void abort () Set abort as soon as possible. function get_aborted bool get_aborted () Return if grooming was aborted. function compute_landmark_distance static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks. function compute_landmark_transform static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform. Protected Attributes Documentation variable progress_ std :: atomic < float > progress_ = 0 ; variable total_ops_ std :: atomic < int > total_ops_ = 0 ; variable progress_counter_ std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#shapeworksgroom","text":"High level groom API. More... #include ","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions","text":"Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes","text":"Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Groom.html#detailed-description","text":"class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-groom","text":"Groom ( ProjectHandle project )","title":"function Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-run","text":"bool run () Run the grooming.","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-abort","text":"void abort () Set abort as soon as possible.","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-get_aborted","text":"bool get_aborted () Return if grooming was aborted.","title":"function get_aborted"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_distance","text":"static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks.","title":"function compute_landmark_distance"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_transform","text":"static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform.","title":"function compute_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_","text":"std :: atomic < float > progress_ = 0 ;","title":"variable progress_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-total_ops_","text":"std :: atomic < int > total_ops_ = 0 ;","title":"variable total_ops_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_counter_","text":"std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable progress_counter_"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html","text":"shapeworks::GroomCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#shapeworksgroomcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html","text":"shapeworks::GroomParameters More... #include Public Functions Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults () Public Attributes Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C Detailed Description class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters Public Functions Documentation function GroomParameters explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ) function set_domain_name void set_domain_name ( std :: string domain_name ) function save_to_project void save_to_project () function get_groom_output_prefix std :: string get_groom_output_prefix () function set_groom_output_prefix void set_groom_output_prefix ( std :: string prefix ) function get_groom_all_domains_the_same bool get_groom_all_domains_the_same () function set_groom_all_domains_the_same void set_groom_all_domains_the_same ( bool value ) function get_alignment_enabled bool get_alignment_enabled () function set_alignment_enabled void set_alignment_enabled ( bool value ) function get_alignment_method std :: string get_alignment_method () function set_alignment_method void set_alignment_method ( std :: string method ) function get_isolate_tool bool get_isolate_tool () function set_isolate_tool void set_isolate_tool ( bool value ) function get_fill_holes_tool bool get_fill_holes_tool () function set_fill_holes_tool void set_fill_holes_tool ( bool value ) function get_fill_mesh_holes_tool bool get_fill_mesh_holes_tool () function set_fill_mesh_holes_tool void set_fill_mesh_holes_tool ( bool value ) function get_auto_pad_tool bool get_auto_pad_tool () function set_auto_pad_tool void set_auto_pad_tool ( bool value ) function get_padding_amount int get_padding_amount () function set_padding_amount void set_padding_amount ( int padding_amount ) function get_antialias_tool bool get_antialias_tool () function set_antialias_tool void set_antialias_tool ( bool value ) function get_antialias_iterations int get_antialias_iterations () function set_antialias_iterations void set_antialias_iterations ( int iterations ) function get_blur_tool bool get_blur_tool () function set_blur_tool void set_blur_tool ( bool value ) function get_blur_amount double get_blur_amount () function set_blur_amount void set_blur_amount ( double blur_amount ) function get_fast_marching bool get_fast_marching () function set_fast_marching void set_fast_marching ( bool value ) function get_mesh_smooth bool get_mesh_smooth () function set_mesh_smooth void set_mesh_smooth ( bool value ) function get_mesh_smoothing_method std :: string get_mesh_smoothing_method () function set_mesh_smoothing_method void set_mesh_smoothing_method ( std :: string method ) function get_mesh_vtk_laplacian_iterations int get_mesh_vtk_laplacian_iterations () function set_mesh_vtk_laplacian_iterations void set_mesh_vtk_laplacian_iterations ( int iterations ) function get_mesh_vtk_laplacian_relaxation double get_mesh_vtk_laplacian_relaxation () function set_mesh_vtk_laplacian_relaxation void set_mesh_vtk_laplacian_relaxation ( double relaxation ) function get_mesh_vtk_windowed_sinc_iterations int get_mesh_vtk_windowed_sinc_iterations () function set_mesh_vtk_windowed_sinc_iterations void set_mesh_vtk_windowed_sinc_iterations ( int iterations ) function get_mesh_vtk_windowed_sinc_passband double get_mesh_vtk_windowed_sinc_passband () function set_mesh_vtk_windowed_sinc_passband void set_mesh_vtk_windowed_sinc_passband ( double passband ) function get_use_icp bool get_use_icp () function get_use_center bool get_use_center () function get_use_landmarks bool get_use_landmarks () function get_crop bool get_crop () function set_crop void set_crop ( bool crop ) function get_convert_to_mesh bool get_convert_to_mesh () function set_convert_to_mesh void set_convert_to_mesh ( bool value ) function get_reflect bool get_reflect () function set_reflect void set_reflect ( bool reflect ) function get_reflect_column std :: string get_reflect_column () function set_reflect_column void set_reflect_column ( std :: string column ) function get_reflect_choice std :: string get_reflect_choice () function set_reflect_choice void set_reflect_choice ( std :: string choice ) function get_reflect_axis std :: string get_reflect_axis () function set_reflect_axis void set_reflect_axis ( std :: string axies ) function get_resample bool get_resample () function set_resample void set_resample ( bool resample ) function get_isotropic bool get_isotropic () function set_isotropic void set_isotropic ( bool isotropic ) function get_iso_spacing double get_iso_spacing () function set_iso_spacing void set_iso_spacing ( double spacing ) function get_spacing std :: vector < double > get_spacing () function set_spacing void set_spacing ( std :: vector < double > spacing ) function get_remesh bool get_remesh () function set_remesh void set_remesh ( bool remesh ) function get_remesh_percent_mode bool get_remesh_percent_mode () function set_remesh_percent_mode void set_remesh_percent_mode ( bool mode ) function get_remesh_percent double get_remesh_percent () function set_remesh_percent void set_remesh_percent ( double percent ) function get_remesh_num_vertices int get_remesh_num_vertices () function set_remesh_num_vertices void set_remesh_num_vertices ( int num_vertices ) function get_remesh_gradation double get_remesh_gradation () function set_remesh_gradation void set_remesh_gradation ( double gradation ) function get_skip_grooming bool get_skip_grooming () function set_skip_grooming void set_skip_grooming ( bool skip ) function restore_defaults void restore_defaults () Public Attributes Documentation variable GROOM_SMOOTH_VTK_LAPLACIAN_C static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; variable GROOM_ALIGNMENT_CENTER_C static const std :: string GROOM_ALIGNMENT_CENTER_C ; variable GROOM_ALIGNMENT_ICP_C static const std :: string GROOM_ALIGNMENT_ICP_C ; variable GROOM_ALIGNMENT_LANDMARK_C static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#shapeworksgroomparameters","text":"More... #include ","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions","text":"Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes","text":"Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#detailed-description","text":"class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-groomparameters","text":"explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" )","title":"function GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_domain_name","text":"void set_domain_name ( std :: string domain_name )","title":"function set_domain_name"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_output_prefix","text":"std :: string get_groom_output_prefix ()","title":"function get_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_output_prefix","text":"void set_groom_output_prefix ( std :: string prefix )","title":"function set_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_all_domains_the_same","text":"bool get_groom_all_domains_the_same ()","title":"function get_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_all_domains_the_same","text":"void set_groom_all_domains_the_same ( bool value )","title":"function set_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_enabled","text":"bool get_alignment_enabled ()","title":"function get_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_enabled","text":"void set_alignment_enabled ( bool value )","title":"function set_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_method","text":"std :: string get_alignment_method ()","title":"function get_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_method","text":"void set_alignment_method ( std :: string method )","title":"function set_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isolate_tool","text":"bool get_isolate_tool ()","title":"function get_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isolate_tool","text":"void set_isolate_tool ( bool value )","title":"function set_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_holes_tool","text":"bool get_fill_holes_tool ()","title":"function get_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_holes_tool","text":"void set_fill_holes_tool ( bool value )","title":"function set_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_mesh_holes_tool","text":"bool get_fill_mesh_holes_tool ()","title":"function get_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_mesh_holes_tool","text":"void set_fill_mesh_holes_tool ( bool value )","title":"function set_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_auto_pad_tool","text":"bool get_auto_pad_tool ()","title":"function get_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_auto_pad_tool","text":"void set_auto_pad_tool ( bool value )","title":"function set_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_padding_amount","text":"int get_padding_amount ()","title":"function get_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_padding_amount","text":"void set_padding_amount ( int padding_amount )","title":"function set_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_tool","text":"bool get_antialias_tool ()","title":"function get_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_tool","text":"void set_antialias_tool ( bool value )","title":"function set_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_iterations","text":"int get_antialias_iterations ()","title":"function get_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_iterations","text":"void set_antialias_iterations ( int iterations )","title":"function set_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_tool","text":"bool get_blur_tool ()","title":"function get_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_tool","text":"void set_blur_tool ( bool value )","title":"function set_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_amount","text":"double get_blur_amount ()","title":"function get_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_amount","text":"void set_blur_amount ( double blur_amount )","title":"function set_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fast_marching","text":"bool get_fast_marching ()","title":"function get_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fast_marching","text":"void set_fast_marching ( bool value )","title":"function set_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smooth","text":"bool get_mesh_smooth ()","title":"function get_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smooth","text":"void set_mesh_smooth ( bool value )","title":"function set_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smoothing_method","text":"std :: string get_mesh_smoothing_method ()","title":"function get_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smoothing_method","text":"void set_mesh_smoothing_method ( std :: string method )","title":"function set_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_iterations","text":"int get_mesh_vtk_laplacian_iterations ()","title":"function get_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_iterations","text":"void set_mesh_vtk_laplacian_iterations ( int iterations )","title":"function set_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_relaxation","text":"double get_mesh_vtk_laplacian_relaxation ()","title":"function get_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_relaxation","text":"void set_mesh_vtk_laplacian_relaxation ( double relaxation )","title":"function set_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_iterations","text":"int get_mesh_vtk_windowed_sinc_iterations ()","title":"function get_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_iterations","text":"void set_mesh_vtk_windowed_sinc_iterations ( int iterations )","title":"function set_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_passband","text":"double get_mesh_vtk_windowed_sinc_passband ()","title":"function get_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_passband","text":"void set_mesh_vtk_windowed_sinc_passband ( double passband )","title":"function set_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_icp","text":"bool get_use_icp ()","title":"function get_use_icp"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_center","text":"bool get_use_center ()","title":"function get_use_center"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_crop","text":"bool get_crop ()","title":"function get_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_crop","text":"void set_crop ( bool crop )","title":"function set_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_convert_to_mesh","text":"bool get_convert_to_mesh ()","title":"function get_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_convert_to_mesh","text":"void set_convert_to_mesh ( bool value )","title":"function set_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect","text":"bool get_reflect ()","title":"function get_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect","text":"void set_reflect ( bool reflect )","title":"function set_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_column","text":"std :: string get_reflect_column ()","title":"function get_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_column","text":"void set_reflect_column ( std :: string column )","title":"function set_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_choice","text":"std :: string get_reflect_choice ()","title":"function get_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_choice","text":"void set_reflect_choice ( std :: string choice )","title":"function set_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_axis","text":"std :: string get_reflect_axis ()","title":"function get_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_axis","text":"void set_reflect_axis ( std :: string axies )","title":"function set_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_resample","text":"bool get_resample ()","title":"function get_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_resample","text":"void set_resample ( bool resample )","title":"function set_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isotropic","text":"bool get_isotropic ()","title":"function get_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isotropic","text":"void set_isotropic ( bool isotropic )","title":"function set_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_iso_spacing","text":"double get_iso_spacing ()","title":"function get_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_iso_spacing","text":"void set_iso_spacing ( double spacing )","title":"function set_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_spacing","text":"std :: vector < double > get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_spacing","text":"void set_spacing ( std :: vector < double > spacing )","title":"function set_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh","text":"bool get_remesh ()","title":"function get_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh","text":"void set_remesh ( bool remesh )","title":"function set_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent_mode","text":"bool get_remesh_percent_mode ()","title":"function get_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent_mode","text":"void set_remesh_percent_mode ( bool mode )","title":"function set_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent","text":"double get_remesh_percent ()","title":"function get_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent","text":"void set_remesh_percent ( double percent )","title":"function set_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_num_vertices","text":"int get_remesh_num_vertices ()","title":"function get_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_num_vertices","text":"void set_remesh_num_vertices ( int num_vertices )","title":"function set_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_gradation","text":"double get_remesh_gradation ()","title":"function get_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_gradation","text":"void set_remesh_gradation ( double gradation )","title":"function set_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_skip_grooming","text":"bool get_skip_grooming ()","title":"function get_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_skip_grooming","text":"void set_skip_grooming ( bool skip )","title":"function set_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_laplacian_c","text":"static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ;","title":"variable GROOM_SMOOTH_VTK_LAPLACIAN_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_windowed_sinc_c","text":"static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ;","title":"variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_center_c","text":"static const std :: string GROOM_ALIGNMENT_CENTER_C ;","title":"variable GROOM_ALIGNMENT_CENTER_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_icp_c","text":"static const std :: string GROOM_ALIGNMENT_ICP_C ;","title":"variable GROOM_ALIGNMENT_ICP_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_landmark_c","text":"static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable GROOM_ALIGNMENT_LANDMARK_C"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html","text":"shapeworks::GroomTool Inherits from QWidget Public Slots Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) Public Signals Name void groom_start () void groom_complete () void progress (int ) Public Functions Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_antialias_checkbox_stateChanged void on_antialias_checkbox_stateChanged ( int state ) slot on_blur_checkbox_stateChanged void on_blur_checkbox_stateChanged ( int state ) slot on_autopad_checkbox_stateChanged void on_autopad_checkbox_stateChanged ( int state ) slot skip_grooming_toggled void skip_grooming_toggled () slot on_restore_defaults_clicked void on_restore_defaults_clicked () slot update_ui void update_ui () slot domain_changed void domain_changed () slot alignment_checkbox_changed void alignment_checkbox_changed ( int state ) slot alignment_option_changed void alignment_option_changed ( int index ) slot reflect_checkbox_changed void reflect_checkbox_changed ( int state ) slot reflect_column_changed void reflect_column_changed ( int index ) slot reflect_choice_changed void reflect_choice_changed ( int index ) slot reflect_axis_changed void reflect_axis_changed ( int index ) slot on_run_groom_button_clicked void on_run_groom_button_clicked () Run groom tool. slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) Public Signals Documentation signal groom_start void groom_start () signal groom_complete void groom_complete () signal progress void progress ( int ) Public Functions Documentation function GroomTool GroomTool ( Preferences & prefs , Telemetry & telemetry ) function ~GroomTool ~ GroomTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function disable_actions void disable_actions () Disable action buttons. function enable_actions void enable_actions () Enable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#shapeworksgroomtool","text":"Inherits from QWidget","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots","text":"Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals","text":"Name void groom_start () void groom_complete () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions","text":"Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_antialias_checkbox_statechanged","text":"void on_antialias_checkbox_stateChanged ( int state )","title":"slot on_antialias_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_blur_checkbox_statechanged","text":"void on_blur_checkbox_stateChanged ( int state )","title":"slot on_blur_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_autopad_checkbox_statechanged","text":"void on_autopad_checkbox_stateChanged ( int state )","title":"slot on_autopad_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-skip_grooming_toggled","text":"void skip_grooming_toggled ()","title":"slot skip_grooming_toggled"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_restore_defaults_clicked","text":"void on_restore_defaults_clicked ()","title":"slot on_restore_defaults_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-update_ui","text":"void update_ui ()","title":"slot update_ui"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-domain_changed","text":"void domain_changed ()","title":"slot domain_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_checkbox_changed","text":"void alignment_checkbox_changed ( int state )","title":"slot alignment_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_option_changed","text":"void alignment_option_changed ( int index )","title":"slot alignment_option_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_checkbox_changed","text":"void reflect_checkbox_changed ( int state )","title":"slot reflect_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_column_changed","text":"void reflect_column_changed ( int index )","title":"slot reflect_column_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_choice_changed","text":"void reflect_choice_changed ( int index )","title":"slot reflect_choice_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_axis_changed","text":"void reflect_axis_changed ( int index )","title":"slot reflect_axis_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_run_groom_button_clicked","text":"void on_run_groom_button_clicked () Run groom tool.","title":"slot on_run_groom_button_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_start","text":"void groom_start ()","title":"signal groom_start"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_complete","text":"void groom_complete ()","title":"signal groom_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool","text":"GroomTool ( Preferences & prefs , Telemetry & telemetry )","title":"function GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool_1","text":"~ GroomTool ()","title":"function ~GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html","text":"shapeworks::GroupPvalueJob Inherits from shapeworks::Job , QObject Public Functions Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function GroupPvalueJob GroupPvalueJob ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#shapeworksgrouppvaluejob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions","text":"Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-grouppvaluejob","text":"GroupPvalueJob ( ParticleShapeStatistics stats )","title":"function GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1Image.html","text":"shapeworks::Image Module: Image Classes More... #include Public Types Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType Public Functions Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images. Public Types Documentation enum InterpolationType Enumerator Value Description Linear NearestNeighbor using PixelType using shapeworks :: Image :: PixelType = float ; using ImageType using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; Public Functions Documentation function Image Image ( const Dims dims ) function Image inline Image ( const std :: string & pathname ) function Image inline Image ( ImageType :: Pointer imagePtr ) function Image Image ( const vtkSmartPointer < vtkImageData > vtkImage ) function Image inline Image ( Image && img ) function Image inline Image ( const Image & img ) function operator= Image & operator = ( const Image & img ) function operator= Image & operator = ( Image && img ) lvalue assignment operator function operator ImageType::Pointer inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image function getITKImage inline ImageType :: Pointer getITKImage () const function getVTKImage vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image function operator- Image & operator - () negation operator function operator+ Image operator + ( const Image & other ) const plus operator to add two images function operator+= Image & operator += ( const Image & other ) function operator- Image operator - ( const Image & other ) const minus operator to add two images function operator-= Image & operator -= ( const Image & other ) function operator* Image operator * ( const Image & other ) const multiply operator to multiply two images function operator* Image operator * ( const PixelType x ) const multiply operator to scale contents of an image function operator*= Image & operator *= ( const PixelType x ) function operator/ Image operator / ( const PixelType x ) const divide operator to scale contents of an image function operator/= Image & operator /= ( const PixelType x ) function operator+ Image operator + ( const PixelType x ) const plus operator to shift contents of an image function operator+= Image & operator += ( const PixelType x ) function operator- Image operator - ( const PixelType x ) const minus operator to shift contents of an image function operator-= Image & operator -= ( const PixelType x ) function antialias Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image function recenter Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image function resample Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator function resample Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing function resample Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing function resize Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same) function pad Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value function pad Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value function pad Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value function translate Image & translate ( const Vector3 & v ) helper to simply translate image function scale Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin) function rotate Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function rotate Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function createCenterOfMassTransform TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image function createRigidRegistrationTransform TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations function applyTransform Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter function applyTransform Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values function extractLabel Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image function closeHoles Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume function binarize Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user function computeDT Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue function applyCurvatureFilter Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter function applyGradientFilter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter function applySigmoidFilter Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter function applyTPLevelSetFilter Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter function topologyPreservingSmooth Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] function applyIntensityFilter Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter function gaussianBlur Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma function crop Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added function clip Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane function reflect Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane). function setOrigin Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value function setSpacing Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value function setCoordsys Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space function isolate Image & isolate () isolate the largest object in a binary segmentation function dims inline Dims dims () const logical dimensions of the image function size inline Point3 size () const physical dimensions of the image (dims * spacing) function spacing inline Vector spacing () const physical spacing of the image function origin inline Point3 origin () const physical coordinates of image origin function center inline Point3 center () const physical coordinates of center of this image function coordsys inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space function centerOfMass Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval] function min PixelType min () minimum of image function max PixelType max () maximum of image function mean PixelType mean () mean of image function std PixelType std () standard deviation of image function logicalBoundingBox IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space function physicalBoundingBox PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space function physicalBoundingBox PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space function logicalToPhysical PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates function physicalToLogical IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates function logicalToPhysical Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space function physicalToLogical Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate function isInside bool isInside ( const Point3 & p ) const checks if a given point is inside the image function iterator ImageIterator iterator () creates an image iterator and returns it function compare bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter function operator== inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter function write Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension function toMesh Mesh toMesh ( PixelType isovalue ) const converts image to mesh function evaluate Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#shapeworksimage","text":"Module: Image Classes More... #include ","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types","text":"Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions","text":"Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#detailed-description","text":"class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#enum-interpolationtype","text":"Enumerator Value Description Linear NearestNeighbor","title":"enum InterpolationType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-pixeltype","text":"using shapeworks :: Image :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imagetype","text":"using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-statsptr","text":"using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ;","title":"using StatsPtr"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imageiterator","text":"using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-interpolatortype","text":"using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ;","title":"using InterpolatorType"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image","text":"Image ( const Dims dims )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_1","text":"inline Image ( const std :: string & pathname )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_2","text":"inline Image ( ImageType :: Pointer imagePtr )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_3","text":"Image ( const vtkSmartPointer < vtkImageData > vtkImage )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_4","text":"inline Image ( Image && img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_5","text":"inline Image ( const Image & img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator","text":"Image & operator = ( const Image & img )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_1","text":"Image & operator = ( Image && img ) lvalue assignment operator","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-imagetypepointer","text":"inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image","title":"function operator ImageType::Pointer"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getitkimage","text":"inline ImageType :: Pointer getITKImage () const","title":"function getITKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getvtkimage","text":"vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image","title":"function getVTKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-","text":"Image & operator - () negation operator","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_2","text":"Image operator + ( const Image & other ) const plus operator to add two images","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_3","text":"Image & operator += ( const Image & other )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_1","text":"Image operator - ( const Image & other ) const minus operator to add two images","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_2","text":"Image & operator -= ( const Image & other )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_4","text":"Image operator * ( const Image & other ) const multiply operator to multiply two images","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_5","text":"Image operator * ( const PixelType x ) const multiply operator to scale contents of an image","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_6","text":"Image & operator *= ( const PixelType x )","title":"function operator*="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_7","text":"Image operator / ( const PixelType x ) const divide operator to scale contents of an image","title":"function operator/"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_8","text":"Image & operator /= ( const PixelType x )","title":"function operator/="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_9","text":"Image operator + ( const PixelType x ) const plus operator to shift contents of an image","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_10","text":"Image & operator += ( const PixelType x )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_3","text":"Image operator - ( const PixelType x ) const minus operator to shift contents of an image","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_4","text":"Image & operator -= ( const PixelType x )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-antialias","text":"Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image","title":"function antialias"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-recenter","text":"Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image","title":"function recenter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample","text":"Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_1","text":"Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_2","text":"Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resize","text":"Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same)","title":"function resize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad","text":"Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_1","text":"Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_2","text":"Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-translate","text":"Image & translate ( const Vector3 & v ) helper to simply translate image","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-scale","text":"Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin)","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate","text":"Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate_1","text":"Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createcenterofmasstransform","text":"TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image","title":"function createCenterOfMassTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createrigidregistrationtransform","text":"TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"function createRigidRegistrationTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform","text":"Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform_1","text":"Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-extractlabel","text":"Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image","title":"function extractLabel"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-closeholes","text":"Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume","title":"function closeHoles"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-binarize","text":"Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user","title":"function binarize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-computedt","text":"Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue","title":"function computeDT"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applycurvaturefilter","text":"Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter","title":"function applyCurvatureFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applygradientfilter","text":"Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter","title":"function applyGradientFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applysigmoidfilter","text":"Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter","title":"function applySigmoidFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytplevelsetfilter","text":"Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter","title":"function applyTPLevelSetFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-topologypreservingsmooth","text":"Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"function topologyPreservingSmooth"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applyintensityfilter","text":"Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter","title":"function applyIntensityFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-gaussianblur","text":"Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma","title":"function gaussianBlur"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-crop","text":"Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added","title":"function crop"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-clip","text":"Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-reflect","text":"Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane).","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setorigin","text":"Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value","title":"function setOrigin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setspacing","text":"Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value","title":"function setSpacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setcoordsys","text":"Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space","title":"function setCoordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isolate","text":"Image & isolate () isolate the largest object in a binary segmentation","title":"function isolate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-dims","text":"inline Dims dims () const logical dimensions of the image","title":"function dims"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-size","text":"inline Point3 size () const physical dimensions of the image (dims * spacing)","title":"function size"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-spacing","text":"inline Vector spacing () const physical spacing of the image","title":"function spacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-origin","text":"inline Point3 origin () const physical coordinates of image origin","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-center","text":"inline Point3 center () const physical coordinates of center of this image","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-coordsys","text":"inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space","title":"function coordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-centerofmass","text":"Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval]","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-min","text":"PixelType min () minimum of image","title":"function min"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-max","text":"PixelType max () maximum of image","title":"function max"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-mean","text":"PixelType mean () mean of image","title":"function mean"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-std","text":"PixelType std () standard deviation of image","title":"function std"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicalboundingbox","text":"IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space","title":"function logicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox","text":"PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox_1","text":"PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical","text":"PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological","text":"IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical_1","text":"Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological_1","text":"Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isinside","text":"bool isInside ( const Point3 & p ) const checks if a given point is inside the image","title":"function isInside"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-iterator","text":"ImageIterator iterator () creates an image iterator and returns it","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-compare","text":"bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_11","text":"inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-write","text":"Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-tomesh","text":"Mesh toMesh ( PixelType isovalue ) const converts image to mesh","title":"function toMesh"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-evaluate","text":"Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position.","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html","text":"shapeworks::ImageCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#shapeworksimagecommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html","text":"shapeworks::ImageDomain More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T > Public Types Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Additional inherited members Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomain ; Public Types Documentation using Pointer using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs using ImageType using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class. using PointType using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image). Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetOrigin inline PointType GetOrigin () const function GetSize inline ImageType :: SizeType GetSize () const function GetSpacing inline ImageType :: SpacingType GetSpacing () const function GetIndex inline ImageType :: RegionType :: IndexType GetIndex () const function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function Sample inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Protected Functions Documentation function GetVDBImage inline openvdb :: FloatGrid :: Ptr GetVDBImage () const function ImageDomain inline ImageDomain () function ~ImageDomain inline virtual ~ ImageDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function transform inline openvdb :: math :: Transform :: Ptr transform () const function ToVDBCoord inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#shapeworksimagedomain","text":"More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T >","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types","text":"Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions","text":"Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointer","text":"using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-imagetype","text":"using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class.","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointtype","text":"using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image).","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getorigin","text":"inline PointType GetOrigin () const","title":"function GetOrigin"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsize","text":"inline ImageType :: SizeType GetSize () const","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getspacing","text":"inline ImageType :: SpacingType GetSpacing () const","title":"function GetSpacing"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getindex","text":"inline ImageType :: RegionType :: IndexType GetIndex () const","title":"function GetIndex"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-sample","text":"inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking.","title":"function Sample"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvdbimage","text":"inline openvdb :: FloatGrid :: Ptr GetVDBImage () const","title":"function GetVDBImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain","text":"inline ImageDomain ()","title":"function ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain_1","text":"inline virtual ~ ImageDomain ()","title":"function ~ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-transform","text":"inline openvdb :: math :: Transform :: Ptr transform () const","title":"function transform"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-tovdbcoord","text":"inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function ToVDBCoord"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html","text":"shapeworks::ImageDomainWithCurvature More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T > Public Types Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithCurvature ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ; typedef VnlMatrixType typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute Protected Functions Documentation function ImageDomainWithCurvature inline ImageDomainWithCurvature () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImageDomainWithCurvature inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#shapeworksimagedomainwithcurvature","text":"More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T >","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types","text":"Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions","text":"Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithCurvature ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-superclass","text":"typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-vnlmatrixtype","text":"typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature","text":"inline ImageDomainWithCurvature ()","title":"function ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature_1","text":"inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html","text":"shapeworks::ImageDomainWithGradN More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T > Public Types Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradN ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs using Pointer using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ; typedef GradNType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ; typedef VnlMatrixType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension. function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradN inline ImageDomainWithGradN () function ~ImageDomainWithGradN inline virtual ~ ImageDomainWithGradN () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#shapeworksimagedomainwithgradn","text":"More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T >","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types","text":"Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions","text":"Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradN ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-superclass","text":"typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-gradntype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-vnlmatrixtype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension.","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn","text":"inline ImageDomainWithGradN ()","title":"function ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn_1","text":"inline virtual ~ ImageDomainWithGradN ()","title":"function ~ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html","text":"shapeworks::ImageDomainWithGradients More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T > Public Types Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient () Additional inherited members Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradients ; Public Types Documentation using Pointer using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ; typedef PointType typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ; typedef VectorType typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ; typedef VnlVectorType typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function ProjectVectorToSurfaceTangent inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradients inline ImageDomainWithGradients () function ~ImageDomainWithGradients inline virtual ~ ImageDomainWithGradients () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function GetVDBGradient inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#shapeworksimagedomainwithgradients","text":"More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T >","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types","text":"Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions","text":"Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradients ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-pointtype","text":"typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-imagetype","text":"typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vectortype","text":"typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-projectvectortosurfacetangent","text":"inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients","text":"inline ImageDomainWithGradients ()","title":"function ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients_1","text":"inline virtual ~ ImageDomainWithGradients ()","title":"function ~ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-getvdbgradient","text":"inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetVDBGradient"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html","text":"shapeworks::ImageLabel An extention of QLabel especially for scaled images. #include Inherits from QLabel Public Functions Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap) Protected Functions Name void resizeEvent (QResizeEvent * reisze_event) override Public Functions Documentation function ImageLabel inline ImageLabel ( QWidget * parent ) function setPixmap inline void setPixmap ( const QPixmap & pixmap ) Protected Functions Documentation function resizeEvent void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#shapeworksimagelabel","text":"An extention of QLabel especially for scaled images. #include Inherits from QLabel","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions","text":"Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions","text":"Name void resizeEvent (QResizeEvent * reisze_event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-imagelabel","text":"inline ImageLabel ( QWidget * parent )","title":"function ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-setpixmap","text":"inline void setPixmap ( const QPixmap & pixmap )","title":"function setPixmap"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html","text":"shapeworks::ImageUtils Helper functions for image. #include Public Types Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1) Public Types Documentation using TPSTransform using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Documentation function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue function createWarpTransform static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#shapeworksimageutils","text":"Helper functions for image. #include ","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types","text":"Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions","text":"Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#using-tpstransform","text":"using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"using TPSTransform"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-createwarptransform","text":"static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function createWarpTransform"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html","text":"shapeworks::ImplicitSurfaceDomain More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Public Types Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType Public Functions Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImplicitSurfaceDomain ; Public Types Documentation typedef Superclass typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs typedef Pointer typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ; typedef PointType typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ; Public Functions Documentation function SetTolerance inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance. function GetTolerance inline virtual T GetTolerance () function GetDomainType inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points. function UpdateParticlePosition inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function ImplicitSurfaceDomain inline ImplicitSurfaceDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImplicitSurfaceDomain inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#shapeworksimplicitsurfacedomain","text":"More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types","text":"Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions","text":"Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImplicitSurfaceDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-superclass","text":"typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-settolerance","text":"inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance.","title":"function SetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-gettolerance","text":"inline virtual T GetTolerance ()","title":"function GetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getdomaintype","text":"inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-updateparticleposition","text":"inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain","text":"inline ImplicitSurfaceDomain ()","title":"function ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain_1","text":"inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html","text":"shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include Public Functions Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Coord min Coord max Public Functions Documentation function IndexRegion IndexRegion () = default function IndexRegion IndexRegion ( const IndexRegion & ) = default function IndexRegion inline IndexRegion ( const Dims & dims ) function IndexRegion inline IndexRegion ( const Coord & _min , const Coord & _max ) function operator== inline bool operator == ( const IndexRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Coord origin () const function size inline Dims size () const function pad IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Coord min { 1000000000 , 1000000000 , 1000000000 }; variable max Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#shapeworksindexregion","text":"Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include ","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions","text":"Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes","text":"Name Coord min Coord max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion","text":"IndexRegion () = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_1","text":"IndexRegion ( const IndexRegion & ) = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_2","text":"inline IndexRegion ( const Dims & dims )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_3","text":"inline IndexRegion ( const Coord & _min , const Coord & _max )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-operator","text":"inline bool operator == ( const IndexRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-origin","text":"inline Coord origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-size","text":"inline Dims size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-pad","text":"IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-min","text":"Coord min { 1000000000 , 1000000000 , 1000000000 };","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-max","text":"Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1Job.html","text":"shapeworks::Job Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob Public Signals Name void progress (double ) void finished () Public Functions Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal progress void progress ( double ) signal finished void finished () Public Functions Documentation function Job Job () function ~Job virtual ~ Job () function run virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run function name virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name function get_completion_message virtual QString get_completion_message () get a message to display when the job is complete function get_abort_message virtual QString get_abort_message () get a message to display when the job is aborted function start_timer void start_timer () start the timer function timer_elapsed qint64 timer_elapsed () how much time has elapsed since the timer was started function set_complete inline void set_complete ( bool complete ) set the job as complete function is_complete inline bool is_complete () const is the job complete? function abort inline void abort () abort the job function is_aborted inline bool is_aborted () const was the job aborted? Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#shapeworksjob","text":"Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals","text":"Name void progress (double ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions","text":"Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-progress","text":"void progress ( double )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job","text":"Job ()","title":"function Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job_1","text":"virtual ~ Job ()","title":"function ~Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-run","text":"virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-name","text":"virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_completion_message","text":"virtual QString get_completion_message () get a message to display when the job is complete","title":"function get_completion_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_abort_message","text":"virtual QString get_abort_message () get a message to display when the job is aborted","title":"function get_abort_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-start_timer","text":"void start_timer () start the timer","title":"function start_timer"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-timer_elapsed","text":"qint64 timer_elapsed () how much time has elapsed since the timer was started","title":"function timer_elapsed"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-set_complete","text":"inline void set_complete ( bool complete ) set the job as complete","title":"function set_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_complete","text":"inline bool is_complete () const is the job complete?","title":"function is_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-abort","text":"inline void abort () abort the job","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_aborted","text":"inline bool is_aborted () const was the job aborted? Updated on 2023-10-25 at 15:40:27 +0000","title":"function is_aborted"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html","text":"shapeworks::JsonProjectReader JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format Public Functions Documentation function JsonProjectReader JsonProjectReader ( Project & project ) function ~JsonProjectReader ~ JsonProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#shapeworksjsonprojectreader","text":"JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions","text":"Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#detailed-description","text":"class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader","text":"JsonProjectReader ( Project & project )","title":"function JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader_1","text":"~ JsonProjectReader ()","title":"function ~JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html","text":"shapeworks::JsonProjectWriter JSON file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, std::string filename) Detailed Description class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format Public Functions Documentation function write_project static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#shapeworksjsonprojectwriter","text":"JSON file format writer for Project . More... #include ","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, std::string filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#detailed-description","text":"class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html","text":"shapeworks::KeyboardShortcuts More... #include Inherits from QDialog Public Functions Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor Detailed Description class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts Public Functions Documentation function KeyboardShortcuts KeyboardShortcuts ( QWidget * parent ) constructor function ~KeyboardShortcuts virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#shapeworkskeyboardshortcuts","text":"More... #include Inherits from QDialog","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions","text":"Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#detailed-description","text":"class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts","text":"KeyboardShortcuts ( QWidget * parent ) constructor","title":"function KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts_1","text":"virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html","text":"shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. #include Public Attributes Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_ Public Attributes Documentation variable domain_ std :: string domain_ ; variable domain_id_ int domain_id_ = -1 ; variable landmark_id int landmark_id = -1 ; variable name_ std :: string name_ ; variable visible_ bool visible_ = true ; variable color_ std :: string color_ ; variable comment_ std :: string comment_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#shapeworkslandmarkdefinition","text":"Landmark class containing properties of each landmark. #include ","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes","text":"Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_","text":"std :: string domain_ ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_id_","text":"int domain_id_ = -1 ;","title":"variable domain_id_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-landmark_id","text":"int landmark_id = -1 ;","title":"variable landmark_id"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-name_","text":"std :: string name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-visible_","text":"bool visible_ = true ;","title":"variable visible_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-color_","text":"std :: string color_ ;","title":"variable color_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-comment_","text":"std :: string comment_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable comment_"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html","text":"shapeworks::LandmarkItemDelegate Inherits from QStyledItemDelegate Public Signals Name void button_clicked (int row) Public Functions Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model) Public Signals Documentation signal button_clicked void button_clicked ( int row ) Public Functions Documentation function LandmarkItemDelegate LandmarkItemDelegate ( QObject * parent = 0 ) function paint void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function createEditor QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function setEditorData void setEditorData ( QWidget * editor , const QModelIndex & index ) const override function setModelData void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override function sizeHint QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override function updateEditorGeometry void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function set_button_text void set_button_text ( std :: string button_text ) function set_model void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#shapeworkslandmarkitemdelegate","text":"Inherits from QStyledItemDelegate","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals","text":"Name void button_clicked (int row)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions","text":"Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#signal-button_clicked","text":"void button_clicked ( int row )","title":"signal button_clicked"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-landmarkitemdelegate","text":"LandmarkItemDelegate ( QObject * parent = 0 )","title":"function LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-paint","text":"void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function paint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-createeditor","text":"QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function createEditor"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-seteditordata","text":"void setEditorData ( QWidget * editor , const QModelIndex & index ) const override","title":"function setEditorData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-setmodeldata","text":"void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override","title":"function setModelData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-sizehint","text":"QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function sizeHint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-updateeditorgeometry","text":"void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function updateEditorGeometry"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_button_text","text":"void set_button_text ( std :: string button_text )","title":"function set_button_text"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_model","text":"void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_model"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html","text":"shapeworks::LandmarkTableModel Inherits from QAbstractTableModel Public Slots Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click. Public Functions Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation. Public Slots Documentation slot new_landmark void new_landmark () create a new landmark slot handle_click void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked. slot handle_double_click void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked. slot handle_header_click void handle_header_click ( int index ) Handle header click. Public Functions Documentation function LandmarkTableModel LandmarkTableModel ( QObject * parent = 0 ) Constructor. function ~LandmarkTableModel virtual ~ LandmarkTableModel () Destructor. function set_session void set_session ( QSharedPointer < Session > session ) Attach to a session. function store_landmarks void store_landmarks () Store landmarks back to project. function set_active_domain void set_active_domain ( int domain ) Set the currently active domain. function update_table void update_table () Update the table of landmarks from the project. function update_cells void update_cells () Update table cells. function remove_rows void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices. function toggle_visible void toggle_visible () Toggle tri-state button for visibility in horizontal header. function set_placing_landmark void set_placing_landmark ( int row ) Set the currently placing landmark. function delete_landmarks void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks function rowCount int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation. function columnCount int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation. function data QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation. function setData bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation. function headerData QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation. function flags Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#shapeworkslandmarktablemodel","text":"Inherits from QAbstractTableModel","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots","text":"Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click.","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions","text":"Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-new_landmark","text":"void new_landmark () create a new landmark","title":"slot new_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_click","text":"void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked.","title":"slot handle_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_double_click","text":"void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked.","title":"slot handle_double_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_header_click","text":"void handle_header_click ( int index ) Handle header click.","title":"slot handle_header_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel","text":"LandmarkTableModel ( QObject * parent = 0 ) Constructor.","title":"function LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel_1","text":"virtual ~ LandmarkTableModel () Destructor.","title":"function ~LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Attach to a session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-store_landmarks","text":"void store_landmarks () Store landmarks back to project.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_active_domain","text":"void set_active_domain ( int domain ) Set the currently active domain.","title":"function set_active_domain"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_table","text":"void update_table () Update the table of landmarks from the project.","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_cells","text":"void update_cells () Update table cells.","title":"function update_cells"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-remove_rows","text":"void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices.","title":"function remove_rows"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-toggle_visible","text":"void toggle_visible () Toggle tri-state button for visibility in horizontal header.","title":"function toggle_visible"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_placing_landmark","text":"void set_placing_landmark ( int row ) Set the currently placing landmark.","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-delete_landmarks","text":"void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks","title":"function delete_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-rowcount","text":"int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation.","title":"function rowCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-columncount","text":"int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation.","title":"function columnCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-data","text":"QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation.","title":"function data"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-setdata","text":"bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation.","title":"function setData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-headerdata","text":"QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation.","title":"function headerData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-flags","text":"Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-25 at 15:40:27 +0000","title":"function flags"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html","text":"shapeworks::LandmarkWidget LandmarkWidget . More... #include Public Functions Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles () Detailed Description class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks Public Functions Documentation function LandmarkWidget LandmarkWidget ( Viewer * viewer ) function ~LandmarkWidget ~ LandmarkWidget () function update_landmarks void update_landmarks () function store_positions void store_positions () function update_glyph_properties void update_glyph_properties () function clear_landmark_handles void clear_landmark_handles () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#shapeworkslandmarkwidget","text":"LandmarkWidget . More... #include ","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions","text":"Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#detailed-description","text":"class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget","text":"LandmarkWidget ( Viewer * viewer )","title":"function LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget_1","text":"~ LandmarkWidget ()","title":"function ~LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-store_positions","text":"void store_positions ()","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-clear_landmark_handles","text":"void clear_landmark_handles () Updated on 2023-10-25 at 15:40:27 +0000","title":"function clear_landmark_handles"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html","text":"shapeworks::LegacyCorrespondenceFunction Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function LegacyCorrespondenceFunction inline LegacyCorrespondenceFunction () function ~LegacyCorrespondenceFunction inline virtual ~ LegacyCorrespondenceFunction () function operator= void operator = ( const LegacyCorrespondenceFunction & ) function LegacyCorrespondenceFunction LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ) function ComputeCovarianceMatrix virtual void ComputeCovarianceMatrix () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#shapeworkslegacycorrespondencefunction","text":"Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types","text":"Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions","text":"Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-self","text":"typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction","text":"inline LegacyCorrespondenceFunction ()","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_1","text":"inline virtual ~ LegacyCorrespondenceFunction ()","title":"function ~LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-operator","text":"void operator = ( const LegacyCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_2","text":"LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & )","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-computecovariancematrix","text":"virtual void ComputeCovarianceMatrix ()","title":"function ComputeCovarianceMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html","text":"shapeworks::LegacyShapeMatrix Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix Public Types Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods). function DomainAddEventCallback inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration function AfterIteration inline virtual void AfterIteration () function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) Protected Functions Documentation function LegacyShapeMatrix inline LegacyShapeMatrix () function ~LegacyShapeMatrix inline virtual ~ LegacyShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#shapeworkslegacyshapematrix","text":"Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions","text":"Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-self","text":"typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods).","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix","text":"inline LegacyShapeMatrix ()","title":"function LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix_1","text":"inline virtual ~ LegacyShapeMatrix ()","title":"function ~LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html","text":"shapeworks::Lightbox Display multiple Viewers in a tiled display. More... #include Inherits from QObject Public Slots Name void handle_timer_callback () Public Signals Name void right_click (int index) Public Functions Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window () Detailed Description class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display Public Slots Documentation slot handle_timer_callback void handle_timer_callback () Public Signals Documentation signal right_click void right_click ( int index ) Public Functions Documentation function Lightbox Lightbox () function ~Lightbox ~ Lightbox () function set_shapes void set_shapes ( ShapeList shapes ) function get_shapes ShapeList get_shapes () function set_interactor void set_interactor ( vtkRenderWindowInteractor * interactor ) function set_render_window void set_render_window ( vtkRenderWindow * render_window ) function set_tile_layout void set_tile_layout ( int width , int height ) function setup_renderers void setup_renderers () function get_num_rows int get_num_rows () function get_num_rows_visible int get_num_rows_visible () function set_start_row void set_start_row ( int row ) function get_viewers ViewerList get_viewers () function redraw void redraw () function handle_pick void handle_pick ( int * click_pos , bool one , bool ctrl ) function handle_hover void handle_hover ( int * click_pos ) function handle_key void handle_key ( int * click_pos , std :: string key ) function handle_right_click void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement. function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_session void set_session ( QSharedPointer < Session > session ) function set_visualizer void set_visualizer ( Visualizer * visualizer ) function render_window_ready inline bool render_window_ready () function clear_renderers void clear_renderers () function initPos std :: array < double , 3 > initPos () function handle_new_mesh void handle_new_mesh () function reset_camera void reset_camera () function reset_camera_clipping_range void reset_camera_clipping_range () function set_orientation_marker void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ) function set_orientation_marker_viewport void set_orientation_marker_viewport () function update_feature_range void update_feature_range () function update_interactor_style void update_interactor_style () function set_shared_window_and_level void set_shared_window_and_level ( double window , double level ) function get_render_window vtkRenderWindow * get_render_window () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#shapeworkslightbox","text":"Display multiple Viewers in a tiled display. More... #include Inherits from QObject","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots","text":"Name void handle_timer_callback ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals","text":"Name void right_click (int index)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions","text":"Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#detailed-description","text":"class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#slot-handle_timer_callback","text":"void handle_timer_callback ()","title":"slot handle_timer_callback"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#signal-right_click","text":"void right_click ( int index )","title":"signal right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox","text":"Lightbox ()","title":"function Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox_1","text":"~ Lightbox ()","title":"function ~Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shapes","text":"void set_shapes ( ShapeList shapes )","title":"function set_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_interactor","text":"void set_interactor ( vtkRenderWindowInteractor * interactor )","title":"function set_interactor"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_render_window","text":"void set_render_window ( vtkRenderWindow * render_window )","title":"function set_render_window"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_tile_layout","text":"void set_tile_layout ( int width , int height )","title":"function set_tile_layout"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-setup_renderers","text":"void setup_renderers ()","title":"function setup_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows","text":"int get_num_rows ()","title":"function get_num_rows"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows_visible","text":"int get_num_rows_visible ()","title":"function get_num_rows_visible"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_start_row","text":"void set_start_row ( int row )","title":"function set_start_row"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_viewers","text":"ViewerList get_viewers ()","title":"function get_viewers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-redraw","text":"void redraw ()","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_pick","text":"void handle_pick ( int * click_pos , bool one , bool ctrl )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_hover","text":"void handle_hover ( int * click_pos )","title":"function handle_hover"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_key","text":"void handle_key ( int * click_pos , std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_right_click","text":"void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-render_window_ready","text":"inline bool render_window_ready ()","title":"function render_window_ready"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-clear_renderers","text":"void clear_renderers ()","title":"function clear_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-initpos","text":"std :: array < double , 3 > initPos ()","title":"function initPos"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera_clipping_range","text":"void reset_camera_clipping_range ()","title":"function reset_camera_clipping_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker","text":"void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner )","title":"function set_orientation_marker"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker_viewport","text":"void set_orientation_marker_viewport ()","title":"function set_orientation_marker_viewport"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_feature_range","text":"void update_feature_range ()","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_interactor_style","text":"void update_interactor_style ()","title":"function update_interactor_style"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shared_window_and_level","text":"void set_shared_window_and_level ( double window , double level )","title":"function set_shared_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_render_window","text":"vtkRenderWindow * get_render_window () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_render_window"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html","text":"shapeworks::LinearRegressionShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function LinearRegressionShapeMatrix inline LinearRegressionShapeMatrix () function ~LinearRegressionShapeMatrix inline virtual ~ LinearRegressionShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#shapeworkslinearregressionshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions","text":"Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-self","text":"typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix","text":"inline LinearRegressionShapeMatrix ()","title":"function LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix_1","text":"inline virtual ~ LinearRegressionShapeMatrix ()","title":"function ~LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html","text":"shapeworks::LogWindow Log Window. More... #include Inherits from QDialog Public Functions Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history Detailed Description class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages) Public Functions Documentation function LogWindow LogWindow ( QWidget * parent = 0 ) function add_message void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#shapeworkslogwindow","text":"Log Window. More... #include Inherits from QDialog","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions","text":"Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#detailed-description","text":"class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages)","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-logwindow","text":"LogWindow ( QWidget * parent = 0 )","title":"function LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-add_message","text":"void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-25 at 15:40:27 +0000","title":"function add_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html","text":"shapeworks::Logging Module: Common Classes ShapeWorks Logging Library. More... #include Public Functions Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted. Detailed Description class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32 Public Functions Documentation function Instance static Logging & Instance () Return the singleton instance. function open_file_log void open_file_log ( const std :: string & filename ) Create a file log. function check_log_open bool check_log_open () const Return if the log is open. function get_log_filename std :: string get_log_filename () const Return the log filename. function log_message void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro. function log_stack void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro. function log_error void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro. function show_message void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro. function show_status void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro. function show_progress void show_progress ( double value , const std :: string & message ) Display progress (0-100) function log_debug void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro. function log_warning void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro. function close_log void close_log () Close the log, use SW_CLOSE_LOG macro. function set_error_callback void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised. function set_message_callback void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted. function set_warning_callback void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted. function set_debug_callback void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted. function set_status_callback void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted. function set_progress_callback void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#shapeworkslogging","text":"Module: Common Classes ShapeWorks Logging Library. More... #include ","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions","text":"Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Logging.html#detailed-description","text":"class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-instance","text":"static Logging & Instance () Return the singleton instance.","title":"function Instance"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-open_file_log","text":"void open_file_log ( const std :: string & filename ) Create a file log.","title":"function open_file_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-check_log_open","text":"bool check_log_open () const Return if the log is open.","title":"function check_log_open"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-get_log_filename","text":"std :: string get_log_filename () const Return the log filename.","title":"function get_log_filename"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_message","text":"void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro.","title":"function log_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_stack","text":"void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro.","title":"function log_stack"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_error","text":"void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro.","title":"function log_error"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_message","text":"void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro.","title":"function show_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_status","text":"void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro.","title":"function show_status"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_progress","text":"void show_progress ( double value , const std :: string & message ) Display progress (0-100)","title":"function show_progress"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_debug","text":"void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro.","title":"function log_debug"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_warning","text":"void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro.","title":"function log_warning"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-close_log","text":"void close_log () Close the log, use SW_CLOSE_LOG macro.","title":"function close_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_error_callback","text":"void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised.","title":"function set_error_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_message_callback","text":"void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted.","title":"function set_message_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_warning_callback","text":"void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted.","title":"function set_warning_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_debug_callback","text":"void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted.","title":"function set_debug_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_status_callback","text":"void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted.","title":"function set_status_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_progress_callback","text":"void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-25 at 15:40:28 +0000","title":"function set_progress_callback"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html","text":"shapeworks::MatrixContainer Public Attributes Name Eigen::MatrixXd matrix_ Public Attributes Documentation variable matrix_ Eigen :: MatrixXd matrix_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#shapeworksmatrixcontainer","text":"","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes","text":"Name Eigen::MatrixXd matrix_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#variable-matrix_","text":"Eigen :: MatrixXd matrix_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable matrix_"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html","text":"shapeworks::MeanCurvatureContainer More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d) Protected Functions Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ; Public Types Documentation typedef NumericType typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs typedef Self typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ; typedef Superclass typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ; typedef VnlVectorType typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods). function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function PositionAddEventCallback inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function ComputeMeanCurvature inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) function ComputeCurvatureStatistics virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface. function GetMeanCurvature inline double GetMeanCurvature ( int d ) function GetCurvatureStandardDeviation inline double GetCurvatureStandardDeviation ( int d ) Protected Functions Documentation function MeanCurvatureContainer inline MeanCurvatureContainer () function ~MeanCurvatureContainer inline virtual ~ MeanCurvatureContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#shapeworksmeancurvaturecontainer","text":"More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types","text":"Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions","text":"Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#additional-inherited-members","text":"Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#detailed-description","text":"template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-numerictype","text":"typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-self","text":"typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-superclass","text":"typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computemeancurvature","text":"inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom )","title":"function ComputeMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computecurvaturestatistics","text":"virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface.","title":"function ComputeCurvatureStatistics"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getmeancurvature","text":"inline double GetMeanCurvature ( int d )","title":"function GetMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getcurvaturestandarddeviation","text":"inline double GetCurvatureStandardDeviation ( int d )","title":"function GetCurvatureStandardDeviation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer","text":"inline MeanCurvatureContainer ()","title":"function MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer_1","text":"inline virtual ~ MeanCurvatureContainer ()","title":"function ~MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Mesh.html","text":"shapeworks::Mesh Module: Mesh Classes More... #include Public Types Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints Public Functions Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes Public Types Documentation enum FieldType Enumerator Value Description Point Face enum AlignmentType Enumerator Value Description Rigid Similarity Affine enum DistanceMethod Enumerator Value Description PointToPoint PointToCell enum CurvatureType Enumerator Value Description Principal Gaussian Mean enum SubdivisionType Enumerator Value Description Butterfly Loop using MeshType using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ; Public Functions Documentation function Mesh Mesh ( const std :: string & pathname ) function Mesh inline Mesh ( MeshType meshPtr ) function Mesh inline Mesh ( const Mesh & orig ) function Mesh inline Mesh ( Mesh && orig ) function operator= inline Mesh & operator = ( const Mesh & orig ) function Mesh Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ) function operator= inline Mesh & operator = ( Mesh && orig ) function operator+= Mesh & operator += ( const Mesh & otherMesh ) append two meshes function getVTKMesh inline MeshType getVTKMesh () const return the current mesh function write Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension function coverage Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) function smooth Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing function smoothSinc Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing function remesh Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity function remeshPercent Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity function invertNormals Mesh & invertNormals () handle flipping normals function reflect Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis function createTransform MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations function applyTransform Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh function rotate Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis function fillHoles Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them function clean Mesh & clean () clean mesh function probeVolume Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image function clip Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane function translate Mesh & translate ( const Vector3 & v ) helper to translate mesh function scale Mesh & scale ( const Vector3 & v ) helper to scale mesh function boundingBox PhysicalRegion boundingBox () const computes bounding box of current mesh function fixElement Mesh & fixElement () fix element winding of mesh function fixNonManifold Mesh & fixNonManifold () Attempt to fix non-manifold edges. function detectNonManifold bool detectNonManifold () Detect if mesh contain non-manifold edges. function detectTriangular bool detectTriangular () Detect if mesh is triangular;. function distance std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points. function clipClosedSurface Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface function computeNormals Mesh & computeNormals () computes and adds oriented point and cell normals function closestPoint Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point function closestPointId int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space function geodesicDistance double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh function geodesicDistance Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh function geodesicDistance Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh function curvature Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms function computeFieldGradient void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices function computeFieldGradientAtPoint Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point function interpolateFieldAtPoint double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point function applySubdivisionFilter Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop) function toImage Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing) function toDistanceTransform Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding function computeThickness Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points function computeLandmarkGeodesics Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields function center Point3 center () const center of mesh function centerOfMass Point3 centerOfMass () const center of mass of mesh function numPoints inline int numPoints () const number of points function numFaces inline int numFaces () const number of faces function points Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point function faces Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed function getPoint Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index function getFace IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed function getFieldNames std :: vector < std :: string > getFieldNames () const print all field names in mesh function setField Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values) function getField Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist function setFieldValue void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value function getFieldValue double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields) function getMultiFieldValue Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field function compareAllPoints bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal function compareAllFaces bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal function compareAllFields bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal function compareField bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified) function compare bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes function operator== inline bool operator == ( const Mesh & other ) const compare meshes function getFFCValue double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs. function getFFCGradient Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs. function getIGLMesh MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format. function clipByField vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value. function getCellLocator inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator. function getClosestFace int getClosestFace ( const Point3 & point ) const function computeBarycentricCoordinates Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#shapeworksmesh","text":"Module: Mesh Classes More... #include ","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types","text":"Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions","text":"Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#detailed-description","text":"class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-fieldtype","text":"Enumerator Value Description Point Face","title":"enum FieldType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-alignmenttype","text":"Enumerator Value Description Rigid Similarity Affine","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-distancemethod","text":"Enumerator Value Description PointToPoint PointToCell","title":"enum DistanceMethod"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-curvaturetype","text":"Enumerator Value Description Principal Gaussian Mean","title":"enum CurvatureType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-subdivisiontype","text":"Enumerator Value Description Butterfly Loop","title":"enum SubdivisionType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshtype","text":"using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ;","title":"using MeshType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshpoints","text":"using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ;","title":"using MeshPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh","text":"Mesh ( const std :: string & pathname )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_1","text":"inline Mesh ( MeshType meshPtr )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_2","text":"inline Mesh ( const Mesh & orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_3","text":"inline Mesh ( Mesh && orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator","text":"inline Mesh & operator = ( const Mesh & orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_4","text":"Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_1","text":"inline Mesh & operator = ( Mesh && orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_2","text":"Mesh & operator += ( const Mesh & otherMesh ) append two meshes","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getvtkmesh","text":"inline MeshType getVTKMesh () const return the current mesh","title":"function getVTKMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-write","text":"Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-coverage","text":"Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"function coverage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smooth","text":"Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing","title":"function smooth"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smoothsinc","text":"Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing","title":"function smoothSinc"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remesh","text":"Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"function remesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remeshpercent","text":"Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"function remeshPercent"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-invertnormals","text":"Mesh & invertNormals () handle flipping normals","title":"function invertNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-reflect","text":"Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-createtransform","text":"MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations","title":"function createTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applytransform","text":"Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-rotate","text":"Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fillholes","text":"Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them","title":"function fillHoles"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clean","text":"Mesh & clean () clean mesh","title":"function clean"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-probevolume","text":"Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image","title":"function probeVolume"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clip","text":"Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-translate","text":"Mesh & translate ( const Vector3 & v ) helper to translate mesh","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-scale","text":"Mesh & scale ( const Vector3 & v ) helper to scale mesh","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-boundingbox","text":"PhysicalRegion boundingBox () const computes bounding box of current mesh","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixelement","text":"Mesh & fixElement () fix element winding of mesh","title":"function fixElement"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixnonmanifold","text":"Mesh & fixNonManifold () Attempt to fix non-manifold edges.","title":"function fixNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detectnonmanifold","text":"bool detectNonManifold () Detect if mesh contain non-manifold edges.","title":"function detectNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detecttriangular","text":"bool detectTriangular () Detect if mesh is triangular;.","title":"function detectTriangular"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-distance","text":"std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points.","title":"function distance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipclosedsurface","text":"Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface","title":"function clipClosedSurface"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computenormals","text":"Mesh & computeNormals () computes and adds oriented point and cell normals","title":"function computeNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpoint","text":"Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point","title":"function closestPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpointid","text":"int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space","title":"function closestPointId"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance","text":"double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_1","text":"Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_2","text":"Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-curvature","text":"Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms","title":"function curvature"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradient","text":"void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices","title":"function computeFieldGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradientatpoint","text":"Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point","title":"function computeFieldGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-interpolatefieldatpoint","text":"double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point","title":"function interpolateFieldAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applysubdivisionfilter","text":"Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop)","title":"function applySubdivisionFilter"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-toimage","text":"Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"function toImage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-todistancetransform","text":"Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding","title":"function toDistanceTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computethickness","text":"Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points","title":"function computeThickness"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computelandmarkgeodesics","text":"Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields","title":"function computeLandmarkGeodesics"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-center","text":"Point3 center () const center of mesh","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-centerofmass","text":"Point3 centerOfMass () const center of mass of mesh","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numpoints","text":"inline int numPoints () const number of points","title":"function numPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numfaces","text":"inline int numFaces () const number of faces","title":"function numFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-points","text":"Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point","title":"function points"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-faces","text":"Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed","title":"function faces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getpoint","text":"Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index","title":"function getPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getface","text":"IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed","title":"function getFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldnames","text":"std :: vector < std :: string > getFieldNames () const print all field names in mesh","title":"function getFieldNames"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfield","text":"Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values)","title":"function setField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfield","text":"Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist","title":"function getField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfieldvalue","text":"void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value","title":"function setFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldvalue","text":"double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields)","title":"function getFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getmultifieldvalue","text":"Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field","title":"function getMultiFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallpoints","text":"bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal","title":"function compareAllPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfaces","text":"bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal","title":"function compareAllFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfields","text":"bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal","title":"function compareAllFields"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-comparefield","text":"bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified)","title":"function compareField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compare","text":"bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_3","text":"inline bool operator == ( const Mesh & other ) const compare meshes","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcvalue","text":"double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs.","title":"function getFFCValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcgradient","text":"Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs.","title":"function getFFCGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getiglmesh","text":"MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format.","title":"function getIGLMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipbyfield","text":"vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value.","title":"function clipByField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getcelllocator","text":"inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator.","title":"function getCellLocator"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getclosestface","text":"int getClosestFace ( const Point3 & point ) const","title":"function getClosestFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computebarycentriccoordinates","text":"Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number.","title":"function computeBarycentricCoordinates"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html","text":"shapeworks::MeshCache Thread safe cache for meshes index by shape. More... #include Public Functions Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear () Detailed Description class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread. Public Functions Documentation function MeshCache MeshCache () function set_cache_enabled inline void set_cache_enabled ( bool enabled ) function set_memory_percent inline void set_memory_percent ( int percent ) function get_mesh MeshHandle get_mesh ( const MeshWorkItem & vector ) function insert_mesh void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ) function clear void clear () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#shapeworksmeshcache","text":"Thread safe cache for meshes index by shape. More... #include ","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions","text":"Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#detailed-description","text":"class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-meshcache","text":"MeshCache ()","title":"function MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_cache_enabled","text":"inline void set_cache_enabled ( bool enabled )","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_memory_percent","text":"inline void set_memory_percent ( int percent )","title":"function set_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & vector )","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-insert_mesh","text":"void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh )","title":"function insert_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-clear","text":"void clear () Updated on 2023-10-25 at 15:40:27 +0000","title":"function clear"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html","text":"shapeworks::MeshCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#shapeworksmeshcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html","text":"shapeworks::MeshDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< MeshDomain > Pointer Public Functions Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ; Public Functions Documentation function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function ApplyVectorConstraints bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetMaxDiameter virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function Distance inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function SetMesh inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) function GetSWMesh inline std :: shared_ptr < Mesh > GetSWMesh () const function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#shapeworksmeshdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types","text":"Name using std::shared_ptr< MeshDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions","text":"Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#using-pointer","text":"using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyvectorconstraints","text":"bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const","title":"function ApplyVectorConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-distance","text":"inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-setmesh","text":"inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ )","title":"function SetMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getswmesh","text":"inline std :: shared_ptr < Mesh > GetSWMesh () const","title":"function GetSWMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-25 at 15:40:27 +0000","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html","text":"shapeworks::MeshGenerator Public Functions Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method () Public Attributes Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C Public Functions Documentation function MeshGenerator MeshGenerator () function ~MeshGenerator ~ MeshGenerator () function build_mesh MeshHandle build_mesh ( const MeshWorkItem & item ) function build_mesh_from_points MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ) function build_mesh_from_image MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ) function build_mesh_from_file MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ) function set_mesh_reconstructors void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ) function set_reconstruction_method void set_reconstruction_method ( std :: string method ) function get_reconstruction_method std :: string get_reconstruction_method () Public Attributes Documentation variable RECONSTRUCTION_LEGACY_C static const std :: string RECONSTRUCTION_LEGACY_C ; variable RECONSTRUCTION_DISTANCE_TRANSFORM_C static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; variable RECONSTRUCTION_MESH_WARPER_C static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#shapeworksmeshgenerator","text":"","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions","text":"Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes","text":"Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator","text":"MeshGenerator ()","title":"function MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator_1","text":"~ MeshGenerator ()","title":"function ~MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh","text":"MeshHandle build_mesh ( const MeshWorkItem & item )","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_points","text":"MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain )","title":"function build_mesh_from_points"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_image","text":"MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 )","title":"function build_mesh_from_image"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_file","text":"MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 )","title":"function build_mesh_from_file"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_mesh_reconstructors","text":"void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors )","title":"function set_mesh_reconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_reconstruction_method","text":"void set_reconstruction_method ( std :: string method )","title":"function set_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-get_reconstruction_method","text":"std :: string get_reconstruction_method ()","title":"function get_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_legacy_c","text":"static const std :: string RECONSTRUCTION_LEGACY_C ;","title":"variable RECONSTRUCTION_LEGACY_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_distance_transform_c","text":"static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ;","title":"variable RECONSTRUCTION_DISTANCE_TRANSFORM_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_mesh_warper_c","text":"static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable RECONSTRUCTION_MESH_WARPER_C"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html","text":"shapeworks::MeshGroup Representation of a group of meshes. More... #include Public Functions Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Detailed Description class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain Public Functions Documentation function MeshGroup MeshGroup () function MeshGroup MeshGroup ( unsigned long num_meshes ) function ~MeshGroup ~ MeshGroup () function set_number_of_meshes void set_number_of_meshes ( int n ) function valid bool valid () function set_mesh void set_mesh ( int i , MeshHandle mesh ) function meshes MeshList & meshes () Return a reference to the list of meshes. function get_combined_poly_data vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#shapeworksmeshgroup","text":"Representation of a group of meshes. More... #include ","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions","text":"Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#detailed-description","text":"class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup","text":"MeshGroup ()","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_1","text":"MeshGroup ( unsigned long num_meshes )","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_2","text":"~ MeshGroup ()","title":"function ~MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_number_of_meshes","text":"void set_number_of_meshes ( int n )","title":"function set_number_of_meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-valid","text":"bool valid ()","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_mesh","text":"void set_mesh ( int i , MeshHandle mesh )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshes","text":"MeshList & meshes () Return a reference to the list of meshes.","title":"function meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-get_combined_poly_data","text":"vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_combined_poly_data"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html","text":"shapeworks::MeshManager Class to manage meshes. More... #include Inherits from QObject Public Slots Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress () Public Signals Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string ) Public Functions Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache Detailed Description class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background. Public Slots Documentation slot handle_thread_complete void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ) slot handle_warper_progress void handle_warper_progress () Public Signals Documentation signal new_mesh void new_mesh () signal error_encountered void error_encountered ( QString message ) signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function MeshManager MeshManager () function ~MeshManager ~ MeshManager () function set_cache_enabled void set_cache_enabled ( bool enabled ) Set if the cache should be enabled. function set_cache_memory_percent void set_cache_memory_percent ( int percent ) Set the memory cache size. function set_parallel_enabled inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled. function set_num_threads inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction. function generate_mesh void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread function get_mesh MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem function get_mesh MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points function get_surface_reconstructor std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain function get_mesh_warper std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain function get_mesh_generator inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator function clear_cache void clear_cache () clear the cache Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#shapeworksmeshmanager","text":"Class to manage meshes. More... #include Inherits from QObject","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots","text":"Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals","text":"Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions","text":"Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#detailed-description","text":"class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_thread_complete","text":"void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh )","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_warper_progress","text":"void handle_warper_progress ()","title":"slot handle_warper_progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-error_encountered","text":"void error_encountered ( QString message )","title":"signal error_encountered"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager","text":"MeshManager ()","title":"function MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager_1","text":"~ MeshManager ()","title":"function ~MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool enabled ) Set if the cache should be enabled.","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_memory_percent","text":"void set_cache_memory_percent ( int percent ) Set the memory cache size.","title":"function set_cache_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_parallel_enabled","text":"inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled.","title":"function set_parallel_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_num_threads","text":"inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction.","title":"function set_num_threads"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-generate_mesh","text":"void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread","title":"function generate_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_1","text":"MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_surface_reconstructor","text":"std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain","title":"function get_surface_reconstructor"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_warper","text":"std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain","title":"function get_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_generator","text":"inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator","title":"function get_mesh_generator"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-clear_cache","text":"void clear_cache () clear the cache Updated on 2023-10-25 at 15:40:27 +0000","title":"function clear_cache"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html","text":"shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html#shapeworksmeshreader","text":"reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html","text":"shapeworks::MeshReconstructors Public Attributes Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_ Public Attributes Documentation variable surface_reconstructors_ std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ; variable mesh_warpers_ std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#shapeworksmeshreconstructors","text":"","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes","text":"Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-surface_reconstructors_","text":"std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ;","title":"variable surface_reconstructors_"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-mesh_warpers_","text":"std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable mesh_warpers_"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html","text":"shapeworks::MeshSlice MeshSlice . More... #include Public Functions Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key) Detailed Description class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer Public Functions Documentation function MeshSlice MeshSlice ( Viewer * viewer ) function set_volume void set_volume ( vtkSmartPointer < vtkImageData > volume ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key void handle_key ( std :: string key ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#shapeworksmeshslice","text":"MeshSlice . More... #include ","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions","text":"Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#detailed-description","text":"class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-meshslice","text":"MeshSlice ( Viewer * viewer )","title":"function MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-set_volume","text":"void set_volume ( vtkSmartPointer < vtkImageData > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-handle_key","text":"void handle_key ( std :: string key ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html","text":"shapeworks::MeshUtils Module: Mesh Classes More... #include Public Functions Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations. Detailed Description class shapeworks :: MeshUtils ; This class provides helper functions for meshes Public Functions Documentation function createICPTransform static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform function threadSafeReadMesh static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock. function threadSafeWriteMesh static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock. function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes function findReferenceMesh static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh function boundaryLoopExtractor static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh function sharedBoundaryExtractor static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh function generateNormals static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes function visualizeVectorFieldForFFCs void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs. function getArrow vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#shapeworksmeshutils","text":"Module: Mesh Classes More... #include ","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions","text":"Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#detailed-description","text":"class shapeworks :: MeshUtils ; This class provides helper functions for meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-createicptransform","text":"static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform","title":"function createICPTransform"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafereadmesh","text":"static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock.","title":"function threadSafeReadMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafewritemesh","text":"static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock.","title":"function threadSafeWriteMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-findreferencemesh","text":"static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh","title":"function findReferenceMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundaryloopextractor","text":"static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh","title":"function boundaryLoopExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-sharedboundaryextractor","text":"static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh","title":"function sharedBoundaryExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-generatenormals","text":"static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes","title":"function generateNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals","text":"static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals_1","text":"static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-visualizevectorfieldforffcs","text":"void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs.","title":"function visualizeVectorFieldForFFCs"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-getarrow","text":"vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-25 at 15:40:28 +0000","title":"function getArrow"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html","text":"shapeworks::MeshWarper Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper Public Functions Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Protected Functions Name virtual void update_progress (float p) For overriding to handle progress updates. Detailed Description class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices Public Functions Documentation function set_reference_mesh void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles. function generate_warp bool generate_warp () Generate warp, return true on success. function get_warp_available bool get_warp_available () Return if the warp is available. function is_contour inline bool is_contour () const function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles. function extract_landmarks Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh. function is_contour inline bool is_contour () Return if set as a contour. function get_landmarks_map inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) function get_good_particle_indices inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) function get_warp_matrix inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix. function has_bad_particles inline bool has_bad_particles () const Return true if warping has removed any bad particle(s) function get_reference_mesh inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. function get_reference_particles inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles. function prep_mesh static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh. Protected Functions Documentation function update_progress inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#shapeworksmeshwarper","text":"Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions","text":"Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#detailed-description","text":"class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-set_reference_mesh","text":"void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles.","title":"function set_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-generate_warp","text":"bool generate_warp () Generate warp, return true on success.","title":"function generate_warp"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_available","text":"bool get_warp_available () Return if the warp is available.","title":"function get_warp_available"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour","text":"inline bool is_contour () const","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles.","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-extract_landmarks","text":"Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh.","title":"function extract_landmarks"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour_1","text":"inline bool is_contour () Return if set as a contour.","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_landmarks_map","text":"inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value)","title":"function get_landmarks_map"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_good_particle_indices","text":"inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping)","title":"function get_good_particle_indices"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_matrix","text":"inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix.","title":"function get_warp_matrix"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-has_bad_particles","text":"inline bool has_bad_particles () const Return true if warping has removed any bad particle(s)","title":"function has_bad_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_mesh","text":"inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added.","title":"function get_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_particles","text":"inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles.","title":"function get_reference_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-prep_mesh","text":"static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh.","title":"function prep_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-update_progress","text":"inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-25 at 15:40:28 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html","text":"shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. #include Public Attributes Name std::string filename Eigen::VectorXd points int domain size_t memory_size Friends Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b) Public Attributes Documentation variable filename std :: string filename ; variable points Eigen :: VectorXd points ; variable domain int domain { 0 }; variable memory_size size_t memory_size { 0 }; Friends friend operator< friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend operator== friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#shapeworksmeshworkitem","text":"Provides concurrent access to a list of shapes to work needing reconstruction. #include ","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes","text":"Name std::string filename Eigen::VectorXd points int domain size_t memory_size","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends","text":"Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b)","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-filename","text":"std :: string filename ;","title":"variable filename"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-points","text":"Eigen :: VectorXd points ;","title":"variable points"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-domain","text":"int domain { 0 };","title":"variable domain"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-memory_size","text":"size_t memory_size { 0 };","title":"variable memory_size"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator","text":"friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b );","title":"friend operator<"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator_1","text":"friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-25 at 15:40:27 +0000","title":"friend operator=="},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html","text":"shapeworks::MeshWorkQueue Public Types Name using std::list< MeshWorkItem > WorkList Public Functions Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size () Public Types Documentation using WorkList using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ; Public Functions Documentation function MeshWorkQueue MeshWorkQueue () function ~MeshWorkQueue ~ MeshWorkQueue () function push void push ( const MeshWorkItem & item ) function get_next_work_item MeshWorkItem * get_next_work_item () function is_inside bool is_inside ( const MeshWorkItem & item ) function remove void remove ( const MeshWorkItem & item ) function is_empty bool is_empty () function size int size () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#shapeworksmeshworkqueue","text":"","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types","text":"Name using std::list< MeshWorkItem > WorkList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions","text":"Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#using-worklist","text":"using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ;","title":"using WorkList"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue","text":"MeshWorkQueue ()","title":"function MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue_1","text":"~ MeshWorkQueue ()","title":"function ~MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-push","text":"void push ( const MeshWorkItem & item )","title":"function push"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-get_next_work_item","text":"MeshWorkItem * get_next_work_item ()","title":"function get_next_work_item"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_inside","text":"bool is_inside ( const MeshWorkItem & item )","title":"function is_inside"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-remove","text":"void remove ( const MeshWorkItem & item )","title":"function remove"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_empty","text":"bool is_empty ()","title":"function is_empty"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-size","text":"int size () Updated on 2023-10-25 at 15:40:27 +0000","title":"function size"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html","text":"shapeworks::MeshWorker Inherits from QObject, QRunnable Public Signals Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished () Public Functions Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run () Public Signals Documentation signal result_ready void result_ready ( const MeshWorkItem & item , MeshHandle mesh ) signal finished void finished () Public Functions Documentation function MeshWorker MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ) function ~MeshWorker ~ MeshWorker () function run void run () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#shapeworksmeshworker","text":"Inherits from QObject, QRunnable","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals","text":"Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions","text":"Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-result_ready","text":"void result_ready ( const MeshWorkItem & item , MeshHandle mesh )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker","text":"MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator )","title":"function MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker_1","text":"~ MeshWorker ()","title":"function ~MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-run","text":"void run () Updated on 2023-10-25 at 15:40:27 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html","text":"shapeworks::MeshWrapper Inherited by shapeworks::VtkMeshWrapper Public Types Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType Public Functions Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0 Public Types Documentation typedef PointType typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ; typedef GradNType typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ; Public Functions Documentation function ComputeDistance virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 function IsWithinDistance virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk function GetPointOnMesh virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh function GetMeshLowerBound virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound function GetMeshUpperBound virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound function ProjectVectorToSurfaceTangent virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh function InvalidateParticle inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle function IsGeodesicsEnabled virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled function GetPolydata virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#shapeworksmeshwrapper","text":"Inherited by shapeworks::VtkMeshWrapper","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types","text":"Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions","text":"Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-gradntype","text":"typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-computedistance","text":"virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshlowerbound","text":"virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshupperbound","text":"virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplenormalatpoint","text":"virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-invalidateparticle","text":"inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-isgeodesicsenabled","text":"virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled","title":"function IsGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpolydata","text":"virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html","text":"shapeworks::MixedEffectsShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int i ) function GetTimeptsPerIndividual inline int GetTimeptsPerIndividual () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function GetSlopeRandom inline const vnl_matrix < double > & GetSlopeRandom () const function GetInterceptRandom inline const vnl_matrix < double > & GetInterceptRandom () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function MixedEffectsShapeMatrix inline MixedEffectsShapeMatrix () function ~MixedEffectsShapeMatrix inline virtual ~ MixedEffectsShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#shapeworksmixedeffectsshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types","text":"Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions","text":"Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-self","text":"typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int i )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-gettimeptsperindividual","text":"inline int GetTimeptsPerIndividual () const","title":"function GetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getsloperandom","text":"inline const vnl_matrix < double > & GetSlopeRandom () const","title":"function GetSlopeRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getinterceptrandom","text":"inline const vnl_matrix < double > & GetInterceptRandom () const","title":"function GetInterceptRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix","text":"inline MixedEffectsShapeMatrix ()","title":"function MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix_1","text":"inline virtual ~ MixedEffectsShapeMatrix ()","title":"function ~MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html","text":"shapeworks::NetworkAnalysisJob Inherits from shapeworks::Job , QObject Public Functions Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function NetworkAnalysisJob NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function set_pvalue_of_interest void set_pvalue_of_interest ( double pvalue_of_interest ) function set_pvalue_threshold void set_pvalue_threshold ( double pvalue_threshold ) function set_num_iterations void set_num_iterations ( int num_iterations ) function get_tvalues Eigen :: VectorXf get_tvalues () function get_spm_values Eigen :: VectorXf get_spm_values () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#shapeworksnetworkanalysisjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions","text":"Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-networkanalysisjob","text":"NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature )","title":"function NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_of_interest","text":"void set_pvalue_of_interest ( double pvalue_of_interest )","title":"function set_pvalue_of_interest"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_threshold","text":"void set_pvalue_threshold ( double pvalue_threshold )","title":"function set_pvalue_threshold"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_num_iterations","text":"void set_num_iterations ( int num_iterations )","title":"function set_num_iterations"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_tvalues","text":"Eigen :: VectorXf get_tvalues ()","title":"function get_tvalues"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_spm_values","text":"Eigen :: VectorXf get_spm_values () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_spm_values"},{"location":"api/Classes/classshapeworks_1_1Observer.html","text":"shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix Public Classes Name struct DefinedCallbacksStruct Public Types Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const Public Attributes Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef Self typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: Observer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function TransformSetEventCallback inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) function PrefixTransformSetEventCallback inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) function NeighborhoodSetEventCallback inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback Protected Functions Documentation function Observer inline Observer () function ~Observer inline virtual ~ Observer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Public Attributes Documentation variable m_DefinedCallbacks DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#shapeworksobserver","text":"This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-classes","text":"Name struct DefinedCallbacksStruct","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types","text":"Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions","text":"Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes","text":"Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-self","text":"typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-superclass","text":"typedef DataObject shapeworks :: Observer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itktypemacro","text":"itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-transformseteventcallback","text":"inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function TransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-prefixtransformseteventcallback","text":"inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function PrefixTransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-neighborhoodseteventcallback","text":"inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & )","title":"function NeighborhoodSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer","text":"inline Observer ()","title":"function Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer_1","text":"inline virtual ~ Observer ()","title":"function ~Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#variable-m_definedcallbacks","text":"DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DefinedCallbacks"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html","text":"shapeworks::OptimizationVisualizer Public Functions Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer () Public Functions Documentation function AddMesh void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ) function IterationCallback void IterationCallback ( ParticleSystem * particleSystem ) function SetWireFrame void SetWireFrame ( bool enabled ) function SetSaveScreenshots void SetSaveScreenshots ( bool enabled , std :: string path ) function OptimizationVisualizer inline OptimizationVisualizer () function ~OptimizationVisualizer inline ~ OptimizationVisualizer () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#shapeworksoptimizationvisualizer","text":"","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions","text":"Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-addmesh","text":"void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-iterationcallback","text":"void IterationCallback ( ParticleSystem * particleSystem )","title":"function IterationCallback"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setwireframe","text":"void SetWireFrame ( bool enabled )","title":"function SetWireFrame"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setsavescreenshots","text":"void SetSaveScreenshots ( bool enabled , std :: string path )","title":"function SetSaveScreenshots"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer","text":"inline OptimizationVisualizer ()","title":"function OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer_1","text":"inline ~ OptimizationVisualizer () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html","text":"shapeworks::Optimize More... #include Inherited by shapeworks::QOptimize Public Types Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir () Protected Attributes Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Detailed Description class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization Public Types Documentation using ImageType using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ; using VectorType using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ; using MatrixType using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ; Public Functions Documentation function Optimize Optimize () Constructor. function ~Optimize virtual ~ Optimize () Destructor. function Run bool Run () Run the optimization. function LoadParameterFile bool LoadParameterFile ( std :: string filename ) Load a parameter file. function SetUpOptimize bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project. function SetProject void SetProject ( std :: shared_ptr < Project > project ) Set the Project object. function SetIterationCallbackFunction inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration. function AbortOptimization void AbortOptimization () Abort optimization. function GetAborted bool GetAborted () Return if the optimization was aborted. function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints function SetCutPlanes void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes. function SetVerbosity void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5) function SetDomainsPerShape void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape. function GetDomainsPerShape int GetDomainsPerShape () Return the number of domains per shape. function SetDomainType void SetDomainType ( shapeworks :: DomainType type ) function GetDomainType shapeworks :: DomainType GetDomainType () function SetNumberOfParticles void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain) function GetNumberOfParticles std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain. function SetTransformFile void SetTransformFile ( std :: string filename ) Set the transform file. function GetTransformFile std :: string GetTransformFile () Get the transform file. function SetPrefixTransformFile void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details) function GetPrefixTransformFile std :: string GetPrefixTransformFile () Get the prefix transform file. function SetOutputDir void SetOutputDir ( std :: string output_dir ) Set the output directory. function SetOutputTransformFile void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file. function SetOutputIndividualTransformFiles void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written. function SetUseMeshBasedAttributes void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used. function GetUseMeshBasedAttributes bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. function SetUseXYZ void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain. function SetUseNormals void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain. function SetAttributesPerDomain void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain. function GetAttributesPerDomain std :: vector < int > GetAttributesPerDomain () Get attributes per domain. function SetDistributionDomainID void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details) function GetDistributionDomainID int GetDistributionDomainID () Get the distribution domain ID. function SetOutputCuttingPlaneFile void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file. function SetUseCuttingPlanes void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes. function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape. function SetProcessingMode void SetProcessingMode ( int mode ) Set processing mode (TODO: details) function SetAdaptivityMode void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details) function SetMeshFFCMode inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. function SetAdaptivityStrength void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details) function SetTimePtsPerSubject void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details) function GetTimePtsPerSubject int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) function SetOptimizationIterations void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations. function SetOptimizationIterationsCompleted void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details) function SetIterationsPerSplit void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split. function SetUseShapeStatisticsInInit void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization. function SetProcrustesInterval void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable) function SetProcrustesScaling void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used. function SetProcrustesRotationTranslation void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used. function SetRelativeWeighting void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details) function SetInitialRelativeWeighting void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details) function SetStartingRegularization void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details) function SetEndingRegularization void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details) function SetRecomputeRegularizationInterval void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details) function SetSaveInitSplits void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not. function SetCheckpointingInterval void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval. function SetKeepCheckpoints void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable) function SetUseRegression void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details) function SetUseMixedEffects void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details) function SetUseDisentangledSpatiotemporalSSM void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method. function GetUseDisentangledSpatiotemporalSSM bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. function SetNormalAngle void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details) function SetPerformGoodBad void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details) function SetLogEnergy void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details) function AddImage void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images. function AddMesh void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFilenames void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details) function SetPointFiles void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details) function SetInitialPoints void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function GetNumShapes int GetNumShapes () Get number of shapes. function SetAttributeScales void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes. function SetParticleFlags void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details) function SetFixedDomains void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details) function SetSharedBoundaryEnabled void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings. function SetSharedBoundaryWeight void SetSharedBoundaryWeight ( double weight ) function GetDomainFlags const std :: vector < int > & GetDomainFlags () function SetFileOutputEnabled void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled. function GetUseXYZ std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape. function GetUseNormals std :: vector < bool > GetUseNormals () Return if Normals are used, per shape. function SetNarrowBand void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing. function GetNarrowBand double GetNarrowBand () Return the narrow band to be used. function SetUseShapeStatisticsAfter void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over. function GetUseShapeStatisticsAfter int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. function PrintParamInfo void PrintParamInfo () Print parameter info to stdout. function GetSampler inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler . function GetParticleSystem MatrixContainer GetParticleSystem () Return the particle system as a matrix. function SetPythonFile void SetPythonFile ( std :: string filename ) Set the python file to run at startup. function SetGeodesicsEnabled void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled. function SetGeodesicsCacheSizeMultiplier void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles function GetVisualizer OptimizationVisualizer & GetVisualizer () function SetShowVisualizer void SetShowVisualizer ( bool show ) function GetShowVisualizer bool GetShowVisualizer () function GetMeshFFCMode inline bool GetMeshFFCMode () function TransformPoint vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary function UpdateProgress void UpdateProgress () function set_particle_format inline void set_particle_format ( std :: string format ) Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback function ComputeTotalIterations void ComputeTotalIterations () function OptimizerStop void OptimizerStop () function ReadTransformFile void ReadTransformFile () function ReadPrefixTransformFile void ReadPrefixTransformFile ( const std :: string & s ) function InitializeSampler void InitializeSampler () function GetMinNeighborhoodRadius double GetMinNeighborhoodRadius () function AddSinglePoint void AddSinglePoint () function Initialize void Initialize () function AddAdaptivity void AddAdaptivity () function RunOptimize void RunOptimize () function IterateCallback virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback function ComputeEnergyAfterIteration void ComputeEnergyAfterIteration () function SetCotanSigma void SetCotanSigma () function WriteTransformFile void WriteTransformFile ( int iter = -1 ) const function WriteTransformFile void WriteTransformFile ( std :: string iter_prefix ) const function WriteTransformFiles void WriteTransformFiles ( int iter = -1 ) const function WriteTransformFiles void WriteTransformFiles ( std :: string iter_prefix ) const function WritePointFiles void WritePointFiles ( int iter = -1 ) function WritePointFiles void WritePointFiles ( std :: string iter_prefix ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( int iter = -1 ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( std :: string iter_prefix ) function WriteEnergyFiles void WriteEnergyFiles () function WriteSplitFiles void WriteSplitFiles ( std :: string name ) function WriteCuttingPlanePoints void WriteCuttingPlanePoints ( int iter = -1 ) function WriteParameters void WriteParameters ( std :: string output_dir = \"\" ) function ReportBadParticles void ReportBadParticles () function SetParameters int SetParameters () function WriteModes void WriteModes () function PrintStartMessage void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const function PrintDoneMessage void PrintDoneMessage ( unsigned int vlevel = 0 ) const function UpdateExportablePoints virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms function UpdateProject void UpdateProject () function GetCheckpointDir std :: string GetCheckpointDir () Protected Attributes Documentation variable m_sampler std :: shared_ptr < Sampler > m_sampler ; variable m_procrustes ProcrustesRegistration :: Pointer m_procrustes ; variable m_good_bad std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; variable m_verbosity_level unsigned int m_verbosity_level = 0 ; variable m_local_points std :: vector < std :: vector < itk :: Point < double > > > m_local_points ; variable m_global_points std :: vector < std :: vector < itk :: Point < double > > > m_global_points ; variable m_checkpoint_counter int m_checkpoint_counter = 0 ; variable m_procrustes_counter int m_procrustes_counter = 0 ; variable m_use_cutting_planes bool m_use_cutting_planes = false ; variable m_optimizing bool m_optimizing = false ; variable m_use_regression bool m_use_regression = false ; variable m_use_mixed_effects bool m_use_mixed_effects = false ; variable m_use_disentangled_ssm bool m_use_disentangled_ssm = false ; variable m_domains_per_shape unsigned int m_domains_per_shape = 1 ; variable m_domain_type shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; variable m_number_of_particles std :: vector < int > m_number_of_particles ; variable m_transform_file std :: string m_transform_file ; variable m_prefix_transform_file std :: string m_prefix_transform_file ; variable m_output_dir std :: string m_output_dir ; variable m_output_transform_file std :: string m_output_transform_file ; variable m_output_transform_files bool m_output_transform_files = false ; variable m_mesh_based_attributes bool m_mesh_based_attributes = false ; variable m_use_xyz std :: vector < bool > m_use_xyz ; variable m_use_normals std :: vector < bool > m_use_normals ; variable m_attributes_per_domain std :: vector < int > m_attributes_per_domain ; variable m_distribution_domain_id int m_distribution_domain_id = -1 ; variable m_output_cutting_plane_file std :: string m_output_cutting_plane_file ; variable m_processing_mode int m_processing_mode = 3 ; variable m_adaptivity_mode int m_adaptivity_mode = 0 ; variable m_adaptivity_strength double m_adaptivity_strength = 0.0 ; variable m_mesh_ffc_mode bool m_mesh_ffc_mode = 0 ; variable m_timepts_per_subject unsigned int m_timepts_per_subject = 1 ; variable m_optimization_iterations int m_optimization_iterations = 2000 ; variable m_optimization_iterations_completed int m_optimization_iterations_completed = 0 ; variable m_iterations_per_split int m_iterations_per_split = 1000 ; variable m_use_shape_statistics_in_init bool m_use_shape_statistics_in_init = false ; variable m_procrustes_interval unsigned int m_procrustes_interval = 3 ; variable m_procrustes_scaling bool m_procrustes_scaling = true ; variable m_procrustes_rotation_translation bool m_procrustes_rotation_translation = true ; variable m_relative_weighting double m_relative_weighting = 1.0 ; variable m_initial_relative_weighting double m_initial_relative_weighting = 0.05 ; variable m_starting_regularization double m_starting_regularization = 1000 ; variable m_ending_regularization double m_ending_regularization = 1.0 ; variable m_recompute_regularization_interval int m_recompute_regularization_interval = 1 ; variable m_save_init_splits bool m_save_init_splits = false ; variable m_checkpointing_interval unsigned int m_checkpointing_interval = 50 ; variable m_keep_checkpoints int m_keep_checkpoints = 0 ; variable m_cotan_sigma_factor double m_cotan_sigma_factor = 5.0 ; variable m_particle_flags std :: vector < int > m_particle_flags ; variable m_domain_flags std :: vector < int > m_domain_flags ; variable m_narrow_band double m_narrow_band = 0.0 ; variable m_narrow_band_set bool m_narrow_band_set = false ; variable m_fixed_domains_present bool m_fixed_domains_present = false ; variable m_use_shape_statistics_after int m_use_shape_statistics_after = -1 ; variable m_python_filename std :: string m_python_filename ; variable m_geodesics_enabled bool m_geodesics_enabled = false ; variable m_geodesic_cache_size_multiplier size_t m_geodesic_cache_size_multiplier = 0 ; variable m_spacing double m_spacing = 0 ; variable m_filenames std :: vector < std :: string > m_filenames ; variable m_num_shapes int m_num_shapes = 0 ; variable m_energy_a std :: vector < double > m_energy_a ; variable m_energy_b std :: vector < double > m_energy_b ; variable m_total_energy std :: vector < double > m_total_energy ; variable m_log_energy bool m_log_energy = false ; variable m_str_energy std :: string m_str_energy ; variable m_bad_ids std :: vector < std :: vector < int > > m_bad_ids ; variable m_normal_angle double m_normal_angle = itk :: Math :: pi / 2.0 ; variable m_perform_good_bad bool m_perform_good_bad = false ; variable m_cutting_planes_per_input std :: vector < int > m_cutting_planes_per_input ; variable m_spheres_per_input std :: vector < int > m_spheres_per_input ; variable m_file_output_enabled bool m_file_output_enabled = true ; variable m_aborted bool m_aborted = false ; variable m_cut_planes std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ; variable m_total_iterations int m_total_iterations = 0 ; variable m_iteration_count int m_iteration_count = 0 ; variable m_split_number int m_split_number = 0 ; variable current_particle_iterations_ int current_particle_iterations_ = 0 ; variable total_particle_iterations_ int total_particle_iterations_ = 0 ; variable iteration_callback_ std :: function < void ( void ) > iteration_callback_ ; variable show_visualizer_ bool show_visualizer_ = false ; variable visualizer_ shapeworks :: OptimizationVisualizer visualizer_ ; variable particle_format_ std :: string particle_format_ = \"particles\" ; variable project_ std :: shared_ptr < Project > project_ ; variable m_start_time std :: chrono :: system_clock :: time_point m_start_time ; variable m_last_update_time std :: chrono :: system_clock :: time_point m_last_update_time ; variable m_last_remaining_update_time std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; variable m_remaining_time_message std :: string m_remaining_time_message ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#shapeworksoptimize","text":"More... #include Inherited by shapeworks::QOptimize","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types","text":"Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions","text":"Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions","text":"Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes","text":"Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#detailed-description","text":"class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-imagetype","text":"using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-vectortype","text":"using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-matrixtype","text":"using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ;","title":"using MatrixType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize","text":"Optimize () Constructor.","title":"function Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize_1","text":"virtual ~ Optimize () Destructor.","title":"function ~Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-run","text":"bool Run () Run the optimization.","title":"function Run"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-loadparameterfile","text":"bool LoadParameterFile ( std :: string filename ) Load a parameter file.","title":"function LoadParameterFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setupoptimize","text":"bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project.","title":"function SetUpOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setproject","text":"void SetProject ( std :: shared_ptr < Project > project ) Set the Project object.","title":"function SetProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallbackfunction","text":"inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration.","title":"function SetIterationCallbackFunction"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-abortoptimization","text":"void AbortOptimization () Abort optimization.","title":"function AbortOptimization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getaborted","text":"bool GetAborted () Return if the optimization was aborted.","title":"function GetAborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcutplanes","text":"void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes.","title":"function SetCutPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setverbosity","text":"void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5)","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomainspershape","text":"void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainspershape","text":"int GetDomainsPerShape () Return the number of domains per shape.","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomaintype","text":"void SetDomainType ( shapeworks :: DomainType type )","title":"function SetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomaintype","text":"shapeworks :: DomainType GetDomainType ()","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnumberofparticles","text":"void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain)","title":"function SetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumberofparticles","text":"std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settransformfile","text":"void SetTransformFile ( std :: string filename ) Set the transform file.","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettransformfile","text":"std :: string GetTransformFile () Get the transform file.","title":"function GetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprefixtransformfile","text":"void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details)","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprefixtransformfile","text":"std :: string GetPrefixTransformFile () Get the prefix transform file.","title":"function GetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputdir","text":"void SetOutputDir ( std :: string output_dir ) Set the output directory.","title":"function SetOutputDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputtransformfile","text":"void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file.","title":"function SetOutputTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputindividualtransformfiles","text":"void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written.","title":"function SetOutputIndividualTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemeshbasedattributes","text":"void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used.","title":"function SetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusemeshbasedattributes","text":"bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used.","title":"function GetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusexyz","text":"void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain.","title":"function SetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusenormals","text":"void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain.","title":"function SetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain.","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getattributesperdomain","text":"std :: vector < int > GetAttributesPerDomain () Get attributes per domain.","title":"function GetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdistributiondomainid","text":"void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details)","title":"function SetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdistributiondomainid","text":"int GetDistributionDomainID () Get the distribution domain ID.","title":"function GetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputcuttingplanefile","text":"void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file.","title":"function SetOutputCuttingPlaneFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusecuttingplanes","text":"void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes.","title":"function SetUseCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocessingmode","text":"void SetProcessingMode ( int mode ) Set processing mode (TODO: details)","title":"function SetProcessingMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitymode","text":"void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details)","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode.","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitystrength","text":"void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details)","title":"function SetAdaptivityStrength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settimeptspersubject","text":"void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details)","title":"function SetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettimeptspersubject","text":"int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details)","title":"function GetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterations","text":"void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations.","title":"function SetOptimizationIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterationscompleted","text":"void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details)","title":"function SetOptimizationIterationsCompleted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationspersplit","text":"void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split.","title":"function SetIterationsPerSplit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsininit","text":"void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization.","title":"function SetUseShapeStatisticsInInit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesinterval","text":"void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable)","title":"function SetProcrustesInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesscaling","text":"void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used.","title":"function SetProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesrotationtranslation","text":"void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used.","title":"function SetProcrustesRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrelativeweighting","text":"void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details)","title":"function SetRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialrelativeweighting","text":"void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details)","title":"function SetInitialRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setstartingregularization","text":"void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details)","title":"function SetStartingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setendingregularization","text":"void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details)","title":"function SetEndingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrecomputeregularizationinterval","text":"void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details)","title":"function SetRecomputeRegularizationInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsaveinitsplits","text":"void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not.","title":"function SetSaveInitSplits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcheckpointinginterval","text":"void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval.","title":"function SetCheckpointingInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setkeepcheckpoints","text":"void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable)","title":"function SetKeepCheckpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseregression","text":"void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details)","title":"function SetUseRegression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemixedeffects","text":"void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details)","title":"function SetUseMixedEffects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusedisentangledspatiotemporalssm","text":"void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method.","title":"function SetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusedisentangledspatiotemporalssm","text":"bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method.","title":"function GetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnormalangle","text":"void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details)","title":"function SetNormalAngle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setperformgoodbad","text":"void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details)","title":"function SetPerformGoodBad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setlogenergy","text":"void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details)","title":"function SetLogEnergy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images.","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addmesh","text":"void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfilenames","text":"void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details)","title":"function SetFilenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpointfiles","text":"void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details)","title":"function SetPointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialpoints","text":"void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumshapes","text":"int GetNumShapes () Get number of shapes.","title":"function GetNumShapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributescales","text":"void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details)","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes.","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparticleflags","text":"void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details)","title":"function SetParticleFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfixeddomains","text":"void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details)","title":"function SetFixedDomains"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryenabled","text":"void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings.","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryweight","text":"void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainflags","text":"const std :: vector < int > & GetDomainFlags ()","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfileoutputenabled","text":"void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled.","title":"function SetFileOutputEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusexyz","text":"std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape.","title":"function GetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusenormals","text":"std :: vector < bool > GetUseNormals () Return if Normals are used, per shape.","title":"function GetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnarrowband","text":"void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing.","title":"function SetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnarrowband","text":"double GetNarrowBand () Return the narrow band to be used.","title":"function GetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsafter","text":"void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over.","title":"function SetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getuseshapestatisticsafter","text":"int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over.","title":"function GetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printparaminfo","text":"void PrintParamInfo () Print parameter info to stdout.","title":"function PrintParamInfo"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getsampler","text":"inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler .","title":"function GetSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getparticlesystem","text":"MatrixContainer GetParticleSystem () Return the particle system as a matrix.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpythonfile","text":"void SetPythonFile ( std :: string filename ) Set the python file to run at startup.","title":"function SetPythonFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicsenabled","text":"void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled.","title":"function SetGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicscachesizemultiplier","text":"void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles","title":"function SetGeodesicsCacheSizeMultiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getvisualizer","text":"OptimizationVisualizer & GetVisualizer ()","title":"function GetVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setshowvisualizer","text":"void SetShowVisualizer ( bool show )","title":"function SetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getshowvisualizer","text":"bool GetShowVisualizer ()","title":"function GetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getmeshffcmode","text":"inline bool GetMeshFFCMode ()","title":"function GetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-transformpoint","text":"vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateprogress","text":"void UpdateProgress ()","title":"function UpdateProgress"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-set_particle_format","text":"inline void set_particle_format ( std :: string format )","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computetotaliterations","text":"void ComputeTotalIterations ()","title":"function ComputeTotalIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimizerstop","text":"void OptimizerStop ()","title":"function OptimizerStop"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readtransformfile","text":"void ReadTransformFile ()","title":"function ReadTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readprefixtransformfile","text":"void ReadPrefixTransformFile ( const std :: string & s )","title":"function ReadPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initializesampler","text":"void InitializeSampler ()","title":"function InitializeSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getminneighborhoodradius","text":"double GetMinNeighborhoodRadius ()","title":"function GetMinNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addsinglepoint","text":"void AddSinglePoint ()","title":"function AddSinglePoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initialize","text":"void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addadaptivity","text":"void AddAdaptivity ()","title":"function AddAdaptivity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-runoptimize","text":"void RunOptimize ()","title":"function RunOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computeenergyafteriteration","text":"void ComputeEnergyAfterIteration ()","title":"function ComputeEnergyAfterIteration"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcotansigma","text":"void SetCotanSigma ()","title":"function SetCotanSigma"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile","text":"void WriteTransformFile ( int iter = -1 ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile_1","text":"void WriteTransformFile ( std :: string iter_prefix ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles","text":"void WriteTransformFiles ( int iter = -1 ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles_1","text":"void WriteTransformFiles ( std :: string iter_prefix ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles","text":"void WritePointFiles ( int iter = -1 )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles_1","text":"void WritePointFiles ( std :: string iter_prefix )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures","text":"void WritePointFilesWithFeatures ( int iter = -1 )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures_1","text":"void WritePointFilesWithFeatures ( std :: string iter_prefix )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeenergyfiles","text":"void WriteEnergyFiles ()","title":"function WriteEnergyFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writesplitfiles","text":"void WriteSplitFiles ( std :: string name )","title":"function WriteSplitFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writecuttingplanepoints","text":"void WriteCuttingPlanePoints ( int iter = -1 )","title":"function WriteCuttingPlanePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeparameters","text":"void WriteParameters ( std :: string output_dir = \"\" )","title":"function WriteParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-reportbadparticles","text":"void ReportBadParticles ()","title":"function ReportBadParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparameters","text":"int SetParameters ()","title":"function SetParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writemodes","text":"void WriteModes ()","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printstartmessage","text":"void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const","title":"function PrintStartMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printdonemessage","text":"void PrintDoneMessage ( unsigned int vlevel = 0 ) const","title":"function PrintDoneMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateproject","text":"void UpdateProject ()","title":"function UpdateProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getcheckpointdir","text":"std :: string GetCheckpointDir ()","title":"function GetCheckpointDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_sampler","text":"std :: shared_ptr < Sampler > m_sampler ;","title":"variable m_sampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes","text":"ProcrustesRegistration :: Pointer m_procrustes ;","title":"variable m_procrustes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_good_bad","text":"std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ;","title":"variable m_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_verbosity_level","text":"unsigned int m_verbosity_level = 0 ;","title":"variable m_verbosity_level"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_local_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_local_points ;","title":"variable m_local_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_global_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_global_points ;","title":"variable m_global_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpoint_counter","text":"int m_checkpoint_counter = 0 ;","title":"variable m_checkpoint_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_counter","text":"int m_procrustes_counter = 0 ;","title":"variable m_procrustes_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_cutting_planes","text":"bool m_use_cutting_planes = false ;","title":"variable m_use_cutting_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimizing","text":"bool m_optimizing = false ;","title":"variable m_optimizing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_regression","text":"bool m_use_regression = false ;","title":"variable m_use_regression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_mixed_effects","text":"bool m_use_mixed_effects = false ;","title":"variable m_use_mixed_effects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_disentangled_ssm","text":"bool m_use_disentangled_ssm = false ;","title":"variable m_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domains_per_shape","text":"unsigned int m_domains_per_shape = 1 ;","title":"variable m_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_type","text":"shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ;","title":"variable m_domain_type"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_number_of_particles","text":"std :: vector < int > m_number_of_particles ;","title":"variable m_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_transform_file","text":"std :: string m_transform_file ;","title":"variable m_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_prefix_transform_file","text":"std :: string m_prefix_transform_file ;","title":"variable m_prefix_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_dir","text":"std :: string m_output_dir ;","title":"variable m_output_dir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_file","text":"std :: string m_output_transform_file ;","title":"variable m_output_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_files","text":"bool m_output_transform_files = false ;","title":"variable m_output_transform_files"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_based_attributes","text":"bool m_mesh_based_attributes = false ;","title":"variable m_mesh_based_attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_xyz","text":"std :: vector < bool > m_use_xyz ;","title":"variable m_use_xyz"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_normals","text":"std :: vector < bool > m_use_normals ;","title":"variable m_use_normals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_attributes_per_domain","text":"std :: vector < int > m_attributes_per_domain ;","title":"variable m_attributes_per_domain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_distribution_domain_id","text":"int m_distribution_domain_id = -1 ;","title":"variable m_distribution_domain_id"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_cutting_plane_file","text":"std :: string m_output_cutting_plane_file ;","title":"variable m_output_cutting_plane_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_processing_mode","text":"int m_processing_mode = 3 ;","title":"variable m_processing_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_mode","text":"int m_adaptivity_mode = 0 ;","title":"variable m_adaptivity_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_strength","text":"double m_adaptivity_strength = 0.0 ;","title":"variable m_adaptivity_strength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_ffc_mode","text":"bool m_mesh_ffc_mode = 0 ;","title":"variable m_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_timepts_per_subject","text":"unsigned int m_timepts_per_subject = 1 ;","title":"variable m_timepts_per_subject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations","text":"int m_optimization_iterations = 2000 ;","title":"variable m_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations_completed","text":"int m_optimization_iterations_completed = 0 ;","title":"variable m_optimization_iterations_completed"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iterations_per_split","text":"int m_iterations_per_split = 1000 ;","title":"variable m_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_in_init","text":"bool m_use_shape_statistics_in_init = false ;","title":"variable m_use_shape_statistics_in_init"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_interval","text":"unsigned int m_procrustes_interval = 3 ;","title":"variable m_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_scaling","text":"bool m_procrustes_scaling = true ;","title":"variable m_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_rotation_translation","text":"bool m_procrustes_rotation_translation = true ;","title":"variable m_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_relative_weighting","text":"double m_relative_weighting = 1.0 ;","title":"variable m_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_initial_relative_weighting","text":"double m_initial_relative_weighting = 0.05 ;","title":"variable m_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_starting_regularization","text":"double m_starting_regularization = 1000 ;","title":"variable m_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_ending_regularization","text":"double m_ending_regularization = 1.0 ;","title":"variable m_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_recompute_regularization_interval","text":"int m_recompute_regularization_interval = 1 ;","title":"variable m_recompute_regularization_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_save_init_splits","text":"bool m_save_init_splits = false ;","title":"variable m_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpointing_interval","text":"unsigned int m_checkpointing_interval = 50 ;","title":"variable m_checkpointing_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_keep_checkpoints","text":"int m_keep_checkpoints = 0 ;","title":"variable m_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cotan_sigma_factor","text":"double m_cotan_sigma_factor = 5.0 ;","title":"variable m_cotan_sigma_factor"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_particle_flags","text":"std :: vector < int > m_particle_flags ;","title":"variable m_particle_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_flags","text":"std :: vector < int > m_domain_flags ;","title":"variable m_domain_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band","text":"double m_narrow_band = 0.0 ;","title":"variable m_narrow_band"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band_set","text":"bool m_narrow_band_set = false ;","title":"variable m_narrow_band_set"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_fixed_domains_present","text":"bool m_fixed_domains_present = false ;","title":"variable m_fixed_domains_present"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_after","text":"int m_use_shape_statistics_after = -1 ;","title":"variable m_use_shape_statistics_after"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_python_filename","text":"std :: string m_python_filename ;","title":"variable m_python_filename"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesics_enabled","text":"bool m_geodesics_enabled = false ;","title":"variable m_geodesics_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesic_cache_size_multiplier","text":"size_t m_geodesic_cache_size_multiplier = 0 ;","title":"variable m_geodesic_cache_size_multiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spacing","text":"double m_spacing = 0 ;","title":"variable m_spacing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_filenames","text":"std :: vector < std :: string > m_filenames ;","title":"variable m_filenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_num_shapes","text":"int m_num_shapes = 0 ;","title":"variable m_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_a","text":"std :: vector < double > m_energy_a ;","title":"variable m_energy_a"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_b","text":"std :: vector < double > m_energy_b ;","title":"variable m_energy_b"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_energy","text":"std :: vector < double > m_total_energy ;","title":"variable m_total_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_log_energy","text":"bool m_log_energy = false ;","title":"variable m_log_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_str_energy","text":"std :: string m_str_energy ;","title":"variable m_str_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_bad_ids","text":"std :: vector < std :: vector < int > > m_bad_ids ;","title":"variable m_bad_ids"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_normal_angle","text":"double m_normal_angle = itk :: Math :: pi / 2.0 ;","title":"variable m_normal_angle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_perform_good_bad","text":"bool m_perform_good_bad = false ;","title":"variable m_perform_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cutting_planes_per_input","text":"std :: vector < int > m_cutting_planes_per_input ;","title":"variable m_cutting_planes_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spheres_per_input","text":"std :: vector < int > m_spheres_per_input ;","title":"variable m_spheres_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_file_output_enabled","text":"bool m_file_output_enabled = true ;","title":"variable m_file_output_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_aborted","text":"bool m_aborted = false ;","title":"variable m_aborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cut_planes","text":"std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ;","title":"variable m_cut_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_iterations","text":"int m_total_iterations = 0 ;","title":"variable m_total_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iteration_count","text":"int m_iteration_count = 0 ;","title":"variable m_iteration_count"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_split_number","text":"int m_split_number = 0 ;","title":"variable m_split_number"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-current_particle_iterations_","text":"int current_particle_iterations_ = 0 ;","title":"variable current_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-total_particle_iterations_","text":"int total_particle_iterations_ = 0 ;","title":"variable total_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-iteration_callback_","text":"std :: function < void ( void ) > iteration_callback_ ;","title":"variable iteration_callback_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-show_visualizer_","text":"bool show_visualizer_ = false ;","title":"variable show_visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-visualizer_","text":"shapeworks :: OptimizationVisualizer visualizer_ ;","title":"variable visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-particle_format_","text":"std :: string particle_format_ = \"particles\" ;","title":"variable particle_format_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-project_","text":"std :: shared_ptr < Project > project_ ;","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_start_time","text":"std :: chrono :: system_clock :: time_point m_start_time ;","title":"variable m_start_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_update_time","text":"std :: chrono :: system_clock :: time_point m_last_update_time ;","title":"variable m_last_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_remaining_update_time","text":"std :: chrono :: system_clock :: time_point m_last_remaining_update_time ;","title":"variable m_last_remaining_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_remaining_time_message","text":"std :: string m_remaining_time_message ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_remaining_time_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html","text":"shapeworks::OptimizeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#shapeworksoptimizecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html","text":"shapeworks::OptimizeParameterFile More... #include Public Functions Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object. Detailed Description class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object. Public Functions Documentation function OptimizeParameterFile OptimizeParameterFile () function load_parameter_file bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#shapeworksoptimizeparameterfile","text":"More... #include ","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions","text":"Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#detailed-description","text":"class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-optimizeparameterfile","text":"OptimizeParameterFile ()","title":"function OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-load_parameter_file","text":"bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-25 at 15:40:27 +0000","title":"function load_parameter_file"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html","text":"shapeworks::OptimizeParameters More... #include Public Functions Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format) Detailed Description class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters Public Functions Documentation function OptimizeParameters explicit OptimizeParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_optimize_output_prefix std :: string get_optimize_output_prefix () function set_optimize_output_prefix void set_optimize_output_prefix ( std :: string prefix ) function get_number_of_particles std :: vector < int > get_number_of_particles () function set_number_of_particles void set_number_of_particles ( std :: vector < int > number_of_particles ) function get_initial_relative_weighting double get_initial_relative_weighting () function set_initial_relative_weighting void set_initial_relative_weighting ( double value ) function get_relative_weighting double get_relative_weighting () function set_relative_weighting void set_relative_weighting ( double value ) function get_starting_regularization double get_starting_regularization () function set_starting_regularization void set_starting_regularization ( double value ) function get_ending_regularization double get_ending_regularization () function set_ending_regularization void set_ending_regularization ( double value ) function get_iterations_per_split int get_iterations_per_split () function set_iterations_per_split void set_iterations_per_split ( int value ) function get_optimization_iterations int get_optimization_iterations () function set_optimization_iterations void set_optimization_iterations ( int value ) function get_use_geodesic_distance bool get_use_geodesic_distance () function set_use_geodesic_distance void set_use_geodesic_distance ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_use_normals std :: vector < bool > get_use_normals () function set_use_normals void set_use_normals ( std :: vector < bool > use_normals ) function get_normals_strength double get_normals_strength () function set_normals_strength void set_normals_strength ( double value ) function get_use_disentangled_ssm bool get_use_disentangled_ssm () function set_use_disentangled_ssm void set_use_disentangled_ssm ( bool value ) function get_use_procrustes bool get_use_procrustes () function set_use_procrustes void set_use_procrustes ( bool value ) function get_use_procrustes_scaling bool get_use_procrustes_scaling () function set_use_procrustes_scaling void set_use_procrustes_scaling ( bool value ) function get_use_procrustes_rotation_translation bool get_use_procrustes_rotation_translation () function set_use_procrustes_rotation_translation void set_use_procrustes_rotation_translation ( bool value ) function get_procrustes_interval int get_procrustes_interval () function set_procrustes_interval void set_procrustes_interval ( int value ) function get_use_multiscale bool get_use_multiscale () function set_use_multiscale void set_use_multiscale ( bool value ) function get_multiscale_particles int get_multiscale_particles () function set_multiscale_particles void set_multiscale_particles ( int value ) function get_narrow_band double get_narrow_band () function set_narrow_band void set_narrow_band ( double value ) function get_verbosity int get_verbosity () function set_verbosity void set_verbosity ( int value ) function get_mesh_ffc_mode bool get_mesh_ffc_mode () function set_mesh_ffc_mode void set_mesh_ffc_mode ( bool value ) function get_use_landmarks bool get_use_landmarks () function set_use_landmarks void set_use_landmarks ( bool value ) function get_use_fixed_subjects bool get_use_fixed_subjects () function set_use_fixed_subjects void set_use_fixed_subjects ( bool value ) function get_fixed_subjects_column std :: string get_fixed_subjects_column () function set_fixed_subject_column void set_fixed_subject_column ( std :: string column ) function get_fixed_subjects_choice std :: string get_fixed_subjects_choice () function set_fixed_subjects_choice void set_fixed_subjects_choice ( std :: string choice ) function set_abort_load void set_abort_load ( bool value ) function set_load_callback void set_load_callback ( const std :: function < void ( int ) > & f ) function set_up_optimize bool set_up_optimize ( Optimize * optimize ) function is_subject_fixed bool is_subject_fixed ( std :: shared_ptr < Subject > subject ) function get_checkpoint_interval int get_checkpoint_interval () function set_checkpoint_interval void set_checkpoint_interval ( int iterations ) function get_save_init_splits bool get_save_init_splits () function set_save_init_splits void set_save_init_splits ( bool enabled ) function get_keep_checkpoints bool get_keep_checkpoints () function set_keep_checkpoints void set_keep_checkpoints ( bool enabled ) function get_field_attributes std :: vector < std :: string > get_field_attributes () function set_field_attributes void set_field_attributes ( std :: vector < std :: string > attributes ) function get_field_attribute_weights std :: vector < double > get_field_attribute_weights () function set_field_attribute_weights void set_field_attribute_weights ( std :: vector < double > weights ) function get_use_geodesics_to_landmarks bool get_use_geodesics_to_landmarks () function set_use_geodesics_to_landmarks void set_use_geodesics_to_landmarks ( bool value ) function get_geodesic_to_landmarks_weight double get_geodesic_to_landmarks_weight () function set_geodesic_to_landmarks_weight void set_geodesic_to_landmarks_weight ( double value ) function get_particle_format std :: string get_particle_format () function set_particle_format void set_particle_format ( std :: string format ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#shapeworksoptimizeparameters","text":"More... #include ","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions","text":"Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#detailed-description","text":"class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-optimizeparameters","text":"explicit OptimizeParameters ( ProjectHandle project )","title":"function OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimize_output_prefix","text":"std :: string get_optimize_output_prefix ()","title":"function get_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimize_output_prefix","text":"void set_optimize_output_prefix ( std :: string prefix )","title":"function set_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_number_of_particles","text":"std :: vector < int > get_number_of_particles ()","title":"function get_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_number_of_particles","text":"void set_number_of_particles ( std :: vector < int > number_of_particles )","title":"function set_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_initial_relative_weighting","text":"double get_initial_relative_weighting ()","title":"function get_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_initial_relative_weighting","text":"void set_initial_relative_weighting ( double value )","title":"function set_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_relative_weighting","text":"double get_relative_weighting ()","title":"function get_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_relative_weighting","text":"void set_relative_weighting ( double value )","title":"function set_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_starting_regularization","text":"double get_starting_regularization ()","title":"function get_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_starting_regularization","text":"void set_starting_regularization ( double value )","title":"function set_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_ending_regularization","text":"double get_ending_regularization ()","title":"function get_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_ending_regularization","text":"void set_ending_regularization ( double value )","title":"function set_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_iterations_per_split","text":"int get_iterations_per_split ()","title":"function get_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_iterations_per_split","text":"void set_iterations_per_split ( int value )","title":"function set_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimization_iterations","text":"int get_optimization_iterations ()","title":"function get_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimization_iterations","text":"void set_optimization_iterations ( int value )","title":"function set_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesic_distance","text":"bool get_use_geodesic_distance ()","title":"function get_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesic_distance","text":"void set_use_geodesic_distance ( bool value )","title":"function set_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_normals","text":"std :: vector < bool > get_use_normals ()","title":"function get_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_normals","text":"void set_use_normals ( std :: vector < bool > use_normals )","title":"function set_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_normals_strength","text":"double get_normals_strength ()","title":"function get_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_normals_strength","text":"void set_normals_strength ( double value )","title":"function set_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_disentangled_ssm","text":"bool get_use_disentangled_ssm ()","title":"function get_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_disentangled_ssm","text":"void set_use_disentangled_ssm ( bool value )","title":"function set_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes","text":"bool get_use_procrustes ()","title":"function get_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes","text":"void set_use_procrustes ( bool value )","title":"function set_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_scaling","text":"bool get_use_procrustes_scaling ()","title":"function get_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_scaling","text":"void set_use_procrustes_scaling ( bool value )","title":"function set_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_rotation_translation","text":"bool get_use_procrustes_rotation_translation ()","title":"function get_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_rotation_translation","text":"void set_use_procrustes_rotation_translation ( bool value )","title":"function set_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_procrustes_interval","text":"int get_procrustes_interval ()","title":"function get_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_procrustes_interval","text":"void set_procrustes_interval ( int value )","title":"function set_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_multiscale","text":"bool get_use_multiscale ()","title":"function get_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_multiscale","text":"void set_use_multiscale ( bool value )","title":"function set_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_multiscale_particles","text":"int get_multiscale_particles ()","title":"function get_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_multiscale_particles","text":"void set_multiscale_particles ( int value )","title":"function set_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_narrow_band","text":"double get_narrow_band ()","title":"function get_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_narrow_band","text":"void set_narrow_band ( double value )","title":"function set_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_verbosity","text":"int get_verbosity ()","title":"function get_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_verbosity","text":"void set_verbosity ( int value )","title":"function set_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_mesh_ffc_mode","text":"bool get_mesh_ffc_mode ()","title":"function get_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_mesh_ffc_mode","text":"void set_mesh_ffc_mode ( bool value )","title":"function set_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_landmarks","text":"void set_use_landmarks ( bool value )","title":"function set_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_fixed_subjects","text":"bool get_use_fixed_subjects ()","title":"function get_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_fixed_subjects","text":"void set_use_fixed_subjects ( bool value )","title":"function set_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_column","text":"std :: string get_fixed_subjects_column ()","title":"function get_fixed_subjects_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subject_column","text":"void set_fixed_subject_column ( std :: string column )","title":"function set_fixed_subject_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_choice","text":"std :: string get_fixed_subjects_choice ()","title":"function get_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subjects_choice","text":"void set_fixed_subjects_choice ( std :: string choice )","title":"function set_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_abort_load","text":"void set_abort_load ( bool value )","title":"function set_abort_load"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_load_callback","text":"void set_load_callback ( const std :: function < void ( int ) > & f )","title":"function set_load_callback"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_up_optimize","text":"bool set_up_optimize ( Optimize * optimize )","title":"function set_up_optimize"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-is_subject_fixed","text":"bool is_subject_fixed ( std :: shared_ptr < Subject > subject )","title":"function is_subject_fixed"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_checkpoint_interval","text":"int get_checkpoint_interval ()","title":"function get_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_checkpoint_interval","text":"void set_checkpoint_interval ( int iterations )","title":"function set_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_save_init_splits","text":"bool get_save_init_splits ()","title":"function get_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_save_init_splits","text":"void set_save_init_splits ( bool enabled )","title":"function set_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_keep_checkpoints","text":"bool get_keep_checkpoints ()","title":"function get_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_keep_checkpoints","text":"void set_keep_checkpoints ( bool enabled )","title":"function set_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attributes","text":"std :: vector < std :: string > get_field_attributes ()","title":"function get_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attributes","text":"void set_field_attributes ( std :: vector < std :: string > attributes )","title":"function set_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attribute_weights","text":"std :: vector < double > get_field_attribute_weights ()","title":"function get_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attribute_weights","text":"void set_field_attribute_weights ( std :: vector < double > weights )","title":"function set_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesics_to_landmarks","text":"bool get_use_geodesics_to_landmarks ()","title":"function get_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesics_to_landmarks","text":"void set_use_geodesics_to_landmarks ( bool value )","title":"function set_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_to_landmarks_weight","text":"double get_geodesic_to_landmarks_weight ()","title":"function get_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_to_landmarks_weight","text":"void set_geodesic_to_landmarks_weight ( double value )","title":"function set_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_particle_format","text":"std :: string get_particle_format ()","title":"function get_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_particle_format","text":"void set_particle_format ( std :: string format ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html","text":"shapeworks::OptimizeTool Inherits from QWidget Public Slots Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs () Public Signals Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string ) Public Functions Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_run_optimize_button_clicked void on_run_optimize_button_clicked () Run optimize tool. slot on_restoreDefaults_clicked void on_restoreDefaults_clicked () slot handle_optimize_complete void handle_optimize_complete () slot handle_optimize_failed void handle_optimize_failed () slot handle_progress void handle_progress ( int val , QString message ) slot handle_error void handle_error ( QString ) slot handle_warning void handle_warning ( QString ) slot handle_message void handle_message ( QString ) slot update_ui_elements void update_ui_elements () slot validate_inputs bool validate_inputs () Public Signals Documentation signal optimize_start void optimize_start () signal optimize_complete void optimize_complete () signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function OptimizeTool OptimizeTool ( Preferences & prefs , Telemetry & telemetry ) function ~OptimizeTool ~ OptimizeTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the project function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function enable_actions void enable_actions () Enable action buttons. function disable_actions void disable_actions () Disable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#shapeworksoptimizetool","text":"Inherits from QWidget","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots","text":"Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals","text":"Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions","text":"Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_run_optimize_button_clicked","text":"void on_run_optimize_button_clicked () Run optimize tool.","title":"slot on_run_optimize_button_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_restoredefaults_clicked","text":"void on_restoreDefaults_clicked ()","title":"slot on_restoreDefaults_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_failed","text":"void handle_optimize_failed ()","title":"slot handle_optimize_failed"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_progress","text":"void handle_progress ( int val , QString message )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_error","text":"void handle_error ( QString )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_warning","text":"void handle_warning ( QString )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_message","text":"void handle_message ( QString )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-update_ui_elements","text":"void update_ui_elements ()","title":"slot update_ui_elements"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-validate_inputs","text":"bool validate_inputs ()","title":"slot validate_inputs"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_start","text":"void optimize_start ()","title":"signal optimize_start"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_complete","text":"void optimize_complete ()","title":"signal optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool","text":"OptimizeTool ( Preferences & prefs , Telemetry & telemetry )","title":"function OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool_1","text":"~ OptimizeTool ()","title":"function ~OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the project","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html","text":"shapeworks::PaintWidget Inherits from vtkAbstractWidget Protected Types Name enum @5 Public Functions Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b) Protected Functions Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w) Protected Attributes Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_ Protected Types Documentation enum @5 Enumerator Value Description Start Paint Erase Public Functions Documentation function New static PaintWidget * New () function vtkTypeMacro vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( PointPlacer , vtkPointPlacer * ) function vtkGetMacro vtkGetMacro ( PointPlacer , vtkPointPlacer * ) function vtkSetMacro vtkSetMacro ( Renderer , vtkRenderer * ) function vtkGetMacro vtkGetMacro ( Renderer , vtkRenderer * ) function set_viewer void set_viewer ( Viewer * viewer ) function SetEnabled virtual void SetEnabled ( int ) function SetRepresentation inline void SetRepresentation ( vtkContourRepresentation * r ) function CreateDefaultRepresentation void CreateDefaultRepresentation () function update_position void update_position () function Initialize virtual void Initialize ( vtkPolyData * poly , int state = 1 ) function Initialize inline virtual void Initialize () function set_brush_size void set_brush_size ( double size ) function get_brush_size double get_brush_size () function set_brush_color void set_brush_color ( float r , float g , float b ) Protected Functions Documentation function PaintWidget PaintWidget () function ~PaintWidget ~ PaintWidget () function use_point_placer bool use_point_placer ( double displayPos [ 2 ], int newState ) function set_cursor void set_cursor ( int requestedShape ) function StartPaintAction static void StartPaintAction ( vtkAbstractWidget * w ) function EndPaintAction static void EndPaintAction ( vtkAbstractWidget * w ) function StartEraseAction static void StartEraseAction ( vtkAbstractWidget * w ) function EndEraseAction static void EndEraseAction ( vtkAbstractWidget * w ) function MoveAction static void MoveAction ( vtkAbstractWidget * w ) function LeaveAction static void LeaveAction ( vtkAbstractWidget * w ) function KeyPressAction static void KeyPressAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable WidgetState int WidgetState ; variable PointPlacer vtkPointPlacer * PointPlacer ; variable Renderer vtkRenderer * Renderer ; variable sphere_cursor_ StudioSphereRepresentation * sphere_cursor_ ; variable mouse_in_window_ bool mouse_in_window_ ; variable viewer_ Viewer * viewer_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#shapeworkspaintwidget","text":"Inherits from vtkAbstractWidget","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types","text":"Name enum @5","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions","text":"Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions","text":"Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes","text":"Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#enum-5","text":"Enumerator Value Description Start Paint Erase","title":"enum @5"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-new","text":"static PaintWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtktypemacro","text":"vtkTypeMacro ( PaintWidget , vtkAbstractWidget )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro","text":"vtkSetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro","text":"vtkGetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro_1","text":"vtkSetMacro ( Renderer , vtkRenderer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Renderer , vtkRenderer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_viewer","text":"void set_viewer ( Viewer * viewer )","title":"function set_viewer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setenabled","text":"virtual void SetEnabled ( int )","title":"function SetEnabled"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setrepresentation","text":"inline void SetRepresentation ( vtkContourRepresentation * r )","title":"function SetRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-createdefaultrepresentation","text":"void CreateDefaultRepresentation ()","title":"function CreateDefaultRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-update_position","text":"void update_position ()","title":"function update_position"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize","text":"virtual void Initialize ( vtkPolyData * poly , int state = 1 )","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize_1","text":"inline virtual void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_size","text":"void set_brush_size ( double size )","title":"function set_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-get_brush_size","text":"double get_brush_size ()","title":"function get_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_color","text":"void set_brush_color ( float r , float g , float b )","title":"function set_brush_color"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget","text":"PaintWidget ()","title":"function PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget_1","text":"~ PaintWidget ()","title":"function ~PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-use_point_placer","text":"bool use_point_placer ( double displayPos [ 2 ], int newState )","title":"function use_point_placer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_cursor","text":"void set_cursor ( int requestedShape )","title":"function set_cursor"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-startpaintaction","text":"static void StartPaintAction ( vtkAbstractWidget * w )","title":"function StartPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-endpaintaction","text":"static void EndPaintAction ( vtkAbstractWidget * w )","title":"function EndPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-starteraseaction","text":"static void StartEraseAction ( vtkAbstractWidget * w )","title":"function StartEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-enderaseaction","text":"static void EndEraseAction ( vtkAbstractWidget * w )","title":"function EndEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-moveaction","text":"static void MoveAction ( vtkAbstractWidget * w )","title":"function MoveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-leaveaction","text":"static void LeaveAction ( vtkAbstractWidget * w )","title":"function LeaveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-keypressaction","text":"static void KeyPressAction ( vtkAbstractWidget * w )","title":"function KeyPressAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-widgetstate","text":"int WidgetState ;","title":"variable WidgetState"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-pointplacer","text":"vtkPointPlacer * PointPlacer ;","title":"variable PointPlacer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-renderer","text":"vtkRenderer * Renderer ;","title":"variable Renderer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-sphere_cursor_","text":"StudioSphereRepresentation * sphere_cursor_ ;","title":"variable sphere_cursor_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-mouse_in_window_","text":"bool mouse_in_window_ ;","title":"variable mouse_in_window_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-viewer_","text":"Viewer * viewer_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable viewer_"},{"location":"api/Classes/classshapeworks_1_1Parameters.html","text":"shapeworks::Parameters Parameter settings. More... #include Public Functions Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank Public Attributes Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS Detailed Description class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools Public Functions Documentation function Parameters Parameters () default constructor function Parameters explicit Parameters ( StringMap map ) construct from map function get Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist function key_exists bool key_exists ( std :: string key ) return if a key exists or not function set void set ( std :: string key , Variant value ) set a parameter based on a key function remove_entry void remove_entry ( std :: string key ) remove an entry function set_map void set_map ( StringMap map ) set underlying map function get_map StringMap get_map () const get underlying map function reset_parameters void reset_parameters () reset parameters to blank Public Attributes Documentation variable ANALYSIS_PARAMS static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; variable GROOM_PARAMS static constexpr const char * GROOM_PARAMS = \"groom\" ; variable OPTIMIZE_PARAMS static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; variable STUDIO_PARAMS static constexpr const char * STUDIO_PARAMS = \"studio\" ; variable PROJECT_PARAMS static constexpr const char * PROJECT_PARAMS = \"project\" ; variable DEEPSSM_PARAMS static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#shapeworksparameters","text":"Parameter settings. More... #include ","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions","text":"Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes","text":"Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#detailed-description","text":"class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters","text":"Parameters () default constructor","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters_1","text":"explicit Parameters ( StringMap map ) construct from map","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get","text":"Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist","title":"function get"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-key_exists","text":"bool key_exists ( std :: string key ) return if a key exists or not","title":"function key_exists"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set","text":"void set ( std :: string key , Variant value ) set a parameter based on a key","title":"function set"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-remove_entry","text":"void remove_entry ( std :: string key ) remove an entry","title":"function remove_entry"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set_map","text":"void set_map ( StringMap map ) set underlying map","title":"function set_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get_map","text":"StringMap get_map () const get underlying map","title":"function get_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-reset_parameters","text":"void reset_parameters () reset parameters to blank","title":"function reset_parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-analysis_params","text":"static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ;","title":"variable ANALYSIS_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-groom_params","text":"static constexpr const char * GROOM_PARAMS = \"groom\" ;","title":"variable GROOM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-optimize_params","text":"static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ;","title":"variable OPTIMIZE_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-studio_params","text":"static constexpr const char * STUDIO_PARAMS = \"studio\" ;","title":"variable STUDIO_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-project_params","text":"static constexpr const char * PROJECT_PARAMS = \"project\" ;","title":"variable PROJECT_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-deepssm_params","text":"static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable DEEPSSM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html","text":"shapeworks::ParticleArea Public Functions Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle Public Functions Documentation function assign_vertex_particles static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance function assign_vertex_colors static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids function assign_vertex_areas static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids function colors_from_lut static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors function compute_particle_triangle_areas static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#shapeworksparticlearea","text":"","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions","text":"Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_particles","text":"static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance","title":"function assign_vertex_particles"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_colors","text":"static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids","title":"function assign_vertex_colors"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_areas","text":"static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids","title":"function assign_vertex_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-colors_from_lut","text":"static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors","title":"function colors_from_lut"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-compute_particle_triangle_areas","text":"static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_particle_triangle_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html","text":"shapeworks::ParticleAreaJob Inherits from shapeworks::Job , QObject Public Functions Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function ParticleAreaJob ParticleAreaJob ( QSharedPointer < Session > session ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_mean_areas inline const Eigen :: VectorXf & get_mean_areas () const function get_stddev_areas inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#shapeworksparticleareajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions","text":"Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-particleareajob","text":"ParticleAreaJob ( QSharedPointer < Session > session )","title":"function ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-name","text":"inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_mean_areas","text":"inline const Eigen :: VectorXf & get_mean_areas () const","title":"function get_mean_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_stddev_areas","text":"inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_stddev_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html","text":"shapeworks::ParticleAreaPanel Inherits from QWidget Public Slots Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete () Public Signals Name void update_view () Public Functions Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const Public Slots Documentation slot run_clicked void run_clicked () slot show_particle_area_clicked void show_particle_area_clicked () slot display_option_changed void display_option_changed () slot handle_job_progress void handle_job_progress ( int progress ) slot handle_job_complete void handle_job_complete () Public Signals Documentation signal update_view void update_view () Public Functions Documentation function ParticleAreaPanel ParticleAreaPanel ( QWidget * parent = 0 ) function ~ParticleAreaPanel ~ ParticleAreaPanel () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function reset void reset () function get_display_particle_area bool get_display_particle_area () const function get_computed_values Eigen :: VectorXf get_computed_values () const function get_computed_value_name std :: string get_computed_value_name () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#shapeworksparticleareapanel","text":"Inherits from QWidget","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots","text":"Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals","text":"Name void update_view ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions","text":"Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-show_particle_area_clicked","text":"void show_particle_area_clicked ()","title":"slot show_particle_area_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-display_option_changed","text":"void display_option_changed ()","title":"slot display_option_changed"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_progress","text":"void handle_job_progress ( int progress )","title":"slot handle_job_progress"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_complete","text":"void handle_job_complete ()","title":"slot handle_job_complete"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel","text":"ParticleAreaPanel ( QWidget * parent = 0 )","title":"function ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel_1","text":"~ ParticleAreaPanel ()","title":"function ~ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_display_particle_area","text":"bool get_display_particle_area () const","title":"function get_display_particle_area"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_values","text":"Eigen :: VectorXf get_computed_values () const","title":"function get_computed_values"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_value_name","text":"std :: string get_computed_value_name () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_computed_value_name"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html","text":"shapeworks::ParticleColors Supplies particle colors. More... #include Inherits from QObject Public Types Name enum ParticleColorsType Public Functions Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct () Detailed Description class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles Public Types Documentation enum ParticleColorsType Enumerator Value Description Distinct 0 Original 1 Public Functions Documentation function Q_ENUM Q_ENUM ( ParticleColorsType ) function construct_distinct static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#shapeworksparticlecolors","text":"Supplies particle colors. More... #include Inherits from QObject","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types","text":"Name enum ParticleColorsType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions","text":"Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#detailed-description","text":"class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#enum-particlecolorstype","text":"Enumerator Value Description Distinct 0 Original 1","title":"enum ParticleColorsType"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-q_enum","text":"Q_ENUM ( ParticleColorsType )","title":"function Q_ENUM"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-construct_distinct","text":"static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-25 at 15:40:27 +0000","title":"function construct_distinct"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html","text":"shapeworks::ParticleDomain Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain Public Types Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation typedef Pointer typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ; using PointType using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations. using GradNType using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ; Public Functions Documentation function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleGradientAtPoint virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint function SampleNormalAtPoint virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint function Distance inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function GetCurvature virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius. function GetValidLocationNear virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages function DeletePartialDerivativeImages virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages function UpdateZeroCrossingPoint virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint function IsDomainFixed inline bool IsDomainFixed () const function GetDomainType virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType function GetConstraints inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const function GetPositionAfterSplit inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit function SetDomainID inline void SetDomainID ( int id ) function SetDomainName inline void SetDomainName ( std :: string name ) Protected Functions Documentation function ParticleDomain inline ParticleDomain () function ~ParticleDomain inline virtual ~ ParticleDomain () Protected Attributes Documentation variable m_FixedDomain bool m_FixedDomain { true }; variable m_DomainID int m_DomainID { -1 }; variable m_DomainName std :: string m_DomainName ; variable constraints std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#shapeworksparticledomain","text":"Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types","text":"Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions","text":"Name ParticleDomain () virtual ~ParticleDomain ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes","text":"Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-pointtype","text":"using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations.","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-gradntype","text":"using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectordoubletype","text":"using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ;","title":"using VectorDoubleType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectorfloattype","text":"using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ;","title":"using VectorFloatType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-invalidateparticleposition","text":"inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradientatpoint","text":"virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplenormalatpoint","text":"virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-distance","text":"inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getcurvature","text":"virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacemeancurvature","text":"virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacestddevcurvature","text":"virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getlowerbound","text":"virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getupperbound","text":"virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getzerocrossingpoint","text":"virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacearea","text":"virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getvalidlocationnear","text":"virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deleteimages","text":"virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deletepartialderivativeimages","text":"virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updatezerocrossingpoint","text":"virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-isdomainfixed","text":"inline bool IsDomainFixed () const","title":"function IsDomainFixed"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getdomaintype","text":"virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getconstraints","text":"inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const","title":"function GetConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getpositionaftersplit","text":"inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainid","text":"inline void SetDomainID ( int id )","title":"function SetDomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainname","text":"inline void SetDomainName ( std :: string name )","title":"function SetDomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain","text":"inline ParticleDomain ()","title":"function ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain_1","text":"inline virtual ~ ParticleDomain ()","title":"function ~ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_fixeddomain","text":"bool m_FixedDomain { true };","title":"variable m_FixedDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainid","text":"int m_DomainID { -1 };","title":"variable m_DomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainname","text":"std :: string m_DomainName ;","title":"variable m_DomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-constraints","text":"std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable constraints"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html","text":"shapeworks::ParticleEvent Inherits from itk::EventObject Public Types Name typedef ParticleEvent Self Public Functions Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const Public Types Documentation typedef Self typedef ParticleEvent shapeworks :: ParticleEvent :: Self ; Public Functions Documentation function ParticleEvent inline ParticleEvent () function ~ParticleEvent inline virtual ~ ParticleEvent () function ParticleEvent inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator= function operator= inline const ParticleEvent & operator = ( const ParticleEvent & v ) function GetEventName inline virtual const char * GetEventName () const Standard ITK event members. function CheckEvent inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const function MakeObject inline :: itk :: EventObject * MakeObject () const function SetPositionIndex inline void SetPositionIndex ( int i ) Get/Set the index value. function GetPositionIndex inline int GetPositionIndex () const function SetDomainIndex inline void SetDomainIndex ( int i ) Get/Set the Domain index value. function GetDomainIndex inline int GetDomainIndex () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#shapeworksparticleevent","text":"Inherits from itk::EventObject","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types","text":"Name typedef ParticleEvent Self","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions","text":"Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#typedef-self","text":"typedef ParticleEvent shapeworks :: ParticleEvent :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent","text":"inline ParticleEvent ()","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_1","text":"inline virtual ~ ParticleEvent ()","title":"function ~ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_2","text":"inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator=","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-operator","text":"inline const ParticleEvent & operator = ( const ParticleEvent & v )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-geteventname","text":"inline virtual const char * GetEventName () const Standard ITK event members.","title":"function GetEventName"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-checkevent","text":"inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const","title":"function CheckEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-makeobject","text":"inline :: itk :: EventObject * MakeObject () const","title":"function MakeObject"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setpositionindex","text":"inline void SetPositionIndex ( int i ) Get/Set the index value.","title":"function SetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getpositionindex","text":"inline int GetPositionIndex () const","title":"function GetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setdomainindex","text":"inline void SetDomainIndex ( int i ) Get/Set the Domain index value.","title":"function SetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getdomainindex","text":"inline int GetDomainIndex () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html","text":"shapeworks::ParticleGaussianModeWriter More... Inherits from itk::DataObject Public Types Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const Protected Functions Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & ) Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName Detailed Description template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ; Public Types Documentation typedef Self typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ; typedef Superclass typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes. typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ; typedef PointType typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types. typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Update void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. function GetNumberOfModes inline int GetNumberOfModes () const function SetNumberOfModes inline void SetNumberOfModes ( int b ) function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function SetFileName inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix. function SetFileName inline void SetFileName ( const char * s ) function GetFileName inline const std :: string & GetFileName () const Protected Functions Documentation function ParticleGaussianModeWriter inline ParticleGaussianModeWriter () function ~ParticleGaussianModeWriter inline virtual ~ ParticleGaussianModeWriter () function operator= void operator = ( const ParticleGaussianModeWriter & ) function ParticleGaussianModeWriter ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ) Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_NumberOfModes int m_NumberOfModes ; variable m_FileName std :: string m_FileName ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#shapeworksparticlegaussianmodewriter","text":"More... Inherits from itk::DataObject","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types","text":"Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions","text":"Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions","text":"Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#detailed-description","text":"template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-self","text":"typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGaussianModeWriter , DataObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-update","text":"void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix.","title":"function Update"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getnumberofmodes","text":"inline int GetNumberOfModes () const","title":"function GetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setnumberofmodes","text":"inline void SetNumberOfModes ( int b )","title":"function SetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename","text":"inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix.","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename_1","text":"inline void SetFileName ( const char * s )","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter","text":"inline ParticleGaussianModeWriter ()","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_1","text":"inline virtual ~ ParticleGaussianModeWriter ()","title":"function ~ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-operator","text":"void operator = ( const ParticleGaussianModeWriter & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_2","text":"ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & )","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_numberofmodes","text":"int m_NumberOfModes ;","title":"variable m_NumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_filename","text":"std :: string m_FileName ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_FileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html","text":"shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. #include Public Types Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType Public Functions Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache) Public Types Documentation using MeanCurvatureCacheType using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; Public Functions Documentation function set_domains_per_shape inline void set_domains_per_shape ( int i ) function set_criterion_angle inline void set_criterion_angle ( double a ) function run_assessment std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#shapeworksparticlegoodbadassessment","text":"Performs good/bad points assessment and reports the bad positions of the particle system. #include ","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types","text":"Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions","text":"Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#using-meancurvaturecachetype","text":"using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_domains_per_shape","text":"inline void set_domains_per_shape ( int i )","title":"function set_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_criterion_angle","text":"inline void set_criterion_angle ( double a )","title":"function set_criterion_angle"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-run_assessment","text":"std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function run_assessment"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html","text":"shapeworks::ParticleNeighborhood More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood Public Types Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called. Public Types Documentation typedef Self typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations. using DomainType using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type. typedef PointVectorType typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function itkSetObjectMacro itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called. function itkGetConstObjectMacro itkGetConstObjectMacro ( PointContainer , PointContainerType ) function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points. function FindNeighborhoodPoints inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const function SetDomain inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures. function GetDomain inline DomainType :: Pointer GetDomain () const function AddPosition inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition function RemovePosition inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition Protected Functions Documentation function ParticleNeighborhood inline ParticleNeighborhood () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleNeighborhood inline virtual ~ ParticleNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#shapeworksparticleneighborhood","text":"More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types","text":"Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions","text":"Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-self","text":"typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointvectortype","text":"typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints.","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called.","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkgetconstobjectmacro","text":"itkGetConstObjectMacro ( PointContainer , PointContainerType )","title":"function itkGetConstObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_1","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_2","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_3","text":"inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setdomain","text":"inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-getdomain","text":"inline DomainType :: Pointer GetDomain () const","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-addposition","text":"inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setposition","text":"inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-removeposition","text":"inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood","text":"inline ParticleNeighborhood ()","title":"function ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood_1","text":"inline virtual ~ ParticleNeighborhood ()","title":"function ~ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html","text":"shapeworks::ParticleNormalEvaluation Public Functions Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions. Public Functions Documentation function evaluate_particle_normals static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ) function threshold_particle_normals static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ) function compute_particle_normals static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#shapeworksparticlenormalevaluation","text":"","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions","text":"Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-evaluate_particle_normals","text":"static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals )","title":"function evaluate_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-threshold_particle_normals","text":"static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees )","title":"function threshold_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-compute_particle_normals","text":"static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html","text":"shapeworks::ParticleNormalEvaluationJob Inherits from shapeworks::Job , QObject Public Signals Name void result_ready (std::vector< bool > good_bad) Public Functions Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal result_ready void result_ready ( std :: vector < bool > good_bad ) Public Functions Documentation function ParticleNormalEvaluationJob ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_good_bad std :: vector < bool > get_good_bad () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#shapeworksparticlenormalevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals","text":"Name void result_ready (std::vector< bool > good_bad)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions","text":"Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#signal-result_ready","text":"void result_ready ( std :: vector < bool > good_bad )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-particlenormalevaluationjob","text":"ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees )","title":"function ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-get_good_bad","text":"std :: vector < bool > get_good_bad () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_good_bad"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html","text":"shapeworks::ParticleRegionDomain Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T > Public Types Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType Public Functions Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs typedef PointType typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations. Public Functions Documentation function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries. function GetUpperBound inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetLowerBound inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function SetUpperBound inline void SetUpperBound ( const PointType _UpperBound ) function SetLowerBound inline void SetLowerBound ( const PointType _LowerBound ) function SetRegion inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) Protected Functions Documentation function ParticleRegionDomain inline ParticleRegionDomain () function ~ParticleRegionDomain inline virtual ~ ParticleRegionDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function IsInsideBuffer inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#shapeworksparticleregiondomain","text":"Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T >","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types","text":"Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions","text":"Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#using-pointer","text":"using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType _UpperBound )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType _LowerBound )","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setregion","text":"inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound )","title":"function SetRegion"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain","text":"inline ParticleRegionDomain ()","title":"function ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain_1","text":"inline virtual ~ ParticleRegionDomain ()","title":"function ~ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-isinsidebuffer","text":"inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-25 at 15:40:27 +0000","title":"function IsInsideBuffer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html","text":"shapeworks::ParticleRegionNeighborhood More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood Protected Classes Name struct IteratorNodePair Public Types Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType Protected Types Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Additional inherited members Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Detailed Description class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef Self typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ; typedef PointTreeType typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location. Protected Types Documentation typedef IteratorMapType typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function SetDomain virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree. function itkSetMacro itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree. function itkGetMacro itkGetMacro ( TreeLevels , unsigned int ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function AddPosition virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition function RemovePosition virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition Protected Functions Documentation function ParticleRegionNeighborhood inline ParticleRegionNeighborhood () function ~ParticleRegionNeighborhood inline virtual ~ ParticleRegionNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_Tree PointTreeType :: Pointer m_Tree ; variable m_IteratorMap IteratorMapType :: Pointer m_IteratorMap ; variable m_TreeLevels unsigned int m_TreeLevels ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#shapeworksparticleregionneighborhood","text":"More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-classes","text":"Name struct IteratorNodePair","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types","text":"Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types","text":"Name typedef GenericContainer < IteratorNodePair > IteratorMapType","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions","text":"Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes","text":"Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood ()","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-self","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-superclass","text":"typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ;","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtreetype","text":"typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location.","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-iteratormaptype","text":"typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ;","title":"typedef IteratorMapType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setdomain","text":"virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itksetmacro","text":"itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree.","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkgetmacro","text":"itkGetMacro ( TreeLevels , unsigned int )","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-addposition","text":"virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setposition","text":"virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-removeposition","text":"virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood","text":"inline ParticleRegionNeighborhood ()","title":"function ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood_1","text":"inline virtual ~ ParticleRegionNeighborhood ()","title":"function ~ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_tree","text":"PointTreeType :: Pointer m_Tree ;","title":"variable m_Tree"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_iteratormap","text":"IteratorMapType :: Pointer m_IteratorMap ;","title":"variable m_IteratorMap"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_treelevels","text":"unsigned int m_TreeLevels ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_TreeLevels"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html","text":"shapeworks::ParticleShapeStatistics More... #include Public Functions Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix () Public Attributes Name constexpr static int VDimension Detailed Description class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids. Public Functions Documentation function ParticleShapeStatistics inline ParticleShapeStatistics () function ParticleShapeStatistics ParticleShapeStatistics ( std :: shared_ptr < Project > project ) function ~ParticleShapeStatistics inline ~ ParticleShapeStatistics () function DoPCA int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 ) function DoPCA int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function ImportPoints int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics. function ComputeMultiLevelAnalysisStatistics void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis. function ComputeShapeDevModesForMca int ComputeShapeDevModesForMca () Compute shape variations for MLCA. function ComputeRelPoseModesForMca int ComputeRelPoseModesForMca () Compute pose variations for MLCA. function SetNumberOfParticlesArray void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis) function ReadPointFiles int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics. function ReloadPointFiles int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. function WriteCSVFile int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. function WriteCSVFile2 int WriteCSVFile2 ( const std :: string & s ) function ComputeModes int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. function get_num_modes int get_num_modes () const Return the number of modes. function PrincipalComponentProjections int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first. function FisherLinearDiscriminant int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation. function SampleSize inline int SampleSize () const Returns the sample size. function Group1SampleSize inline int Group1SampleSize () const function Group2SampleSize inline int Group2SampleSize () const function NumberOfDimensions inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) function NumberOfObjects inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. function NumberOfPointsArray inline std :: vector < int > NumberOfPointsArray () function GroupID inline int GroupID ( unsigned int i ) const Returns the group ids. function GroupID inline const std :: vector < int > & GroupID () const function Eigenvectors inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values. function Eigenvalues inline const std :: vector < double > & Eigenvalues () const function EigenvectorsRelPose inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. function EigenvaluesShapeDev inline const std :: vector < double > & EigenvaluesShapeDev () function EigenvectorsShapeDev inline const Eigen :: MatrixXd & EigenvectorsShapeDev () function EigenvaluesRelPose inline const std :: vector < double > & EigenvaluesRelPose () function MeanShapeDev inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. function MeanRelPose inline const Eigen :: VectorXd & MeanRelPose () function Mean inline const Eigen :: VectorXd & Mean () const Returns the mean shape. function Group1Mean inline const Eigen :: VectorXd & Group1Mean () const function Group2Mean inline const Eigen :: VectorXd & Group2Mean () const function NormalizedGroupDifference inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. function GroupDifference inline const Eigen :: VectorXd & GroupDifference () const function ComputeMedianShape int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/ function L1Norm double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b. function PCALoadings inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings. function FishersLDA inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant. function ShapeMatrix inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix. function RecenteredShape inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. function PercentVarByMode inline const std :: vector < double > & PercentVarByMode () const function SimpleLinearRegression int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/ function get_compactness Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_specificity Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_generalization Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_group1_matrix Eigen :: MatrixXd get_group1_matrix () const function get_group2_matrix Eigen :: MatrixXd get_group2_matrix () const function matrix inline Eigen :: MatrixXd & matrix () Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#shapeworksparticleshapestatistics","text":"More... #include ","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions","text":"Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#detailed-description","text":"class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics","text":"inline ParticleShapeStatistics ()","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_1","text":"ParticleShapeStatistics ( std :: shared_ptr < Project > project )","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_2","text":"inline ~ ParticleShapeStatistics ()","title":"function ~ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca","text":"int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca_1","text":"int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-importpoints","text":"int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics.","title":"function ImportPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemultilevelanalysisstatistics","text":"void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis.","title":"function ComputeMultiLevelAnalysisStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computeshapedevmodesformca","text":"int ComputeShapeDevModesForMca () Compute shape variations for MLCA.","title":"function ComputeShapeDevModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computerelposemodesformca","text":"int ComputeRelPoseModesForMca () Compute pose variations for MLCA.","title":"function ComputeRelPoseModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-setnumberofparticlesarray","text":"void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis)","title":"function SetNumberOfParticlesArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-readpointfiles","text":"int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics.","title":"function ReadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-reloadpointfiles","text":"int ReloadPointFiles () Reloads a set of point files and recomputes some statistics.","title":"function ReloadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile","text":"int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis.","title":"function WriteCSVFile"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile2","text":"int WriteCSVFile2 ( const std :: string & s )","title":"function WriteCSVFile2"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemodes","text":"int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first.","title":"function ComputeModes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_num_modes","text":"int get_num_modes () const Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-principalcomponentprojections","text":"int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first.","title":"function PrincipalComponentProjections"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherlineardiscriminant","text":"int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation.","title":"function FisherLinearDiscriminant"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-samplesize","text":"inline int SampleSize () const Returns the sample size.","title":"function SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1samplesize","text":"inline int Group1SampleSize () const","title":"function Group1SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2samplesize","text":"inline int Group2SampleSize () const","title":"function Group2SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofdimensions","text":"inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension)","title":"function NumberOfDimensions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofobjects","text":"inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure.","title":"function NumberOfObjects"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofpointsarray","text":"inline std :: vector < int > NumberOfPointsArray ()","title":"function NumberOfPointsArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid","text":"inline int GroupID ( unsigned int i ) const Returns the group ids.","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid_1","text":"inline const std :: vector < int > & GroupID () const","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectors","text":"inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values.","title":"function Eigenvectors"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvalues","text":"inline const std :: vector < double > & Eigenvalues () const","title":"function Eigenvalues"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsrelpose","text":"inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA.","title":"function EigenvectorsRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesshapedev","text":"inline const std :: vector < double > & EigenvaluesShapeDev ()","title":"function EigenvaluesShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsshapedev","text":"inline const Eigen :: MatrixXd & EigenvectorsShapeDev ()","title":"function EigenvectorsShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesrelpose","text":"inline const std :: vector < double > & EigenvaluesRelPose ()","title":"function EigenvaluesRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanshapedev","text":"inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace.","title":"function MeanShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanrelpose","text":"inline const Eigen :: VectorXd & MeanRelPose ()","title":"function MeanRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-mean","text":"inline const Eigen :: VectorXd & Mean () const Returns the mean shape.","title":"function Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1mean","text":"inline const Eigen :: VectorXd & Group1Mean () const","title":"function Group1Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2mean","text":"inline const Eigen :: VectorXd & Group2Mean () const","title":"function Group2Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-normalizedgroupdifference","text":"inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean.","title":"function NormalizedGroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupdifference","text":"inline const Eigen :: VectorXd & GroupDifference () const","title":"function GroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemedianshape","text":"int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/","title":"function ComputeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-l1norm","text":"double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b.","title":"function L1Norm"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-pcaloadings","text":"inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings.","title":"function PCALoadings"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherslda","text":"inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant.","title":"function FishersLDA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-shapematrix","text":"inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix.","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-recenteredshape","text":"inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted.","title":"function RecenteredShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-percentvarbymode","text":"inline const std :: vector < double > & PercentVarByMode () const","title":"function PercentVarByMode"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-simplelinearregression","text":"int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/","title":"function SimpleLinearRegression"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_compactness","text":"Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_compactness"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_specificity","text":"Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_specificity"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_generalization","text":"Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_generalization"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group1_matrix","text":"Eigen :: MatrixXd get_group1_matrix () const","title":"function get_group1_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group2_matrix","text":"Eigen :: MatrixXd get_group2_matrix () const","title":"function get_group2_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-matrix","text":"inline Eigen :: MatrixXd & matrix ()","title":"function matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html","text":"shapeworks::ParticleSurfaceNeighborhood More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject Public Types Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType Public Functions Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood () Additional inherited members Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef TImage typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs typedef ImageType typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ; typedef Self typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ; typedef Superclass typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ; typedef NumericType typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ; typedef PointTreeType typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ; typedef GradientVectorType typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ; typedef DomainType typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ; Public Functions Documentation function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension. function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods). function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function SetWeightingEnabled inline void SetWeightingEnabled ( bool is_enabled ) function IsWeightingEnabled inline bool IsWeightingEnabled () const function SetForceEuclidean inline void SetForceEuclidean ( bool is_enabled ) function IsForceEuclidean inline bool IsForceEuclidean () const function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function ParticleSurfaceNeighborhood inline ParticleSurfaceNeighborhood () function ~ParticleSurfaceNeighborhood inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#shapeworksparticlesurfaceneighborhood","text":"More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types","text":"Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions","text":"Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions","text":"Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#additional-inherited-members","text":"Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-timage","text":"typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs","title":"typedef TImage"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-imagetype","text":"typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-self","text":"typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-superclass","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-numerictype","text":"typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ;","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtreetype","text":"typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ;","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-domaintype","text":"typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ;","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints_1","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setweightingenabled","text":"inline void SetWeightingEnabled ( bool is_enabled )","title":"function SetWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isweightingenabled","text":"inline bool IsWeightingEnabled () const","title":"function IsWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setforceeuclidean","text":"inline void SetForceEuclidean ( bool is_enabled )","title":"function SetForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isforceeuclidean","text":"inline bool IsForceEuclidean () const","title":"function IsForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood","text":"inline ParticleSurfaceNeighborhood ()","title":"function ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood_1","text":"inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html","text":"shapeworks::ParticleSystem A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject Public Types Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const Protected Functions Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform () Public Attributes Name constexpr int VDimension Detailed Description class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame. Public Types Documentation typedef Self typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleSystem :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type. typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations. typedef NeighborhoodType typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain. typedef PointVectorType typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ; typedef TransformType typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used. typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ; typedef VnlMatrixType typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function RegisterObserver void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events. function SynchronizePositions inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync. function GetNumberOfParticles inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k. function AddPosition const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain. function SetPosition const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ) function RemovePosition void RemovePosition ( unsigned long int k , unsigned int d = 0 ) function GetPosition inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain. function GetPosition inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const function GetTransformedPosition inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function GetPrefixTransformedPosition inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function SplitAllParticles void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked. function SplitParticle void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ) function AdvancedAllParticleSplitting void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ) function PrintParticleSystem void PrintParticleSystem () function SetNeighborhood void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k. function SetNeighborhood inline void SetNeighborhood ( NeighborhoodType * n ) function GetNeighborhood inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain. function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function AddDomain void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id. function GetDomainsBegin inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains. function GetDomainsEnd inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains. function GetDomain inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object. function GetDomain inline DomainType * GetDomain () API for the single domain case. function GetDomain inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object. function GetDomain inline const DomainType * GetDomain () const API for the single domain case. function GetNumberOfDomains inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system. function SetTransform void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed. function SetTransform inline void SetTransform ( const TransformType & p ) function SetPrefixTransform void SetPrefixTransform ( unsigned int i , const TransformType & ) function SetPrefixTransform inline void SetPrefixTransform ( const TransformType & p ) function GetTransformsBegin inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms. function GetTransformsEnd inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetTransform inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object. function GetTransform inline const TransformType & GetTransform () const API for the single transform case. function GetTransform inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object. function GetTransform inline TransformType GetTransform () API for the single transform case. function GetPrefixTransform inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetPrefixTransform inline const TransformType & GetPrefixTransform () const API for the single transform case. function GetPrefixTransform inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object. function GetPrefixTransform inline TransformType GetPrefixTransform () API for the single transform case. function GetInverseTransformsBegin inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms. function GetInverseTransformsEnd inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetInverseTransform inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object. function GetInverseTransform inline const TransformType & GetInverseTransform () const API for the single transform case. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform () const API for the single transform case. function GetPositions inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions. function GetPositions inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const function AddPositionList void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number. function TransformPoint PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.) function TransformVector VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported. function TransformNormalDerivative VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space. function InvertTransform inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix. function FlagDomain inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system. function UnflagDomain inline void UnflagDomain ( unsigned int i ) function GetDomainFlag inline bool GetDomainFlag ( unsigned int i ) const function GetDomainFlags inline const std :: vector < bool > & GetDomainFlags () const function SetDomainFlags inline void SetDomainFlags () function ResetDomainFlags inline void ResetDomainFlags () function SetFixedParticleFlag inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed. function ResetFixedParticleFlag inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) function GetFixedParticleFlag inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const function ResetFixedParticleFlags inline void ResetFixedParticleFlags () function SetDomainsPerShape inline void SetDomainsPerShape ( unsigned int num ) function GetDomainsPerShape inline unsigned int GetDomainsPerShape () const function SetNumberOfDomains void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists. function ComputeMaxDistNearestNeighbors double ComputeMaxDistNearestNeighbors ( size_t dom ) function SetFieldAttributes inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) function GetFieldAttributes inline const std :: vector < std :: string > & GetFieldAttributes () const Protected Functions Documentation function ParticleSystem ParticleSystem () function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleSystem inline virtual ~ ParticleSystem () function GetInverseTransform inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object. function GetInverseTransform inline TransformType & GetInverseTransform () API for the single transform case. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform () API for the single transform case. Public Attributes Documentation variable VDimension static constexpr int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#shapeworksparticlesystem","text":"A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types","text":"Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions","text":"Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes","text":"Name constexpr int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#detailed-description","text":"class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-self","text":"typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleSystem :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#using-domaintype","text":"using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-neighborhoodtype","text":"typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain.","title":"typedef NeighborhoodType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointvectortype","text":"typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-transformtype","text":"typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used.","title":"typedef TransformType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vnlmatrixtype","text":"typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-registerobserver","text":"void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events.","title":"function RegisterObserver"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-synchronizepositions","text":"inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync.","title":"function SynchronizePositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofparticles","text":"inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addposition","text":"const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setposition","text":"const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 )","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-removeposition","text":"void RemovePosition ( unsigned long int k , unsigned int d = 0 )","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition","text":"inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain.","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition_1","text":"inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformedposition","text":"inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransformedposition","text":"inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPrefixTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitallparticles","text":"void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked.","title":"function SplitAllParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitparticle","text":"void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 )","title":"function SplitParticle"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-advancedallparticlesplitting","text":"void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process )","title":"function AdvancedAllParticleSplitting"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printparticlesystem","text":"void PrintParticleSystem ()","title":"function PrintParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood","text":"void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k.","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood_1","text":"inline void SetNeighborhood ( NeighborhoodType * n )","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getneighborhood","text":"inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const","title":"function GetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_1","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_2","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_3","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_4","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_5","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-adddomain","text":"void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id.","title":"function AddDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsbegin","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains.","title":"function GetDomainsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsend","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains.","title":"function GetDomainsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain","text":"inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_1","text":"inline DomainType * GetDomain () API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_2","text":"inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_3","text":"inline const DomainType * GetDomain () const API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofdomains","text":"inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system.","title":"function GetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform","text":"void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed.","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform_1","text":"inline void SetTransform ( const TransformType & p )","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform","text":"void SetPrefixTransform ( unsigned int i , const TransformType & )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform_1","text":"inline void SetPrefixTransform ( const TransformType & p )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms.","title":"function GetTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform","text":"inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_1","text":"inline const TransformType & GetTransform () const API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_2","text":"inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_3","text":"inline TransformType GetTransform () API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform","text":"inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_1","text":"inline const TransformType & GetPrefixTransform () const API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_2","text":"inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_3","text":"inline TransformType GetPrefixTransform () API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms.","title":"function GetInverseTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetInverseTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform","text":"inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_1","text":"inline const TransformType & GetInverseTransform () const API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform","text":"inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_1","text":"inline const TransformType & GetInversePrefixTransform () const API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions","text":"inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions.","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions_1","text":"inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addpositionlist","text":"void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number.","title":"function AddPositionList"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformpoint","text":"PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.)","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformvector","text":"VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported.","title":"function TransformVector"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformnormalderivative","text":"VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space.","title":"function TransformNormalDerivative"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-inverttransform","text":"inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix.","title":"function InvertTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-flagdomain","text":"inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system.","title":"function FlagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-unflagdomain","text":"inline void UnflagDomain ( unsigned int i )","title":"function UnflagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflag","text":"inline bool GetDomainFlag ( unsigned int i ) const","title":"function GetDomainFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflags","text":"inline const std :: vector < bool > & GetDomainFlags () const","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainflags","text":"inline void SetDomainFlags ()","title":"function SetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetdomainflags","text":"inline void ResetDomainFlags ()","title":"function ResetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfixedparticleflag","text":"inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed.","title":"function SetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflag","text":"inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i )","title":"function ResetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfixedparticleflag","text":"inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const","title":"function GetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflags","text":"inline void ResetFixedParticleFlags ()","title":"function ResetFixedParticleFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( unsigned int num )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainspershape","text":"inline unsigned int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setnumberofdomains","text":"void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists.","title":"function SetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-computemaxdistnearestneighbors","text":"double ComputeMaxDistNearestNeighbors ( size_t dom )","title":"function ComputeMaxDistNearestNeighbors"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfieldattributes","text":"inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfieldattributes","text":"inline const std :: vector < std :: string > & GetFieldAttributes () const","title":"function GetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem","text":"ParticleSystem ()","title":"function ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem_1","text":"inline virtual ~ ParticleSystem ()","title":"function ~ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_2","text":"inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_3","text":"inline TransformType & GetInverseTransform () API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_2","text":"inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_3","text":"inline TransformType & GetInversePrefixTransform () API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#variable-vdimension","text":"static constexpr int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html","text":"shapeworks::ParticleSystemCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#shapeworksparticlesystemcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html","text":"shapeworks::ParticleSystemEvaluation Public Functions Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points) Friends Name struct SharedCommandData Public Functions Documentation function ParticleSystemEvaluation ParticleSystemEvaluation ( const std :: vector < std :: string > & paths ) function ParticleSystemEvaluation ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ) function Particles inline const Eigen :: MatrixXd & Particles () const function Paths inline const std :: vector < std :: string > & Paths () const function N inline int N () const Number of samples. function D inline int D () const Dimensions (e.g. x/y/z * number of particles) function ExactCompare bool ExactCompare ( const ParticleSystemEvaluation & other ) const function EvaluationCompare bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const function ReadParticleFile static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ) Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#shapeworksparticlesystemevaluation","text":"","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions","text":"Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation","text":"ParticleSystemEvaluation ( const std :: vector < std :: string > & paths )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation_1","text":"ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particles","text":"inline const Eigen :: MatrixXd & Particles () const","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-paths","text":"inline const std :: vector < std :: string > & Paths () const","title":"function Paths"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-n","text":"inline int N () const Number of samples.","title":"function N"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-d","text":"inline int D () const Dimensions (e.g. x/y/z * number of particles)","title":"function D"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-exactcompare","text":"bool ExactCompare ( const ParticleSystemEvaluation & other ) const","title":"function ExactCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-evaluationcompare","text":"bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const","title":"function EvaluationCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-readparticlefile","text":"static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points )","title":"function ReadParticleFile"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:27 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1Particles.html","text":"shapeworks::Particles Representation of correspondence points for a shape including multiple domains. More... #include Public Functions Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points) Detailed Description class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points Public Functions Documentation function Particles Particles () = default function set_local_particles void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_world_particles void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_local_particles void set_local_particles ( int domain , Eigen :: VectorXd particles ) function set_world_particles void set_world_particles ( int domain , Eigen :: VectorXd particles ) function get_local_particles std :: vector < Eigen :: VectorXd > get_local_particles () const function get_world_particles std :: vector < Eigen :: VectorXd > get_world_particles () const function get_local_particles Eigen :: VectorXd get_local_particles ( int domain ) function get_world_particles Eigen :: VectorXd get_world_particles ( int domain ) function get_raw_world_particles Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer. function get_combined_local_particles Eigen :: VectorXd get_combined_local_particles () const function get_combined_global_particles Eigen :: VectorXd get_combined_global_particles () const function set_combined_global_particles void set_combined_global_particles ( const Eigen :: VectorXd & particles ) function get_local_points std :: vector < itk :: Point < double > > get_local_points ( int domain ) function get_world_points std :: vector < itk :: Point < double > > get_world_points ( int domain ) function get_domain_for_combined_id int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together. function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function set_procrustes_transforms void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms ) function set_alignment_type void set_alignment_type ( int alignment ) function get_difference_vectors Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const function save_particles_file static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#shapeworksparticles","text":"Representation of correspondence points for a shape including multiple domains. More... #include ","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions","text":"Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Particles.html#detailed-description","text":"class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-particles","text":"Particles () = default","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles","text":"void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles","text":"void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles_1","text":"void set_local_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles_1","text":"void set_world_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles","text":"std :: vector < Eigen :: VectorXd > get_local_particles () const","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles","text":"std :: vector < Eigen :: VectorXd > get_world_particles () const","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles_1","text":"Eigen :: VectorXd get_local_particles ( int domain )","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles_1","text":"Eigen :: VectorXd get_world_particles ( int domain )","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_raw_world_particles","text":"Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer.","title":"function get_raw_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_local_particles","text":"Eigen :: VectorXd get_combined_local_particles () const","title":"function get_combined_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_global_particles","text":"Eigen :: VectorXd get_combined_global_particles () const","title":"function get_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_combined_global_particles","text":"void set_combined_global_particles ( const Eigen :: VectorXd & particles )","title":"function set_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_points","text":"std :: vector < itk :: Point < double > > get_local_points ( int domain )","title":"function get_local_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_points","text":"std :: vector < itk :: Point < double > > get_world_points ( int domain )","title":"function get_world_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_domain_for_combined_id","text":"int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together.","title":"function get_domain_for_combined_id"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms )","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment )","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_difference_vectors","text":"Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const","title":"function get_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-save_particles_file","text":"static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function save_particles_file"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html","text":"shapeworks::PhysicalRegion physical bounds of a 3d region of space #include Public Functions Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Point min Point max Public Functions Documentation function PhysicalRegion PhysicalRegion ( const PhysicalRegion & ) = default function PhysicalRegion inline PhysicalRegion ( const Point & _min , const Point & _max ) function PhysicalRegion inline PhysicalRegion () function operator== inline bool operator == ( const PhysicalRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Point origin () const function size inline Point size () const function shrink PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both function expand PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both function expand PhysicalRegion & expand ( const Point & pt ) expand this region to include this point function pad PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Point min ; variable max Point max ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#shapeworksphysicalregion","text":"physical bounds of a 3d region of space #include ","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions","text":"Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes","text":"Name Point min Point max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion","text":"PhysicalRegion ( const PhysicalRegion & ) = default","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_1","text":"inline PhysicalRegion ( const Point & _min , const Point & _max )","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_2","text":"inline PhysicalRegion ()","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-operator","text":"inline bool operator == ( const PhysicalRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-origin","text":"inline Point origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-size","text":"inline Point size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-shrink","text":"PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both","title":"function shrink"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand","text":"PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand_1","text":"PhysicalRegion & expand ( const Point & pt ) expand this region to include this point","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-pad","text":"PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-min","text":"Point min ;","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-max","text":"Point max ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1PickResult.html","text":"shapeworks::PickResult Public Attributes Name Shape::Point pos_ int domain_ int subject_ Public Attributes Documentation variable pos_ Shape :: Point pos_ ; variable domain_ int domain_ = -1 ; variable subject_ int subject_ = -1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#shapeworkspickresult","text":"","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes","text":"Name Shape::Point pos_ int domain_ int subject_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-pos_","text":"Shape :: Point pos_ ;","title":"variable pos_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-subject_","text":"int subject_ = -1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable subject_"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html","text":"shapeworks::PlaneConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function getPlaneNormal inline Eigen :: Vector3d getPlaneNormal () Get plane normal. function setPlaneNormal inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal. function getPlanePoint inline Eigen :: Vector3d getPlanePoint () Get plane center point. function setPlanePoint inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point. function setPlanePoint inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point. function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function points inline std :: vector < Eigen :: Vector3d > & points () function getOffset double getOffset () function setOffset void setOffset ( double offset ) function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function updatePlaneFromPoints void updatePlaneFromPoints () function getVTKPlane vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#shapeworksplaneconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions","text":"Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#detailed-description","text":"class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-print","text":"virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanenormal","text":"inline Eigen :: Vector3d getPlaneNormal () Get plane normal.","title":"function getPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanenormal","text":"inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal.","title":"function setPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanepoint","text":"inline Eigen :: Vector3d getPlanePoint () Get plane center point.","title":"function getPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint","text":"inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint_1","text":"inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-points","text":"inline std :: vector < Eigen :: Vector3d > & points ()","title":"function points"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getoffset","text":"double getOffset ()","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setoffset","text":"void setOffset ( double offset )","title":"function setOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-updateplanefrompoints","text":"void updatePlaneFromPoints ()","title":"function updatePlaneFromPoints"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getvtkplane","text":"vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-25 at 15:40:27 +0000","title":"function getVTKPlane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html","text":"shapeworks::PlaneWidget PlaneWidget . More... #include Public Functions Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane. Detailed Description class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes Public Functions Documentation function PlaneWidget PlaneWidget ( Viewer * viewer ) function ~PlaneWidget ~ PlaneWidget () function update void update () Update the widget from shape data. function store_positions void store_positions () Store positions back to shape data (this is called by callback) function update_glyph_properties void update_glyph_properties () Update the sizes and detail of control spheres. function clear_planes void clear_planes () Clear point handles and planes. function handle_right_click void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point. function delete_plane void delete_plane ( int domain , int plane_id ) Delete a particular plane. function flip_plane void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane. function apply_plane void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste) function set_plane_offset void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane. function finalize_plane_offset void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#shapeworksplanewidget","text":"PlaneWidget . More... #include ","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions","text":"Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#detailed-description","text":"class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget","text":"PlaneWidget ( Viewer * viewer )","title":"function PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget_1","text":"~ PlaneWidget ()","title":"function ~PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update","text":"void update () Update the widget from shape data.","title":"function update"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-store_positions","text":"void store_positions () Store positions back to shape data (this is called by callback)","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update_glyph_properties","text":"void update_glyph_properties () Update the sizes and detail of control spheres.","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-clear_planes","text":"void clear_planes () Clear point handles and planes.","title":"function clear_planes"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-handle_right_click","text":"void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-delete_plane","text":"void delete_plane ( int domain , int plane_id ) Delete a particular plane.","title":"function delete_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-flip_plane","text":"void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane.","title":"function flip_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-apply_plane","text":"void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste)","title":"function apply_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-set_plane_offset","text":"void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane.","title":"function set_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-finalize_plane_offset","text":"void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-25 at 15:40:27 +0000","title":"function finalize_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html","text":"shapeworks::PowerOfTwoPointTree More... #include Inherits from itk::DataObject Public Types Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ; typedef NodeType typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node. typedef NodePointerType typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes. typedef PointType typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds. typedef PointListType typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType. typedef PointIteratorListType typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node. function itkGetMacro itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree. function ConstructTree void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively. function FindPointsInRegion PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound. function FindPointsInRegion unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const function GetNode NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point. function GetNode const NodePointerType GetNode ( const PointType & ) const function itkGetObjectMacro itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree. function itkSetObjectMacro itkSetObjectMacro ( Root , NodeType ) function AddPoint PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception. function AddPoint inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) function Overlap bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise. function RegionContains inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function PowerOfTwoPointTree inline PowerOfTwoPointTree () function ~PowerOfTwoPointTree inline virtual ~ PowerOfTwoPointTree () function BranchNode void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree. function FindOneNodeInRegion void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively. Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#shapeworkspoweroftwopointtree","text":"More... #include Inherits from itk::DataObject","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types","text":"Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions","text":"Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-self","text":"typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-superclass","text":"typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodetype","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node.","title":"typedef NodeType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodepointertype","text":"typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes.","title":"typedef NodePointerType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointtype","text":"typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointlisttype","text":"typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointiteratorlisttype","text":"typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ;","title":"typedef PointIteratorListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetmacro","text":"itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-constructtree","text":"void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively.","title":"function ConstructTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion","text":"PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound.","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion_1","text":"unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode","text":"NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point.","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode_1","text":"const NodePointerType GetNode ( const PointType & ) const","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( Root , NodeType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint","text":"PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception.","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint_1","text":"inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i )","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-overlap","text":"bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise.","title":"function Overlap"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-regioncontains","text":"inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const","title":"function RegionContains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree","text":"inline PowerOfTwoPointTree ()","title":"function PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree_1","text":"inline virtual ~ PowerOfTwoPointTree ()","title":"function ~PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-branchnode","text":"void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree.","title":"function BranchNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findonenodeinregion","text":"void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively.","title":"function FindOneNodeInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html","text":"shapeworks::PowerOfTwoPointTreeNode More... #include Inherits from itk::LightObject Public Types Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType Public Functions Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList () Protected Functions Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o) Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes. typedef PointListType typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices. Public Functions Documentation function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc. function operator== inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type. function IsLeaf inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing. function InsertElement inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node. function Contains inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise. function SetLowerBound inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node. function GetLowerBound inline const PointType & GetLowerBound () const function SetUpperBound inline void SetUpperBound ( const PointType & p ) function GetUpperBound inline const PointType & GetUpperBound () const function GetBranches inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes. function GetBranches inline const Self :: Pointer * GetBranches () const function GetBranch inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch function GetBranch inline const Self :: Pointer & GetBranch ( unsigned int i ) const function SetBranch inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node. function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method. function GetList inline const PointListType & GetList () const Get the list of elements which contain points and associated indices. function GetList inline PointListType & GetList () Protected Functions Documentation function PowerOfTwoPointTreeNode inline PowerOfTwoPointTreeNode () function ~PowerOfTwoPointTreeNode inline ~ PowerOfTwoPointTreeNode () function PowerOfTwoPointTreeNode PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ) function operator= const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#shapeworkspoweroftwopointtreenode","text":"More... #include Inherits from itk::LightObject","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types","text":"Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions","text":"Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions","text":"Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-self","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointlisttype","text":"typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator","text":"inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type.","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-isleaf","text":"inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing.","title":"function IsLeaf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-insertelement","text":"inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node.","title":"function InsertElement"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-contains","text":"inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise.","title":"function Contains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node.","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlowerbound","text":"inline const PointType & GetLowerBound () const","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType & p )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getupperbound","text":"inline const PointType & GetUpperBound () const","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches","text":"inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes.","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches_1","text":"inline const Self :: Pointer * GetBranches () const","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch","text":"inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch_1","text":"inline const Self :: Pointer & GetBranch ( unsigned int i ) const","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setbranch","text":"inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node.","title":"function SetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method.","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist","text":"inline const PointListType & GetList () const Get the list of elements which contain points and associated indices.","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist_1","text":"inline PointListType & GetList ()","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode","text":"inline PowerOfTwoPointTreeNode ()","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_1","text":"inline ~ PowerOfTwoPointTreeNode ()","title":"function ~PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_2","text":"PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o )","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator_1","text":"const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html","text":"shapeworks::PreferencesWindow Qt UI dialog to control preferences. More... #include Inherits from QDialog Public Slots Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences () Public Signals Name void clear_cache () void update_view () void slider_update () Public Functions Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override Detailed Description class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object Public Slots Documentation slot on_mesh_cache_enabled_stateChanged void on_mesh_cache_enabled_stateChanged ( int state ) slot on_mesh_cache_memory_valueChanged void on_mesh_cache_memory_valueChanged ( int value ) slot on_color_scheme_currentIndexChanged void on_color_scheme_currentIndexChanged ( int index ) slot on_pca_range_valueChanged void on_pca_range_valueChanged ( double value ) slot on_pca_steps_valueChanged void on_pca_steps_valueChanged ( int value ) slot on_parallel_enabled_toggled void on_parallel_enabled_toggled ( bool b ) slot on_num_threads_valueChanged void on_num_threads_valueChanged ( int i ) slot accept void accept () override slot restore_defaults void restore_defaults () slot save_to_preferences void save_to_preferences () Public Signals Documentation signal clear_cache void clear_cache () signal update_view void update_view () signal slider_update void slider_update () Public Functions Documentation function PreferencesWindow PreferencesWindow ( QWidget * parent , Preferences & prefs ) function set_values_from_preferences void set_values_from_preferences () function closeEvent void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#shapeworkspreferenceswindow","text":"Qt UI dialog to control preferences. More... #include Inherits from QDialog","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots","text":"Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals","text":"Name void clear_cache () void update_view () void slider_update ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions","text":"Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#detailed-description","text":"class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_enabled_statechanged","text":"void on_mesh_cache_enabled_stateChanged ( int state )","title":"slot on_mesh_cache_enabled_stateChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_memory_valuechanged","text":"void on_mesh_cache_memory_valueChanged ( int value )","title":"slot on_mesh_cache_memory_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_color_scheme_currentindexchanged","text":"void on_color_scheme_currentIndexChanged ( int index )","title":"slot on_color_scheme_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_range_valuechanged","text":"void on_pca_range_valueChanged ( double value )","title":"slot on_pca_range_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_steps_valuechanged","text":"void on_pca_steps_valueChanged ( int value )","title":"slot on_pca_steps_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_parallel_enabled_toggled","text":"void on_parallel_enabled_toggled ( bool b )","title":"slot on_parallel_enabled_toggled"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_num_threads_valuechanged","text":"void on_num_threads_valueChanged ( int i )","title":"slot on_num_threads_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-accept","text":"void accept () override","title":"slot accept"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-save_to_preferences","text":"void save_to_preferences ()","title":"slot save_to_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-clear_cache","text":"void clear_cache ()","title":"signal clear_cache"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-slider_update","text":"void slider_update ()","title":"signal slider_update"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-preferenceswindow","text":"PreferencesWindow ( QWidget * parent , Preferences & prefs )","title":"function PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-set_values_from_preferences","text":"void set_values_from_preferences ()","title":"function set_values_from_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html","text":"shapeworks::ProcrustesRegistration Public Types Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType Public Functions Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation) Public Types Documentation using Pointer using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ; using ParticleSystemType using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ; using PointType using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ; Public Functions Documentation function SetParticleSystem inline void SetParticleSystem ( ParticleSystemType * p ) function GetParticleSystem inline ParticleSystemType * GetParticleSystem () const function GetParticleSystem inline ParticleSystemType * GetParticleSystem () function RunRegistration void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object. function RunRegistration void RunRegistration () Run registration on all domains. function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. function GetDomainsPerShape inline int GetDomainsPerShape () const function GetScaling inline bool GetScaling () const function SetScaling inline void SetScaling ( bool scaling ) function GetRotationTranslation inline bool GetRotationTranslation () const function SetRotationTranslation inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#shapeworksprocrustesregistration","text":"","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types","text":"Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions","text":"Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointer","text":"using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-particlesystemtype","text":"using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ;","title":"using ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointtype","text":"using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setparticlesystem","text":"inline void SetParticleSystem ( ParticleSystemType * p )","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem","text":"inline ParticleSystemType * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem_1","text":"inline ParticleSystemType * GetParticleSystem ()","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration","text":"void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration_1","text":"void RunRegistration () Run registration on all domains.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setscaling","text":"inline void SetScaling ( bool scaling )","title":"function SetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setrotationtranslation","text":"inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function SetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Project.html","text":"shapeworks::Project Representation of a project. More... #include Public Types Name using std::map< std::string, std::string > StringMap Public Functions Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types. Detailed Description class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data. Public Types Documentation using StringMap using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ; Public Functions Documentation function Project Project () function ~Project ~ Project () function load bool load ( const std :: string & filename ) Load from project file. function save bool save ( const std :: string & filename ) Save to project file. function set_project_path void set_project_path ( const std :: string & path ) Set the project path. function get_filename std :: string get_filename () Return the filename. function set_filename void set_filename ( std :: string filename ) Set project filename. function get_headers std :: vector < std :: string > get_headers () Return the headers of the subject sheet. function get_string_column std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name. function get_number_of_subjects int get_number_of_subjects () Return the number of subjects in the project. function get_number_of_domains_per_subject int get_number_of_domains_per_subject () Return the number of domains. function get_domain_names std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) function set_domain_names void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names. function get_subjects std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference) function set_subjects void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects. function update_subjects void update_subjects () function get_originals_present bool get_originals_present () const Return if originals are present. function get_groomed_present bool get_groomed_present () const Return if groomed files are present. function get_particles_present bool get_particles_present () const Return if particle files are present. function get_images_present bool get_images_present () Return if images are present (e.g. CT/MRI) function get_fixed_subjects_present bool get_fixed_subjects_present () Return if there are fixed subjects present. function get_feature_names std :: vector < std :: string > get_feature_names () Get feature names. function get_image_names std :: vector < std :: string > get_image_names () Get image names. function get_group_names std :: vector < std :: string > get_group_names () Get group names. function get_group_values std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values. function get_parameters Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key. function get_parameter_map std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name. function set_parameter_map void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name. function set_parameters void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key. function clear_parameters void clear_parameters ( const std :: string & name ) Clear parameters based on key. function get_supported_version int get_supported_version () const Get the supported version (this version of the code) function get_version int get_version () const Get the version of the currently loaded project. function get_landmarks std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain. function get_all_landmark_definitions std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. function set_landmark_definitions void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions. function get_landmarks_present bool get_landmarks_present () Return if landmarks are present. function set_landmarks void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project. function new_landmark void new_landmark ( int domain_id ) Add a new landmark. function get_original_domain_types std :: vector < DomainType > get_original_domain_types () Return the original domain types. function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types. function set_original_domain_types void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types. function set_groomed_domain_types void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#shapeworksproject","text":"Representation of a project. More... #include ","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types","text":"Name using std::map< std::string, std::string > StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions","text":"Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Project.html#detailed-description","text":"class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#using-stringmap","text":"using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project","text":"Project ()","title":"function Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project_1","text":"~ Project ()","title":"function ~Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-load","text":"bool load ( const std :: string & filename ) Load from project file.","title":"function load"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-save","text":"bool save ( const std :: string & filename ) Save to project file.","title":"function save"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_project_path","text":"void set_project_path ( const std :: string & path ) Set the project path.","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_filename","text":"std :: string get_filename () Return the filename.","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_filename","text":"void set_filename ( std :: string filename ) Set project filename.","title":"function set_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_headers","text":"std :: vector < std :: string > get_headers () Return the headers of the subject sheet.","title":"function get_headers"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_string_column","text":"std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name.","title":"function get_string_column"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_subjects","text":"int get_number_of_subjects () Return the number of subjects in the project.","title":"function get_number_of_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_domains_per_subject","text":"int get_number_of_domains_per_subject () Return the number of domains.","title":"function get_number_of_domains_per_subject"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_domain_names","text":"std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc)","title":"function get_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_domain_names","text":"void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names.","title":"function set_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_subjects","text":"std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference)","title":"function get_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_subjects","text":"void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects.","title":"function set_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-update_subjects","text":"void update_subjects ()","title":"function update_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_originals_present","text":"bool get_originals_present () const Return if originals are present.","title":"function get_originals_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_present","text":"bool get_groomed_present () const Return if groomed files are present.","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_particles_present","text":"bool get_particles_present () const Return if particle files are present.","title":"function get_particles_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_images_present","text":"bool get_images_present () Return if images are present (e.g. CT/MRI)","title":"function get_images_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_fixed_subjects_present","text":"bool get_fixed_subjects_present () Return if there are fixed subjects present.","title":"function get_fixed_subjects_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_feature_names","text":"std :: vector < std :: string > get_feature_names () Get feature names.","title":"function get_feature_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_image_names","text":"std :: vector < std :: string > get_image_names () Get image names.","title":"function get_image_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_names","text":"std :: vector < std :: string > get_group_names () Get group names.","title":"function get_group_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_values","text":"std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameters","text":"Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key.","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameter_map","text":"std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name.","title":"function get_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameter_map","text":"void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name.","title":"function set_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameters","text":"void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key.","title":"function set_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-clear_parameters","text":"void clear_parameters ( const std :: string & name ) Clear parameters based on key.","title":"function clear_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_supported_version","text":"int get_supported_version () const Get the supported version (this version of the code)","title":"function get_supported_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_version","text":"int get_version () const Get the version of the currently loaded project.","title":"function get_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks","text":"std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain.","title":"function get_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_all_landmark_definitions","text":"std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions.","title":"function get_all_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmark_definitions","text":"void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions.","title":"function set_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks_present","text":"bool get_landmarks_present () Return if landmarks are present.","title":"function get_landmarks_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmarks","text":"void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project.","title":"function set_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-new_landmark","text":"void new_landmark ( int domain_id ) Add a new landmark.","title":"function new_landmark"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_original_domain_types","text":"std :: vector < DomainType > get_original_domain_types () Return the original domain types.","title":"function get_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types.","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_original_domain_types","text":"void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types.","title":"function set_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_groomed_domain_types","text":"void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html","text":"shapeworks::ProjectCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#shapeworksprojectcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html","text":"shapeworks::ProjectReader Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader Public Types Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0 Protected Functions Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes Name Project & project_ Detailed Description class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers Public Types Documentation using StringMapList using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ; using StringMap using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ; using StringMultiMap using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ; Public Functions Documentation function ProjectReader ProjectReader ( Project & project ) Constructor. function ~ProjectReader virtual ~ ProjectReader () = default Destructor. function read_project virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters Protected Functions Documentation function load_subjects void load_subjects ( StringMapList list ) Load subjects from string map list. function load_parameters void load_parameters () function load_parameter void load_parameter ( std :: string name , StringMap map ) function load_landmark_definitions void load_landmark_definitions ( StringMapList list ) function contains bool contains ( StringMap map , std :: string key ) function get_keys static StringList get_keys ( StringMap map ) Protected Attributes Documentation variable project_ Project & project_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#shapeworksprojectreader","text":"Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types","text":"Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions","text":"Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions","text":"Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes","text":"Name Project & project_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#detailed-description","text":"class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmaplist","text":"using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ;","title":"using StringMapList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmap","text":"using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringlist","text":"using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmultimap","text":"using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ;","title":"using StringMultiMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader","text":"ProjectReader ( Project & project ) Constructor.","title":"function ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader_1","text":"virtual ~ ProjectReader () = default Destructor.","title":"function ~ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_subjects","text":"void load_subjects ( StringMapList list ) Load subjects from string map list.","title":"function load_subjects"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameters","text":"void load_parameters ()","title":"function load_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameter","text":"void load_parameter ( std :: string name , StringMap map )","title":"function load_parameter"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_landmark_definitions","text":"void load_landmark_definitions ( StringMapList list )","title":"function load_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-contains","text":"bool contains ( StringMap map , std :: string key )","title":"function contains"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_keys","text":"static StringList get_keys ( StringMap map )","title":"function get_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#variable-project_","text":"Project & project_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html","text":"shapeworks::ProjectUtils Public Types Name using project::types::StringList StringList using project::types::StringMap StringMap Public Functions Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject) Public Types Documentation using StringList using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ; using StringMap using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ; Public Functions Documentation function convert_transform static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform function convert_transform static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) function determine_domain_names static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys function determine_domain_types static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types function get_input_prefixes static StringList get_input_prefixes () return a list of the input prefixes function get_groomed_prefixes static StringList get_groomed_prefixes () return a list of the groomed prefixes function get_original_keys static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names function get_values static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names function get_transforms static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names function get_value_map static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) function get_extra_columns static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes function determine_domain_type static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename function starts_with static bool starts_with ( std :: string str , std :: string prefix ) function transform_to_string static std :: string transform_to_string ( std :: vector < double > transform ) function convert_domain_types static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ) function convert_groomed_domain_types static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ) function convert_subject_to_map static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#shapeworksprojectutils","text":"","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types","text":"Name using project::types::StringList StringList using project::types::StringMap StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions","text":"Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringlist","text":"using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringmap","text":"using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform","text":"static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform_1","text":"static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet)","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_names","text":"static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys","title":"function determine_domain_names"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_types","text":"static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types","title":"function determine_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_input_prefixes","text":"static StringList get_input_prefixes () return a list of the input prefixes","title":"function get_input_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_groomed_prefixes","text":"static StringList get_groomed_prefixes () return a list of the groomed prefixes","title":"function get_groomed_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_original_keys","text":"static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names","title":"function get_original_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_values","text":"static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names","title":"function get_values"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_transforms","text":"static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names","title":"function get_transforms"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_value_map","text":"static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_)","title":"function get_value_map"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_extra_columns","text":"static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes","title":"function get_extra_columns"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_type","text":"static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename","title":"function determine_domain_type"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-starts_with","text":"static bool starts_with ( std :: string str , std :: string prefix )","title":"function starts_with"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-transform_to_string","text":"static std :: string transform_to_string ( std :: vector < double > transform )","title":"function transform_to_string"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_domain_types","text":"static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_groomed_domain_types","text":"static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_subject_to_map","text":"static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function convert_subject_to_map"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html","text":"shapeworks::PythonWorker Inherits from QObject Public Slots Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python () Public Signals Name void result_ready () void finished () Public Functions Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job () Public Attributes Name constexpr static const char * python_api_version Public Slots Documentation slot init bool init () slot start_job void start_job ( QSharedPointer < Job > job ) slot finalize_python void finalize_python () Public Signals Documentation signal result_ready void result_ready () signal finished void finished () Public Functions Documentation function PythonWorker PythonWorker () function ~PythonWorker ~ PythonWorker () function set_vtk_output_window void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ) function run_job void run_job ( QSharedPointer < Job > job ) function incoming_python_message void incoming_python_message ( std :: string message_string ) function incoming_python_progress void incoming_python_progress ( double value ) function end_python void end_python () function abort_job void abort_job () Public Attributes Documentation variable python_api_version static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#shapeworkspythonworker","text":"Inherits from QObject","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots","text":"Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals","text":"Name void result_ready () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions","text":"Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes","text":"Name constexpr static const char * python_api_version","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-init","text":"bool init ()","title":"slot init"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-start_job","text":"void start_job ( QSharedPointer < Job > job )","title":"slot start_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-finalize_python","text":"void finalize_python ()","title":"slot finalize_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker","text":"PythonWorker ()","title":"function PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker_1","text":"~ PythonWorker ()","title":"function ~PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-set_vtk_output_window","text":"void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window )","title":"function set_vtk_output_window"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_message","text":"void incoming_python_message ( std :: string message_string )","title":"function incoming_python_message"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_progress","text":"void incoming_python_progress ( double value )","title":"function incoming_python_progress"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-end_python","text":"void end_python ()","title":"function end_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-abort_job","text":"void abort_job ()","title":"function abort_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#variable-python_api_version","text":"static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable python_api_version"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html","text":"shapeworks::QMeshWarper Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper Public Signals Name void progress () Public Functions Name QMeshWarper (QObject * parent =nullptr) float get_progress () Protected Functions Name virtual void update_progress (float p) override For overriding to handle progress updates. Additional inherited members Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Public Signals Documentation signal progress void progress () Public Functions Documentation function QMeshWarper QMeshWarper ( QObject * parent = nullptr ) function get_progress float get_progress () Protected Functions Documentation function update_progress virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#shapeworksqmeshwarper","text":"Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals","text":"Name void progress ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions","text":"Name QMeshWarper (QObject * parent =nullptr) float get_progress ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) override For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#signal-progress","text":"void progress ()","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-qmeshwarper","text":"QMeshWarper ( QObject * parent = nullptr )","title":"function QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-get_progress","text":"float get_progress ()","title":"function get_progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-update_progress","text":"virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-25 at 15:40:27 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html","text":"shapeworks::QOptimize Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize Public Signals Name void progress (int , QString ) Public Functions Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override Protected Functions Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override Additional inherited members Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Public Signals Documentation signal progress void progress ( int , QString ) Public Functions Documentation function QOptimize QOptimize ( QObject * parent = nullptr ) function ~QOptimize virtual ~ QOptimize () function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints function GetParticles std :: vector < Particles > GetParticles () function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms function UpdateExportablePoints virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback function IterateCallback virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#shapeworksqoptimize","text":"Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals","text":"Name void progress (int , QString )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions","text":"Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions","text":"Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#additional-inherited-members","text":"Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#signal-progress","text":"void progress ( int , QString )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize","text":"QOptimize ( QObject * parent = nullptr )","title":"function QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize_1","text":"virtual ~ QOptimize ()","title":"function ~QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getparticles","text":"std :: vector < Particles > GetParticles ()","title":"function GetParticles"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-25 at 15:40:27 +0000","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html","text":"shapeworks::ReconstructSurface More... Public Types Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType Public Functions Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees) Detailed Description template < class TransformType > class shapeworks :: ReconstructSurface ; Public Types Documentation using TransformTypePtr using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ; using PointSetType using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ; using PointIdType using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ; Public Functions Documentation function ReconstructSurface ReconstructSurface () = default function ReconstructSurface ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ) function computeAverageDistanceToNeighbors double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ) function checkMapping void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ) function generateWarpedMeshes void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh ) function getMesh Mesh getMesh ( PointArray localPoints ) function convertToImageCoordinates Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ) function computeMedianShape int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList ) function performKMeansClustering void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices ) function computeParticlesNormals Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ) function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ) function computeDenseMean void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ) function computeSparseMean std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ) function writeMeanInfo void writeMeanInfo () function surface void surface ( const std :: vector < std :: string > localPointsFiles ) function samplesAlongPCAModes void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ) function meanSurface void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ) function setOutPrefix inline void setOutPrefix ( std :: string prefix ) function setOutPath inline void setOutPath ( std :: string path ) function setDoProcrustes inline void setDoProcrustes ( bool doProcrusts ) function setDoProcrustesScaling inline void setDoProcrustesScaling ( bool doProcrustsScaling ) function setPairwiseNormalsDiffForGoodBad inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) function setMeanBeforeWarp inline void setMeanBeforeWarp ( bool meanBeforeWarp ) function setEnableOutput inline void setEnableOutput ( bool enableOutput ) function setModeIndex inline void setModeIndex ( int modeIndex ) function setNumOfModes inline void setNumOfModes ( int numOfModes ) function setNumOfSamplesPerMode inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) function setNumOfParticles inline void setNumOfParticles ( int numOfParticles ) function setNumOfClusters inline void setNumOfClusters ( int numOfClusters ) function setMaxStdDev inline void setMaxStdDev ( float maxStdDev ) function setMaxVarianceCaptured inline void setMaxVarianceCaptured ( float maxVarianceCaptured ) function setMaxAngleDegrees inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#shapeworksreconstructsurface","text":"More...","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types","text":"Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions","text":"Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#detailed-description","text":"template < class TransformType > class shapeworks :: ReconstructSurface ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-transformtypeptr","text":"using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ;","title":"using TransformTypePtr"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointsettype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ;","title":"using PointSetType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointidtype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ;","title":"using PointIdType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface","text":"ReconstructSurface () = default","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface_1","text":"ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile )","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeaveragedistancetoneighbors","text":"double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices )","title":"function computeAverageDistanceToNeighbors"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-checkmapping","text":"void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints )","title":"function checkMapping"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-generatewarpedmeshes","text":"void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh )","title":"function generateWarpedMeshes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getmesh","text":"Mesh getMesh ( PointArray localPoints )","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-converttoimagecoordinates","text":"Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computemedianshape","text":"int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList )","title":"function computeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-performkmeansclustering","text":"void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices )","title":"function performKMeansClustering"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeparticlesnormals","text":"Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt )","title":"function computeParticlesNormals"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform )","title":"function getDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computedensemean","text":"void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform )","title":"function computeDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computesparsemean","text":"std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter )","title":"function computeSparseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-writemeaninfo","text":"void writeMeanInfo ()","title":"function writeMeanInfo"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-surface","text":"void surface ( const std :: vector < std :: string > localPointsFiles )","title":"function surface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-samplesalongpcamodes","text":"void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles )","title":"function samplesAlongPCAModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-meansurface","text":"void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles )","title":"function meanSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutpath","text":"inline void setOutPath ( std :: string path )","title":"function setOutPath"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustes","text":"inline void setDoProcrustes ( bool doProcrusts )","title":"function setDoProcrustes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustesscaling","text":"inline void setDoProcrustesScaling ( bool doProcrustsScaling )","title":"function setDoProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setpairwisenormalsdiffforgoodbad","text":"inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad )","title":"function setPairwiseNormalsDiffForGoodBad"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmeanbeforewarp","text":"inline void setMeanBeforeWarp ( bool meanBeforeWarp )","title":"function setMeanBeforeWarp"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setenableoutput","text":"inline void setEnableOutput ( bool enableOutput )","title":"function setEnableOutput"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmodeindex","text":"inline void setModeIndex ( int modeIndex )","title":"function setModeIndex"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofmodes","text":"inline void setNumOfModes ( int numOfModes )","title":"function setNumOfModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofsamplespermode","text":"inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode )","title":"function setNumOfSamplesPerMode"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofparticles","text":"inline void setNumOfParticles ( int numOfParticles )","title":"function setNumOfParticles"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofclusters","text":"inline void setNumOfClusters ( int numOfClusters )","title":"function setNumOfClusters"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxstddev","text":"inline void setMaxStdDev ( float maxStdDev )","title":"function setMaxStdDev"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxvariancecaptured","text":"inline void setMaxVarianceCaptured ( float maxVarianceCaptured )","title":"function setMaxVarianceCaptured"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxangledegrees","text":"inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function setMaxAngleDegrees"},{"location":"api/Classes/classshapeworks_1_1Sampler.html","text":"shapeworks::Sampler Public Classes Name struct CuttingPlaneType struct SphereType Public Types Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList Public Functions Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode) Public Attributes Name constexpr unsigned int Dimension Public Types Documentation using PixelType using shapeworks :: Sampler :: PixelType = float ; using ImageType using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ; using PointType using shapeworks :: Sampler :: PointType = ImageType :: PointType ; using MeanCurvatureCacheType using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ; using CuttingPlaneList using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ; Public Functions Documentation function Sampler Sampler () Constructor. function ~Sampler inline virtual ~ Sampler () Destructor. function GetParticleSystem inline ParticleSystem * GetParticleSystem () Returns the particle system. function GetParticleSystem inline const ParticleSystem * GetParticleSystem () const function GetGradientFunction inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used. function GetCurvatureGradientFunction inline CurvatureSamplingFunction * GetCurvatureGradientFunction () function GetOptimizer inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object. function GetOptimizer inline const OptimizerType * GetOptimizer () const function SetPointsFile inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set. function SetPointsFile inline void SetPointsFile ( const std :: string & s ) function SetInitialPoints inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function AddImage void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ) function ApplyConstraintsToZeroCrossing inline void ApplyConstraintsToZeroCrossing () function AddMesh void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int n ) function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains. function AddFreeFormConstraint void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ) function TransformCuttingPlanes void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation function AddSphere void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain. function SetAdaptivityMode inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity function GetAdaptivityMode inline int GetAdaptivityMode () const function SetCorrespondenceOn inline void SetCorrespondenceOn () function SetCorrespondenceOff inline void SetCorrespondenceOff () function SetSamplingOn inline void SetSamplingOn () function SetSamplingOff inline void SetSamplingOff () function GetCorrespondenceOn inline bool GetCorrespondenceOn () const function GetSamplingOn inline bool GetSamplingOn () const function SetCorrespondenceMode void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains). function RegisterGeneralShapeMatrices inline void RegisterGeneralShapeMatrices () function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( unsigned int i , bool flag ) function SetNormals inline void SetNormals ( int i , bool flag ) function SetAttributesPerDomain void SetAttributesPerDomain ( const std :: vector < int > s ) function GetShapeMatrix inline LegacyShapeMatrix * GetShapeMatrix () function GetGeneralShapeMatrix inline ShapeMatrix * GetGeneralShapeMatrix () function GetGeneralShapeGradientMatrix inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix () function GetLinkingFunction inline DualVectorFunction * GetLinkingFunction () function GetEnsembleEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () function GetDisentangledEnsembleEntropyFunction inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () function GetEnsembleRegressionEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () function GetEnsembleMixedEffectsEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () function GetMeshBasedGeneralEntropyGradientFunction inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () function GetLinkingFunction inline const DualVectorFunction * GetLinkingFunction () const function GetEnsembleEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const function GetDisentangledEnsembleEntropyFunction inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const function GetEnsembleRegressionEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const function GetEnsembleMixedEffectsEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const function GetMeshBasedGeneralEntropyGradientFunction inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int n ) function GetCorrespondenceMode inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const function SetTransformFile inline void SetTransformFile ( const std :: string & s ) function SetTransformFile inline void SetTransformFile ( const char * s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const std :: string & s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const char * s ) function SetPairwisePotentialType inline void SetPairwisePotentialType ( int pairwise_potential_type ) function GetPairwisePotentialType inline int GetPairwisePotentialType () function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double weight ) function ReadTransforms void ReadTransforms () function ReadPointsFiles void ReadPointsFiles () function AllocateDataCaches void AllocateDataCaches () function AllocateDomainsAndNeighborhoods void AllocateDomainsAndNeighborhoods () function InitializeOptimizationFunctions void InitializeOptimizationFunctions () function initialize_initial_positions void initialize_initial_positions () function Initialize inline void Initialize () function ReInitialize void ReInitialize () function Execute void Execute () function ComputeCuttingPlanes CuttingPlaneList ComputeCuttingPlanes () function ComputePlaneNormal Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) function GetFFCs inline std :: vector < FreeFormConstraint > GetFFCs () function SetMeshFFCMode inline void SetMeshFFCMode ( bool mesh_ffc_mode ) Public Attributes Documentation variable Dimension static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#shapeworkssampler","text":"","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-classes","text":"Name struct CuttingPlaneType struct SphereType","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types","text":"Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions","text":"Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes","text":"Name constexpr unsigned int Dimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pixeltype","text":"using shapeworks :: Sampler :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-imagetype","text":"using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pointtype","text":"using shapeworks :: Sampler :: PointType = ImageType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-meancurvaturecachetype","text":"using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-transformtype","text":"using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ;","title":"using TransformType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-optimizertype","text":"using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ;","title":"using OptimizerType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-cuttingplanelist","text":"using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ;","title":"using CuttingPlaneList"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler","text":"Sampler () Constructor.","title":"function Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler_1","text":"inline virtual ~ Sampler () Destructor.","title":"function ~Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem","text":"inline ParticleSystem * GetParticleSystem () Returns the particle system.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem_1","text":"inline const ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgradientfunction","text":"inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used.","title":"function GetGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcurvaturegradientfunction","text":"inline CurvatureSamplingFunction * GetCurvatureGradientFunction ()","title":"function GetCurvatureGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer","text":"inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object.","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer_1","text":"inline const OptimizerType * GetOptimizer () const","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile","text":"inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set.","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile_1","text":"inline void SetPointsFile ( const std :: string & s )","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setinitialpoints","text":"inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" )","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-applyconstraintstozerocrossing","text":"inline void ApplyConstraintsToZeroCrossing ()","title":"function ApplyConstraintsToZeroCrossing"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addmesh","text":"void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & s )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int n )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addfreeformconstraint","text":"void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc )","title":"function AddFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-transformcuttingplanes","text":"void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation","title":"function TransformCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addsphere","text":"void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain.","title":"function AddSphere"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setadaptivitymode","text":"inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getadaptivitymode","text":"inline int GetAdaptivityMode () const","title":"function GetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceon","text":"inline void SetCorrespondenceOn ()","title":"function SetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceoff","text":"inline void SetCorrespondenceOff ()","title":"function SetCorrespondenceOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingon","text":"inline void SetSamplingOn ()","title":"function SetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingoff","text":"inline void SetSamplingOff ()","title":"function SetSamplingOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondenceon","text":"inline bool GetCorrespondenceOn () const","title":"function GetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getsamplingon","text":"inline bool GetSamplingOn () const","title":"function GetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondencemode","text":"void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains).","title":"function SetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-registergeneralshapematrices","text":"inline void RegisterGeneralShapeMatrices ()","title":"function RegisterGeneralShapeMatrices"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setxyz","text":"inline void SetXYZ ( unsigned int i , bool flag )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setnormals","text":"inline void SetNormals ( int i , bool flag )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( const std :: vector < int > s )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getshapematrix","text":"inline LegacyShapeMatrix * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapematrix","text":"inline ShapeMatrix * GetGeneralShapeMatrix ()","title":"function GetGeneralShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapegradientmatrix","text":"inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix ()","title":"function GetGeneralShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction","text":"inline DualVectorFunction * GetLinkingFunction ()","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction ()","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction","text":"inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction ()","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction ()","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction ()","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction","text":"inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction ()","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction_1","text":"inline const DualVectorFunction * GetLinkingFunction () const","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction_1","text":"inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction_1","text":"inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int n )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondencemode","text":"inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const","title":"function GetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile","text":"inline void SetTransformFile ( const std :: string & s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile_1","text":"inline void SetTransformFile ( const char * s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile","text":"inline void SetPrefixTransformFile ( const std :: string & s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile_1","text":"inline void SetPrefixTransformFile ( const char * s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpairwisepotentialtype","text":"inline void SetPairwisePotentialType ( int pairwise_potential_type )","title":"function SetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getpairwisepotentialtype","text":"inline int GetPairwisePotentialType ()","title":"function GetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readtransforms","text":"void ReadTransforms ()","title":"function ReadTransforms"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readpointsfiles","text":"void ReadPointsFiles ()","title":"function ReadPointsFiles"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedatacaches","text":"void AllocateDataCaches ()","title":"function AllocateDataCaches"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedomainsandneighborhoods","text":"void AllocateDomainsAndNeighborhoods ()","title":"function AllocateDomainsAndNeighborhoods"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initializeoptimizationfunctions","text":"void InitializeOptimizationFunctions ()","title":"function InitializeOptimizationFunctions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize_initial_positions","text":"void initialize_initial_positions ()","title":"function initialize_initial_positions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-reinitialize","text":"void ReInitialize ()","title":"function ReInitialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-execute","text":"void Execute ()","title":"function Execute"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computecuttingplanes","text":"CuttingPlaneList ComputeCuttingPlanes ()","title":"function ComputeCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computeplanenormal","text":"Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c )","title":"function ComputePlaneNormal"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getffcs","text":"inline std :: vector < FreeFormConstraint > GetFFCs ()","title":"function GetFFCs"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( bool mesh_ffc_mode )","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#variable-dimension","text":"static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable Dimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html","text":"shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction Public Types Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType Public Functions Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone () Protected Functions Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i). Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: SamplingFunction :: TGradientNumericType ; typedef Self typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ; typedef GradientNumericType typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components. typedef SigmaCacheType typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values. typedef VectorType typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ; typedef GradientVectorType typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( SamplingFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate function Energy inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function AngleCoefficient TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees. function SetMinimumNeighborhoodRadius inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius. function GetMinimumNeighborhoodRadius inline double GetMinimumNeighborhoodRadius () const function SetMaximumNeighborhoodRadius inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. function GetMaximumNeighborhoodRadius inline double GetMaximumNeighborhoodRadius () const function SetFlatCutoff inline void SetFlatCutoff ( double s ) Numerical parameters function GetFlatCutoff inline double GetFlatCutoff () const function SetNeighborhoodToSigmaRatio inline void SetNeighborhoodToSigmaRatio ( double s ) function GetNeighborhoodToSigmaRatio inline double GetNeighborhoodToSigmaRatio () const function SetSpatialSigmaCache inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem). function GetSpatialSigmaCache inline SigmaCacheType * GetSpatialSigmaCache () function GetSpatialSigmaCache inline const SigmaCacheType * GetSpatialSigmaCache () const function ComputeAngularWeights void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0. function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone Protected Functions Documentation function SamplingFunction inline SamplingFunction () function ~SamplingFunction inline virtual ~ SamplingFunction () function operator= void operator = ( const SamplingFunction & ) function SamplingFunction SamplingFunction ( const SamplingFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MinimumNeighborhoodRadius double m_MinimumNeighborhoodRadius ; variable m_MaximumNeighborhoodRadius double m_MaximumNeighborhoodRadius ; variable m_FlatCutoff double m_FlatCutoff ; variable m_NeighborhoodToSigmaRatio double m_NeighborhoodToSigmaRatio ; variable m_SpatialSigmaCache SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#shapeworkssamplingfunction","text":"This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions","text":"Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions","text":"Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes","text":"Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#detailed-description","text":"class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i).","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: SamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-self","text":"typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientnumerictype","text":"typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-sigmacachetype","text":"typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values.","title":"typedef SigmaCacheType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( SamplingFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-anglecoefficient","text":"TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees.","title":"function AngleCoefficient"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setminimumneighborhoodradius","text":"inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius.","title":"function SetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getminimumneighborhoodradius","text":"inline double GetMinimumNeighborhoodRadius () const","title":"function GetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setmaximumneighborhoodradius","text":"inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space.","title":"function SetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getmaximumneighborhoodradius","text":"inline double GetMaximumNeighborhoodRadius () const","title":"function GetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setflatcutoff","text":"inline void SetFlatCutoff ( double s ) Numerical parameters","title":"function SetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getflatcutoff","text":"inline double GetFlatCutoff () const","title":"function GetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setneighborhoodtosigmaratio","text":"inline void SetNeighborhoodToSigmaRatio ( double s )","title":"function SetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getneighborhoodtosigmaratio","text":"inline double GetNeighborhoodToSigmaRatio () const","title":"function GetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setspatialsigmacache","text":"inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem).","title":"function SetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache","text":"inline SigmaCacheType * GetSpatialSigmaCache ()","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache_1","text":"inline const SigmaCacheType * GetSpatialSigmaCache () const","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-computeangularweights","text":"void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0.","title":"function ComputeAngularWeights"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction","text":"inline SamplingFunction ()","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_1","text":"inline virtual ~ SamplingFunction ()","title":"function ~SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-operator","text":"void operator = ( const SamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_2","text":"SamplingFunction ( const SamplingFunction & )","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_minimumneighborhoodradius","text":"double m_MinimumNeighborhoodRadius ;","title":"variable m_MinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_maximumneighborhoodradius","text":"double m_MaximumNeighborhoodRadius ;","title":"variable m_MaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_flatcutoff","text":"double m_FlatCutoff ;","title":"variable m_FlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_neighborhoodtosigmaratio","text":"double m_NeighborhoodToSigmaRatio ;","title":"variable m_NeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_spatialsigmacache","text":"SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_SpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1Session.html","text":"shapeworks::Session Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session > Public Slots Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete () Public Signals Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes () Public Functions Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i) Public Attributes Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C Detailed Description class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project. Public Slots Documentation slot set_feature_auto_scale void set_feature_auto_scale ( bool value ) slot set_landmark_drag_mode void set_landmark_drag_mode ( bool mode ) slot get_landmark_drag_mode bool get_landmark_drag_mode () slot handle_clear_cache void handle_clear_cache () slot handle_new_mesh void handle_new_mesh () slot handle_thread_complete void handle_thread_complete () Public Signals Documentation signal data_changed void data_changed () signal that the data has changed signal points_changed void points_changed () signal landmarks_changed void landmarks_changed () signal planes_changed void planes_changed () signal ffc_changed void ffc_changed () signal update_display void update_display () signal new_mesh void new_mesh () signal feature_range_changed void feature_range_changed () signal update_view_mode void update_view_mode () signal image_slice_settings_changed void image_slice_settings_changed () signal ffc_paint_mode_changed void ffc_paint_mode_changed () signal repaint void repaint () signal reinsert_shapes void reinsert_shapes () Public Functions Documentation function Session Session ( QWidget * parent , Preferences & prefs ) constructor function ~Session ~ Session () destructor function set_parent void set_parent ( QWidget * parent ) set QWidget parent function save_project bool save_project ( QString filename ) save project to file function load_project bool load_project ( QString filename ) load project from file function load_light_project bool load_light_project ( QString filename ) read a lightweight project file function load_xl_project bool load_xl_project ( QString filename ) load a shapeworks project function set_project_path void set_project_path ( QString relative_path ) function get_project std :: shared_ptr < shapeworks :: Project > get_project () function load_original_files void load_original_files ( std :: vector < std :: string > filenames ) import files function load_groomed_files void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files function load_point_files bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ) function update_particles bool update_particles ( std :: vector < Particles > particles ) function get_num_particles int get_num_particles () Return the total number of particles for all domains, combined. function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) function update_procrustes_transforms void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms ) function is_light_project bool is_light_project () function get_groomed_present bool get_groomed_present () function remove_shapes void remove_shapes ( QList < int > list ) remove shapes function get_shapes ShapeList get_shapes () return all shapes function calculate_reconstructed_samples void calculate_reconstructed_samples () function get_filename QString get_filename () get the filename function get_display_name QString get_display_name () get file display name function original_present bool original_present () function groomed_present bool groomed_present () function particles_present bool particles_present () function groups_available bool groups_available () function get_num_shapes int get_num_shapes () function get_domains_per_shape int get_domains_per_shape () function get_default_feature_map std :: string get_default_feature_map () function get_mesh_manager inline std :: shared_ptr < MeshManager > get_mesh_manager () function parameters shapeworks :: Parameters & parameters () function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () function update_auto_glyph_size double update_auto_glyph_size () function get_auto_glyph_size double get_auto_glyph_size () function clear_particles void clear_particles () clear particles from session (e.g. groom start, optimize start) function get_feature_auto_scale bool get_feature_auto_scale () function get_feature_range_max double get_feature_range_max () function get_feature_range_min double get_feature_range_min () function set_feature_range void set_feature_range ( double min , double max ) function set_feature_range_min void set_feature_range_min ( double value ) function set_feature_range_max void set_feature_range_max ( double value ) function handle_ctrl_click void handle_ctrl_click ( PickResult result ) function trigger_landmarks_changed void trigger_landmarks_changed () function trigger_planes_changed void trigger_planes_changed () function trigger_ffc_changed void trigger_ffc_changed () function set_active_landmark_domain void set_active_landmark_domain ( int id ) function get_active_landmark_domain int get_active_landmark_domain () function set_placing_landmark void set_placing_landmark ( int id ) function get_placing_landmark int get_placing_landmark () function set_landmarks_active void set_landmarks_active ( bool active ) function get_landmarks_active bool get_landmarks_active () function set_planes_active void set_planes_active ( bool active ) function get_planes_active bool get_planes_active () function set_show_landmark_labels void set_show_landmark_labels ( bool show ) function get_show_landmark_labels bool get_show_landmark_labels () function set_show_planes void set_show_planes ( bool show ) function get_show_planes bool get_show_planes () function should_show_planes bool should_show_planes () function set_show_landmarks void set_show_landmarks ( bool show ) function get_show_landmarks bool get_show_landmarks () function set_image_name bool set_image_name ( std :: string image_name ) function get_image_name std :: string get_image_name () function set_image_axis void set_image_axis ( QString axis ) function get_image_axis Axis get_image_axis () function set_image_3d_mode void set_image_3d_mode ( bool mode ) function get_image_3d_mode bool get_image_3d_mode () function set_image_share_window_and_level void set_image_share_window_and_level ( bool enabled ) function get_image_share_window_and_level bool get_image_share_window_and_level () function set_image_sync_slice void set_image_sync_slice ( bool enabled ) function get_image_sync_slice bool get_image_sync_slice () function has_constraints bool has_constraints () function set_loading void set_loading ( bool loading ) function is_loading bool is_loading () function set_tool_state void set_tool_state ( std :: string state ) function get_tool_state std :: string get_tool_state () function is_analysis_mode bool is_analysis_mode () function set_ffc_paint_active void set_ffc_paint_active ( bool enabled ) function get_ffc_paint_active bool get_ffc_paint_active () function set_ffc_paint_mode_inclusive void set_ffc_paint_mode_inclusive ( bool inclusive ) function get_ffc_paint_mode_inclusive bool get_ffc_paint_mode_inclusive () function set_ffc_paint_size void set_ffc_paint_size ( double size ) function get_ffc_paint_size double get_ffc_paint_size () function get_show_good_bad_particles bool get_show_good_bad_particles () function set_show_good_bad_particles void set_show_good_bad_particles ( bool enabled ) function get_show_difference_vectors bool get_show_difference_vectors () function set_show_difference_vectors void set_show_difference_vectors ( bool enabled ) function should_difference_vectors_show bool should_difference_vectors_show () function get_good_bad_particles std :: vector < bool > get_good_bad_particles () function set_good_bad_particles void set_good_bad_particles ( const std :: vector < bool > & good_bad ) function set_difference_particles inline void set_difference_particles ( Particles particles ) function get_difference_particles inline Particles get_difference_particles () function set_compare_settings void set_compare_settings ( CompareSettings settings ) function get_compare_settings CompareSettings get_compare_settings () function trigger_repaint void trigger_repaint () function trigger_reinsert_shapes void trigger_reinsert_shapes () function set_display_mode void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed) function get_display_mode DisplayMode get_display_mode () return the current display mode function set_glyph_lut inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function get_glyph_lut inline vtkSmartPointer < vtkLookupTable > get_glyph_lut () function is_supported_file_format static bool is_supported_file_format ( std :: string filename ) function get_point static Point3 get_point ( const Eigen :: VectorXd & points , int i ) Public Attributes Documentation variable DATA_C static const std :: string DATA_C ; variable GROOM_C static const std :: string GROOM_C ; variable OPTIMIZE_C static const std :: string OPTIMIZE_C ; variable ANALYSIS_C static const std :: string ANALYSIS_C ; variable DEEPSSM_C static const std :: string DEEPSSM_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#shapeworkssession","text":"Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session >","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots","text":"Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals","text":"Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions","text":"Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes","text":"Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Session.html#detailed-description","text":"class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_feature_auto_scale","text":"void set_feature_auto_scale ( bool value )","title":"slot set_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_landmark_drag_mode","text":"void set_landmark_drag_mode ( bool mode )","title":"slot set_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-get_landmark_drag_mode","text":"bool get_landmark_drag_mode ()","title":"slot get_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-data_changed","text":"void data_changed () signal that the data has changed","title":"signal data_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-points_changed","text":"void points_changed ()","title":"signal points_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-landmarks_changed","text":"void landmarks_changed ()","title":"signal landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-planes_changed","text":"void planes_changed ()","title":"signal planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_changed","text":"void ffc_changed ()","title":"signal ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_display","text":"void update_display ()","title":"signal update_display"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-feature_range_changed","text":"void feature_range_changed ()","title":"signal feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_view_mode","text":"void update_view_mode ()","title":"signal update_view_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-image_slice_settings_changed","text":"void image_slice_settings_changed ()","title":"signal image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_paint_mode_changed","text":"void ffc_paint_mode_changed ()","title":"signal ffc_paint_mode_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-repaint","text":"void repaint ()","title":"signal repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-reinsert_shapes","text":"void reinsert_shapes ()","title":"signal reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session","text":"Session ( QWidget * parent , Preferences & prefs ) constructor","title":"function Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session_1","text":"~ Session () destructor","title":"function ~Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_parent","text":"void set_parent ( QWidget * parent ) set QWidget parent","title":"function set_parent"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-save_project","text":"bool save_project ( QString filename ) save project to file","title":"function save_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_project","text":"bool load_project ( QString filename ) load project from file","title":"function load_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_light_project","text":"bool load_light_project ( QString filename ) read a lightweight project file","title":"function load_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_xl_project","text":"bool load_xl_project ( QString filename ) load a shapeworks project","title":"function load_xl_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_project_path","text":"void set_project_path ( QString relative_path )","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_project","text":"std :: shared_ptr < shapeworks :: Project > get_project ()","title":"function get_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_original_files","text":"void load_original_files ( std :: vector < std :: string > filenames ) import files","title":"function load_original_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_groomed_files","text":"void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files","title":"function load_groomed_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_point_files","text":"bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape )","title":"function load_point_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_particles","text":"bool update_particles ( std :: vector < Particles > particles )","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_particles","text":"int get_num_particles () Return the total number of particles for all domains, combined.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain )","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_procrustes_transforms","text":"void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms )","title":"function update_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_light_project","text":"bool is_light_project ()","title":"function is_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_present","text":"bool get_groomed_present ()","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-remove_shapes","text":"void remove_shapes ( QList < int > list ) remove shapes","title":"function remove_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_shapes","text":"ShapeList get_shapes () return all shapes","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-calculate_reconstructed_samples","text":"void calculate_reconstructed_samples ()","title":"function calculate_reconstructed_samples"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_filename","text":"QString get_filename () get the filename","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_name","text":"QString get_display_name () get file display name","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-original_present","text":"bool original_present ()","title":"function original_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groomed_present","text":"bool groomed_present ()","title":"function groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-particles_present","text":"bool particles_present ()","title":"function particles_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groups_available","text":"bool groups_available ()","title":"function groups_available"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_shapes","text":"int get_num_shapes ()","title":"function get_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_domains_per_shape","text":"int get_domains_per_shape ()","title":"function get_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_default_feature_map","text":"std :: string get_default_feature_map ()","title":"function get_default_feature_map"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_mesh_manager","text":"inline std :: shared_ptr < MeshManager > get_mesh_manager ()","title":"function get_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-parameters","text":"shapeworks :: Parameters & parameters ()","title":"function parameters"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types ()","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_auto_glyph_size","text":"double update_auto_glyph_size ()","title":"function update_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_auto_glyph_size","text":"double get_auto_glyph_size ()","title":"function get_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-clear_particles","text":"void clear_particles () clear particles from session (e.g. groom start, optimize start)","title":"function clear_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_auto_scale","text":"bool get_feature_auto_scale ()","title":"function get_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_max","text":"double get_feature_range_max ()","title":"function get_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_min","text":"double get_feature_range_min ()","title":"function get_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range","text":"void set_feature_range ( double min , double max )","title":"function set_feature_range"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_min","text":"void set_feature_range_min ( double value )","title":"function set_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_max","text":"void set_feature_range_max ( double value )","title":"function set_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_landmarks_changed","text":"void trigger_landmarks_changed ()","title":"function trigger_landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_planes_changed","text":"void trigger_planes_changed ()","title":"function trigger_planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_ffc_changed","text":"void trigger_ffc_changed ()","title":"function trigger_ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_active_landmark_domain","text":"void set_active_landmark_domain ( int id )","title":"function set_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_active_landmark_domain","text":"int get_active_landmark_domain ()","title":"function get_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_placing_landmark","text":"void set_placing_landmark ( int id )","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_placing_landmark","text":"int get_placing_landmark ()","title":"function get_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_landmarks_active","text":"void set_landmarks_active ( bool active )","title":"function set_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_landmarks_active","text":"bool get_landmarks_active ()","title":"function get_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_planes_active","text":"void set_planes_active ( bool active )","title":"function set_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_planes_active","text":"bool get_planes_active ()","title":"function get_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmark_labels","text":"void set_show_landmark_labels ( bool show )","title":"function set_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmark_labels","text":"bool get_show_landmark_labels ()","title":"function get_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_planes","text":"void set_show_planes ( bool show )","title":"function set_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_planes","text":"bool get_show_planes ()","title":"function get_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_show_planes","text":"bool should_show_planes ()","title":"function should_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmarks","text":"void set_show_landmarks ( bool show )","title":"function set_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmarks","text":"bool get_show_landmarks ()","title":"function get_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_name","text":"bool set_image_name ( std :: string image_name )","title":"function set_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_name","text":"std :: string get_image_name ()","title":"function get_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_axis","text":"void set_image_axis ( QString axis )","title":"function set_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_axis","text":"Axis get_image_axis ()","title":"function get_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_3d_mode","text":"void set_image_3d_mode ( bool mode )","title":"function set_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_3d_mode","text":"bool get_image_3d_mode ()","title":"function get_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_share_window_and_level","text":"void set_image_share_window_and_level ( bool enabled )","title":"function set_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_share_window_and_level","text":"bool get_image_share_window_and_level ()","title":"function get_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_sync_slice","text":"void set_image_sync_slice ( bool enabled )","title":"function set_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_sync_slice","text":"bool get_image_sync_slice ()","title":"function get_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-has_constraints","text":"bool has_constraints ()","title":"function has_constraints"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_loading","text":"void set_loading ( bool loading )","title":"function set_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_loading","text":"bool is_loading ()","title":"function is_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_tool_state","text":"void set_tool_state ( std :: string state )","title":"function set_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_tool_state","text":"std :: string get_tool_state ()","title":"function get_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_analysis_mode","text":"bool is_analysis_mode ()","title":"function is_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_active","text":"void set_ffc_paint_active ( bool enabled )","title":"function set_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_active","text":"bool get_ffc_paint_active ()","title":"function get_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_mode_inclusive","text":"void set_ffc_paint_mode_inclusive ( bool inclusive )","title":"function set_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_mode_inclusive","text":"bool get_ffc_paint_mode_inclusive ()","title":"function get_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_size","text":"void set_ffc_paint_size ( double size )","title":"function set_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_size","text":"double get_ffc_paint_size ()","title":"function get_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_good_bad_particles","text":"bool get_show_good_bad_particles ()","title":"function get_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_good_bad_particles","text":"void set_show_good_bad_particles ( bool enabled )","title":"function set_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_difference_vectors","text":"bool get_show_difference_vectors ()","title":"function get_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_difference_vectors","text":"void set_show_difference_vectors ( bool enabled )","title":"function set_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_difference_vectors_show","text":"bool should_difference_vectors_show ()","title":"function should_difference_vectors_show"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_good_bad_particles","text":"std :: vector < bool > get_good_bad_particles ()","title":"function get_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_good_bad_particles","text":"void set_good_bad_particles ( const std :: vector < bool > & good_bad )","title":"function set_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_difference_particles","text":"inline void set_difference_particles ( Particles particles )","title":"function set_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_difference_particles","text":"inline Particles get_difference_particles ()","title":"function get_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_compare_settings","text":"void set_compare_settings ( CompareSettings settings )","title":"function set_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_compare_settings","text":"CompareSettings get_compare_settings ()","title":"function get_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_repaint","text":"void trigger_repaint ()","title":"function trigger_repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_reinsert_shapes","text":"void trigger_reinsert_shapes ()","title":"function trigger_reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_display_mode","text":"void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed)","title":"function set_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_mode","text":"DisplayMode get_display_mode () return the current display mode","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_glyph_lut","text":"inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_glyph_lut","text":"inline vtkSmartPointer < vtkLookupTable > get_glyph_lut ()","title":"function get_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_supported_file_format","text":"static bool is_supported_file_format ( std :: string filename )","title":"function is_supported_file_format"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_point","text":"static Point3 get_point ( const Eigen :: VectorXd & points , int i )","title":"function get_point"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-data_c","text":"static const std :: string DATA_C ;","title":"variable DATA_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-groom_c","text":"static const std :: string GROOM_C ;","title":"variable GROOM_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-optimize_c","text":"static const std :: string OPTIMIZE_C ;","title":"variable OPTIMIZE_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-analysis_c","text":"static const std :: string ANALYSIS_C ;","title":"variable ANALYSIS_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-deepssm_c","text":"static const std :: string DEEPSSM_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable DEEPSSM_C"},{"location":"api/Classes/classshapeworks_1_1Shape.html","text":"shapeworks::Shape Representation of a single shape/patient/subject. #include Public Classes Name class Point TODO: replace this wherever it is used. Public Functions Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers () Public Functions Documentation function Shape Shape () function ~Shape ~ Shape () function get_display_name std :: string get_display_name () function get_meshes MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ) function set_annotations void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ) function get_annotations std :: vector < std :: string > get_annotations () function set_mesh_manager void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ) function set_subject void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ) function is_subject bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) function get_subject std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object. function import_original_file void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file. function get_original_meshes MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes. function get_groomed_meshes MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes. function get_reconstructed_meshes MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes. function reset_groomed_mesh void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. function import_global_point_files bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files. function import_local_point_files bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files. function import_landmarks_files bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files. function store_landmarks bool store_landmarks () Store landmarks. function import_constraints bool import_constraints ( std :: vector < std :: string > filenames ) import constraints function store_constraints bool store_constraints () Store constraints. function set_particles void set_particles ( Particles particles ) Set particles. function get_particles Particles get_particles () Get particles. function set_particle_transform void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment) function set_alignment_type void set_alignment_type ( int alignment ) Set the alignment type. function get_global_correspondence_points Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points. function get_particles_for_display std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display. function get_local_correspondence_points Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points. function clear_reconstructed_mesh void clear_reconstructed_mesh () function get_id int get_id () Get the id of this shape. function set_id void set_id ( int id ) Set the id of this shape. function get_original_filenames std :: vector < std :: string > get_original_filenames () function get_original_filenames_with_path std :: vector < std :: string > get_original_filenames_with_path () function get_original_filename std :: string get_original_filename () function get_original_filename_with_path std :: string get_original_filename_with_path () function get_groomed_filename std :: string get_groomed_filename () function get_groomed_filename_with_path std :: string get_groomed_filename_with_path ( int domain ) function get_global_point_filename std :: string get_global_point_filename () function get_global_point_filename_with_path std :: string get_global_point_filename_with_path () function get_local_point_filename std :: string get_local_point_filename () function get_local_point_filename_with_path std :: string get_local_point_filename_with_path () function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function get_transform vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ) function get_inverse_transform vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ) function has_alignment bool has_alignment () function get_original_transform vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ) function set_reconstruction_transforms void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms ) function get_reconstruction_transform vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ) function get_groomed_transform vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ) function get_procrustes_transform vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ) function get_procrustes_transforms std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms () function get_alignment vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ) function load_feature void load_feature ( DisplayMode display_mode , std :: string feature ) function get_image_volume std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ) function get_point_features Eigen :: VectorXf get_point_features ( std :: string feature ) function set_point_features void set_point_features ( std :: string feature , Eigen :: VectorXf values ) function load_feature_from_scalar_file void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ) function set_override_feature void set_override_feature ( std :: string feature ) function get_override_feature std :: string get_override_feature () function landmarks Eigen :: MatrixXd & landmarks () function constraints std :: vector < Constraints > & constraints () function get_constraints Constraints & get_constraints ( int domain_id ) function has_planes bool has_planes () function get_groomed_mesh_wrappers std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#shapeworksshape","text":"Representation of a single shape/patient/subject. #include ","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-classes","text":"Name class Point TODO: replace this wherever it is used.","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions","text":"Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape","text":"Shape ()","title":"function Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape_1","text":"~ Shape ()","title":"function ~Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_display_name","text":"std :: string get_display_name ()","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_meshes","text":"MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false )","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_annotations","text":"void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true )","title":"function set_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_annotations","text":"std :: vector < std :: string > get_annotations ()","title":"function get_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_mesh_manager","text":"void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager )","title":"function set_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_subject","text":"void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject )","title":"function set_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-is_subject","text":"bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not)","title":"function is_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_subject","text":"std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object.","title":"function get_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_original_file","text":"void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file.","title":"function import_original_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_meshes","text":"MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes.","title":"function get_original_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_meshes","text":"MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes.","title":"function get_groomed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstructed_meshes","text":"MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes.","title":"function get_reconstructed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-reset_groomed_mesh","text":"void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created.","title":"function reset_groomed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_global_point_files","text":"bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files.","title":"function import_global_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_local_point_files","text":"bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files.","title":"function import_local_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_landmarks_files","text":"bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files.","title":"function import_landmarks_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_landmarks","text":"bool store_landmarks () Store landmarks.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_constraints","text":"bool import_constraints ( std :: vector < std :: string > filenames ) import constraints","title":"function import_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_constraints","text":"bool store_constraints () Store constraints.","title":"function store_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particles","text":"void set_particles ( Particles particles ) Set particles.","title":"function set_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles","text":"Particles get_particles () Get particles.","title":"function get_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particle_transform","text":"void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment)","title":"function set_particle_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment ) Set the alignment type.","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_correspondence_points","text":"Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points.","title":"function get_global_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles_for_display","text":"std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display.","title":"function get_particles_for_display"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_correspondence_points","text":"Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points.","title":"function get_local_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-clear_reconstructed_mesh","text":"void clear_reconstructed_mesh ()","title":"function clear_reconstructed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_id","text":"int get_id () Get the id of this shape.","title":"function get_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_id","text":"void set_id ( int id ) Set the id of this shape.","title":"function set_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames","text":"std :: vector < std :: string > get_original_filenames ()","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames_with_path","text":"std :: vector < std :: string > get_original_filenames_with_path ()","title":"function get_original_filenames_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename","text":"std :: string get_original_filename ()","title":"function get_original_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename_with_path","text":"std :: string get_original_filename_with_path ()","title":"function get_original_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename","text":"std :: string get_groomed_filename ()","title":"function get_groomed_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename_with_path","text":"std :: string get_groomed_filename_with_path ( int domain )","title":"function get_groomed_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename","text":"std :: string get_global_point_filename ()","title":"function get_global_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename_with_path","text":"std :: string get_global_point_filename_with_path ()","title":"function get_global_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename","text":"std :: string get_local_point_filename ()","title":"function get_local_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename_with_path","text":"std :: string get_local_point_filename_with_path ()","title":"function get_local_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_inverse_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 )","title":"function get_inverse_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_alignment","text":"bool has_alignment ()","title":"function has_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_transform","text":"vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 )","title":"function get_original_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_reconstruction_transforms","text":"void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms )","title":"function set_reconstruction_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstruction_transform","text":"vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain )","title":"function get_reconstruction_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_transform","text":"vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 )","title":"function get_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transform","text":"vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 )","title":"function get_procrustes_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transforms","text":"std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms ()","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_alignment","text":"vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 )","title":"function get_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature","text":"void load_feature ( DisplayMode display_mode , std :: string feature )","title":"function load_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_image_volume","text":"std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name )","title":"function get_image_volume"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_point_features","text":"Eigen :: VectorXf get_point_features ( std :: string feature )","title":"function get_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_point_features","text":"void set_point_features ( std :: string feature , Eigen :: VectorXf values )","title":"function set_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature_from_scalar_file","text":"void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name )","title":"function load_feature_from_scalar_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_override_feature","text":"void set_override_feature ( std :: string feature )","title":"function set_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_override_feature","text":"std :: string get_override_feature ()","title":"function get_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-landmarks","text":"Eigen :: MatrixXd & landmarks ()","title":"function landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-constraints","text":"std :: vector < Constraints > & constraints ()","title":"function constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_constraints","text":"Constraints & get_constraints ( int domain_id )","title":"function get_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_planes","text":"bool has_planes ()","title":"function has_planes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_mesh_wrappers","text":"std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_groomed_mesh_wrappers"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html","text":"shapeworks::ShapeEvaluation Public Functions Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) Public Attributes Name const unsigned VDimension Public Functions Documentation function ShapeEvaluation ShapeEvaluation () function ComputeCompactness static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullCompactness static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeGeneralization static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullGeneralization static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeSpecificity static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullSpecificity static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) Public Attributes Documentation variable VDimension static const unsigned VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#shapeworksshapeevaluation","text":"","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions","text":"Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes","text":"Name const unsigned VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-shapeevaluation","text":"ShapeEvaluation ()","title":"function ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computecompactness","text":"static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullcompactness","text":"static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computegeneralization","text":"static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullgeneralization","text":"static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computespecificity","text":"static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullspecificity","text":"static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#variable-vdimension","text":"static const unsigned VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html","text":"shapeworks::ShapeEvaluationJob Inherits from shapeworks::Job , QObject Public Types Name enum class JobType Public Signals Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) Public Functions Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Types Documentation enum JobType Enumerator Value Description CompactnessType SpecificityType GeneralizationType Public Signals Documentation signal report_progress void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ) signal result_ready void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) Public Functions Documentation function ShapeEvaluationJob ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#shapeworksshapeevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types","text":"Name enum class JobType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals","text":"Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions","text":"Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#enum-jobtype","text":"Enumerator Value Description CompactnessType SpecificityType GeneralizationType","title":"enum JobType"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-report_progress","text":"void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress )","title":"signal report_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-result_ready","text":"void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-shapeevaluationjob","text":"ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats )","title":"function ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-25 at 15:40:27 +0000","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html","text":"shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) function itkTypeMacro itkTypeMacro ( ShapeGradientMatrix , Observer ) function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function SetValues void SetValues ( const ParticleSystemType * ps , int idx , int d ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Protected Functions Documentation function ShapeGradientMatrix inline ShapeGradientMatrix () function ~ShapeGradientMatrix inline virtual ~ ShapeGradientMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#shapeworksshapegradientmatrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions","text":"Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#detailed-description","text":"class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-self","text":"typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ;","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self )","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeGradientMatrix , Observer )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setvalues","text":"void SetValues ( const ParticleSystemType * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix","text":"inline ShapeGradientMatrix ()","title":"function ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix_1","text":"inline virtual ~ ShapeGradientMatrix ()","title":"function ~ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html","text":"shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () Protected Functions Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods). function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function SetValues inline void SetValues ( const ParticleSystem * ps , int idx , int d ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () Protected Functions Documentation function ShapeMatrix inline ShapeMatrix () function ~ShapeMatrix inline virtual ~ ShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#shapeworksshapematrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions","text":"Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#detailed-description","text":"class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-self","text":"typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setvalues","text":"inline void SetValues ( const ParticleSystem * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix","text":"inline ShapeMatrix ()","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix_1","text":"inline virtual ~ ShapeMatrix ()","title":"function ~ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html","text":"shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. More... #include Inherits from QMainWindow Public Slots Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session () Public Functions Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names) Protected Functions Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override Detailed Description class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface Public Slots Documentation slot open_project void open_project ( QString filename ) slot on_action_new_project_triggered void on_action_new_project_triggered () slot on_action_open_project_triggered void on_action_open_project_triggered () slot on_action_show_project_folder_triggered void on_action_show_project_folder_triggered () slot on_action_save_project_triggered bool on_action_save_project_triggered () slot save_project_as bool save_project_as ( QString type ) slot save_as_swproj_clicked void save_as_swproj_clicked () slot save_as_xlsx_clicked void save_as_xlsx_clicked () slot on_action_quit_triggered void on_action_quit_triggered () slot on_action_import_triggered void on_action_import_triggered () slot splash_screen_closed void splash_screen_closed () slot on_vertical_scroll_bar_valueChanged void on_vertical_scroll_bar_valueChanged () slot on_action_import_mode_triggered void on_action_import_mode_triggered () slot on_action_groom_mode_triggered void on_action_groom_mode_triggered () slot on_action_optimize_mode_triggered void on_action_optimize_mode_triggered () slot on_action_analysis_mode_triggered void on_action_analysis_mode_triggered () slot on_action_deepssm_mode_triggered void on_action_deepssm_mode_triggered () slot on_actionShow_Tool_Window_triggered void on_actionShow_Tool_Window_triggered () slot on_actionExport_PCA_Mesh_triggered void on_actionExport_PCA_Mesh_triggered () slot on_actionExport_Eigenvalues_triggered void on_actionExport_Eigenvalues_triggered () slot on_actionExport_Eigenvectors_triggered void on_actionExport_Eigenvectors_triggered () slot on_actionExport_PCA_Mode_Points_triggered void on_actionExport_PCA_Mode_Points_triggered () slot on_action_preferences_triggered void on_action_preferences_triggered () slot action_export_current_mesh_triggered void action_export_current_mesh_triggered ( int index = 0 ) slot on_action_export_current_particles_triggered void on_action_export_current_particles_triggered () slot on_action_export_mesh_scalars_triggered void on_action_export_mesh_scalars_triggered () slot on_action_export_pca_scores_triggered void on_action_export_pca_scores_triggered () slot action_export_pca_montage_triggered void action_export_pca_montage_triggered () slot action_export_screenshot_triggered void action_export_screenshot_triggered () slot action_export_particle_scalars_triggered void action_export_particle_scalars_triggered () slot action_export_all_subjects_particle_scalars_triggered void action_export_all_subjects_particle_scalars_triggered () slot on_center_checkbox_stateChanged void on_center_checkbox_stateChanged () slot on_zoom_slider_valueChanged void on_zoom_slider_valueChanged () slot on_view_mode_combobox_currentIndexChanged void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ) slot on_auto_view_button_clicked void on_auto_view_button_clicked () slot handle_pca_changed void handle_pca_changed () slot handle_slider_update void handle_slider_update () slot handle_mca_changed void handle_mca_changed () slot handle_project_changed void handle_project_changed () slot handle_points_changed void handle_points_changed () slot handle_groom_start void handle_groom_start () slot handle_groom_complete void handle_groom_complete () slot handle_optimize_start void handle_optimize_start () slot handle_optimize_complete void handle_optimize_complete () slot handle_reconstruction_complete void handle_reconstruction_complete () slot handle_display_setting_changed void handle_display_setting_changed () slot handle_glyph_changed void handle_glyph_changed () slot handle_opacity_changed void handle_opacity_changed () slot handle_alignment_changed void handle_alignment_changed () slot handle_open_recent void handle_open_recent () slot handle_color_scheme void handle_color_scheme () slot handle_pca_update void handle_pca_update () slot clear_message void clear_message () slot handle_message void handle_message ( std :: string str ) slot handle_error void handle_error ( std :: string str ) slot handle_warning void handle_warning ( std :: string str ) slot handle_debug void handle_debug ( std :: string str ) slot handle_status void handle_status ( std :: string str ) slot handle_progress_with_message void handle_progress_with_message ( int amt , std :: string str ) slot handle_progress void handle_progress ( int amt ) slot message_callback void message_callback ( std :: string str ) slot handle_new_mesh void handle_new_mesh () slot handle_clear_cache void handle_clear_cache () slot handle_compare_settings_changed void handle_compare_settings_changed () slot handle_lightbox_right_click void handle_lightbox_right_click ( int index ) slot update_feature_map_selection void update_feature_map_selection ( int index ) slot update_feature_map_scale void update_feature_map_scale () slot image_combo_changed void image_combo_changed ( int index ) slot show_splash_screen void show_splash_screen () slot hide_splash_screen void hide_splash_screen () slot about void about () slot keyboard_shortcuts void keyboard_shortcuts () slot toggle_log_window void toggle_log_window () slot get_py_worker QSharedPointer < PythonWorker > get_py_worker () slot prefs inline Preferences & prefs () slot session inline QSharedPointer < Session > session () Public Functions Documentation function ShapeWorksStudioApp ShapeWorksStudioApp () function ~ShapeWorksStudioApp ~ ShapeWorksStudioApp () function closeEvent void closeEvent ( QCloseEvent * event ) override function initialize_vtk void initialize_vtk () function import_files void import_files ( QStringList file_names ) Protected Functions Documentation function dragEnterEvent void dragEnterEvent ( QDragEnterEvent * event ) override function dragLeaveEvent void dragLeaveEvent ( QDragLeaveEvent * event ) override function dropEvent void dropEvent ( QDropEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#shapeworksshapeworksstudioapp","text":"Main ShapeWorksStudio window. More... #include Inherits from QMainWindow","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots","text":"Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions","text":"Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions","text":"Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#detailed-description","text":"class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-open_project","text":"void open_project ( QString filename )","title":"slot open_project"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_new_project_triggered","text":"void on_action_new_project_triggered ()","title":"slot on_action_new_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_open_project_triggered","text":"void on_action_open_project_triggered ()","title":"slot on_action_open_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_show_project_folder_triggered","text":"void on_action_show_project_folder_triggered ()","title":"slot on_action_show_project_folder_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_save_project_triggered","text":"bool on_action_save_project_triggered ()","title":"slot on_action_save_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_project_as","text":"bool save_project_as ( QString type )","title":"slot save_project_as"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_swproj_clicked","text":"void save_as_swproj_clicked ()","title":"slot save_as_swproj_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_xlsx_clicked","text":"void save_as_xlsx_clicked ()","title":"slot save_as_xlsx_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_quit_triggered","text":"void on_action_quit_triggered ()","title":"slot on_action_quit_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_triggered","text":"void on_action_import_triggered ()","title":"slot on_action_import_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-splash_screen_closed","text":"void splash_screen_closed ()","title":"slot splash_screen_closed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_vertical_scroll_bar_valuechanged","text":"void on_vertical_scroll_bar_valueChanged ()","title":"slot on_vertical_scroll_bar_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_mode_triggered","text":"void on_action_import_mode_triggered ()","title":"slot on_action_import_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_groom_mode_triggered","text":"void on_action_groom_mode_triggered ()","title":"slot on_action_groom_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_optimize_mode_triggered","text":"void on_action_optimize_mode_triggered ()","title":"slot on_action_optimize_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_analysis_mode_triggered","text":"void on_action_analysis_mode_triggered ()","title":"slot on_action_analysis_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_deepssm_mode_triggered","text":"void on_action_deepssm_mode_triggered ()","title":"slot on_action_deepssm_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionshow_tool_window_triggered","text":"void on_actionShow_Tool_Window_triggered ()","title":"slot on_actionShow_Tool_Window_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mesh_triggered","text":"void on_actionExport_PCA_Mesh_triggered ()","title":"slot on_actionExport_PCA_Mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvalues_triggered","text":"void on_actionExport_Eigenvalues_triggered ()","title":"slot on_actionExport_Eigenvalues_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvectors_triggered","text":"void on_actionExport_Eigenvectors_triggered ()","title":"slot on_actionExport_Eigenvectors_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mode_points_triggered","text":"void on_actionExport_PCA_Mode_Points_triggered ()","title":"slot on_actionExport_PCA_Mode_Points_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_preferences_triggered","text":"void on_action_preferences_triggered ()","title":"slot on_action_preferences_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_current_mesh_triggered","text":"void action_export_current_mesh_triggered ( int index = 0 )","title":"slot action_export_current_mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_current_particles_triggered","text":"void on_action_export_current_particles_triggered ()","title":"slot on_action_export_current_particles_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_mesh_scalars_triggered","text":"void on_action_export_mesh_scalars_triggered ()","title":"slot on_action_export_mesh_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_pca_scores_triggered","text":"void on_action_export_pca_scores_triggered ()","title":"slot on_action_export_pca_scores_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_pca_montage_triggered","text":"void action_export_pca_montage_triggered ()","title":"slot action_export_pca_montage_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_screenshot_triggered","text":"void action_export_screenshot_triggered ()","title":"slot action_export_screenshot_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_particle_scalars_triggered","text":"void action_export_particle_scalars_triggered ()","title":"slot action_export_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_all_subjects_particle_scalars_triggered","text":"void action_export_all_subjects_particle_scalars_triggered ()","title":"slot action_export_all_subjects_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_center_checkbox_statechanged","text":"void on_center_checkbox_stateChanged ()","title":"slot on_center_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_zoom_slider_valuechanged","text":"void on_zoom_slider_valueChanged ()","title":"slot on_zoom_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_view_mode_combobox_currentindexchanged","text":"void on_view_mode_combobox_currentIndexChanged ( QString disp_mode )","title":"slot on_view_mode_combobox_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_auto_view_button_clicked","text":"void on_auto_view_button_clicked ()","title":"slot on_auto_view_button_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_changed","text":"void handle_pca_changed ()","title":"slot handle_pca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_slider_update","text":"void handle_slider_update ()","title":"slot handle_slider_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_mca_changed","text":"void handle_mca_changed ()","title":"slot handle_mca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_project_changed","text":"void handle_project_changed ()","title":"slot handle_project_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_points_changed","text":"void handle_points_changed ()","title":"slot handle_points_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_start","text":"void handle_groom_start ()","title":"slot handle_groom_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_complete","text":"void handle_groom_complete ()","title":"slot handle_groom_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_start","text":"void handle_optimize_start ()","title":"slot handle_optimize_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_display_setting_changed","text":"void handle_display_setting_changed ()","title":"slot handle_display_setting_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_glyph_changed","text":"void handle_glyph_changed ()","title":"slot handle_glyph_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_opacity_changed","text":"void handle_opacity_changed ()","title":"slot handle_opacity_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ()","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_open_recent","text":"void handle_open_recent ()","title":"slot handle_open_recent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_color_scheme","text":"void handle_color_scheme ()","title":"slot handle_color_scheme"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_update","text":"void handle_pca_update ()","title":"slot handle_pca_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-clear_message","text":"void clear_message ()","title":"slot clear_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_message","text":"void handle_message ( std :: string str )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_error","text":"void handle_error ( std :: string str )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_warning","text":"void handle_warning ( std :: string str )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_debug","text":"void handle_debug ( std :: string str )","title":"slot handle_debug"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_status","text":"void handle_status ( std :: string str )","title":"slot handle_status"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress_with_message","text":"void handle_progress_with_message ( int amt , std :: string str )","title":"slot handle_progress_with_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress","text":"void handle_progress ( int amt )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-message_callback","text":"void message_callback ( std :: string str )","title":"slot message_callback"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_compare_settings_changed","text":"void handle_compare_settings_changed ()","title":"slot handle_compare_settings_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_lightbox_right_click","text":"void handle_lightbox_right_click ( int index )","title":"slot handle_lightbox_right_click"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_selection","text":"void update_feature_map_selection ( int index )","title":"slot update_feature_map_selection"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_scale","text":"void update_feature_map_scale ()","title":"slot update_feature_map_scale"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-image_combo_changed","text":"void image_combo_changed ( int index )","title":"slot image_combo_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-show_splash_screen","text":"void show_splash_screen ()","title":"slot show_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-hide_splash_screen","text":"void hide_splash_screen ()","title":"slot hide_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-about","text":"void about ()","title":"slot about"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-keyboard_shortcuts","text":"void keyboard_shortcuts ()","title":"slot keyboard_shortcuts"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-toggle_log_window","text":"void toggle_log_window ()","title":"slot toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-get_py_worker","text":"QSharedPointer < PythonWorker > get_py_worker ()","title":"slot get_py_worker"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-prefs","text":"inline Preferences & prefs ()","title":"slot prefs"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-session","text":"inline QSharedPointer < Session > session ()","title":"slot session"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp","text":"ShapeWorksStudioApp ()","title":"function ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp_1","text":"~ ShapeWorksStudioApp ()","title":"function ~ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-initialize_vtk","text":"void initialize_vtk ()","title":"function initialize_vtk"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-import_files","text":"void import_files ( QStringList file_names )","title":"function import_files"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragenterevent","text":"void dragEnterEvent ( QDragEnterEvent * event ) override","title":"function dragEnterEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragleaveevent","text":"void dragLeaveEvent ( QDragLeaveEvent * event ) override","title":"function dragLeaveEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dropevent","text":"void dropEvent ( QDropEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function dropEvent"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html","text":"title: shapeworks::Shape::Point summary: TODO: replace this wherever it is used. shapeworks::Shape::Point TODO: replace this wherever it is used. #include Public Functions Name Point () Point (double _x, double _y, double _z) Public Attributes Name double x double y double z Public Functions Documentation function Point inline Point () function Point inline Point ( double _x , double _y , double _z ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-25 at 15:40:27 +0000","title":"classshapeworks 1 1Shape 1 1Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#shapeworksshapepoint","text":"TODO: replace this wherever it is used. #include ","title":"shapeworks::Shape::Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions","text":"Name Point () Point (double _x, double _y, double _z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point","text":"inline Point ()","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point_1","text":"inline Point ( double _x , double _y , double _z )","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-z","text":"double z ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable z"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html","text":"shapeworks::ShapeworksCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#shapeworksshapeworkscommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html","text":"shapeworks::ShapeworksUtils Public Functions Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat) Public Functions Documentation function now static inline time_point now () get the current time function elapsed static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console function rngSeed static inline unsigned rngSeed () returns random seed function setRngSeed static void setRngSeed ( const unsigned seed ) sets random seed function generateNumber static inline unsigned generateNumber () generates random number function is_directory static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory function exists static bool exists ( const std :: string & filename ) returns true if filename exists function getMatrix static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector function getOffset static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#shapeworksshapeworksutils","text":"","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions","text":"Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-now","text":"static inline time_point now () get the current time","title":"function now"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-elapsed","text":"static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console","title":"function elapsed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-rngseed","text":"static inline unsigned rngSeed () returns random seed","title":"function rngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-setrngseed","text":"static void setRngSeed ( const unsigned seed ) sets random seed","title":"function setRngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-generatenumber","text":"static inline unsigned generateNumber () generates random number","title":"function generateNumber"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-is_directory","text":"static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory","title":"function is_directory"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-exists","text":"static bool exists ( const std :: string & filename ) returns true if filename exists","title":"function exists"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getmatrix","text":"static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector","title":"function getMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getoffset","text":"static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html","text":"shapeworks::ShapeworksWorker Inherits from QObject Public Types Name enum ThreadType Public Slots Name void process () Public Signals Name void result_ready () void failure () void finished () Public Functions Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker () Public Types Documentation enum ThreadType Enumerator Value Description GroomType OptimizeType ReconstructType Public Slots Documentation slot process void process () Public Signals Documentation signal result_ready void result_ready () signal failure void failure () signal finished void finished () Public Functions Documentation function ShapeworksWorker ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ) function ~ShapeworksWorker ~ ShapeworksWorker () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#shapeworksshapeworksworker","text":"Inherits from QObject","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types","text":"Name enum ThreadType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals","text":"Name void result_ready () void failure () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions","text":"Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#enum-threadtype","text":"Enumerator Value Description GroomType OptimizeType ReconstructType","title":"enum ThreadType"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-failure","text":"void failure ()","title":"signal failure"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker","text":"ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 )","title":"function ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker_1","text":"~ ShapeworksWorker () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1SliceView.html","text":"shapeworks::SliceView SliceView . More... #include Public Types Name enum SliceChange Public Functions Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z) Detailed Description class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer Public Types Documentation enum SliceChange Enumerator Value Description Down Up Public Functions Documentation function SliceView SliceView ( Viewer * viewer ) function set_volume void set_volume ( std :: shared_ptr < Image > volume ) function set_mesh void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ) function set_orientation void set_orientation ( int orientation ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key Point handle_key ( std :: string key ) function change_slice void change_slice ( SliceChange change ) function get_slice_position Point get_slice_position () function set_slice_position void set_slice_position ( Point point ) function set_window_and_level void set_window_and_level ( double window , double level ) function get_spacing double get_spacing () function get_orientation_index int get_orientation_index () function update_particles void update_particles () function get_viewer Viewer * get_viewer () function should_point_show bool should_point_show ( double x , double y , double z ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#shapeworkssliceview","text":"SliceView . More... #include ","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types","text":"Name enum SliceChange","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions","text":"Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#detailed-description","text":"class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#enum-slicechange","text":"Enumerator Value Description Down Up","title":"enum SliceChange"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-sliceview","text":"SliceView ( Viewer * viewer )","title":"function SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_volume","text":"void set_volume ( std :: shared_ptr < Image > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_mesh","text":"void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_orientation","text":"void set_orientation ( int orientation )","title":"function set_orientation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-handle_key","text":"Point handle_key ( std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-change_slice","text":"void change_slice ( SliceChange change )","title":"function change_slice"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_slice_position","text":"Point get_slice_position ()","title":"function get_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_slice_position","text":"void set_slice_position ( Point point )","title":"function set_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_window_and_level","text":"void set_window_and_level ( double window , double level )","title":"function set_window_and_level"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_spacing","text":"double get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_orientation_index","text":"int get_orientation_index ()","title":"function get_orientation_index"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_particles","text":"void update_particles ()","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_viewer","text":"Viewer * get_viewer ()","title":"function get_viewer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-should_point_show","text":"bool should_point_show ( double x , double y , double z ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function should_point_show"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html","text":"shapeworks::SplashScreen More... #include Inherits from QDialog Public Signals Name void open_project (QString file_path) signal to open a particular project Public Functions Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor Detailed Description class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects Public Signals Documentation signal open_project void open_project ( QString file_path ) signal to open a particular project Public Functions Documentation function SplashScreen SplashScreen ( QWidget * parent , Preferences & preferences ) constructor function ~SplashScreen virtual ~ SplashScreen () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#shapeworkssplashscreen","text":"More... #include Inherits from QDialog","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals","text":"Name void open_project (QString file_path) signal to open a particular project","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions","text":"Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#detailed-description","text":"class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#signal-open_project","text":"void open_project ( QString file_path ) signal to open a particular project","title":"signal open_project"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen","text":"SplashScreen ( QWidget * parent , Preferences & preferences ) constructor","title":"function SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen_1","text":"virtual ~ SplashScreen () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~SplashScreen"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html","text":"shapeworks::StatsGroupLDAJob Inherits from shapeworks::Job , QObject Public Functions Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function StatsGroupLDAJob StatsGroupLDAJob () function set_stats void set_stats ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () function plot void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#shapeworksstatsgroupldajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions","text":"Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-statsgroupldajob","text":"StatsGroupLDAJob ()","title":"function StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-set_stats","text":"void set_stats ( ParticleShapeStatistics stats )","title":"function set_stats"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues ()","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-plot","text":"void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function plot"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html","text":"shapeworks::StatusBarWidget StatusBarWidget . More... #include Inherits from QWidget Public Signals Name void toggle_log_window () Public Functions Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override Detailed Description class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar Public Signals Documentation signal toggle_log_window void toggle_log_window () Public Functions Documentation function StatusBarWidget StatusBarWidget ( QMainWindow * parent = 0 ) function set_message void set_message ( MessageType message_type , QString message ) function set_progress void set_progress ( int value ) function resizeEvent void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#shapeworksstatusbarwidget","text":"StatusBarWidget . More... #include Inherits from QWidget","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals","text":"Name void toggle_log_window ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions","text":"Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#detailed-description","text":"class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#signal-toggle_log_window","text":"void toggle_log_window ()","title":"signal toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-statusbarwidget","text":"StatusBarWidget ( QMainWindow * parent = 0 )","title":"function StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_message","text":"void set_message ( MessageType message_type , QString message )","title":"function set_message"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_progress","text":"void set_progress ( int value )","title":"function set_progress"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html","text":"shapeworks::StringUtils String utility functions. #include Public Functions Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement. Public Functions Documentation function removeExtension static std :: string removeExtension ( std :: string const & filename ) function getPath static std :: string getPath ( std :: string const & filename ) function getFilename static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return. function getBaseFilenameWithoutExtension static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension. function toLower static std :: string toLower ( std :: string s ) function hasSuffix static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ) function getFileNamesFromPaths static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths ) function getLowerExtension static std :: string getLowerExtension ( std :: string const & filename ) function safeString static inline std :: string safeString ( const char * s ) function replace_string static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#shapeworksstringutils","text":"String utility functions. #include ","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions","text":"Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-removeextension","text":"static std :: string removeExtension ( std :: string const & filename )","title":"function removeExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getpath","text":"static std :: string getPath ( std :: string const & filename )","title":"function getPath"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilename","text":"static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return.","title":"function getFilename"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getbasefilenamewithoutextension","text":"static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension.","title":"function getBaseFilenameWithoutExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-tolower","text":"static std :: string toLower ( std :: string s )","title":"function toLower"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-hassuffix","text":"static bool hasSuffix ( std :: string const & filename , std :: string const & suffix )","title":"function hasSuffix"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilenamesfrompaths","text":"static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths )","title":"function getFileNamesFromPaths"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getlowerextension","text":"static std :: string getLowerExtension ( std :: string const & filename )","title":"function getLowerExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-safestring","text":"static inline std :: string safeString ( const char * s )","title":"function safeString"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-replace_string","text":"static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-25 at 15:40:27 +0000","title":"function replace_string"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html","text":"shapeworks::StudioHandleWidget Inherits from vtkHandleWidget Public Functions Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget) Protected Functions Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w) Protected Attributes Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_ Public Functions Documentation function New static StudioHandleWidget * New () function StudioHandleWidget StudioHandleWidget () function set_domain inline void set_domain ( int domain ) function set_plane inline void set_plane ( int plane ) function set_point inline void set_point ( int point ) function set_plane_widget inline void set_plane_widget ( PlaneWidget * plane_widget ) Protected Functions Documentation function RightClickSelectAction static void RightClickSelectAction ( vtkAbstractWidget * w ) function CustomMoveAction static void CustomMoveAction ( vtkAbstractWidget * w ) function CustomSelectAction static void CustomSelectAction ( vtkAbstractWidget * w ) function CustomEndSelectAction static void CustomEndSelectAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable domain_ int domain_ = -1 ; variable plane_ int plane_ = -1 ; variable point_ int point_ = -1 ; variable plane_widget_ PlaneWidget * plane_widget_ ; variable shift_active_ bool shift_active_ = false ; variable start_y_ int start_y_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#shapeworksstudiohandlewidget","text":"Inherits from vtkHandleWidget","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions","text":"Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions","text":"Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes","text":"Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-new","text":"static StudioHandleWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-studiohandlewidget","text":"StudioHandleWidget ()","title":"function StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_domain","text":"inline void set_domain ( int domain )","title":"function set_domain"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane","text":"inline void set_plane ( int plane )","title":"function set_plane"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_point","text":"inline void set_point ( int point )","title":"function set_point"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane_widget","text":"inline void set_plane_widget ( PlaneWidget * plane_widget )","title":"function set_plane_widget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-rightclickselectaction","text":"static void RightClickSelectAction ( vtkAbstractWidget * w )","title":"function RightClickSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-custommoveaction","text":"static void CustomMoveAction ( vtkAbstractWidget * w )","title":"function CustomMoveAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customselectaction","text":"static void CustomSelectAction ( vtkAbstractWidget * w )","title":"function CustomSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customendselectaction","text":"static void CustomEndSelectAction ( vtkAbstractWidget * w )","title":"function CustomEndSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_","text":"int plane_ = -1 ;","title":"variable plane_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-point_","text":"int point_ = -1 ;","title":"variable point_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_widget_","text":"PlaneWidget * plane_widget_ ;","title":"variable plane_widget_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-shift_active_","text":"bool shift_active_ = false ;","title":"variable shift_active_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-start_y_","text":"int start_y_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable start_y_"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html","text":"shapeworks::StudioInteractorStyle Inherits from vtkInteractorStyleTrackballCamera Public Functions Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override Protected Functions Name void Dolly (double factor) override Public Functions Documentation function New static StudioInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioInteractorStyle StudioInteractorStyle () function ~StudioInteractorStyle virtual ~ StudioInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnRightButtonUp void OnRightButtonUp () override function OnMouseWheelForward void OnMouseWheelForward () override function OnMouseWheelBackward void OnMouseWheelBackward () override function OnKeyDown void OnKeyDown () override function Dolly void Dolly () override function Rotate void Rotate () override function OnMouseMove void OnMouseMove () override Protected Functions Documentation function Dolly void Dolly ( double factor ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#shapeworksstudiointeractorstyle","text":"Inherits from vtkInteractorStyleTrackballCamera","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions","text":"Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions","text":"Name void Dolly (double factor) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-new","text":"static StudioInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle","text":"StudioInteractorStyle ()","title":"function StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle_1","text":"virtual ~ StudioInteractorStyle ()","title":"function ~StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttonup","text":"void OnRightButtonUp () override","title":"function OnRightButtonUp"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelforward","text":"void OnMouseWheelForward () override","title":"function OnMouseWheelForward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelbackward","text":"void OnMouseWheelBackward () override","title":"function OnMouseWheelBackward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly","text":"void Dolly () override","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-rotate","text":"void Rotate () override","title":"function Rotate"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousemove","text":"void OnMouseMove () override","title":"function OnMouseMove"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly_1","text":"void Dolly ( double factor ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html","text":"shapeworks::StudioMesh Representation of a single mesh. More... #include Public Functions Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Name constexpr const char *const FFC_PAINT Detailed Description class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class Public Functions Documentation function StudioMesh StudioMesh () Constructor. function ~StudioMesh ~ StudioMesh () Destructor. function get_poly_data vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata. function set_poly_data void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly. function set_error_message void set_error_message ( std :: string error_message ) Set the error message. function get_error_message std :: string get_error_message () Return the error message. function apply_feature_map void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map. function apply_scalars void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform. function interpolate_scalars_to_mesh void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh. function get_largest_dimension_size double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) function get_or_create_array vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name. function paint_ffc void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint. function has_ffc_paint bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Documentation variable FFC_PAINT static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#shapeworksstudiomesh","text":"Representation of a single mesh. More... #include ","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions","text":"Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes","text":"Name constexpr const char *const FFC_PAINT","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#detailed-description","text":"class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh","text":"StudioMesh () Constructor.","title":"function StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh_1","text":"~ StudioMesh () Destructor.","title":"function ~StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_poly_data","text":"vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata.","title":"function get_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_poly_data","text":"void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly.","title":"function set_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_error_message","text":"void set_error_message ( std :: string error_message ) Set the error message.","title":"function set_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_error_message","text":"std :: string get_error_message () Return the error message.","title":"function get_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_feature_map","text":"void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map.","title":"function apply_feature_map"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_scalars","text":"void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform.","title":"function apply_scalars"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-interpolate_scalars_to_mesh","text":"void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh.","title":"function interpolate_scalars_to_mesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_largest_dimension_size","text":"double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100)","title":"function get_largest_dimension_size"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_or_create_array","text":"vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name.","title":"function get_or_create_array"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-paint_ffc","text":"void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint.","title":"function paint_ffc"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-has_ffc_paint","text":"bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"function has_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#variable-ffc_paint","text":"static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable FFC_PAINT"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html","text":"shapeworks::StudioSliceInteractorStyle Inherits from vtkInteractorStyleImage Public Functions Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override Public Functions Documentation function New static StudioSliceInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioSliceInteractorStyle StudioSliceInteractorStyle () function ~StudioSliceInteractorStyle virtual ~ StudioSliceInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnKeyDown void OnKeyDown () override function WindowLevel void WindowLevel () override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#shapeworksstudiosliceinteractorstyle","text":"Inherits from vtkInteractorStyleImage","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions","text":"Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-new","text":"static StudioSliceInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle","text":"StudioSliceInteractorStyle ()","title":"function StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle_1","text":"virtual ~ StudioSliceInteractorStyle ()","title":"function ~StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-windowlevel","text":"void WindowLevel () override Updated on 2023-10-25 at 15:40:27 +0000","title":"function WindowLevel"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html","text":"shapeworks::StudioUtils Utilities for Studio. #include Public Functions Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport Public Functions Documentation function ask_multiple_domains_as_single static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ) function to_string_list static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList function vtk_image_to_qimage static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage function reverse_poly_data static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data function get_platform_string static QString get_platform_string () return platform string function add_viewport_border static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#shapeworksstudioutils","text":"Utilities for Studio. #include ","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions","text":"Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-ask_multiple_domains_as_single","text":"static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project )","title":"function ask_multiple_domains_as_single"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-to_string_list","text":"static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList","title":"function to_string_list"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-vtk_image_to_qimage","text":"static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage","title":"function vtk_image_to_qimage"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-reverse_poly_data","text":"static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data","title":"function reverse_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-get_platform_string","text":"static QString get_platform_string () return platform string","title":"function get_platform_string"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-add_viewport_border","text":"static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-25 at 15:40:27 +0000","title":"function add_viewport_border"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html","text":"shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow Public Functions Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override Public Functions Documentation function New static StudioVtkOutputWindow * New () function vtkTypeMacro vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) function StudioVtkOutputWindow StudioVtkOutputWindow () function DisplayErrorText void DisplayErrorText ( const char * text ) override function DisplayWarningText void DisplayWarningText ( const char * text ) override function DisplayGenericWarningText void DisplayGenericWarningText ( const char * text ) override function DisplayDebugText void DisplayDebugText ( const char * text ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#shapeworksstudiovtkoutputwindow","text":"Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions","text":"Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-new","text":"static StudioVtkOutputWindow * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-studiovtkoutputwindow","text":"StudioVtkOutputWindow ()","title":"function StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displayerrortext","text":"void DisplayErrorText ( const char * text ) override","title":"function DisplayErrorText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaywarningtext","text":"void DisplayWarningText ( const char * text ) override","title":"function DisplayWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaygenericwarningtext","text":"void DisplayGenericWarningText ( const char * text ) override","title":"function DisplayGenericWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaydebugtext","text":"void DisplayDebugText ( const char * text ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function DisplayDebugText"},{"location":"api/Classes/classshapeworks_1_1Style.html","text":"shapeworks::Style Public Functions Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button) Public Functions Documentation function Style Style () function apply_normal_button_style static void apply_normal_button_style ( QPushButton * button ) function apply_abort_button_style static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#shapeworksstyle","text":"","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions","text":"Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-style","text":"Style ()","title":"function Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_normal_button_style","text":"static void apply_normal_button_style ( QPushButton * button )","title":"function apply_normal_button_style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_abort_button_style","text":"static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function apply_abort_button_style"},{"location":"api/Classes/classshapeworks_1_1Subject.html","text":"shapeworks::Subject Representation of a single subject. More... #include Public Types Name using project::types::StringMap StringMap using project::types::StringList StringList Public Functions Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not. Detailed Description class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it. Public Types Documentation using StringMap using shapeworks :: Subject :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: Subject :: StringList = project :: types :: StringList ; Public Functions Documentation function Subject Subject () function ~Subject ~ Subject () function set_original_filenames void set_original_filenames ( StringList filenames ) Set original filenames (one per domain) function get_original_filenames StringList get_original_filenames () Get original filenames. function set_groomed_filenames void set_groomed_filenames ( StringList filenames ) Set groomed filenames. function get_groomed_filenames StringList get_groomed_filenames () Get groomed filenames. function set_local_particle_filenames void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain) function get_local_particle_filenames StringList get_local_particle_filenames () Get local particle filenames. function set_world_particle_filenames void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames. function get_world_particle_filenames StringList get_world_particle_filenames () Get the world particle filenames. function set_landmarks_filenames void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain) function get_landmarks_filenames StringList get_landmarks_filenames () Set the landmarks filenames. function set_constraints_filenames void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain) function get_constraints_filenames StringList get_constraints_filenames () Set the constratins filenames. function set_number_of_domains void set_number_of_domains ( int number_of_domains ) Set the number of domains. function get_number_of_domains int get_number_of_domains () Get the number of domains. function get_feature_filenames StringMap get_feature_filenames () const Get the feature map filenames. function set_feature_filenames void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames. function get_groomed_transforms std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) function set_groomed_transforms void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain) function set_groomed_transform void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform. function get_procrustes_transforms std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) function set_procrustes_transforms void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain) function get_group_values StringMap get_group_values () const Get the group values. function get_group_value std :: string get_group_value ( std :: string group_name ) Get a specific group value. function set_group_values void set_group_values ( const StringMap & group_values ) Set the group values. function get_extra_values StringMap get_extra_values () const Get extra values (extra columns we don't interpret) function set_extra_values void set_extra_values ( StringMap extra_values ) function get_table_values StringMap get_table_values () const Get all table values. function set_table_values void set_table_values ( StringMap table_values ) function get_display_name std :: string get_display_name () Get the display name. function set_display_name void set_display_name ( std :: string display_name ) Set the display name. function is_fixed bool is_fixed () Get if this subject is fixed or not. function set_fixed void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#shapeworkssubject","text":"Representation of a single subject. More... #include ","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types","text":"Name using project::types::StringMap StringMap using project::types::StringList StringList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions","text":"Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Subject.html#detailed-description","text":"class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringmap","text":"using shapeworks :: Subject :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringlist","text":"using shapeworks :: Subject :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject","text":"Subject ()","title":"function Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject_1","text":"~ Subject ()","title":"function ~Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_original_filenames","text":"void set_original_filenames ( StringList filenames ) Set original filenames (one per domain)","title":"function set_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_original_filenames","text":"StringList get_original_filenames () Get original filenames.","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_filenames","text":"void set_groomed_filenames ( StringList filenames ) Set groomed filenames.","title":"function set_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_filenames","text":"StringList get_groomed_filenames () Get groomed filenames.","title":"function get_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_local_particle_filenames","text":"void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain)","title":"function set_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_local_particle_filenames","text":"StringList get_local_particle_filenames () Get local particle filenames.","title":"function get_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_world_particle_filenames","text":"void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames.","title":"function set_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_world_particle_filenames","text":"StringList get_world_particle_filenames () Get the world particle filenames.","title":"function get_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_landmarks_filenames","text":"void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain)","title":"function set_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_landmarks_filenames","text":"StringList get_landmarks_filenames () Set the landmarks filenames.","title":"function get_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_constraints_filenames","text":"void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain)","title":"function set_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_constraints_filenames","text":"StringList get_constraints_filenames () Set the constratins filenames.","title":"function get_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_number_of_domains","text":"void set_number_of_domains ( int number_of_domains ) Set the number of domains.","title":"function set_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_number_of_domains","text":"int get_number_of_domains () Get the number of domains.","title":"function get_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_feature_filenames","text":"StringMap get_feature_filenames () const Get the feature map filenames.","title":"function get_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_feature_filenames","text":"void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames.","title":"function set_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_transforms","text":"std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain)","title":"function get_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transforms","text":"void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain)","title":"function set_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transform","text":"void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform.","title":"function set_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_procrustes_transforms","text":"std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain)","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain)","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_values","text":"StringMap get_group_values () const Get the group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_value","text":"std :: string get_group_value ( std :: string group_name ) Get a specific group value.","title":"function get_group_value"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_group_values","text":"void set_group_values ( const StringMap & group_values ) Set the group values.","title":"function set_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_extra_values","text":"StringMap get_extra_values () const Get extra values (extra columns we don't interpret)","title":"function get_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_extra_values","text":"void set_extra_values ( StringMap extra_values )","title":"function set_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_table_values","text":"StringMap get_table_values () const Get all table values.","title":"function get_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_table_values","text":"void set_table_values ( StringMap table_values )","title":"function set_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_display_name","text":"std :: string get_display_name () Get the display name.","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_display_name","text":"void set_display_name ( std :: string display_name ) Set the display name.","title":"function set_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-is_fixed","text":"bool is_fixed () Get if this subject is fixed or not.","title":"function is_fixed"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_fixed","text":"void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_fixed"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html","text":"shapeworks::Telemetry Inherits from QObject Public Slots Name void handle_network_reply (QNetworkReply * reply) Public Functions Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params) Public Slots Documentation slot handle_network_reply void handle_network_reply ( QNetworkReply * reply ) Public Functions Documentation function Telemetry Telemetry ( Preferences & prefs ) function record_event void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#shapeworkstelemetry","text":"Inherits from QObject","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots","text":"Name void handle_network_reply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions","text":"Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#slot-handle_network_reply","text":"void handle_network_reply ( QNetworkReply * reply )","title":"slot handle_network_reply"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-telemetry","text":"Telemetry ( Preferences & prefs )","title":"function Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-record_event","text":"void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function record_event"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html","text":"shapeworks::UpdateChecker Update Checker. More... #include Inherits from QDialog Public Slots Name void handleNetworkReply (QNetworkReply * reply) Public Functions Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check () Detailed Description class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog Public Slots Documentation slot handleNetworkReply void handleNetworkReply ( QNetworkReply * reply ) Public Functions Documentation function UpdateChecker explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ) function ~UpdateChecker ~ UpdateChecker () function run_auto_update_check void run_auto_update_check () function run_manual_update_check void run_manual_update_check () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#shapeworksupdatechecker","text":"Update Checker. More... #include Inherits from QDialog","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots","text":"Name void handleNetworkReply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions","text":"Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#detailed-description","text":"class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#slot-handlenetworkreply","text":"void handleNetworkReply ( QNetworkReply * reply )","title":"slot handleNetworkReply"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker","text":"explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr )","title":"function UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker_1","text":"~ UpdateChecker ()","title":"function ~UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_auto_update_check","text":"void run_auto_update_check ()","title":"function run_auto_update_check"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_manual_update_check","text":"void run_manual_update_check () Updated on 2023-10-25 at 15:40:27 +0000","title":"function run_manual_update_check"},{"location":"api/Classes/classshapeworks_1_1Variant.html","text":"shapeworks::Variant Variant class to represent multiple types. More... #include Public Functions Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const Detailed Description class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet Public Functions Documentation function Variant inline Variant () function Variant inline Variant ( const std :: string & v ) function Variant inline Variant ( int v ) function Variant inline Variant ( double v ) function Variant inline Variant ( const char * v ) function Variant inline Variant ( bool v ) function Variant inline Variant ( std :: vector < double > v ) function Variant inline Variant ( std :: vector < int > v ) function Variant inline Variant ( std :: vector < bool > v ) function Variant inline Variant ( std :: vector < std :: string > v ) function operator std::string operator std :: string () const function operator bool operator bool () const function operator int operator int () const function operator unsigned int operator unsigned int () const function operator long operator long () const function operator unsigned long operator unsigned long () const function operator float operator float () const function operator double operator double () const function operator std::vector< double > operator std :: vector < double > () const function operator std::vector< int > operator std :: vector < int > () const function operator std::vector< bool > operator std :: vector < bool > () const function operator std::vector< std::string > operator std :: vector < std :: string > () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#shapeworksvariant","text":"Variant class to represent multiple types. More... #include ","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions","text":"Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Variant.html#detailed-description","text":"class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant","text":"inline Variant ()","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_1","text":"inline Variant ( const std :: string & v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_2","text":"inline Variant ( int v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_3","text":"inline Variant ( double v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_4","text":"inline Variant ( const char * v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_5","text":"inline Variant ( bool v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_6","text":"inline Variant ( std :: vector < double > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_7","text":"inline Variant ( std :: vector < int > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_8","text":"inline Variant ( std :: vector < bool > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_9","text":"inline Variant ( std :: vector < std :: string > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdstring","text":"operator std :: string () const","title":"function operator std::string"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-bool","text":"operator bool () const","title":"function operator bool"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-int","text":"operator int () const","title":"function operator int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-int","text":"operator unsigned int () const","title":"function operator unsigned int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-long","text":"operator long () const","title":"function operator long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-long","text":"operator unsigned long () const","title":"function operator unsigned long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-float","text":"operator float () const","title":"function operator float"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-double","text":"operator double () const","title":"function operator double"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-double","text":"operator std :: vector < double > () const","title":"function operator std::vector< double >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-int","text":"operator std :: vector < int > () const","title":"function operator std::vector< int >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-bool","text":"operator std :: vector < bool > () const","title":"function operator std::vector< bool >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-stdstring","text":"operator std :: vector < std :: string > () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function operator std::vector< std::string >"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html","text":"shapeworks::VectorFunction More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction Public Types Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType Public Functions Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & ) Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result. Public Types Documentation typedef Self typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ; typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors. Public Functions Documentation function itkTypeMacro itkTypeMacro ( VectorFunction , LightObject ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate function Energy virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class. function AfterIteration inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function GetParticleSystem inline virtual ParticleSystem * GetParticleSystem () const function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber function GetDomainNumber inline virtual int GetDomainNumber () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling Protected Functions Documentation function VectorFunction inline VectorFunction () function ~VectorFunction inline virtual ~ VectorFunction () function operator= void operator = ( const VectorFunction & ) function VectorFunction VectorFunction ( const VectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ParticleSystem ParticleSystem * m_ParticleSystem ; variable m_DomainNumber unsigned int m_DomainNumber ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#shapeworksvectorfunction","text":"More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types","text":"Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions","text":"Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions","text":"Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes","text":"Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#detailed-description","text":"class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-self","text":"typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( VectorFunction , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-energy","text":"virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getparticlesystem","text":"inline virtual ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getdomainnumber","text":"inline virtual int GetDomainNumber () const","title":"function GetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction","text":"inline VectorFunction ()","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_1","text":"inline virtual ~ VectorFunction ()","title":"function ~VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-operator","text":"void operator = ( const VectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_2","text":"VectorFunction ( const VectorFunction & )","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_particlesystem","text":"ParticleSystem * m_ParticleSystem ;","title":"variable m_ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_domainnumber","text":"unsigned int m_DomainNumber ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html","text":"shapeworks::VectorImage Gradient (vector) image. #include Public Types Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator Public Functions Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator () Public Types Documentation using GradientImageFilter using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; Public Functions Documentation function VectorImage VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform) function VectorImage VectorImage () = delete function ~VectorImage ~ VectorImage () = default function evaluate Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ). function iterator ImageIterator iterator () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#shapeworksvectorimage","text":"Gradient (vector) image. #include ","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types","text":"Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions","text":"Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientimagefilter","text":"using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ;","title":"using GradientImageFilter"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imagetype","text":"using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientinterpolatortype","text":"using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ;","title":"using GradientInterpolatorType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imageiterator","text":"using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage","text":"VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform)","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_1","text":"VectorImage () = delete","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_2","text":"~ VectorImage () = default","title":"function ~VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-evaluate","text":"Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ).","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-iterator","text":"ImageIterator iterator () Updated on 2023-10-25 at 15:40:27 +0000","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Viewer.html","text":"shapeworks::Viewer 3D Viewer More... #include Public Functions Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform) Detailed Description class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape Public Functions Documentation function Viewer Viewer () function ~Viewer ~ Viewer () = default function set_renderer void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ) function get_renderer vtkSmartPointer < vtkRenderer > get_renderer () function display_shape void display_shape ( std :: shared_ptr < Shape > shape ) function clear_viewer void clear_viewer () function reset_camera void reset_camera ( std :: array < double , 3 > c ) function reset_camera void reset_camera () function set_color_series void set_color_series ( ColorMap color_series ) function set_glyph_size_and_quality void set_glyph_size_and_quality ( double size , double quality ) function get_glyph_size double get_glyph_size () function get_glyph_quality double get_glyph_quality () function set_session void set_session ( QSharedPointer < Session > session ) function get_session QSharedPointer < Session > get_session () function set_show_glyphs void set_show_glyphs ( bool show ) function set_show_surface void set_show_surface ( bool show ) function set_scale_arrows void set_scale_arrows ( bool scale ) function update_points void update_points () function update_glyph_properties void update_glyph_properties () function handle_pick int handle_pick ( int * click_pos ) function handle_ctrl_click PickResult handle_ctrl_click ( int * click_pos ) function set_selected_point void set_selected_point ( int id ) function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_loading_screen void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ) function set_color_scheme void set_color_scheme ( int i ) function handle_new_mesh void handle_new_mesh () function is_viewer_ready bool is_viewer_ready () function set_visualizer void set_visualizer ( Visualizer * visualizer ) function update_feature_range void update_feature_range ( double * range ) function update_opacities void update_opacities () function get_shape std :: shared_ptr < Shape > get_shape () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function get_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors () function get_unclipped_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors () function get_meshes MeshGroup get_meshes () function get_transform vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ) function get_landmark_transform vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ) function get_inverse_landmark_transform vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ) function get_image_transform vtkSmartPointer < vtkTransform > get_image_transform () function slice_view SliceView & slice_view () function update_image_volume void update_image_volume () function get_glyph_points vtkSmartPointer < vtkPoints > get_glyph_points () function get_alignment_transform vtkSmartPointer < vtkTransform > get_alignment_transform () function update_clipping_planes void update_clipping_planes () function get_point_placer vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer () function handle_ffc_paint void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] ) function update_actors void update_actors () function remove_scalar_bar void remove_scalar_bar () function is_ready inline bool is_ready () function get_particle_scalars vtkFloatArray * get_particle_scalars () function get_particle_poly_data vtkSmartPointer < vtkPolyData > get_particle_poly_data () function insert_compare_meshes void insert_compare_meshes () function set_scalar_visibility void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ) function is_reverse static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#shapeworksviewer","text":"3D Viewer More... #include ","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions","text":"Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#detailed-description","text":"class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer","text":"Viewer ()","title":"function Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer_1","text":"~ Viewer () = default","title":"function ~Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_renderer","text":"void set_renderer ( vtkSmartPointer < vtkRenderer > renderer )","title":"function set_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_renderer","text":"vtkSmartPointer < vtkRenderer > get_renderer ()","title":"function get_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-display_shape","text":"void display_shape ( std :: shared_ptr < Shape > shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-clear_viewer","text":"void clear_viewer ()","title":"function clear_viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera","text":"void reset_camera ( std :: array < double , 3 > c )","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera_1","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_series","text":"void set_color_series ( ColorMap color_series )","title":"function set_color_series"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_size_and_quality","text":"void set_glyph_size_and_quality ( double size , double quality )","title":"function set_glyph_size_and_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_size","text":"double get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_quality","text":"double get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_session","text":"QSharedPointer < Session > get_session ()","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show )","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_surface","text":"void set_show_surface ( bool show )","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scale_arrows","text":"void set_scale_arrows ( bool scale )","title":"function set_scale_arrows"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_points","text":"void update_points ()","title":"function update_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_pick","text":"int handle_pick ( int * click_pos )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ctrl_click","text":"PickResult handle_ctrl_click ( int * click_pos )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_selected_point","text":"void set_selected_point ( int id )","title":"function set_selected_point"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_loading_screen","text":"void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen )","title":"function set_loading_screen"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_scheme","text":"void set_color_scheme ( int i )","title":"function set_color_scheme"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_viewer_ready","text":"bool is_viewer_ready ()","title":"function is_viewer_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_feature_range","text":"void update_feature_range ( double * range )","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_opacities","text":"void update_opacities ()","title":"function update_opacities"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_shape","text":"std :: shared_ptr < Shape > get_shape ()","title":"function get_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors ()","title":"function get_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_unclipped_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors ()","title":"function get_unclipped_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_meshes","text":"MeshGroup get_meshes ()","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain )","title":"function get_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_inverse_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain )","title":"function get_inverse_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_image_transform","text":"vtkSmartPointer < vtkTransform > get_image_transform ()","title":"function get_image_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-slice_view","text":"SliceView & slice_view ()","title":"function slice_view"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_image_volume","text":"void update_image_volume ()","title":"function update_image_volume"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_points","text":"vtkSmartPointer < vtkPoints > get_glyph_points ()","title":"function get_glyph_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_alignment_transform","text":"vtkSmartPointer < vtkTransform > get_alignment_transform ()","title":"function get_alignment_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_clipping_planes","text":"void update_clipping_planes ()","title":"function update_clipping_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_point_placer","text":"vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer ()","title":"function get_point_placer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ffc_paint","text":"void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] )","title":"function handle_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_actors","text":"void update_actors ()","title":"function update_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-remove_scalar_bar","text":"void remove_scalar_bar ()","title":"function remove_scalar_bar"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_ready","text":"inline bool is_ready ()","title":"function is_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_scalars","text":"vtkFloatArray * get_particle_scalars ()","title":"function get_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_particle_poly_data ()","title":"function get_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-insert_compare_meshes","text":"void insert_compare_meshes ()","title":"function insert_compare_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scalar_visibility","text":"void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar )","title":"function set_scalar_visibility"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_reverse","text":"static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function is_reverse"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html","text":"shapeworks::Visualizer Controls display of objects in viewers. More... #include Inherits from QObject Public Slots Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed () Public Functions Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size. Detailed Description class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions. Public Slots Documentation slot update_viewer_properties void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) slot handle_feature_range_changed void handle_feature_range_changed () slot handle_image_slice_settings_changed void handle_image_slice_settings_changed () Public Functions Documentation function Visualizer Visualizer ( Preferences & prefs ) function ~Visualizer ~ Visualizer () function set_lightbox void set_lightbox ( LightboxHandle lightbox ) set the lightbox function set_session void set_session ( SessionHandle session ) set the session function set_center void set_center ( bool center ) turn automatic centering on/off function get_center bool get_center () get centering on/off function set_alignment_domain void set_alignment_domain ( int domain ) set the alignment domain function get_alignment_domain int get_alignment_domain () get the current alignment domain function set_show_glyphs void set_show_glyphs ( bool show ) turn on/off glyph display function set_show_surface void set_show_surface ( bool show ) turn on/off surface display function display_samples void display_samples () update the display using the current settings function update_samples void update_samples () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function display_sample void display_sample ( int i ) function display_shape void display_shape ( ShapeHandle shape ) function display_shapes void display_shapes ( ShapeList shapes ) function set_selected_point_one void set_selected_point_one ( int id ) function set_selected_point_two void set_selected_point_two ( int id ) function set_mean void set_mean ( const Eigen :: VectorXd & mean ) function set_mean_shape void set_mean_shape ( ShapeHandle mean_shape ) function get_mean_shape ShapeHandle get_mean_shape () function reset_camera void reset_camera () function update_lut void update_lut () function get_current_shape Particles get_current_shape () function get_current_particle_scalars vtkFloatArray * get_current_particle_scalars () function get_current_particle_poly_data vtkSmartPointer < vtkPolyData > get_current_particle_poly_data () function handle_new_mesh void handle_new_mesh () function get_current_mesh vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ) function get_current_meshes_transformed std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index ) function get_feature_map const std :: string & get_feature_map () const Get the currently selected feature map. function set_uniform_feature_range void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range. function get_uniform_feature_range bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range. function set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. function clear_viewers void clear_viewers () clear out the viewers function reset_feature_range void reset_feature_range () Reset the feature range (e.g. for a new feature) function get_feature_range double * get_feature_range () Get the current feature range. function get_feature_raw_range double * get_feature_raw_range () Get the current raw feature range. function get_feature_range_valid bool get_feature_range_valid () Return if the feature range is valid or not. function update_feature_range void update_feature_range ( double * range ) Update the feature range with a given range. function update_feature_range void update_feature_range ( double min , double max ) Update the feature range with a given range. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode. function set_opacities void set_opacities ( std :: vector < float > opacities ) Set domain opacities. function get_opacities std :: vector < float > get_opacities () Get domain opacities. function set_domain_particle_visibilities void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities. function get_domain_particle_visibilities std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. function get_current_glyph_size double get_current_glyph_size () Get the current glyph size. function handle_ctrl_click void handle_ctrl_click ( PickResult result ) Handle ctrl click. function redraw void redraw () Redraw renderers. function export_to_pixmap QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap. function get_render_size QSize get_render_size () Return render window size. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#shapeworksvisualizer","text":"Controls display of objects in viewers. More... #include Inherits from QObject","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots","text":"Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions","text":"Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#detailed-description","text":"class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-update_viewer_properties","text":"void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc)","title":"slot update_viewer_properties"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_feature_range_changed","text":"void handle_feature_range_changed ()","title":"slot handle_feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_image_slice_settings_changed","text":"void handle_image_slice_settings_changed ()","title":"slot handle_image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer","text":"Visualizer ( Preferences & prefs )","title":"function Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer_1","text":"~ Visualizer ()","title":"function ~Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_lightbox","text":"void set_lightbox ( LightboxHandle lightbox ) set the lightbox","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_session","text":"void set_session ( SessionHandle session ) set the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_center","text":"void set_center ( bool center ) turn automatic centering on/off","title":"function set_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_center","text":"bool get_center () get centering on/off","title":"function get_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_alignment_domain","text":"void set_alignment_domain ( int domain ) set the alignment domain","title":"function set_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_alignment_domain","text":"int get_alignment_domain () get the current alignment domain","title":"function get_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show ) turn on/off glyph display","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_surface","text":"void set_show_surface ( bool show ) turn on/off surface display","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_samples","text":"void display_samples () update the display using the current settings","title":"function display_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_samples","text":"void update_samples ()","title":"function update_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_sample","text":"void display_sample ( int i )","title":"function display_sample"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shape","text":"void display_shape ( ShapeHandle shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shapes","text":"void display_shapes ( ShapeList shapes )","title":"function display_shapes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_one","text":"void set_selected_point_one ( int id )","title":"function set_selected_point_one"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_two","text":"void set_selected_point_two ( int id )","title":"function set_selected_point_two"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean","text":"void set_mean ( const Eigen :: VectorXd & mean )","title":"function set_mean"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean_shape","text":"void set_mean_shape ( ShapeHandle mean_shape )","title":"function set_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_lut","text":"void update_lut ()","title":"function update_lut"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_shape","text":"Particles get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_scalars","text":"vtkFloatArray * get_current_particle_scalars ()","title":"function get_current_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_current_particle_poly_data ()","title":"function get_current_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_mesh","text":"vtkSmartPointer < vtkPolyData > get_current_mesh ( int index )","title":"function get_current_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_meshes_transformed","text":"std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index )","title":"function get_current_meshes_transformed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_map","text":"const std :: string & get_feature_map () const Get the currently selected feature map.","title":"function get_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_uniform_feature_range","text":"void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range.","title":"function set_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_uniform_feature_range","text":"bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range.","title":"function get_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"function set_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-clear_viewers","text":"void clear_viewers () clear out the viewers","title":"function clear_viewers"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_feature_range","text":"void reset_feature_range () Reset the feature range (e.g. for a new feature)","title":"function reset_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range","text":"double * get_feature_range () Get the current feature range.","title":"function get_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_raw_range","text":"double * get_feature_raw_range () Get the current raw feature range.","title":"function get_feature_raw_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range_valid","text":"bool get_feature_range_valid () Return if the feature range is valid or not.","title":"function get_feature_range_valid"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range","text":"void update_feature_range ( double * range ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range_1","text":"void update_feature_range ( double min , double max ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform_1","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_opacities","text":"void set_opacities ( std :: vector < float > opacities ) Set domain opacities.","title":"function set_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_opacities","text":"std :: vector < float > get_opacities () Get domain opacities.","title":"function get_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_domain_particle_visibilities","text":"void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities.","title":"function set_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_domain_particle_visibilities","text":"std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities.","title":"function get_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_glyph_size","text":"double get_current_glyph_size () Get the current glyph size.","title":"function get_current_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result ) Handle ctrl click.","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-redraw","text":"void redraw () Redraw renderers.","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-export_to_pixmap","text":"QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap.","title":"function export_to_pixmap"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_render_size","text":"QSize get_render_size () Return render window size. Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_render_size"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html","text":"shapeworks::VtkMeshWrapper Inherits from shapeworks::MeshWrapper Public Types Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType Public Functions Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override Public Types Documentation using PointType using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ; using GradNType using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ; using NormalType using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ; Public Functions Documentation function VtkMeshWrapper explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ) function ~VtkMeshWrapper ~ VtkMeshWrapper () = default function ComputeDistance double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override function IsWithinDistance virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk function ProjectVectorToSurfaceTangent virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh function GetPointOnMesh virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh function GetMeshLowerBound inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound function GetMeshUpperBound inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound function InvalidateParticle virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle function GetPolydata inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#shapeworksvtkmeshwrapper","text":"Inherits from shapeworks::MeshWrapper","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types","text":"Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions","text":"Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-pointtype","text":"using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-gradntype","text":"using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-normaltype","text":"using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ;","title":"using NormalType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-vectortype","text":"using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper","text":"explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 )","title":"function VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper_1","text":"~ VtkMeshWrapper () = default","title":"function ~VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-computedistance","text":"double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplenormalatpoint","text":"virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshlowerbound","text":"inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshupperbound","text":"inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-invalidateparticle","text":"virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpolydata","text":"inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html","text":"shapeworks::WheelEventForwarder Inherits from QObject Public Functions Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event) Public Functions Documentation function WheelEventForwarder explicit WheelEventForwarder ( QScrollBar * target ) function ~WheelEventForwarder ~ WheelEventForwarder () function eventFilter bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#shapeworkswheeleventforwarder","text":"Inherits from QObject","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions","text":"Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder","text":"explicit WheelEventForwarder ( QScrollBar * target )","title":"function WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder_1","text":"~ WheelEventForwarder ()","title":"function ~WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-eventfilter","text":"bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function eventFilter"},{"location":"api/Classes/classshapeworks_1_1Worker.html","text":"shapeworks::Worker Inherits from QObject Public Slots Name void process () Public Signals Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished () Public Functions Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker () Public Slots Documentation slot process void process () Public Signals Documentation signal error_message void error_message ( QString ) signal warning_message void warning_message ( QString ) signal status_message void status_message ( QString ) signal progress void progress ( int ) signal finished void finished () Public Functions Documentation function Worker Worker () function ~Worker ~ Worker () function run_job void run_job ( QSharedPointer < Job > job ) function create_worker static Worker * create_worker () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#shapeworksworker","text":"Inherits from QObject","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals","text":"Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions","text":"Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-error_message","text":"void error_message ( QString )","title":"signal error_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-warning_message","text":"void warning_message ( QString )","title":"signal warning_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-status_message","text":"void status_message ( QString )","title":"signal status_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker","text":"Worker ()","title":"function Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker_1","text":"~ Worker ()","title":"function ~Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-create_worker","text":"static Worker * create_worker () Updated on 2023-10-25 at 15:40:27 +0000","title":"function create_worker"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html","text":"shapeworks::shapeworks_exception Inherits from std::runtime_error Public Functions Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message) Public Functions Documentation function shapeworks_exception shapeworks_exception ( char const * const message ) function shapeworks_exception shapeworks_exception ( std :: string const & message ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#shapeworksshapeworks_exception","text":"Inherits from std::runtime_error","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions","text":"Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception","text":"shapeworks_exception ( char const * const message )","title":"function shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception_1","text":"shapeworks_exception ( std :: string const & message ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function shapeworks_exception"},{"location":"api/Classes/classvec2d.html","text":"vec2d Public Functions Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const Public Attributes Name double x double y Public Functions Documentation function vec2d inline vec2d () function vec2d inline vec2d ( double X , double Y ) function operator- inline vec2d operator - () function operator- inline vec2d operator - ( const vec2d & r ) function operator+ inline vec2d operator + ( const vec2d & r ) function operator* inline vec2d operator * ( double g ) function operator* inline double operator * ( const vec2d & r ) function norm inline double norm () function unit inline double unit () function operator== inline bool operator == ( const vec2d & r ) const Public Attributes Documentation variable x double x ; variable y double y ; Updated on 2023-10-25 at 15:40:28 +0000","title":"vec2d"},{"location":"api/Classes/classvec2d.html#vec2d","text":"","title":"vec2d"},{"location":"api/Classes/classvec2d.html#public-functions","text":"Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const","title":"Public Functions"},{"location":"api/Classes/classvec2d.html#public-attributes","text":"Name double x double y","title":"Public Attributes"},{"location":"api/Classes/classvec2d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec2d.html#function-vec2d","text":"inline vec2d ()","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-vec2d_1","text":"inline vec2d ( double X , double Y )","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-operator-","text":"inline vec2d operator - ()","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator-_1","text":"inline vec2d operator - ( const vec2d & r )","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator","text":"inline vec2d operator + ( const vec2d & r )","title":"function operator+"},{"location":"api/Classes/classvec2d.html#function-operator_1","text":"inline vec2d operator * ( double g )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-operator_2","text":"inline double operator * ( const vec2d & r )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-norm","text":"inline double norm ()","title":"function norm"},{"location":"api/Classes/classvec2d.html#function-unit","text":"inline double unit ()","title":"function unit"},{"location":"api/Classes/classvec2d.html#function-operator_3","text":"inline bool operator == ( const vec2d & r ) const","title":"function operator=="},{"location":"api/Classes/classvec2d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec2d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec2d.html#variable-y","text":"double y ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable y"},{"location":"api/Classes/classvec3d.html","text":"vec3d Public Functions Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize () Public Attributes Name double x double y double z Public Functions Documentation function vec3d inline vec3d () function vec3d inline vec3d ( double rx , double ry , double rz ) function vec3d inline vec3d ( const vec2d & r ) function operator+ inline vec3d operator + ( const vec3d & v ) const function operator- inline vec3d operator - ( const vec3d & v ) const function operator^ inline vec3d operator ^ ( const vec3d & v ) const function operator* inline double operator * ( const vec3d & v ) const function operator* inline vec3d operator * ( const double g ) const function operator/ inline vec3d operator / ( const double g ) const function operator+= inline const vec3d & operator += ( const vec3d & v ) function operator-= inline const vec3d & operator -= ( const vec3d & v ) function operator/= inline const vec3d & operator /= ( const double f ) function operator/= inline const vec3d & operator /= ( const int n ) function operator*= inline const vec3d & operator *= ( const double f ) function operator- inline vec3d operator - () const function Length inline double Length () const function SqrLength inline double SqrLength () const function Normalize inline vec3d & Normalize () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-25 at 15:40:28 +0000","title":"vec3d"},{"location":"api/Classes/classvec3d.html#vec3d","text":"","title":"vec3d"},{"location":"api/Classes/classvec3d.html#public-functions","text":"Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize ()","title":"Public Functions"},{"location":"api/Classes/classvec3d.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classvec3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec3d.html#function-vec3d","text":"inline vec3d ()","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_1","text":"inline vec3d ( double rx , double ry , double rz )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_2","text":"inline vec3d ( const vec2d & r )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-operator","text":"inline vec3d operator + ( const vec3d & v ) const","title":"function operator+"},{"location":"api/Classes/classvec3d.html#function-operator-","text":"inline vec3d operator - ( const vec3d & v ) const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-operator_1","text":"inline vec3d operator ^ ( const vec3d & v ) const","title":"function operator^"},{"location":"api/Classes/classvec3d.html#function-operator_2","text":"inline double operator * ( const vec3d & v ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_3","text":"inline vec3d operator * ( const double g ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_4","text":"inline vec3d operator / ( const double g ) const","title":"function operator/"},{"location":"api/Classes/classvec3d.html#function-operator_5","text":"inline const vec3d & operator += ( const vec3d & v )","title":"function operator+="},{"location":"api/Classes/classvec3d.html#function-operator-_1","text":"inline const vec3d & operator -= ( const vec3d & v )","title":"function operator-="},{"location":"api/Classes/classvec3d.html#function-operator_6","text":"inline const vec3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_7","text":"inline const vec3d & operator /= ( const int n )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_8","text":"inline const vec3d & operator *= ( const double f )","title":"function operator*="},{"location":"api/Classes/classvec3d.html#function-operator-_2","text":"inline vec3d operator - () const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-length","text":"inline double Length () const","title":"function Length"},{"location":"api/Classes/classvec3d.html#function-sqrlength","text":"inline double SqrLength () const","title":"function SqrLength"},{"location":"api/Classes/classvec3d.html#function-normalize","text":"inline vec3d & Normalize ()","title":"function Normalize"},{"location":"api/Classes/classvec3d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec3d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec3d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec3d.html#variable-z","text":"double z ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable z"},{"location":"api/Classes/classvec6d.html","text":"vec6d Public Functions Name vec6d () Public Attributes Name double x double y double z double xy double yz double xz Public Functions Documentation function vec6d inline vec6d () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable xy double xy ; variable yz double yz ; variable xz double xz ; Updated on 2023-10-25 at 15:40:28 +0000","title":"vec6d"},{"location":"api/Classes/classvec6d.html#vec6d","text":"","title":"vec6d"},{"location":"api/Classes/classvec6d.html#public-functions","text":"Name vec6d ()","title":"Public Functions"},{"location":"api/Classes/classvec6d.html#public-attributes","text":"Name double x double y double z double xy double yz double xz","title":"Public Attributes"},{"location":"api/Classes/classvec6d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec6d.html#function-vec6d","text":"inline vec6d ()","title":"function vec6d"},{"location":"api/Classes/classvec6d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec6d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec6d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec6d.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classvec6d.html#variable-xy","text":"double xy ;","title":"variable xy"},{"location":"api/Classes/classvec6d.html#variable-yz","text":"double yz ;","title":"variable yz"},{"location":"api/Classes/classvec6d.html#variable-xz","text":"double xz ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable xz"},{"location":"api/Classes/classvtkPolyDataToImageData.html","text":"vtkPolyDataToImageData Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New () Protected Functions Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( Border , unsigned int ) function vtkGetMacro vtkGetMacro ( Border , unsigned int ) function vtkSetMacro vtkSetMacro ( Spacing , double ) function vtkGetMacro vtkGetMacro ( Spacing , double ) function vtkSetMacro vtkSetMacro ( SampleDistance , double ) function vtkGetMacro vtkGetMacro ( SampleDistance , double ) function vtkSetMacro vtkSetMacro ( InitialBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( InitialBallSize , unsigned int ) function vtkSetMacro vtkSetMacro ( FinalBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( FinalBallSize , unsigned int ) function FillInputPortInformation virtual int FillInputPortInformation ( int port , vtkInformation * info ) function New static vtkPolyDataToImageData * New () Protected Functions Documentation function vtkPolyDataToImageData vtkPolyDataToImageData () function ~vtkPolyDataToImageData inline ~ vtkPolyDataToImageData () function RequestInformation virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestData virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestUpdateExtent virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-25 at 15:40:28 +0000","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#vtkpolydatatoimagedata","text":"Inherits from vtkImageAlgorithm","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions","text":"Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New ()","title":"Public Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions","text":"Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector)","title":"Protected Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtktypemacro","text":"vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro","text":"vtkSetMacro ( Border , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro","text":"vtkGetMacro ( Border , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_1","text":"vtkSetMacro ( Spacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Spacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_2","text":"vtkSetMacro ( SampleDistance , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_2","text":"vtkGetMacro ( SampleDistance , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_3","text":"vtkSetMacro ( InitialBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_3","text":"vtkGetMacro ( InitialBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_4","text":"vtkSetMacro ( FinalBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_4","text":"vtkGetMacro ( FinalBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int port , vtkInformation * info )","title":"function FillInputPortInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-new","text":"static vtkPolyDataToImageData * New ()","title":"function New"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata","text":"vtkPolyDataToImageData ()","title":"function vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata_1","text":"inline ~ vtkPolyDataToImageData ()","title":"function ~vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestupdateextent","text":"virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function RequestUpdateExtent"},{"location":"api/Classes/index_classes.html","text":"Classes class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Classes/index_classes.html#classes","text":"class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Classes/structColorScheme_1_1rgb.html","text":"ColorScheme::rgb Public Functions Name rgb () rgb (float l, float m, float n) Public Attributes Name float r float g float b Public Functions Documentation function rgb inline rgb () function rgb inline rgb ( float l , float m , float n ) Public Attributes Documentation variable r float r ; variable g float g ; variable b float b ; Updated on 2023-10-25 at 15:40:27 +0000","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#colorschemergb","text":"","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions","text":"Name rgb () rgb (float l, float m, float n)","title":"Public Functions"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes","text":"Name float r float g float b","title":"Public Attributes"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb","text":"inline rgb ()","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb_1","text":"inline rgb ( float l , float m , float n )","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-g","text":"float g ;","title":"variable g"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-b","text":"float b ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable b"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html","text":"FECVDDecimationModifier::EDGE Public Attributes Name int face int node Public Attributes Documentation variable face int face ; variable node int node ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#fecvddecimationmodifieredge","text":"","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes","text":"Name int face int node","title":"Public Attributes"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-face","text":"int face ;","title":"variable face"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-node","text":"int node ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable node"},{"location":"api/Classes/structFEFillHole_1_1FACE.html","text":"FEFillHole::FACE Public Attributes Name vec3d r int n Public Attributes Documentation variable r vec3d r ; variable n int n ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#fefillholeface","text":"","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes","text":"Name vec3d r int n","title":"Public Attributes"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-n","text":"int n ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable n"},{"location":"api/Classes/structIntersection.html","text":"Intersection Public Attributes Name vec3d point float r int m_index int m_faceIndex Public Attributes Documentation variable point vec3d point ; variable r float r ; variable m_index int m_index ; variable m_faceIndex int m_faceIndex ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Intersection"},{"location":"api/Classes/structIntersection.html#intersection","text":"","title":"Intersection"},{"location":"api/Classes/structIntersection.html#public-attributes","text":"Name vec3d point float r int m_index int m_faceIndex","title":"Public Attributes"},{"location":"api/Classes/structIntersection.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structIntersection.html#variable-point","text":"vec3d point ;","title":"variable point"},{"location":"api/Classes/structIntersection.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structIntersection.html#variable-m_index","text":"int m_index ;","title":"variable m_index"},{"location":"api/Classes/structIntersection.html#variable-m_faceindex","text":"int m_faceIndex ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_faceIndex"},{"location":"api/Classes/structQuad.html","text":"Quad Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d r3 Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable r3 vec3d r3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Quad"},{"location":"api/Classes/structQuad.html#quad","text":"","title":"Quad"},{"location":"api/Classes/structQuad.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d r3","title":"Public Attributes"},{"location":"api/Classes/structQuad.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structQuad.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structQuad.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structQuad.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structQuad.html#variable-r3","text":"vec3d r3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable r3"},{"location":"api/Classes/structRay.html","text":"Ray Public Attributes Name vec3d origin vec3d direction Public Attributes Documentation variable origin vec3d origin ; variable direction vec3d direction ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Ray"},{"location":"api/Classes/structRay.html#ray","text":"","title":"Ray"},{"location":"api/Classes/structRay.html#public-attributes","text":"Name vec3d origin vec3d direction","title":"Public Attributes"},{"location":"api/Classes/structRay.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structRay.html#variable-origin","text":"vec3d origin ;","title":"variable origin"},{"location":"api/Classes/structRay.html#variable-direction","text":"vec3d direction ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable direction"},{"location":"api/Classes/structSimilarityTransform3D.html","text":"SimilarityTransform3D Public Attributes Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation Public Attributes Documentation variable rotation vnl_matrix_fixed < double , 3 , 3 > rotation ; variable scale double scale ; variable translation vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-25 at 15:40:27 +0000","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#similaritytransform3d","text":"","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes","text":"Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation","title":"Public Attributes"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-rotation","text":"vnl_matrix_fixed < double , 3 , 3 > rotation ;","title":"variable rotation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-scale","text":"double scale ;","title":"variable scale"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-translation","text":"vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable translation"},{"location":"api/Classes/structTriangle.html","text":"Triangle Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d fn Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable fn vec3d fn ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Triangle"},{"location":"api/Classes/structTriangle.html#triangle","text":"","title":"Triangle"},{"location":"api/Classes/structTriangle.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d fn","title":"Public Attributes"},{"location":"api/Classes/structTriangle.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structTriangle.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structTriangle.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structTriangle.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structTriangle.html#variable-fn","text":"vec3d fn ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable fn"},{"location":"api/Classes/structVTKEXPORT.html","text":"VTKEXPORT Public Attributes Name bool bshellthick bool bscalar_data Public Attributes Documentation variable bshellthick bool bshellthick ; variable bscalar_data bool bscalar_data ; Updated on 2023-10-25 at 15:40:27 +0000","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#vtkexport","text":"","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes","text":"Name bool bshellthick bool bscalar_data","title":"Public Attributes"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structVTKEXPORT.html#variable-bshellthick","text":"bool bshellthick ;","title":"variable bshellthick"},{"location":"api/Classes/structVTKEXPORT.html#variable-bscalar_data","text":"bool bscalar_data ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable bscalar_data"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html","text":"fmt::formatter< QString > Public Functions Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const Public Functions Documentation function parse inline constexpr auto parse ( format_parse_context & ctx ) function format template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#fmtformatter-qstring","text":"","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions","text":"Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const","title":"Public Functions"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-parse","text":"inline constexpr auto parse ( format_parse_context & ctx )","title":"function parse"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-format","text":"template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"function format"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html","text":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood Public Functions Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_) Public Attributes Name ParticlePointIndexPair pi_pair double weight double distance int dom Public Functions Documentation function CrossDomainNeighborhood inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) Public Attributes Documentation variable pi_pair ParticlePointIndexPair pi_pair ; variable weight double weight ; variable distance double distance ; variable dom int dom ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#shapeworkscurvaturesamplingfunctioncrossdomainneighborhood","text":"","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions","text":"Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes","text":"Name ParticlePointIndexPair pi_pair double weight double distance int dom","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#function-crossdomainneighborhood","text":"inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ )","title":"function CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-pi_pair","text":"ParticlePointIndexPair pi_pair ;","title":"variable pi_pair"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-weight","text":"double weight ;","title":"variable weight"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-distance","text":"double distance ;","title":"variable distance"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-dom","text":"int dom ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable dom"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html","text":"shapeworks::MeshGeoEntry Public Types Name enum Mode Public Functions Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target) Public Attributes Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full Public Types Documentation enum Mode Enumerator Value Description Full Partial Public Functions Documentation function clear inline void clear () function is_full_mode inline bool is_full_mode () const function update_max_dist inline void update_max_dist () function has_entry inline bool has_entry ( int target ) Public Attributes Documentation variable mode Mode mode { Mode :: Partial }; variable max_dist double max_dist { 0.0 }; variable data_partial robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; variable data_full std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#shapeworksmeshgeoentry","text":"","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types","text":"Name enum Mode","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions","text":"Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes","text":"Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#enum-mode","text":"Enumerator Value Description Full Partial","title":"enum Mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-is_full_mode","text":"inline bool is_full_mode () const","title":"function is_full_mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-update_max_dist","text":"inline void update_max_dist ()","title":"function update_max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-has_entry","text":"inline bool has_entry ( int target )","title":"function has_entry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-mode","text":"Mode mode { Mode :: Partial };","title":"variable mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-max_dist","text":"double max_dist { 0.0 };","title":"variable max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_partial","text":"robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ;","title":"variable data_partial"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_full","text":"std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable data_full"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html","text":"shapeworks::MultiVariateNormalRandom Public Functions Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() () Public Attributes Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist Public Functions Documentation function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) function operator() inline Eigen :: MatrixXd operator ()() Public Attributes Documentation variable mean Eigen :: VectorXd mean ; variable transform Eigen :: MatrixXd transform ; variable gen boost :: mt19937 gen { 42 }; variable dist boost :: normal_distribution dist ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#shapeworksmultivariatenormalrandom","text":"","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions","text":"Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes","text":"Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom","text":"inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom_1","text":"inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-operator","text":"inline Eigen :: MatrixXd operator ()()","title":"function operator()"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-mean","text":"Eigen :: VectorXd mean ;","title":"variable mean"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-transform","text":"Eigen :: MatrixXd transform ;","title":"variable transform"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-gen","text":"boost :: mt19937 gen { 42 };","title":"variable gen"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-dist","text":"boost :: normal_distribution dist ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html","text":"shapeworks::Observer::DefinedCallbacksStruct More... #include Public Functions Name DefinedCallbacksStruct () Public Attributes Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent Detailed Description struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register. Public Functions Documentation function DefinedCallbacksStruct inline DefinedCallbacksStruct () Public Attributes Documentation variable DomainAddEvent bool DomainAddEvent ; variable TransformSetEvent bool TransformSetEvent ; variable PrefixTransformSetEvent bool PrefixTransformSetEvent ; variable NeighborhoodSetEvent bool NeighborhoodSetEvent ; variable PositionSetEvent bool PositionSetEvent ; variable PositionAddEvent bool PositionAddEvent ; variable PositionRemoveEvent bool PositionRemoveEvent ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#shapeworksobserverdefinedcallbacksstruct","text":"More... #include ","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions","text":"Name DefinedCallbacksStruct ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes","text":"Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#detailed-description","text":"struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#function-definedcallbacksstruct","text":"inline DefinedCallbacksStruct ()","title":"function DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-domainaddevent","text":"bool DomainAddEvent ;","title":"variable DomainAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-transformsetevent","text":"bool TransformSetEvent ;","title":"variable TransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-prefixtransformsetevent","text":"bool PrefixTransformSetEvent ;","title":"variable PrefixTransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-neighborhoodsetevent","text":"bool NeighborhoodSetEvent ;","title":"variable NeighborhoodSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionsetevent","text":"bool PositionSetEvent ;","title":"variable PositionSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionaddevent","text":"bool PositionAddEvent ;","title":"variable PositionAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionremoveevent","text":"bool PositionRemoveEvent ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable PositionRemoveEvent"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html","text":"shapeworks::ParticlePointIndexPair More... #include Public Types Name typedef itk::Point< double, 3 > PointType Public Functions Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o) Public Attributes Name PointType Point unsigned int Index Detailed Description struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h] Public Types Documentation typedef PointType typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ; Public Functions Documentation function ParticlePointIndexPair inline ParticlePointIndexPair () function ParticlePointIndexPair inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) function ParticlePointIndexPair inline ParticlePointIndexPair ( const ParticlePointIndexPair & o ) function operator= inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) Public Attributes Documentation variable Point PointType Point ; variable Index unsigned int Index ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#shapeworksparticlepointindexpair","text":"More... #include ","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types","text":"Name typedef itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions","text":"Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes","text":"Name PointType Point unsigned int Index","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#detailed-description","text":"struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h]","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#typedef-pointtype","text":"typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair","text":"inline ParticlePointIndexPair ()","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_1","text":"inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_2","text":"inline ParticlePointIndexPair ( const ParticlePointIndexPair & o )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-operator","text":"inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-point","text":"PointType Point ;","title":"variable Point"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-index","text":"unsigned int Index ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable Index"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html","text":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair More... #include Public Types Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType Public Functions Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o) Public Attributes Name IteratorType Iterator NodePointerType NodePointer Detailed Description struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values. Public Types Documentation typedef NodePointerType typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ; typedef IteratorType typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ; Public Functions Documentation function IteratorNodePair inline IteratorNodePair () function ~IteratorNodePair inline ~ IteratorNodePair () function IteratorNodePair inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) function IteratorNodePair inline IteratorNodePair ( const IteratorNodePair & o ) function operator= inline const IteratorNodePair & operator = ( const IteratorNodePair & o ) Public Attributes Documentation variable Iterator IteratorType Iterator ; variable NodePointer NodePointerType NodePointer ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#shapeworksparticleregionneighborhooditeratornodepair","text":"More... #include ","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types","text":"Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions","text":"Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes","text":"Name IteratorType Iterator NodePointerType NodePointer","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#detailed-description","text":"struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-nodepointertype","text":"typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ;","title":"typedef NodePointerType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-iteratortype","text":"typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ;","title":"typedef IteratorType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair","text":"inline IteratorNodePair ()","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_1","text":"inline ~ IteratorNodePair ()","title":"function ~IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_2","text":"inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_3","text":"inline IteratorNodePair ( const IteratorNodePair & o )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-operator","text":"inline const IteratorNodePair & operator = ( const IteratorNodePair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-iterator","text":"IteratorType Iterator ;","title":"variable Iterator"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-nodepointer","text":"NodePointerType NodePointer ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable NodePointer"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html","text":"shapeworks::Reconstruction Public Attributes Name double dist int shapeIdx Eigen::MatrixXd rec Public Attributes Documentation variable dist double dist ; variable shapeIdx int shapeIdx ; variable rec Eigen :: MatrixXd rec ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#shapeworksreconstruction","text":"","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes","text":"Name double dist int shapeIdx Eigen::MatrixXd rec","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-dist","text":"double dist ;","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-shapeidx","text":"int shapeIdx ;","title":"variable shapeIdx"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-rec","text":"Eigen :: MatrixXd rec ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable rec"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html","text":"shapeworks::Sampler::CuttingPlaneType More... #include Public Attributes Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c Detailed Description struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information Public Attributes Documentation variable a vnl_vector_fixed < double , 3 > a ; variable b vnl_vector_fixed < double , 3 > b ; variable c vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#shapeworkssamplercuttingplanetype","text":"More... #include ","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes","text":"Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#detailed-description","text":"struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-a","text":"vnl_vector_fixed < double , 3 > a ;","title":"variable a"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-b","text":"vnl_vector_fixed < double , 3 > b ;","title":"variable b"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-c","text":"vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html","text":"shapeworks::Sampler::SphereType More... #include Public Attributes Name vnl_vector_fixed< double, Dimension > center double radius Detailed Description struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information Public Attributes Documentation variable center vnl_vector_fixed < double , Dimension > center ; variable radius double radius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#shapeworkssamplerspheretype","text":"More... #include ","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes","text":"Name vnl_vector_fixed< double, Dimension > center double radius","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#detailed-description","text":"struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-center","text":"vnl_vector_fixed < double , Dimension > center ;","title":"variable center"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-radius","text":"double radius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable radius"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html","text":"shapeworks::SharedCommandData Public Functions Name bool validImage () const bool validMesh () const bool validParticleSystem () const Public Attributes Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field Public Functions Documentation function validImage inline bool validImage () const function validMesh inline bool validMesh () const function validParticleSystem inline bool validParticleSystem () const Public Attributes Documentation variable image Image image ; variable mesh std :: unique_ptr < Mesh > mesh ; variable region PhysicalRegion region ; variable particleSystem ParticleSystemEvaluation particleSystem ; variable field Field field ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#shapeworkssharedcommanddata","text":"","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions","text":"Name bool validImage () const bool validMesh () const bool validParticleSystem () const","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes","text":"Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validimage","text":"inline bool validImage () const","title":"function validImage"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validmesh","text":"inline bool validMesh () const","title":"function validMesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validparticlesystem","text":"inline bool validParticleSystem () const","title":"function validParticleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-image","text":"Image image ;","title":"variable image"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-mesh","text":"std :: unique_ptr < Mesh > mesh ;","title":"variable mesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-region","text":"PhysicalRegion region ;","title":"variable region"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-particlesystem","text":"ParticleSystemEvaluation particleSystem ;","title":"variable particleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-field","text":"Field field ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable field"},{"location":"api/Classes/structshapeworks_1_1powstruct.html","text":"shapeworks::powstruct More... #include Public Attributes Name const int c Detailed Description template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time. Public Attributes Documentation variable c static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#shapeworkspowstruct","text":"More... #include ","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#detailed-description","text":"template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#variable-c","text":"static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html","text":"shapeworks::powstruct< a, 0 > More... Public Attributes Name const int c Detailed Description template < int a > struct shapeworks :: powstruct < a , 0 > ; Public Attributes Documentation variable c static const int c = 1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#shapeworkspowstruct-a-0","text":"More...","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#detailed-description","text":"template < int a > struct shapeworks :: powstruct < a , 0 > ;","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#variable-c","text":"static const int c = 1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable c"},{"location":"api/Files/AnalysisTool_8h.html","text":"Studio/Analysis/AnalysisTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisTool Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#studioanalysisanalysistoolh","text":"","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisTool_8h.html#classes","text":"Name class shapeworks::AnalysisTool","title":"Classes"},{"location":"api/Files/AnalysisTool_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/AnalysisUtils_8h.html","text":"Studio/Utils/AnalysisUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisUtils Source code #pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#studioutilsanalysisutilsh","text":"","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisUtils_8h.html#classes","text":"Name class shapeworks::AnalysisUtils","title":"Classes"},{"location":"api/Files/AnalysisUtils_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Analyze_8h.html","text":"Libs/Analyze/Analyze.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Analyze High level analyze API. Source code #pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#libsanalyzeanalyzeh","text":"","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Analyze_8h.html#classes","text":"Name class shapeworks::Analyze High level analyze API.","title":"Classes"},{"location":"api/Files/Analyze_8h.html#source-code","text":"#pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ColorMap_8h.html","text":"Studio/Visualization/ColorMap.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ColorMap class shapeworks::ColorMaps Source code #pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#studiovisualizationcolormaph","text":"","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ColorMap_8h.html#classes","text":"Name class shapeworks::ColorMap class shapeworks::ColorMaps","title":"Classes"},{"location":"api/Files/ColorMap_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ColorSchemes_8h.html","text":"Studio/Visualization/ColorSchemes.h Classes Name class ColorScheme struct ColorScheme::rgb class ColorSchemes Source code #pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#studiovisualizationcolorschemesh","text":"","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#classes","text":"Name class ColorScheme struct ColorScheme::rgb class ColorSchemes","title":"Classes"},{"location":"api/Files/ColorSchemes_8h.html#source-code","text":"#pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Command_8h.html","text":"Applications/shapeworks/Command.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand Functions Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd) Defines Name COMMAND_DECLARE (CommandName, CommandType) Functions Documentation function operator<< std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ) Macros Documentation define COMMAND_DECLARE #define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ } Source code #pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#applicationsshapeworkscommandh","text":"","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Command_8h.html#classes","text":"Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand","title":"Classes"},{"location":"api/Files/Command_8h.html#functions","text":"Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd)","title":"Functions"},{"location":"api/Files/Command_8h.html#defines","text":"Name COMMAND_DECLARE (CommandName, CommandType)","title":"Defines"},{"location":"api/Files/Command_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Command_8h.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd )","title":"function operator<<"},{"location":"api/Files/Command_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Command_8h.html#define-command_declare","text":"#define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ }","title":"define COMMAND_DECLARE"},{"location":"api/Files/Command_8h.html#source-code","text":"#pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Commands_8h.html","text":"Applications/shapeworks/Commands.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#applicationsshapeworkscommandsh","text":"","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Commands_8h.html#source-code","text":"#pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CompareWidget_8h.html","text":"Studio/Interface/CompareWidget.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareWidget Source code #pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#studiointerfacecomparewidgeth","text":"","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CompareWidget_8h.html#classes","text":"Name class shapeworks::CompareWidget","title":"Classes"},{"location":"api/Files/CompareWidget_8h.html#source-code","text":"#pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ConstraintType_8h.html","text":"Libs/Optimize/Constraints/ConstraintType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#libsoptimizeconstraintsconstrainttypeh","text":"","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ConstraintType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/ConstraintType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/ConstraintType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/ConstraintType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Constraint_8h.html","text":"Libs/Optimize/Constraints/Constraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraint Source code #pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#libsoptimizeconstraintsconstrainth","text":"","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraint_8h.html#classes","text":"Name class shapeworks::Constraint","title":"Classes"},{"location":"api/Files/Constraint_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Constraints_8h.html","text":"Libs/Optimize/Constraints/Constraints.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraints Source code #pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#libsoptimizeconstraintsconstraintsh","text":"","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraints_8h.html#classes","text":"Name class shapeworks::Constraints","title":"Classes"},{"location":"api/Files/Constraints_8h.html#source-code","text":"#pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ContourDomain_8h.html","text":"Libs/Optimize/Domain/ContourDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ContourDomain Source code #pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#libsoptimizedomaincontourdomainh","text":"","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ContourDomain_8h.html#classes","text":"Name class shapeworks::ContourDomain","title":"Classes"},{"location":"api/Files/ContourDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/CorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CorrespondenceFunction Correspondence term. Source code #pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#libsoptimizefunctioncorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::CorrespondenceFunction Correspondence term.","title":"Classes"},{"location":"api/Files/CorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceMode_8h.html","text":"Libs/Optimize/CorrespondenceMode.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#libsoptimizecorrespondencemodeh","text":"","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceMode_8h.html#source-code","text":"#pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CurvatureSamplingFunction_8h.html","text":"Libs/Optimize/Function/CurvatureSamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#libsoptimizefunctioncurvaturesamplingfunctionh","text":"","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#classes","text":"Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used.","title":"Classes"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CustomSlider_8h.html","text":"Studio/Interface/CustomSlider.h Classes Name class CustomSlider Source code #pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#studiointerfacecustomsliderh","text":"","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#classes","text":"Name class CustomSlider","title":"Classes"},{"location":"api/Files/CustomSlider_8h.html#source-code","text":"#pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html","text":"Libs/Analyze/CustomSurfaceReconstructionFilter.h Classes Name class CustomSurfaceReconstructionFilter Source code /*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#libsanalyzecustomsurfacereconstructionfilterh","text":"","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#classes","text":"Name class CustomSurfaceReconstructionFilter","title":"Classes"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#source-code","text":"/*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DataTool_8h.html","text":"Studio/Data/DataTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DataTool Source code #pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#studiodatadatatoolh","text":"","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DataTool_8h.html#classes","text":"Name class shapeworks::DataTool","title":"Classes"},{"location":"api/Files/DataTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DeepSSMJob_8h.html","text":"Studio/DeepSSM/DeepSSMJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. Source code #pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#studiodeepssmdeepssmjobh","text":"","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMJob_8h.html#classes","text":"Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM.","title":"Classes"},{"location":"api/Files/DeepSSMJob_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DeepSSMParameters_8h.html","text":"Studio/DeepSSM/DeepSSMParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMParameters Source code #pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#studiodeepssmdeepssmparametersh","text":"","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMParameters_8h.html#classes","text":"Name class shapeworks::DeepSSMParameters","title":"Classes"},{"location":"api/Files/DeepSSMParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DeepSSMTool_8h.html","text":"Studio/DeepSSM/DeepSSMTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMTool Source code #pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#studiodeepssmdeepssmtoolh","text":"","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMTool_8h.html#classes","text":"Name class shapeworks::DeepSSMTool","title":"Classes"},{"location":"api/Files/DeepSSMTool_8h.html#source-code","text":"#pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DisentangledCorrespondenceFunction Source code #pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#libsoptimizefunctiondisentangledcorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::DisentangledCorrespondenceFunction","title":"Classes"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DomainType_8h.html","text":"Libs/Optimize/Domain/DomainType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#libsoptimizedomaindomaintypeh","text":"","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DomainType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/DomainType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/DomainType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/DomainType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DualVectorFunction_8h.html","text":"Libs/Optimize/Function/DualVectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DualVectorFunction Source code #pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#libsoptimizefunctiondualvectorfunctionh","text":"","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DualVectorFunction_8h.html#classes","text":"Name class shapeworks::DualVectorFunction","title":"Classes"},{"location":"api/Files/DualVectorFunction_8h.html#source-code","text":"#pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/EigenUtils_8h.html","text":"Libs/Utils/EigenUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::EigenUtils Source code #pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#libsutilseigenutilsh","text":"","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EigenUtils_8h.html#classes","text":"Name class shapeworks::EigenUtils","title":"Classes"},{"location":"api/Files/EigenUtils_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/EvaluationUtil_8h.html","text":"Libs/Particles/EvaluationUtil.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction Source code #pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#libsparticlesevaluationutilh","text":"","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EvaluationUtil_8h.html#classes","text":"Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction","title":"Classes"},{"location":"api/Files/EvaluationUtil_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectReader_8h.html","text":"Libs/Project/ExcelProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectReader Excel file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#libsprojectexcelprojectreaderh","text":"","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectReader_8h.html#classes","text":"Name class shapeworks::ExcelProjectReader Excel file format reader for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectWriter_8h.html","text":"Libs/Project/ExcelProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectWriter Excel file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#libsprojectexcelprojectwriterh","text":"","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectWriter_8h.html#classes","text":"Name class shapeworks::ExcelProjectWriter Excel file format writer for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Exception_8h.html","text":"Libs/Common/Exception.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::shapeworks_exception Source code #pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#libscommonexceptionh","text":"","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Exception_8h.html#classes","text":"Name class shapeworks::shapeworks_exception","title":"Classes"},{"location":"api/Files/Exception_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Executable_8h.html","text":"Applications/shapeworks/Executable.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Executable Source code #pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#applicationsshapeworksexecutableh","text":"","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Executable_8h.html#classes","text":"Name class shapeworks::Executable","title":"Classes"},{"location":"api/Files/Executable_8h.html#source-code","text":"#pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExportImageDialog_8h.html","text":"Studio/Interface/ExportImageDialog.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportImageDialog Source code #pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#studiointerfaceexportimagedialogh","text":"","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportImageDialog_8h.html#classes","text":"Name class shapeworks::ExportImageDialog","title":"Classes"},{"location":"api/Files/ExportImageDialog_8h.html#source-code","text":"#pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExportUtils_8h.html","text":"Studio/Data/ExportUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportUtils Export utilities for Studio. Source code #include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#studiodataexportutilsh","text":"","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportUtils_8h.html#classes","text":"Name class shapeworks::ExportUtils Export utilities for Studio.","title":"Classes"},{"location":"api/Files/ExportUtils_8h.html#source-code","text":"#include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEAreaCoverage_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Namespaces Name std Classes Name class FEAreaCoverage Source code #pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#libsmeshpreviewmeshqcfeareacoverageh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#namespaces","text":"Name std","title":"Namespaces"},{"location":"api/Files/FEAreaCoverage_8h.html#classes","text":"Name class FEAreaCoverage","title":"Classes"},{"location":"api/Files/FEAreaCoverage_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEAutoMesher_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Classes Name class FEAutoMesher Source code #pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#libsmeshpreviewmeshqcfeautomesherh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#classes","text":"Name class FEAutoMesher","title":"Classes"},{"location":"api/Files/FEAutoMesher_8h.html#source-code","text":"#pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FECVDDecimationModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Classes Name class FECVDDecimationModifier Source code #pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#libsmeshpreviewmeshqcfecvddecimationmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#classes","text":"Name class FECVDDecimationModifier","title":"Classes"},{"location":"api/Files/FECVDDecimationModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FECoreMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h Classes Name class FECoreMesh Source code #pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#libsmeshpreviewmeshqcfecoremeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#classes","text":"Name class FECoreMesh","title":"Classes"},{"location":"api/Files/FECoreMesh_8h.html#source-code","text":"#pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEElement_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEElement.h Classes Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement Defines Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM Macros Documentation define FE_VISIBLE #define FE_VISIBLE 0x01 define FE_SELECTED #define FE_SELECTED 0x02 define FE_HEX8 #define FE_HEX8 1 define FE_TET4 #define FE_TET4 2 define FE_PENTA6 #define FE_PENTA6 3 define FE_QUAD4 #define FE_QUAD4 4 define FE_TRI3 #define FE_TRI3 5 define FE_BEAM2 #define FE_BEAM2 6 define FE_HEX20 #define FE_HEX20 7 define FE_QUAD8 #define FE_QUAD8 8 define FE_BEAM3 #define FE_BEAM3 9 define FE_TET10 #define FE_TET10 10 define FE_TRI6 #define FE_TRI6 11 define FE_TET15 #define FE_TET15 12 define FE_HEX27 #define FE_HEX27 13 define MAX_ELEM #define MAX_ELEM 13 Source code // FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#libsmeshpreviewmeshqcfeelementh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#classes","text":"Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement","title":"Classes"},{"location":"api/Files/FEElement_8h.html#defines","text":"Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM","title":"Defines"},{"location":"api/Files/FEElement_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/FEElement_8h.html#define-fe_visible","text":"#define FE_VISIBLE 0x01","title":"define FE_VISIBLE"},{"location":"api/Files/FEElement_8h.html#define-fe_selected","text":"#define FE_SELECTED 0x02","title":"define FE_SELECTED"},{"location":"api/Files/FEElement_8h.html#define-fe_hex8","text":"#define FE_HEX8 1","title":"define FE_HEX8"},{"location":"api/Files/FEElement_8h.html#define-fe_tet4","text":"#define FE_TET4 2","title":"define FE_TET4"},{"location":"api/Files/FEElement_8h.html#define-fe_penta6","text":"#define FE_PENTA6 3","title":"define FE_PENTA6"},{"location":"api/Files/FEElement_8h.html#define-fe_quad4","text":"#define FE_QUAD4 4","title":"define FE_QUAD4"},{"location":"api/Files/FEElement_8h.html#define-fe_tri3","text":"#define FE_TRI3 5","title":"define FE_TRI3"},{"location":"api/Files/FEElement_8h.html#define-fe_beam2","text":"#define FE_BEAM2 6","title":"define FE_BEAM2"},{"location":"api/Files/FEElement_8h.html#define-fe_hex20","text":"#define FE_HEX20 7","title":"define FE_HEX20"},{"location":"api/Files/FEElement_8h.html#define-fe_quad8","text":"#define FE_QUAD8 8","title":"define FE_QUAD8"},{"location":"api/Files/FEElement_8h.html#define-fe_beam3","text":"#define FE_BEAM3 9","title":"define FE_BEAM3"},{"location":"api/Files/FEElement_8h.html#define-fe_tet10","text":"#define FE_TET10 10","title":"define FE_TET10"},{"location":"api/Files/FEElement_8h.html#define-fe_tri6","text":"#define FE_TRI6 11","title":"define FE_TRI6"},{"location":"api/Files/FEElement_8h.html#define-fe_tet15","text":"#define FE_TET15 12","title":"define FE_TET15"},{"location":"api/Files/FEElement_8h.html#define-fe_hex27","text":"#define FE_HEX27 13","title":"define FE_HEX27"},{"location":"api/Files/FEElement_8h.html#define-max_elem","text":"#define MAX_ELEM 13","title":"define MAX_ELEM"},{"location":"api/Files/FEElement_8h.html#source-code","text":"// FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEFillHole_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFillHole.h Classes Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#libsmeshpreviewmeshqcfefillholeh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#classes","text":"Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE","title":"Classes"},{"location":"api/Files/FEFillHole_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEFixMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h Classes Name class FEFixMesh Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#libsmeshpreviewmeshqcfefixmeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#classes","text":"Name class FEFixMesh","title":"Classes"},{"location":"api/Files/FEFixMesh_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Classes Name class FEMeshSmoothingModifier Source code #pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#libsmeshpreviewmeshqcfemeshsmoothingmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#classes","text":"Name class FEMeshSmoothingModifier","title":"Classes"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMesh.h Classes Name class FEElementData class FEMesh Functions Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3]) Attributes Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15 Functions Documentation function bias double bias ( double b , double x ) function gain double gain ( double g , double x ) function area_triangle double area_triangle ( vec3d r [ 3 ] ) Attributes Documentation variable FTHEX8 int FTHEX8 ; variable FTHEX20 int FTHEX20 ; variable FTHEX27 int FTHEX27 ; variable FTPENTA int FTPENTA ; variable FTTET int FTTET ; variable FTTET10 int FTTET10 ; variable FTTET15 int FTTET15 ; Source code // FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#libsmeshpreviewmeshqcfemeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#classes","text":"Name class FEElementData class FEMesh","title":"Classes"},{"location":"api/Files/FEMesh_8h.html#functions","text":"Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3])","title":"Functions"},{"location":"api/Files/FEMesh_8h.html#attributes","text":"Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15","title":"Attributes"},{"location":"api/Files/FEMesh_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/FEMesh_8h.html#function-bias","text":"double bias ( double b , double x )","title":"function bias"},{"location":"api/Files/FEMesh_8h.html#function-gain","text":"double gain ( double g , double x )","title":"function gain"},{"location":"api/Files/FEMesh_8h.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Files/FEMesh_8h.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Files/FEMesh_8h.html#variable-fthex8","text":"int FTHEX8 ;","title":"variable FTHEX8"},{"location":"api/Files/FEMesh_8h.html#variable-fthex20","text":"int FTHEX20 ;","title":"variable FTHEX20"},{"location":"api/Files/FEMesh_8h.html#variable-fthex27","text":"int FTHEX27 ;","title":"variable FTHEX27"},{"location":"api/Files/FEMesh_8h.html#variable-ftpenta","text":"int FTPENTA ;","title":"variable FTPENTA"},{"location":"api/Files/FEMesh_8h.html#variable-fttet","text":"int FTTET ;","title":"variable FTTET"},{"location":"api/Files/FEMesh_8h.html#variable-fttet10","text":"int FTTET10 ;","title":"variable FTTET10"},{"location":"api/Files/FEMesh_8h.html#variable-fttet15","text":"int FTTET15 ;","title":"variable FTTET15"},{"location":"api/Files/FEMesh_8h.html#source-code","text":"// FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FENodeElementList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h Classes Name class FENodeElementList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#libsmeshpreviewmeshqcfenodeelementlisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#classes","text":"Name class FENodeElementList","title":"Classes"},{"location":"api/Files/FENodeElementList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FENodeFaceList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Classes Name class FENodeFaceList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#libsmeshpreviewmeshqcfenodefacelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#classes","text":"Name class FENodeFaceList","title":"Classes"},{"location":"api/Files/FENodeFaceList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FENodeNodeList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Classes Name class FENodeNodeList Source code #pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#libsmeshpreviewmeshqcfenodenodelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#classes","text":"Name class FENodeNodeList","title":"Classes"},{"location":"api/Files/FENodeNodeList_8h.html#source-code","text":"#pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEVTKExport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h Classes Name struct VTKEXPORT class FEVTKExport Source code #pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#libsmeshpreviewmeshqcfevtkexporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#classes","text":"Name struct VTKEXPORT class FEVTKExport","title":"Classes"},{"location":"api/Files/FEVTKExport_8h.html#source-code","text":"#pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEVTKImport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h Classes Name class FEVTKimport Source code #pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#libsmeshpreviewmeshqcfevtkimporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#classes","text":"Name class FEVTKimport","title":"Classes"},{"location":"api/Files/FEVTKImport_8h.html#source-code","text":"#pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FreeFormConstraint_8h.html","text":"Libs/Optimize/Constraints/FreeFormConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::FreeFormConstraint Source code #pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#libsoptimizeconstraintsfreeformconstrainth","text":"","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/FreeFormConstraint_8h.html#classes","text":"Name class shapeworks::FreeFormConstraint","title":"Classes"},{"location":"api/Files/FreeFormConstraint_8h.html#source-code","text":"#pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GenericContainerArray_8h.html","text":"Libs/Optimize/Container/GenericContainerArray.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Source code #pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#libsoptimizecontainergenericcontainerarrayh","text":"","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainerArray_8h.html#classes","text":"Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Classes"},{"location":"api/Files/GenericContainerArray_8h.html#source-code","text":"#pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GenericContainer_8h.html","text":"Libs/Optimize/Container/GenericContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) Source code #pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#libsoptimizecontainergenericcontainerh","text":"","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainer_8h.html#classes","text":"Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?)","title":"Classes"},{"location":"api/Files/GenericContainer_8h.html#source-code","text":"#pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GradientDescentOptimizer_8h.html","text":"Libs/Optimize/GradientDescentOptimizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GradientDescentOptimizer Source code #pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#libsoptimizegradientdescentoptimizerh","text":"","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GradientDescentOptimizer_8h.html#classes","text":"Name class shapeworks::GradientDescentOptimizer","title":"Classes"},{"location":"api/Files/GradientDescentOptimizer_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GroomParameters_8h.html","text":"Libs/Groom/GroomParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomParameters Source code #pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#libsgroomgroomparametersh","text":"","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomParameters_8h.html#classes","text":"Name class shapeworks::GroomParameters","title":"Classes"},{"location":"api/Files/GroomParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GroomTool_8h.html","text":"Studio/Groom/GroomTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomTool Source code #pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#studiogroomgroomtoolh","text":"","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomTool_8h.html#classes","text":"Name class shapeworks::GroomTool","title":"Classes"},{"location":"api/Files/GroomTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Groom_8h.html","text":"Libs/Groom/Groom.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Groom High level groom API. Source code #pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#libsgroomgroomh","text":"","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Groom_8h.html#classes","text":"Name class shapeworks::Groom High level groom API.","title":"Classes"},{"location":"api/Files/Groom_8h.html#source-code","text":"#pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GroupPvalueJob_8h.html","text":"Studio/Job/GroupPvalueJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroupPvalueJob Source code #pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#studiojobgrouppvaluejobh","text":"","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroupPvalueJob_8h.html#classes","text":"Name class shapeworks::GroupPvalueJob","title":"Classes"},{"location":"api/Files/GroupPvalueJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithCurvature_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithCurvature.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithCurvature Source code #pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#libsoptimizedomainimagedomainwithcurvatureh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#classes","text":"Name class shapeworks::ImageDomainWithCurvature","title":"Classes"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradN_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradN.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradN Source code #pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#libsoptimizedomainimagedomainwithgradnh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradN_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradN","title":"Classes"},{"location":"api/Files/ImageDomainWithGradN_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradients_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradients.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradients Source code #pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#libsoptimizedomainimagedomainwithgradientsh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradients_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradients","title":"Classes"},{"location":"api/Files/ImageDomainWithGradients_8h.html#source-code","text":"#pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomain_8h.html","text":"Libs/Optimize/Domain/ImageDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomain Source code #pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#libsoptimizedomainimagedomainh","text":"","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomain_8h.html#classes","text":"Name class shapeworks::ImageDomain","title":"Classes"},{"location":"api/Files/ImageDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageLabel_8h.html","text":"Studio/Utils/ImageLabel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images. Source code #pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#studioutilsimagelabelh","text":"","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageLabel_8h.html#classes","text":"Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images.","title":"Classes"},{"location":"api/Files/ImageLabel_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageUtils_8h.html","text":"Libs/Image/ImageUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageUtils Helper functions for image. Source code #pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#libsimageimageutilsh","text":"","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageUtils_8h.html#classes","text":"Name class shapeworks::ImageUtils Helper functions for image.","title":"Classes"},{"location":"api/Files/ImageUtils_8h.html#source-code","text":"#pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Image_8h.html","text":"Libs/Image/Image.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Image Source code #pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#libsimageimageh","text":"","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Image_8h.html#classes","text":"Name class shapeworks::Image","title":"Classes"},{"location":"api/Files/Image_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html","text":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImplicitSurfaceDomain Source code #pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#libsoptimizedomainimplicitsurfacedomainh","text":"","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#classes","text":"Name class shapeworks::ImplicitSurfaceDomain","title":"Classes"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Intersect_8h.html","text":"Libs/Mesh/PreviewMeshQC/Intersect.h Classes Name struct Ray struct Intersection struct Triangle struct Quad Functions Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) Functions Documentation function IntersectTriangle bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ) function IntersectQuad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) function FastIntersectQuad bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) Source code #pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#libsmeshpreviewmeshqcintersecth","text":"","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#classes","text":"Name struct Ray struct Intersection struct Triangle struct Quad","title":"Classes"},{"location":"api/Files/Intersect_8h.html#functions","text":"Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q)","title":"Functions"},{"location":"api/Files/Intersect_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Intersect_8h.html#function-intersecttriangle","text":"bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true )","title":"function IntersectTriangle"},{"location":"api/Files/Intersect_8h.html#function-intersectquad","text":"bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function IntersectQuad"},{"location":"api/Files/Intersect_8h.html#function-fastintersectquad","text":"bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function FastIntersectQuad"},{"location":"api/Files/Intersect_8h.html#source-code","text":"#pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ItkToVtk_8h.html","text":"Libs/Analyze/ItkToVtk.h Functions Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer) Functions Documentation function ConnectPipelines template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter. Source code #pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#libsanalyzeitktovtkh","text":"","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#functions","text":"Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer)","title":"Functions"},{"location":"api/Files/ItkToVtk_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ItkToVtk_8h.html#function-connectpipelines","text":"template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter.","title":"function ConnectPipelines"},{"location":"api/Files/ItkToVtk_8h.html#source-code","text":"#pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Job_8h.html","text":"Studio/Job/Job.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Job Source code #pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#studiojobjobh","text":"","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Job_8h.html#classes","text":"Name class shapeworks::Job","title":"Classes"},{"location":"api/Files/Job_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/JsonProjectReader_8h.html","text":"Libs/Project/JsonProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectReader JSON file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#libsprojectjsonprojectreaderh","text":"","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectReader_8h.html#classes","text":"Name class shapeworks::JsonProjectReader JSON file format reader for Project .","title":"Classes"},{"location":"api/Files/JsonProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/JsonProjectWriter_8h.html","text":"Libs/Project/JsonProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectWriter JSON file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#libsprojectjsonprojectwriterh","text":"","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectWriter_8h.html#classes","text":"Name class shapeworks::JsonProjectWriter JSON file format writer for Project .","title":"Classes"},{"location":"api/Files/JsonProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/KeyboardShortcuts_8h.html","text":"Studio/Interface/KeyboardShortcuts.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::KeyboardShortcuts Source code #pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#studiointerfacekeyboardshortcutsh","text":"","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/KeyboardShortcuts_8h.html#classes","text":"Name class shapeworks::KeyboardShortcuts","title":"Classes"},{"location":"api/Files/KeyboardShortcuts_8h.html#source-code","text":"#pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LandmarkItemDelegate_8h.html","text":"Studio/Data/LandmarkItemDelegate.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkItemDelegate Source code #pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#studiodatalandmarkitemdelegateh","text":"","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkItemDelegate_8h.html#classes","text":"Name class shapeworks::LandmarkItemDelegate","title":"Classes"},{"location":"api/Files/LandmarkItemDelegate_8h.html#source-code","text":"#pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LandmarkTableModel_8h.html","text":"Studio/Data/LandmarkTableModel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkTableModel Source code #pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#studiodatalandmarktablemodelh","text":"","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkTableModel_8h.html#classes","text":"Name class shapeworks::LandmarkTableModel","title":"Classes"},{"location":"api/Files/LandmarkTableModel_8h.html#source-code","text":"#pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LandmarkWidget_8h.html","text":"Studio/Visualization/LandmarkWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkWidget LandmarkWidget . Source code #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#studiovisualizationlandmarkwidgeth","text":"","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkWidget_8h.html#classes","text":"Name class shapeworks::LandmarkWidget LandmarkWidget .","title":"Classes"},{"location":"api/Files/LandmarkWidget_8h.html#source-code","text":"#include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyCorrespondenceFunction Source code #pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#libsoptimizefunctionlegacycorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::LegacyCorrespondenceFunction","title":"Classes"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LegacyMeshGenerator_8h.html","text":"Libs/Analyze/LegacyMeshGenerator.h Mesh generation. More... Classes Name class LegacyMeshGenerator Detailed Description Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code /* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#libsanalyzelegacymeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#classes","text":"Name class LegacyMeshGenerator","title":"Classes"},{"location":"api/Files/LegacyMeshGenerator_8h.html#detailed-description","text":"Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/LegacyMeshGenerator_8h.html#source-code","text":"/* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LegacyShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LegacyShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyShapeMatrix Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#libsoptimizematrixlegacyshapematrixh","text":"","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyShapeMatrix_8h.html#classes","text":"Name class shapeworks::LegacyShapeMatrix","title":"Classes"},{"location":"api/Files/LegacyShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Lightbox_8h.html","text":"Studio/Visualization/Lightbox.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Lightbox Display multiple Viewers in a tiled display. Source code #pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#studiovisualizationlightboxh","text":"","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Lightbox_8h.html#classes","text":"Name class shapeworks::Lightbox Display multiple Viewers in a tiled display.","title":"Classes"},{"location":"api/Files/Lightbox_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LinearRegressionShapeMatrix Source code #pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#libsoptimizematrixlinearregressionshapematrixh","text":"","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#classes","text":"Name class shapeworks::LinearRegressionShapeMatrix","title":"Classes"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#source-code","text":"#pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LogWindow_8h.html","text":"Studio/Interface/LogWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LogWindow Log Window. Source code #pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#studiointerfacelogwindowh","text":"","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LogWindow_8h.html#classes","text":"Name class shapeworks::LogWindow Log Window.","title":"Classes"},{"location":"api/Files/LogWindow_8h.html#source-code","text":"#pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Logging_8h.html","text":"Libs/Common/Logging.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library. Defines Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once. Macros Documentation define SW_LOG_STACK #define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro. define SW_LOG #define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro. define SW_WARN #define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro. define SW_ERROR #define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro. define SW_DEBUG #define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro. define SW_TRACE #define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = ) define SW_MESSAGE #define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro. define SW_STATUS #define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar) define SW_PROGRESS #define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ )); define SW_CLOSE_LOG #define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro. define SW_LOG_ONCE #define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once. Source code #pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#libscommonloggingh","text":"","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Logging_8h.html#classes","text":"Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library.","title":"Classes"},{"location":"api/Files/Logging_8h.html#defines","text":"Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once.","title":"Defines"},{"location":"api/Files/Logging_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Logging_8h.html#define-sw_log_stack","text":"#define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro.","title":"define SW_LOG_STACK"},{"location":"api/Files/Logging_8h.html#define-sw_log","text":"#define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro.","title":"define SW_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_warn","text":"#define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro.","title":"define SW_WARN"},{"location":"api/Files/Logging_8h.html#define-sw_error","text":"#define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro.","title":"define SW_ERROR"},{"location":"api/Files/Logging_8h.html#define-sw_debug","text":"#define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro.","title":"define SW_DEBUG"},{"location":"api/Files/Logging_8h.html#define-sw_trace","text":"#define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = )","title":"define SW_TRACE"},{"location":"api/Files/Logging_8h.html#define-sw_message","text":"#define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro.","title":"define SW_MESSAGE"},{"location":"api/Files/Logging_8h.html#define-sw_status","text":"#define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar)","title":"define SW_STATUS"},{"location":"api/Files/Logging_8h.html#define-sw_progress","text":"#define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ ));","title":"define SW_PROGRESS"},{"location":"api/Files/Logging_8h.html#define-sw_close_log","text":"#define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro.","title":"define SW_CLOSE_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_log_once","text":"#define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once.","title":"define SW_LOG_ONCE"},{"location":"api/Files/Logging_8h.html#source-code","text":"#pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeanCurvatureContainer_8h.html","text":"Libs/Optimize/Container/MeanCurvatureContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeanCurvatureContainer Source code #pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#libsoptimizecontainermeancurvaturecontainerh","text":"","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeanCurvatureContainer_8h.html#classes","text":"Name class shapeworks::MeanCurvatureContainer","title":"Classes"},{"location":"api/Files/MeanCurvatureContainer_8h.html#source-code","text":"#pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MemoryUsage_8h.html","text":"Libs/Optimize/Utils/MemoryUsage.h Functions Name void process_mem_usage (double & vm_usage, double & resident_set) Functions Documentation function process_mem_usage void process_mem_usage ( double & vm_usage , double & resident_set ) Source code #pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#libsoptimizeutilsmemoryusageh","text":"","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#functions","text":"Name void process_mem_usage (double & vm_usage, double & resident_set)","title":"Functions"},{"location":"api/Files/MemoryUsage_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MemoryUsage_8h.html#function-process_mem_usage","text":"void process_mem_usage ( double & vm_usage , double & resident_set )","title":"function process_mem_usage"},{"location":"api/Files/MemoryUsage_8h.html#source-code","text":"#pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshCache_8h.html","text":"Libs/Analyze/MeshCache.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshCache Thread safe cache for meshes index by shape. Source code #pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#libsanalyzemeshcacheh","text":"","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshCache_8h.html#classes","text":"Name class shapeworks::MeshCache Thread safe cache for meshes index by shape.","title":"Classes"},{"location":"api/Files/MeshCache_8h.html#source-code","text":"#pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshComputeThickness_8h.html","text":"Libs/Mesh/MeshComputeThickness.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::mesh Source code #pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#libsmeshmeshcomputethicknessh","text":"","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::mesh","title":"Namespaces"},{"location":"api/Files/MeshComputeThickness_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshDomain_8h.html","text":"Libs/Optimize/Domain/MeshDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshDomain Source code #pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#libsoptimizedomainmeshdomainh","text":"","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshDomain_8h.html#classes","text":"Name class shapeworks::MeshDomain","title":"Classes"},{"location":"api/Files/MeshDomain_8h.html#source-code","text":"#pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshGenerator_8h.html","text":"Libs/Analyze/MeshGenerator.h Mesh generation. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator Detailed Description Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code #pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#libsanalyzemeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGenerator_8h.html#classes","text":"Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator","title":"Classes"},{"location":"api/Files/MeshGenerator_8h.html#detailed-description","text":"Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/MeshGenerator_8h.html#source-code","text":"#pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshGeoEntry_8h.html","text":"Libs/Optimize/Domain/MeshGeoEntry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MeshGeoEntry Source code #pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#libsoptimizedomainmeshgeoentryh","text":"","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGeoEntry_8h.html#classes","text":"Name struct shapeworks::MeshGeoEntry","title":"Classes"},{"location":"api/Files/MeshGeoEntry_8h.html#source-code","text":"#pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshGroup_8h.html","text":"Libs/Analyze/MeshGroup.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshGroup Representation of a group of meshes. Source code #pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#libsanalyzemeshgrouph","text":"","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGroup_8h.html#classes","text":"Name class shapeworks::MeshGroup Representation of a group of meshes.","title":"Classes"},{"location":"api/Files/MeshGroup_8h.html#source-code","text":"#pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshManager_8h.html","text":"Libs/Analyze/MeshManager.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshManager Class to manage meshes. Source code #pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#libsanalyzemeshmanagerh","text":"","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshManager_8h.html#classes","text":"Name class shapeworks::MeshManager Class to manage meshes.","title":"Classes"},{"location":"api/Files/MeshManager_8h.html#source-code","text":"#pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshSettings_8h.html","text":"Studio/Data/MeshSettings.h Classes Name class MeshSettings Settings for creating a mesh. Types Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle Types Documentation typedef MeshSettingsHandle typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; Source code #pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#studiodatameshsettingsh","text":"","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#classes","text":"Name class MeshSettings Settings for creating a mesh.","title":"Classes"},{"location":"api/Files/MeshSettings_8h.html#types","text":"Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle","title":"Types"},{"location":"api/Files/MeshSettings_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/MeshSettings_8h.html#typedef-meshsettingshandle","text":"typedef QSharedPointer < MeshSettings > MeshSettingsHandle ;","title":"typedef MeshSettingsHandle"},{"location":"api/Files/MeshSettings_8h.html#source-code","text":"#pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshSlice_8h.html","text":"Studio/Visualization/MeshSlice.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshSlice MeshSlice . Source code #pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#studiovisualizationmeshsliceh","text":"","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshSlice_8h.html#classes","text":"Name class shapeworks::MeshSlice MeshSlice .","title":"Classes"},{"location":"api/Files/MeshSlice_8h.html#source-code","text":"#pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshUtils_8h.html","text":"Libs/Mesh/MeshUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshUtils Source code #pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#libsmeshmeshutilsh","text":"","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshUtils_8h.html#classes","text":"Name class shapeworks::MeshUtils","title":"Classes"},{"location":"api/Files/MeshUtils_8h.html#source-code","text":"#pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWarper_8h.html","text":"Libs/Mesh/MeshWarper.h Mesh warping capability. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWarper Detailed Description Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction Source code #pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#libsmeshmeshwarperh","text":"Mesh warping capability. More...","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWarper_8h.html#classes","text":"Name class shapeworks::MeshWarper","title":"Classes"},{"location":"api/Files/MeshWarper_8h.html#detailed-description","text":"Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction","title":"Detailed Description"},{"location":"api/Files/MeshWarper_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWorkQueue_8h.html","text":"Libs/Analyze/MeshWorkQueue.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue Functions Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ) Source code #pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#libsanalyzemeshworkqueueh","text":"","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorkQueue_8h.html#classes","text":"Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue","title":"Classes"},{"location":"api/Files/MeshWorkQueue_8h.html#functions","text":"Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem )","title":"Functions"},{"location":"api/Files/MeshWorkQueue_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorkQueue_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorkQueue_8h.html#source-code","text":"#pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWorker_8h.html","text":"Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorker Functions Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > ) Detailed Description Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ) Source code #pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#libsanalyzemeshworkerh","text":"Worker class for parallel mesh reconstruction. More...","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorker_8h.html#classes","text":"Name class shapeworks::MeshWorker","title":"Classes"},{"location":"api/Files/MeshWorker_8h.html#functions","text":"Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > )","title":"Functions"},{"location":"api/Files/MeshWorker_8h.html#detailed-description","text":"Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management","title":"Detailed Description"},{"location":"api/Files/MeshWorker_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorker_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorker_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWrapper_8h.html","text":"Libs/Optimize/Domain/MeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWrapper Source code #pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#libsoptimizedomainmeshwrapperh","text":"","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWrapper_8h.html#classes","text":"Name class shapeworks::MeshWrapper","title":"Classes"},{"location":"api/Files/MeshWrapper_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Mesh_8h.html","text":"Libs/Mesh/Mesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) Source code #pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#libsmeshmeshh","text":"","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Mesh_8h.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors)","title":"Classes"},{"location":"api/Files/Mesh_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MixedEffectsShapeMatrix Source code /* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#libsoptimizematrixmixedeffectsshapematrixh","text":"","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#classes","text":"Name class shapeworks::MixedEffectsShapeMatrix","title":"Classes"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#source-code","text":"/* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Module_8dox.html","text":"Module.dox Updated on 2023-10-25 at 15:40:28 +0000","title":"Module.dox"},{"location":"api/Files/Module_8dox.html#moduledox","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"Module.dox"},{"location":"api/Files/NetworkAnalysisJob_8h.html","text":"Studio/Job/NetworkAnalysisJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::NetworkAnalysisJob Source code #pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#studiojobnetworkanalysisjobh","text":"","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/NetworkAnalysisJob_8h.html#classes","text":"Name class shapeworks::NetworkAnalysisJob","title":"Classes"},{"location":"api/Files/NetworkAnalysisJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ObjectReader_8h.html","text":"Libs/Optimize/Utils/ObjectReader.h Classes Name class ObjectReader Source code #pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#libsoptimizeutilsobjectreaderh","text":"","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#classes","text":"Name class ObjectReader","title":"Classes"},{"location":"api/Files/ObjectReader_8h.html#source-code","text":"#pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ObjectWriter_8h.html","text":"Libs/Optimize/Utils/ObjectWriter.h Classes Name class ObjectWriter Source code #pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#libsoptimizeutilsobjectwriterh","text":"","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#classes","text":"Name class ObjectWriter","title":"Classes"},{"location":"api/Files/ObjectWriter_8h.html#source-code","text":"#pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Observer_8h.html","text":"Libs/Optimize/Observer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct Source code #pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#libsoptimizeobserverh","text":"","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Observer_8h.html#classes","text":"Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct","title":"Classes"},{"location":"api/Files/Observer_8h.html#source-code","text":"#pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizationVisualizer_8h.html","text":"Libs/Optimize/Utils/OptimizationVisualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizationVisualizer Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#libsoptimizeutilsoptimizationvisualizerh","text":"","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizationVisualizer_8h.html#classes","text":"Name class shapeworks::OptimizationVisualizer","title":"Classes"},{"location":"api/Files/OptimizationVisualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameterFile_8h.html","text":"Libs/Optimize/OptimizeParameterFile.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameterFile Source code #pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#libsoptimizeoptimizeparameterfileh","text":"","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameterFile_8h.html#classes","text":"Name class shapeworks::OptimizeParameterFile","title":"Classes"},{"location":"api/Files/OptimizeParameterFile_8h.html#source-code","text":"#pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameters_8h.html","text":"Libs/Optimize/OptimizeParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameters Source code #pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#libsoptimizeoptimizeparametersh","text":"","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameters_8h.html#classes","text":"Name class shapeworks::OptimizeParameters","title":"Classes"},{"location":"api/Files/OptimizeParameters_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizeTool_8h.html","text":"Studio/Optimize/OptimizeTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeTool Source code #pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#studiooptimizeoptimizetoolh","text":"","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeTool_8h.html#classes","text":"Name class shapeworks::OptimizeTool","title":"Classes"},{"location":"api/Files/OptimizeTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Optimize_8h.html","text":"Libs/Optimize/Optimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MatrixContainer class shapeworks::Optimize Source code #pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#libsoptimizeoptimizeh","text":"","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Optimize_8h.html#classes","text":"Name class shapeworks::MatrixContainer class shapeworks::Optimize","title":"Classes"},{"location":"api/Files/Optimize_8h.html#source-code","text":"#pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PaintWidget_8h.html","text":"Studio/Visualization/PaintWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PaintWidget Source code #pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#studiovisualizationpaintwidgeth","text":"","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PaintWidget_8h.html#classes","text":"Name class shapeworks::PaintWidget","title":"Classes"},{"location":"api/Files/PaintWidget_8h.html#source-code","text":"#pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Parameters_8h.html","text":"Libs/Project/Parameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Parameters Parameter settings. Source code #pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#libsprojectparametersh","text":"","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Parameters_8h.html#classes","text":"Name class shapeworks::Parameters Parameter settings.","title":"Classes"},{"location":"api/Files/Parameters_8h.html#source-code","text":"#pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaJob_8h.html","text":"Studio/Job/ParticleAreaJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaJob Source code #pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#studiojobparticleareajobh","text":"","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaJob_8h.html#classes","text":"Name class shapeworks::ParticleAreaJob","title":"Classes"},{"location":"api/Files/ParticleAreaJob_8h.html#source-code","text":"#pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaPanel_8h.html","text":"Studio/Analysis/ParticleAreaPanel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaPanel Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#studioanalysisparticleareapanelh","text":"","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaPanel_8h.html#classes","text":"Name class shapeworks::ParticleAreaPanel","title":"Classes"},{"location":"api/Files/ParticleAreaPanel_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleArea_8h.html","text":"Libs/Analyze/ParticleArea.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleArea Source code #pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#libsanalyzeparticleareah","text":"","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleArea_8h.html#classes","text":"Name class shapeworks::ParticleArea","title":"Classes"},{"location":"api/Files/ParticleArea_8h.html#source-code","text":"#pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleColors_8h.html","text":"Studio/Visualization/ParticleColors.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleColors Supplies particle colors. Source code #pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#studiovisualizationparticlecolorsh","text":"","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleColors_8h.html#classes","text":"Name class shapeworks::ParticleColors Supplies particle colors.","title":"Classes"},{"location":"api/Files/ParticleColors_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleDomain_8h.html","text":"Libs/Optimize/Domain/ParticleDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleDomain Source code #pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#libsoptimizedomainparticledomainh","text":"","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleDomain_8h.html#classes","text":"Name class shapeworks::ParticleDomain","title":"Classes"},{"location":"api/Files/ParticleDomain_8h.html#source-code","text":"#pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleEvents_8h.html","text":"Libs/Optimize/ParticleEvents.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleEvent Source code #pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#libsoptimizeparticleeventsh","text":"","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleEvents_8h.html#classes","text":"Name class shapeworks::ParticleEvent","title":"Classes"},{"location":"api/Files/ParticleEvents_8h.html#source-code","text":"#pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleFile_8h.html","text":"Libs/Particles/ParticleFile.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::particles Source code #pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#libsparticlesparticlefileh","text":"","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::particles","title":"Namespaces"},{"location":"api/Files/ParticleFile_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html","text":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGaussianModeWriter Source code #pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#libsoptimizeutilsparticlegaussianmodewriterh","text":"","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#classes","text":"Name class shapeworks::ParticleGaussianModeWriter","title":"Classes"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html","text":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#libsoptimizeutilsparticlegoodbadassessmenth","text":"","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#classes","text":"Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system.","title":"Classes"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNeighborhood Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#libsoptimizeneighborhoodparticleneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleNeighborhood","title":"Classes"},{"location":"api/Files/ParticleNeighborhood_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html","text":"Studio/Job/ParticleNormalEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluationJob Source code #pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#studiojobparticlenormalevaluationjobh","text":"","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluationJob","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluation_8h.html","text":"Libs/Particles/ParticleNormalEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluation Source code #pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#libsparticlesparticlenormalevaluationh","text":"","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluation","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticlePointIndexPair_8h.html","text":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::ParticlePointIndexPair Source code #pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#libsoptimizeneighborhoodparticlepointindexpairh","text":"","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticlePointIndexPair_8h.html#classes","text":"Name struct shapeworks::ParticlePointIndexPair","title":"Classes"},{"location":"api/Files/ParticlePointIndexPair_8h.html#source-code","text":"#pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionDomain_8h.html","text":"Libs/Optimize/Domain/ParticleRegionDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionDomain Source code #pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#libsoptimizedomainparticleregiondomainh","text":"","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionDomain_8h.html#classes","text":"Name class shapeworks::ParticleRegionDomain","title":"Classes"},{"location":"api/Files/ParticleRegionDomain_8h.html#source-code","text":"#pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionNeighborhood Source code #pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#libsoptimizeneighborhoodparticleregionneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleRegionNeighborhood","title":"Classes"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#source-code","text":"#pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleShapeStatistics_8h.html","text":"Libs/Particles/ParticleShapeStatistics.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleShapeStatistics Source code #pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#libsparticlesparticleshapestatisticsh","text":"","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleShapeStatistics_8h.html#classes","text":"Name class shapeworks::ParticleShapeStatistics","title":"Classes"},{"location":"api/Files/ParticleShapeStatistics_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSurfaceNeighborhood Source code #pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#libsoptimizeneighborhoodparticlesurfaceneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleSurfaceNeighborhood","title":"Classes"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleSystemEvaluation_8h.html","text":"Libs/Particles/ParticleSystemEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystemEvaluation Source code #pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#libsparticlesparticlesystemevaluationh","text":"","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleSystemEvaluation","title":"Classes"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleSystem_8h.html","text":"Libs/Optimize/ParticleSystem.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system. Source code #pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#libsoptimizeparticlesystemh","text":"","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystem_8h.html#classes","text":"Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system.","title":"Classes"},{"location":"api/Files/ParticleSystem_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Particles_8h.html","text":"Libs/Analyze/Particles.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. Source code #pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#libsanalyzeparticlesh","text":"","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Particles_8h.html#classes","text":"Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains.","title":"Classes"},{"location":"api/Files/Particles_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PlaneConstraint_8h.html","text":"Libs/Optimize/Constraints/PlaneConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneConstraint Source code #pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#libsoptimizeconstraintsplaneconstrainth","text":"","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneConstraint_8h.html#classes","text":"Name class shapeworks::PlaneConstraint","title":"Classes"},{"location":"api/Files/PlaneConstraint_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PlaneWidget_8h.html","text":"Studio/Visualization/PlaneWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneWidget PlaneWidget . Source code #include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#studiovisualizationplanewidgeth","text":"","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneWidget_8h.html#classes","text":"Name class shapeworks::PlaneWidget PlaneWidget .","title":"Classes"},{"location":"api/Files/PlaneWidget_8h.html#source-code","text":"#include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PowerOfTwoPointTree_8h.html","text":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree Source code #pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#libsoptimizeneighborhoodpoweroftwopointtreeh","text":"","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#classes","text":"Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree","title":"Classes"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#source-code","text":"#pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PreferencesWindow_8h.html","text":"Studio/Data/PreferencesWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences. Source code #pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#studiodatapreferenceswindowh","text":"","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PreferencesWindow_8h.html#classes","text":"Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences.","title":"Classes"},{"location":"api/Files/PreferencesWindow_8h.html#source-code","text":"#pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Preferences_8h.html","text":"Studio/Data/Preferences.h Classes Name class Preferences Application preferences. Source code #pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#studiodatapreferencesh","text":"","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#classes","text":"Name class Preferences Application preferences.","title":"Classes"},{"location":"api/Files/Preferences_8h.html#source-code","text":"#pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Procrustes3D_8h.html","text":"Libs/Alignment/Procrustes3D.h Classes Name struct SimilarityTransform3D class Procrustes3D Source code #pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#libsalignmentprocrustes3dh","text":"","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#classes","text":"Name struct SimilarityTransform3D class Procrustes3D","title":"Classes"},{"location":"api/Files/Procrustes3D_8h.html#source-code","text":"#pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ProcrustesRegistration_8h.html","text":"Libs/Optimize/ProcrustesRegistration.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProcrustesRegistration Source code #pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#libsoptimizeprocrustesregistrationh","text":"","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProcrustesRegistration_8h.html#classes","text":"Name class shapeworks::ProcrustesRegistration","title":"Classes"},{"location":"api/Files/ProcrustesRegistration_8h.html#source-code","text":"#pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ProjectReader_8h.html","text":"Libs/Project/ProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProjectReader Base class for Project readers. Source code #pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#libsprojectprojectreaderh","text":"","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProjectReader_8h.html#classes","text":"Name class shapeworks::ProjectReader Base class for Project readers.","title":"Classes"},{"location":"api/Files/ProjectReader_8h.html#source-code","text":"#pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ProjectUtils_8h.html","text":"Libs/Project/ProjectUtils.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types Classes Name class shapeworks::ProjectUtils Source code #pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#libsprojectprojectutilsh","text":"","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types","title":"Namespaces"},{"location":"api/Files/ProjectUtils_8h.html#classes","text":"Name class shapeworks::ProjectUtils","title":"Classes"},{"location":"api/Files/ProjectUtils_8h.html#source-code","text":"#pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Project_8h.html","text":"Libs/Project/Project.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project. Source code #pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#libsprojectprojecth","text":"","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Project_8h.html#classes","text":"Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project.","title":"Classes"},{"location":"api/Files/Project_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PythonAnalyze_8h.html","text":"Libs/Python/PythonAnalyze.h Functions Name void define_python_analyze (pybind11::module_ m) Functions Documentation function define_python_analyze void define_python_analyze ( pybind11 :: module_ m ) Source code #pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#libspythonpythonanalyzeh","text":"","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#functions","text":"Name void define_python_analyze (pybind11::module_ m)","title":"Functions"},{"location":"api/Files/PythonAnalyze_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/PythonAnalyze_8h.html#function-define_python_analyze","text":"void define_python_analyze ( pybind11 :: module_ m )","title":"function define_python_analyze"},{"location":"api/Files/PythonAnalyze_8h.html#source-code","text":"#pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PythonWorker_8h.html","text":"Studio/Python/PythonWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PythonWorker Source code #pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#studiopythonpythonworkerh","text":"","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PythonWorker_8h.html#classes","text":"Name class shapeworks::PythonWorker","title":"Classes"},{"location":"api/Files/PythonWorker_8h.html#source-code","text":"#pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/QMeshWarper_8h.html","text":"Libs/Analyze/QMeshWarper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. Source code #pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#libsanalyzeqmeshwarperh","text":"","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QMeshWarper_8h.html#classes","text":"Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject.","title":"Classes"},{"location":"api/Files/QMeshWarper_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/QOptimize_8h.html","text":"Studio/Optimize/QOptimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QOptimize Wraps Optimize as a QObject. Source code #pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#studiooptimizeqoptimizeh","text":"","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QOptimize_8h.html#classes","text":"Name class shapeworks::QOptimize Wraps Optimize as a QObject.","title":"Classes"},{"location":"api/Files/QOptimize_8h.html#source-code","text":"#pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ReconstructSurface_8h.html","text":"Libs/Particles/ReconstructSurface.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ReconstructSurface Source code #pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#libsparticlesreconstructsurfaceh","text":"","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ReconstructSurface_8h.html#classes","text":"Name class shapeworks::ReconstructSurface","title":"Classes"},{"location":"api/Files/ReconstructSurface_8h.html#source-code","text":"#pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Reconstruction_8h.html","text":"Libs/Analyze/Reconstruction.h Namespaces Name itk Classes Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction Source code #ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#libsanalyzereconstructionh","text":"","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/Reconstruction_8h.html#classes","text":"Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction","title":"Classes"},{"location":"api/Files/Reconstruction_8h.html#source-code","text":"#ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Region_8h.html","text":"Libs/Common/Region.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space Source code #pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#libscommonregionh","text":"","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Region_8h.html#classes","text":"Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space","title":"Classes"},{"location":"api/Files/Region_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Sampler_8h.html","text":"Libs/Optimize/Sampler.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType Source code #pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#libsoptimizesamplerh","text":"","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Sampler_8h.html#classes","text":"Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType","title":"Classes"},{"location":"api/Files/Sampler_8h.html#source-code","text":"#pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SamplingFunction_8h.html","text":"Libs/Optimize/Function/SamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#libsoptimizefunctionsamplingfunctionh","text":"","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SamplingFunction_8h.html#classes","text":"Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution.","title":"Classes"},{"location":"api/Files/SamplingFunction_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Session_8h.html","text":"Studio/Data/Session.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#studiodatasessionh","text":"","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Session_8h.html#classes","text":"Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session.","title":"Classes"},{"location":"api/Files/Session_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluationJob_8h.html","text":"Studio/Analysis/ShapeEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluationJob Functions Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( Eigen :: VectorXd ) function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ) Source code #pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#studioanalysisshapeevaluationjobh","text":"","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluationJob_8h.html#classes","text":"Name class shapeworks::ShapeEvaluationJob","title":"Classes"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions","text":"Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType )","title":"Functions"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( Eigen :: VectorXd )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype_1","text":"Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluation_8h.html","text":"Libs/Particles/ShapeEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluation Source code #pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#libsparticlesshapeevaluationh","text":"","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluation_8h.html#classes","text":"Name class shapeworks::ShapeEvaluation","title":"Classes"},{"location":"api/Files/ShapeEvaluation_8h.html#source-code","text":"#pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeGradientMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeGradientMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#libsoptimizematrixshapegradientmatrixh","text":"","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeGradientMatrix_8h.html#classes","text":"Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeGradientMatrix_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#libsoptimizematrixshapematrixh","text":"","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeMatrix_8h.html#classes","text":"Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksStudioApp_8h.html","text":"Studio/Interface/ShapeWorksStudioApp.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#studiointerfaceshapeworksstudioapph","text":"","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#classes","text":"Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window.","title":"Classes"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksWorker_8h.html","text":"Studio/Data/ShapeWorksWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksWorker Source code #pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#studiodatashapeworksworkerh","text":"","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksWorker_8h.html#classes","text":"Name class shapeworks::ShapeworksWorker","title":"Classes"},{"location":"api/Files/ShapeWorksWorker_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Shape_8h.html","text":"Libs/Analyze/Shape.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used. Source code #pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#libsanalyzeshapeh","text":"","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shape_8h.html#classes","text":"Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used.","title":"Classes"},{"location":"api/Files/Shape_8h.html#source-code","text":"#pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeworksUtils_8h.html","text":"Libs/Common/ShapeworksUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksUtils Source code #pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#libscommonshapeworksutilsh","text":"","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeworksUtils_8h.html#classes","text":"Name class shapeworks::ShapeworksUtils","title":"Classes"},{"location":"api/Files/ShapeworksUtils_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Shapeworks_8h.html","text":"Libs/Common/Shapeworks.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#libscommonshapeworksh","text":"","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shapeworks_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SharedCommandData_8h.html","text":"Applications/shapeworks/SharedCommandData.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::SharedCommandData Source code #pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#applicationsshapeworkssharedcommanddatah","text":"","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SharedCommandData_8h.html#classes","text":"Name struct shapeworks::SharedCommandData","title":"Classes"},{"location":"api/Files/SharedCommandData_8h.html#source-code","text":"#pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SliceView_8h.html","text":"Studio/Visualization/SliceView.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SliceView SliceView . Source code #pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#studiovisualizationsliceviewh","text":"","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SliceView_8h.html#classes","text":"Name class shapeworks::SliceView SliceView .","title":"Classes"},{"location":"api/Files/SliceView_8h.html#source-code","text":"#pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SplashScreen_8h.html","text":"Studio/Interface/SplashScreen.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SplashScreen Source code #pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#studiointerfacesplashscreenh","text":"","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SplashScreen_8h.html#classes","text":"Name class shapeworks::SplashScreen","title":"Classes"},{"location":"api/Files/SplashScreen_8h.html#source-code","text":"#pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StackWalker_8h.html","text":"Studio/Utils/StackWalker.h Source code #ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#studioutilsstackwalkerh","text":"","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#source-code","text":"#ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StatsGroupLDAJob_8h.html","text":"Studio/Job/StatsGroupLDAJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatsGroupLDAJob Source code #pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#studiojobstatsgroupldajobh","text":"","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatsGroupLDAJob_8h.html#classes","text":"Name class shapeworks::StatsGroupLDAJob","title":"Classes"},{"location":"api/Files/StatsGroupLDAJob_8h.html#source-code","text":"#pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StatusBarWidget_8h.html","text":"Studio/Interface/StatusBarWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatusBarWidget StatusBarWidget . Source code #pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#studiointerfacestatusbarwidgeth","text":"","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatusBarWidget_8h.html#classes","text":"Name class shapeworks::StatusBarWidget StatusBarWidget .","title":"Classes"},{"location":"api/Files/StatusBarWidget_8h.html#source-code","text":"#pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StringUtils_8h.html","text":"Libs/Utils/StringUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StringUtils String utility functions. Source code #pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#libsutilsstringutilsh","text":"","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StringUtils_8h.html#classes","text":"Name class shapeworks::StringUtils String utility functions.","title":"Classes"},{"location":"api/Files/StringUtils_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioEnums_8h.html","text":"Libs/Analyze/StudioEnums.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#libsanalyzestudioenumsh","text":"","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioEnums_8h.html#source-code","text":"#pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioHandleWidget_8h.html","text":"Studio/Visualization/StudioHandleWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioHandleWidget Source code #include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#studiovisualizationstudiohandlewidgeth","text":"","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioHandleWidget_8h.html#classes","text":"Name class shapeworks::StudioHandleWidget","title":"Classes"},{"location":"api/Files/StudioHandleWidget_8h.html#source-code","text":"#include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioInteractorStyle_8h.html","text":"Studio/Visualization/StudioInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#studiovisualizationstudiointeractorstyleh","text":"","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioInteractorStyle","title":"Classes"},{"location":"api/Files/StudioInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioLogger_8h.html","text":"Studio/Interface/StudioLogger.h Classes Name class StudioLogger Handle logger callbacks via Qt for thread correctness. Source code #pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#studiointerfacestudiologgerh","text":"","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#classes","text":"Name class StudioLogger Handle logger callbacks via Qt for thread correctness.","title":"Classes"},{"location":"api/Files/StudioLogger_8h.html#source-code","text":"#pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioMesh_8h.html","text":"Libs/Analyze/StudioMesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioMesh Representation of a single mesh. Types Name using float PixelType using itk::Image< PixelType, 3 > ImageType Types Documentation using PixelType using PixelType = float ; using ImageType using ImageType = itk :: Image < PixelType , 3 > ; Source code #pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#libsanalyzestudiomeshh","text":"","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioMesh_8h.html#classes","text":"Name class shapeworks::StudioMesh Representation of a single mesh.","title":"Classes"},{"location":"api/Files/StudioMesh_8h.html#types","text":"Name using float PixelType using itk::Image< PixelType, 3 > ImageType","title":"Types"},{"location":"api/Files/StudioMesh_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/StudioMesh_8h.html#using-pixeltype","text":"using PixelType = float ;","title":"using PixelType"},{"location":"api/Files/StudioMesh_8h.html#using-imagetype","text":"using ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Files/StudioMesh_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html","text":"Studio/Visualization/StudioSliceInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioSliceInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#studiovisualizationstudiosliceinteractorstyleh","text":"","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioSliceInteractorStyle","title":"Classes"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioUtils_8h.html","text":"Studio/Utils/StudioUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioUtils Utilities for Studio. Source code #pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#studioutilsstudioutilsh","text":"","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioUtils_8h.html#classes","text":"Name class shapeworks::StudioUtils Utilities for Studio.","title":"Classes"},{"location":"api/Files/StudioUtils_8h.html#source-code","text":"#pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioVtkOutputWindow_8h.html","text":"Studio/Visualization/StudioVtkOutputWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. Source code #pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#studiovisualizationstudiovtkoutputwindowh","text":"","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#classes","text":"Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages.","title":"Classes"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Style_8h.html","text":"Studio/Interface/Style.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Style Source code #pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#studiointerfacestyleh","text":"","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Style_8h.html#classes","text":"Name class shapeworks::Style","title":"Classes"},{"location":"api/Files/Style_8h.html#source-code","text":"#pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Subject_8h.html","text":"Libs/Project/Subject.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Subject Representation of a single subject. Source code #pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#libsprojectsubjecth","text":"","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Subject_8h.html#classes","text":"Name class shapeworks::Subject Representation of a single subject.","title":"Classes"},{"location":"api/Files/Subject_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SurfaceReconstructor_8h.html","text":"Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. More... Classes Name class SurfaceReconstructor Detailed Description Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method Source code #pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#libsanalyzesurfacereconstructorh","text":"Surface Reconstruction Layer. More...","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#classes","text":"Name class SurfaceReconstructor","title":"Classes"},{"location":"api/Files/SurfaceReconstructor_8h.html#detailed-description","text":"Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method","title":"Detailed Description"},{"location":"api/Files/SurfaceReconstructor_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Telemetry_8h.html","text":"Studio/Data/Telemetry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Telemetry Source code #pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#studiodatatelemetryh","text":"","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Telemetry_8h.html#classes","text":"Name class shapeworks::Telemetry","title":"Classes"},{"location":"api/Files/Telemetry_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/UpdateChecker_8h.html","text":"Studio/Interface/UpdateChecker.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::UpdateChecker Update Checker. Source code #pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#studiointerfaceupdatecheckerh","text":"","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/UpdateChecker_8h.html#classes","text":"Name class shapeworks::UpdateChecker Update Checker.","title":"Classes"},{"location":"api/Files/UpdateChecker_8h.html#source-code","text":"#pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Utils_8h.html","text":"Libs/Utils/Utils.h Namespaces Name utils Classes Name class Utils Defines Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN Macros Documentation define twopi_inv #define twopi_inv 0.5/M_PI define twopi #define twopi 2.0*M_PI define RANDU #define RANDU ((double) rand()/RAND_MAX) define RANDN2 #define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 )) define RANDN #define RANDN RANDN2(0, 1.0) Source code /*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#libsutilsutilsh","text":"","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#namespaces","text":"Name utils","title":"Namespaces"},{"location":"api/Files/Utils_8h.html#classes","text":"Name class Utils","title":"Classes"},{"location":"api/Files/Utils_8h.html#defines","text":"Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN","title":"Defines"},{"location":"api/Files/Utils_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Utils_8h.html#define-twopi_inv","text":"#define twopi_inv 0.5/M_PI","title":"define twopi_inv"},{"location":"api/Files/Utils_8h.html#define-twopi","text":"#define twopi 2.0*M_PI","title":"define twopi"},{"location":"api/Files/Utils_8h.html#define-randu","text":"#define RANDU ((double) rand()/RAND_MAX)","title":"define RANDU"},{"location":"api/Files/Utils_8h.html#define-randn2","text":"#define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 ))","title":"define RANDN2"},{"location":"api/Files/Utils_8h.html#define-randn","text":"#define RANDN RANDN2(0, 1.0)","title":"define RANDN"},{"location":"api/Files/Utils_8h.html#source-code","text":"/*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Variant_8h.html","text":"Libs/Project/Variant.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Variant Variant class to represent multiple types. Source code #pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#libsprojectvarianth","text":"","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Variant_8h.html#classes","text":"Name class shapeworks::Variant Variant class to represent multiple types.","title":"Classes"},{"location":"api/Files/Variant_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/VectorFunction_8h.html","text":"Libs/Optimize/Function/VectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorFunction Source code #pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#libsoptimizefunctionvectorfunctionh","text":"","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorFunction_8h.html#classes","text":"Name class shapeworks::VectorFunction","title":"Classes"},{"location":"api/Files/VectorFunction_8h.html#source-code","text":"#pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/VectorImage_8h.html","text":"Libs/Image/VectorImage.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorImage Gradient (vector) image. Source code #pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#libsimagevectorimageh","text":"","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorImage_8h.html#classes","text":"Name class shapeworks::VectorImage Gradient (vector) image.","title":"Classes"},{"location":"api/Files/VectorImage_8h.html#source-code","text":"#pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Viewer_8h.html","text":"Studio/Visualization/Viewer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer Source code #pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#studiovisualizationviewerh","text":"","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Viewer_8h.html#classes","text":"Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer","title":"Classes"},{"location":"api/Files/Viewer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Visualizer_8h.html","text":"Studio/Visualization/Visualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Visualizer Controls display of objects in viewers. Source code #pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#studiovisualizationvisualizerh","text":"","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Visualizer_8h.html#classes","text":"Name class shapeworks::Visualizer Controls display of objects in viewers.","title":"Classes"},{"location":"api/Files/Visualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/VtkMeshWrapper_8h.html","text":"Libs/Optimize/Domain/VtkMeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VtkMeshWrapper Source code #pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#libsoptimizedomainvtkmeshwrapperh","text":"","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VtkMeshWrapper_8h.html#classes","text":"Name class shapeworks::VtkMeshWrapper","title":"Classes"},{"location":"api/Files/VtkMeshWrapper_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/WheelEventForwarder_8h.html","text":"Studio/Interface/WheelEventForwarder.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::WheelEventForwarder Source code #pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#studiointerfacewheeleventforwarderh","text":"","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/WheelEventForwarder_8h.html#classes","text":"Name class shapeworks::WheelEventForwarder","title":"Classes"},{"location":"api/Files/WheelEventForwarder_8h.html#source-code","text":"#pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/WindowsCrashHandler_8h.html","text":"Studio/Utils/WindowsCrashHandler.h Functions Name int init_crash_handler () Functions Documentation function init_crash_handler int init_crash_handler () Source code int init_crash_handler (); Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#studioutilswindowscrashhandlerh","text":"","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions","text":"Name int init_crash_handler ()","title":"Functions"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/WindowsCrashHandler_8h.html#function-init_crash_handler","text":"int init_crash_handler ()","title":"function init_crash_handler"},{"location":"api/Files/WindowsCrashHandler_8h.html#source-code","text":"int init_crash_handler (); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Worker_8h.html","text":"Studio/Data/Worker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Worker Source code #pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#studiodataworkerh","text":"","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Worker_8h.html#classes","text":"Name class shapeworks::Worker","title":"Classes"},{"location":"api/Files/Worker_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html","text":"Libs/Optimize/Function Files Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#libsoptimizefunction","text":"","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#files","text":"Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html","text":"Libs/Optimize/Matrix Files Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#libsoptimizematrix","text":"","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#files","text":"Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html","text":"Studio/Analysis Files Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#studioanalysis","text":"","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#files","text":"Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html","text":"Libs/Mesh Directories Name Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#libsmesh","text":"","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#directories","text":"Name Libs/Mesh/PreviewMeshQC","title":"Directories"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#files","text":"Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html","text":"Libs/Optimize/Neighborhood Files Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#libsoptimizeneighborhood","text":"","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#files","text":"Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html","text":"Libs/Alignment/Transforms Files Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#libsalignmenttransforms","text":"","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#files","text":"Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html","text":"Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#libsmeshpreviewmeshqc","text":"","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#files","text":"Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html","text":"Studio/Groom Files Name Studio/Groom/GroomTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#studiogroom","text":"","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#files","text":"Name Studio/Groom/GroomTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html","text":"Studio/Python Files Name Studio/Python/PythonWorker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#studiopython","text":"","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#files","text":"Name Studio/Python/PythonWorker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html","text":"Applications/shapeworks Files Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#applicationsshapeworks","text":"","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#files","text":"Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html","text":"Libs/Project Files Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#libsproject","text":"","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#files","text":"Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html","text":"Studio/Utils Files Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#studioutils","text":"","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#files","text":"Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html","text":"Libs/Python Files Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#libspython","text":"","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#files","text":"Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html","text":"Libs Directories Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#libs","text":"","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#directories","text":"Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html","text":"Libs/Utils Files Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#libsutils","text":"","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#files","text":"Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html","text":"Studio/Job Files Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#studiojob","text":"","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#files","text":"Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html","text":"Libs/Optimize/Utils Files Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#libsoptimizeutils","text":"","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#files","text":"Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html","text":"Libs/Optimize/Container Files Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#libsoptimizecontainer","text":"","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#files","text":"Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html","text":"Applications Directories Name Applications/shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#applications","text":"","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#directories","text":"Name Applications/shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html","text":"Libs/Image Files Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#libsimage","text":"","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#files","text":"Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html","text":"Studio/Optimize Files Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#studiooptimize","text":"","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#files","text":"Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html","text":"Studio/Resources Files Name Studio/Resources/resource.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#studioresources","text":"","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#files","text":"Name Studio/Resources/resource.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html","text":"Libs/Optimize/Constraints Files Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#libsoptimizeconstraints","text":"","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#files","text":"Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html","text":"Studio/Data Files Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#studiodata","text":"","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#files","text":"Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html","text":"Documentation/Doxygen Updated on 2023-10-25 at 15:40:28 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html#documentationdoxygen","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html","text":"Studio/Visualization Files Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#studiovisualization","text":"","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#files","text":"Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html","text":"Libs/Optimize/Domain Files Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#libsoptimizedomain","text":"","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#files","text":"Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html","text":"Studio Directories Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#studio","text":"","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#directories","text":"Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html","text":"Libs/Common Files Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#libscommon","text":"","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#files","text":"Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html","text":"Libs/Alignment Directories Name Libs/Alignment/Transforms Files Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#libsalignment","text":"","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#directories","text":"Name Libs/Alignment/Transforms","title":"Directories"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#files","text":"Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html","text":"Libs/Groom Files Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#libsgroom","text":"","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#files","text":"Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html","text":"Documentation Directories Name Documentation/Doxygen Updated on 2023-10-25 at 15:40:28 +0000","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#documentation","text":"","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#directories","text":"Name Documentation/Doxygen Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html","text":"Libs/Analyze Files Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#libsanalyze","text":"","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#files","text":"Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html","text":"Studio/DeepSSM Files Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#studiodeepssm","text":"","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#files","text":"Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html","text":"Libs/Optimize Directories Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils Files Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#libsoptimize","text":"","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#directories","text":"Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils","title":"Directories"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#files","text":"Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html","text":"Studio/Interface Files Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#studiointerface","text":"","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#files","text":"Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html","text":"Libs/Particles Files Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#libsparticles","text":"","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#files","text":"Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/index_files.html","text":"Files dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/index_files.html#files","text":"dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/itkAdvancedTransform_8h.html","text":"Libs/Alignment/Transforms/itkAdvancedTransform.h Namespaces Name itk Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#libsalignmenttransformsitkadvancedtransformh","text":"","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkAdvancedTransform_8h.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space.","title":"Classes"},{"location":"api/Files/itkAdvancedTransform_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Namespaces Name itk Classes Name class itk::CompactlySupportedRBFSparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#libsalignmenttransformsitkcompactlysupportedrbfsparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#classes","text":"Name class itk::CompactlySupportedRBFSparseKernelTransform","title":"Classes"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkKernelTransform2.h Namespaces Name itk Classes Name class itk::KernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#libsalignmenttransformsitkkerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkKernelTransform2_8h.html#classes","text":"Name class itk::KernelTransform2","title":"Classes"},{"location":"api/Files/itkKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html","text":"Libs/Mesh/itkMultiplyByConstantImageFilter.h Namespaces Name itk itk::Functor Classes Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#libsmeshitkmultiplybyconstantimagefilterh","text":"","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#namespaces","text":"Name itk itk::Functor","title":"Namespaces"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#classes","text":"Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant.","title":"Classes"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkSparseKernelTransform.h Namespaces Name itk Classes Name class itk::SparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#libsalignmenttransformsitksparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkSparseKernelTransform_8h.html#classes","text":"Name class itk::SparseKernelTransform","title":"Classes"},{"location":"api/Files/itkSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html","text":"Libs/Image/itkTPGACLevelSetImageFilter.h Namespaces Name itk Classes Name class itk::TPGACLevelSetImageFilter Defines Name TPGAC_EPSILON Macros Documentation define TPGAC_EPSILON #define TPGAC_EPSILON 1e-5; Source code #ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#libsimageitktpgaclevelsetimagefilterh","text":"","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#classes","text":"Name class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#defines","text":"Name TPGAC_EPSILON","title":"Defines"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#define-tpgac_epsilon","text":"#define TPGAC_EPSILON 1e-5;","title":"define TPGAC_EPSILON"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#source-code","text":"#ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Namespaces Name itk Classes Name class itk::ThinPlateSplineKernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#libsalignmenttransformsitkthinplatesplinekerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#classes","text":"Name class itk::ThinPlateSplineKernelTransform2","title":"Classes"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/math3d_8h.html","text":"Libs/Mesh/PreviewMeshQC/math3d.h Classes Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR Types Name typedef unsigned char uchar Functions Name quatd operator* (const double a, const quatd & q) Types Documentation typedef uchar typedef unsigned char uchar ; Functions Documentation function operator* inline quatd operator * ( const double a , const quatd & q ) Source code #pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#libsmeshpreviewmeshqcmath3dh","text":"","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#classes","text":"Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR","title":"Classes"},{"location":"api/Files/math3d_8h.html#types","text":"Name typedef unsigned char uchar","title":"Types"},{"location":"api/Files/math3d_8h.html#functions","text":"Name quatd operator* (const double a, const quatd & q)","title":"Functions"},{"location":"api/Files/math3d_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/math3d_8h.html#typedef-uchar","text":"typedef unsigned char uchar ;","title":"typedef uchar"},{"location":"api/Files/math3d_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/math3d_8h.html#function-operator","text":"inline quatd operator * ( const double a , const quatd & q )","title":"function operator*"},{"location":"api/Files/math3d_8h.html#source-code","text":"#pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/meshFIM_8h.html","text":"Libs/Mesh/meshFIM.h Classes Name class meshFIM Defines Name _EPS ONE CURVATURE GENERATE_GEO_FILES Macros Documentation define _EPS #define _EPS 1e-06 define ONE #define ONE 1 define CURVATURE #define CURVATURE 2 define GENERATE_GEO_FILES #define GENERATE_GEO_FILES 1 Source code #ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#libsmeshmeshfimh","text":"","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#classes","text":"Name class meshFIM","title":"Classes"},{"location":"api/Files/meshFIM_8h.html#defines","text":"Name _EPS ONE CURVATURE GENERATE_GEO_FILES","title":"Defines"},{"location":"api/Files/meshFIM_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/meshFIM_8h.html#define-_eps","text":"#define _EPS 1e-06","title":"define _EPS"},{"location":"api/Files/meshFIM_8h.html#define-one","text":"#define ONE 1","title":"define ONE"},{"location":"api/Files/meshFIM_8h.html#define-curvature","text":"#define CURVATURE 2","title":"define CURVATURE"},{"location":"api/Files/meshFIM_8h.html#define-generate_geo_files","text":"#define GENERATE_GEO_FILES 1","title":"define GENERATE_GEO_FILES"},{"location":"api/Files/meshFIM_8h.html#source-code","text":"#ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/pybind__utils_8h.html","text":"Libs/Python/pybind_utils.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#libspythonpybind_utilsh","text":"","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/pybind__utils_8h.html#source-code","text":"#pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/resource_8h.html","text":"Studio/Resources/resource.h Defines Name IDI_ICON1 Macros Documentation define IDI_ICON1 #define IDI_ICON1 101 Source code //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#studioresourcesresourceh","text":"","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#defines","text":"Name IDI_ICON1","title":"Defines"},{"location":"api/Files/resource_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/resource_8h.html#define-idi_icon1","text":"#define IDI_ICON1 101","title":"define IDI_ICON1"},{"location":"api/Files/resource_8h.html#source-code","text":"//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/stdafx_8h.html","text":"Libs/Mesh/PreviewMeshQC/stdafx.h Source code // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#libsmeshpreviewmeshqcstdafxh","text":"","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#source-code","text":"// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/vtkPolyDataToImageData_8h.html","text":"Libs/Analyze/vtkPolyDataToImageData.h Classes Name class vtkPolyDataToImageData Source code // This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#libsanalyzevtkpolydatatoimagedatah","text":"","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#classes","text":"Name class vtkPolyDataToImageData","title":"Classes"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#source-code","text":"// This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Modules/group__Group-Common.html","text":"Common Classes Classes Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-25 at 15:40:28 +0000","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#common-classes","text":"","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#classes","text":"Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Constraint.html","text":"Constraint Classes Updated on 2023-10-25 at 15:40:28 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Constraint.html#constraint-classes","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Image.html","text":"Image Classes Classes Name class shapeworks::Image Updated on 2023-10-25 at 15:40:28 +0000","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#image-classes","text":"","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#classes","text":"Name class shapeworks::Image Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Mesh.html","text":"Mesh Classes Classes Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-25 at 15:40:28 +0000","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#mesh-classes","text":"","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Modules/index_groups.html","text":"Modules group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-25 at 15:40:28 +0000","title":"Groups"},{"location":"api/Modules/index_groups.html#modules","text":"group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-25 at 15:40:28 +0000","title":"Modules"},{"location":"api/Namespaces/index_namespaces.html","text":"Namespaces namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Namespaces"},{"location":"api/Namespaces/index_namespaces.html#namespaces","text":"namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceUi.html","text":"Ui Updated on 2023-10-25 at 15:40:27 +0000","title":"Ui"},{"location":"api/Namespaces/namespaceUi.html#ui","text":"Updated on 2023-10-25 at 15:40:27 +0000","title":"Ui"},{"location":"api/Namespaces/namespacefmt.html","text":"fmt Classes Name struct fmt::formatter< QString > Updated on 2023-10-25 at 15:40:26 +0000","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#fmt","text":"","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#classes","text":"Name struct fmt::formatter< QString > Updated on 2023-10-25 at 15:40:26 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html","text":"itk Namespaces Name itk::Functor Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter Functions Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc) Attributes Name int nbh6Table int nbh26Table Functions Documentation function fillLocal6Neighbours static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination. function label6Neighbours static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel. function label26Neighbours static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel. function connectedComponents static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc ) Attributes Documentation variable nbh6Table static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } }; variable nbh26Table static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#itk","text":"","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#namespaces","text":"Name itk::Functor","title":"Namespaces"},{"location":"api/Namespaces/namespaceitk.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html#functions","text":"Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc)","title":"Functions"},{"location":"api/Namespaces/namespaceitk.html#attributes","text":"Name int nbh6Table int nbh26Table","title":"Attributes"},{"location":"api/Namespaces/namespaceitk.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceitk.html#function-filllocal6neighbours","text":"static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination.","title":"function fillLocal6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label6neighbours","text":"static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel.","title":"function label6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label26neighbours","text":"static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel.","title":"function label26Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-connectedcomponents","text":"static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc )","title":"function connectedComponents"},{"location":"api/Namespaces/namespaceitk.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh6table","text":"static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } };","title":"variable nbh6Table"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh26table","text":"static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable nbh26Table"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html","text":"itk::Functor Classes Name class itk::Functor::MultiplyByConstant Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#itkfunctor","text":"","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#classes","text":"Name class itk::Functor::MultiplyByConstant Updated on 2023-10-25 at 15:40:26 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html","text":"shapeworks User usage reporting (telemetry) More... Namespaces Name shapeworks::mesh shapeworks::particles shapeworks::project Classes Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker Types Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle Functions Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data) Attributes Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines Detailed Description User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes Types Documentation enum DisplayMode Enumerator Value Description Original 0 Groomed 1 Reconstructed 2 enum Axis Enumerator Value Description invalid -1 X Y Z handy way to specify an axis enum ConstraintType Enumerator Value Description CuttingPlane 'C' FreeForm 'F' enum CorrespondenceMode Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8 enum DomainType Enumerator Value Description Image 'I' Mesh 'M' Contour 'C' enum ArrayTransferOptions Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E enum LandmarkVisibility Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E enum MessageType Enumerator Value Description normal warning error debug using CacheMap using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ; using CacheList using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ; using ShapeHandle using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ; using ShapeList using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ; using MeshHandle using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ; using MeshList using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ; using Coord using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework. using Dims using shapeworks :: Dims = typedef itk :: Size < 3 > ; using Point3 using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ; using Vector3 using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ; using Matrix44 using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ; using Matrix33 using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ; using IPoint3 using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ; using FPoint3 using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ; using Covariant using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ; using Vector using shapeworks :: Vector = typedef Vector3 ; using Point using shapeworks :: Point = typedef Point3 ; using Matrix using shapeworks :: Matrix = typedef Matrix33 ; using Plane using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ; using Array using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ; using Field using shapeworks :: Field = typedef Array ; using PointArray using shapeworks :: PointArray = typedef std :: vector < Point3 > ; using GenericTransform using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer. using IdentityTransform using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ; using TransformPtr using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ; using AffineTransform using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands. using AffineTransformPtr using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ; using MeshTransform using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms. using ThinPlateSplineTransform using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface . using RBFSSparseTransform using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; using ProjectHandle using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ; using VnlMatrix template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; typedef SessionHandle typedef QSharedPointer < Session > shapeworks :: SessionHandle ; using TransformType using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this. typedef LightboxHandle typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ; typedef ViewerHandle typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ; typedef ViewerList typedef QVector < ViewerHandle > shapeworks :: ViewerList ; typedef VisualizerHandle typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ; Functions Documentation function COMMAND_DECLARE COMMAND_DECLARE ( ReadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageInfo , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Antialias , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResampleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResizeImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RecenterImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( PadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Rotate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ExtractLabel , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CloseHoles , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Binarize , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeDT , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CurvatureFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GradientFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SigmoidFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( IntensityFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Blur , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageBounds , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CropImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ICPRigid , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetOrigin , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetSpacing , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( NegateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( AddImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SubtractImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MultiplyImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( DivideImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageToMesh , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetRegion , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Isolate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Compactness , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Generalization , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Specificity , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshInfo , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Coverage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Smooth , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SmoothSinc , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Remesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RemeshPercent , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( InvertNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TransformMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FillHoles , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ProbeVolume , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshBounds , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Distance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldRange , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldMean , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldStd , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldNames , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FixElement , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClosestPoint , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeanNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Curvature , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToImage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToDT , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeThickness , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Seed , ShapeworksCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ) function display_mode_to_string std :: string display_mode_to_string ( DisplayMode display_mode ) function string_to_display_mode DisplayMode string_to_display_mode ( std :: string str ) function operator<< std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ) function operator<< std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ) function makeVector Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) function makePointArray PointArray makePointArray ( int size , Point3 value ) function createTransform TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) ) function makePlane Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane. function makePlane Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ) function getOrigin Point getOrigin ( const Plane plane ) Get origin and normal of plane. function getNormal Vector3 getNormal ( const Plane plane ) function createMeshTransform MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) function toPoint Point toPoint ( const Dims & d ) For deliberate conversions between types. function toPoint Point toPoint ( const Coord & c ) function toVector Vector toVector ( const Dims & d ) function toVector Vector toVector ( const Point & p ) function toVector Vector toVector ( const itk :: CovariantVector < double , 3 > & v ) function toPoint Point toPoint ( const Vector & v ) function toCoord Coord toCoord ( const Dims & d ) function toDims Dims toDims ( const Coord & c ) function toDims Dims toDims ( const Point & p ) function toCoord Coord toCoord ( const Point & p ) function negate template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) function negate Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector) function invertValue template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector. function invertValue Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector) function dotProduct Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products. function crossProduct Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ) function length double length ( const Vector3 & v ) function toAxis Axis toAxis ( const std :: string & str ) function axisToString std :: string axisToString ( Axis axis ) function axis_is_valid bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid. function axis_is_valid bool axis_is_valid ( const Axis & axis ) function degToRad double degToRad ( const double deg ) convert degrees to radians function mean double mean ( const Field field ) incrementally compute (single-component) mean of field function stddev double stddev ( const Field field ) compute (single-component) standard deviation of field function range std :: vector < double > range ( const Field field ) compute (single-component) range of field function operator+ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q ) function operator- template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q ) function operator+= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q ) function operator-= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x ) function operator*= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x ) function operator/= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x ) function epsEqual template < typename T > bool epsEqual ( T a , T b , T epsilon ) function epsEqual template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) function epsEqual bool epsEqual ( double a , double b , double eps ) function clamp template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17. function operator<< std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image function operator* Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h] function operator/ Image operator / ( const Image & img , const double x ) function operator*= Image & operator *= ( Image & img , const double x ) function operator/= Image & operator /= ( Image & img , const double x ) function operator<< std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh function itkEventMacro itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ) function SaveReconstructions void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) function variant_to_string template < typename T > std :: string variant_to_string ( T begin , T end ) function printNumpyArrayInfo void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc) function verifyOrderAndPacking void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not function setOwnership void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns function wrapNumpyArr Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign function pyToArr Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data function arrToPy py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer function itkTransformToEigen Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ) function eigen44ToItkTransform TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ) function vtkTransformToEigen Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ) function eigen44ToVtkTransform MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ) function itkToEigen template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix. function eigenToItk template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. function vnlToEigen template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix. function wrapDataWithEigen template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location. function wrapDataWithEigen template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix. function wrapDataWithItk template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data. Attributes Documentation variable Pi const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#shapeworks","text":"User usage reporting (telemetry) More...","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#namespaces","text":"Name shapeworks::mesh shapeworks::particles shapeworks::project","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks.html#classes","text":"Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html#types","text":"Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks.html#functions","text":"Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes","text":"Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks.html#detailed-description","text":"User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes","title":"Detailed Description"},{"location":"api/Namespaces/namespaceshapeworks.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-displaymode","text":"Enumerator Value Description Original 0 Groomed 1 Reconstructed 2","title":"enum DisplayMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-axis","text":"Enumerator Value Description invalid -1 X Y Z handy way to specify an axis","title":"enum Axis"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-constrainttype","text":"Enumerator Value Description CuttingPlane 'C' FreeForm 'F'","title":"enum ConstraintType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-correspondencemode","text":"Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8","title":"enum CorrespondenceMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-domaintype","text":"Enumerator Value Description Image 'I' Mesh 'M' Contour 'C'","title":"enum DomainType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-arraytransferoptions","text":"Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative","title":"enum ArrayTransferOptions"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkcolumns","text":"Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E","title":"enum LandmarkColumns"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkvisibility","text":"Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E","title":"enum LandmarkVisibility"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-messagetype","text":"Enumerator Value Description normal warning error debug","title":"enum MessageType"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachemap","text":"using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ;","title":"using CacheMap"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachelist","text":"using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ;","title":"using CacheList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapehandle","text":"using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ;","title":"using ShapeHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapelist","text":"using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ;","title":"using ShapeList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshhandle","text":"using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ;","title":"using MeshHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshlist","text":"using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ;","title":"using MeshList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-coord","text":"using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework.","title":"using Coord"},{"location":"api/Namespaces/namespaceshapeworks.html#using-dims","text":"using shapeworks :: Dims = typedef itk :: Size < 3 > ;","title":"using Dims"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point3","text":"using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector3","text":"using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ;","title":"using Vector3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix44","text":"using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ;","title":"using Matrix44"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix33","text":"using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ;","title":"using Matrix33"},{"location":"api/Namespaces/namespaceshapeworks.html#using-ipoint3","text":"using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ;","title":"using IPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-fpoint3","text":"using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ;","title":"using FPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-covariant","text":"using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ;","title":"using Covariant"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector","text":"using shapeworks :: Vector = typedef Vector3 ;","title":"using Vector"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point","text":"using shapeworks :: Point = typedef Point3 ;","title":"using Point"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix","text":"using shapeworks :: Matrix = typedef Matrix33 ;","title":"using Matrix"},{"location":"api/Namespaces/namespaceshapeworks.html#using-plane","text":"using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ;","title":"using Plane"},{"location":"api/Namespaces/namespaceshapeworks.html#using-array","text":"using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ;","title":"using Array"},{"location":"api/Namespaces/namespaceshapeworks.html#using-field","text":"using shapeworks :: Field = typedef Array ;","title":"using Field"},{"location":"api/Namespaces/namespaceshapeworks.html#using-pointarray","text":"using shapeworks :: PointArray = typedef std :: vector < Point3 > ;","title":"using PointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#using-generictransform","text":"using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer.","title":"using GenericTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-identitytransform","text":"using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ;","title":"using IdentityTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformptr","text":"using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ;","title":"using TransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransform","text":"using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands.","title":"using AffineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransformptr","text":"using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ;","title":"using AffineTransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshtransform","text":"using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms.","title":"using MeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-thinplatesplinetransform","text":"using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface .","title":"using ThinPlateSplineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-rbfssparsetransform","text":"using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ;","title":"using RBFSSparseTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-projecthandle","text":"using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ;","title":"using ProjectHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vnlmatrix","text":"template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ;","title":"using VnlMatrix"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-sessionhandle","text":"typedef QSharedPointer < Session > shapeworks :: SessionHandle ;","title":"typedef SessionHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformtype","text":"using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this.","title":"using TransformType"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-lightboxhandle","text":"typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ;","title":"typedef LightboxHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerhandle","text":"typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ;","title":"typedef ViewerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerlist","text":"typedef QVector < ViewerHandle > shapeworks :: ViewerList ;","title":"typedef ViewerList"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-visualizerhandle","text":"typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ;","title":"typedef VisualizerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare","text":"COMMAND_DECLARE ( ReadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_1","text":"COMMAND_DECLARE ( WriteImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_2","text":"COMMAND_DECLARE ( ImageInfo , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_3","text":"COMMAND_DECLARE ( Antialias , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_4","text":"COMMAND_DECLARE ( ResampleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_5","text":"COMMAND_DECLARE ( ResizeImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_6","text":"COMMAND_DECLARE ( RecenterImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_7","text":"COMMAND_DECLARE ( PadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_8","text":"COMMAND_DECLARE ( TranslateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_9","text":"COMMAND_DECLARE ( ScaleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_10","text":"COMMAND_DECLARE ( Rotate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_11","text":"COMMAND_DECLARE ( ExtractLabel , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_12","text":"COMMAND_DECLARE ( CloseHoles , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_13","text":"COMMAND_DECLARE ( Binarize , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_14","text":"COMMAND_DECLARE ( ComputeDT , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_15","text":"COMMAND_DECLARE ( CurvatureFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_16","text":"COMMAND_DECLARE ( GradientFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_17","text":"COMMAND_DECLARE ( SigmoidFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_18","text":"COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_19","text":"COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_20","text":"COMMAND_DECLARE ( IntensityFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_21","text":"COMMAND_DECLARE ( Blur , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_22","text":"COMMAND_DECLARE ( BoundingBoxImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_23","text":"COMMAND_DECLARE ( ImageBounds , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_24","text":"COMMAND_DECLARE ( CropImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_25","text":"COMMAND_DECLARE ( ICPRigid , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_26","text":"COMMAND_DECLARE ( ClipImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_27","text":"COMMAND_DECLARE ( ReflectImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_28","text":"COMMAND_DECLARE ( SetOrigin , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_29","text":"COMMAND_DECLARE ( SetSpacing , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_30","text":"COMMAND_DECLARE ( WarpImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_31","text":"COMMAND_DECLARE ( CompareImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_32","text":"COMMAND_DECLARE ( NegateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_33","text":"COMMAND_DECLARE ( AddImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_34","text":"COMMAND_DECLARE ( SubtractImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_35","text":"COMMAND_DECLARE ( MultiplyImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_36","text":"COMMAND_DECLARE ( DivideImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_37","text":"COMMAND_DECLARE ( ImageToMesh , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_38","text":"COMMAND_DECLARE ( SetRegion , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_39","text":"COMMAND_DECLARE ( Isolate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_40","text":"COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_41","text":"COMMAND_DECLARE ( Compactness , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_42","text":"COMMAND_DECLARE ( Generalization , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_43","text":"COMMAND_DECLARE ( Specificity , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_44","text":"COMMAND_DECLARE ( ReadMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_45","text":"COMMAND_DECLARE ( WriteMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_46","text":"COMMAND_DECLARE ( MeshInfo , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_47","text":"COMMAND_DECLARE ( Coverage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_48","text":"COMMAND_DECLARE ( Smooth , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_49","text":"COMMAND_DECLARE ( SmoothSinc , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_50","text":"COMMAND_DECLARE ( Remesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_51","text":"COMMAND_DECLARE ( RemeshPercent , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_52","text":"COMMAND_DECLARE ( InvertNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_53","text":"COMMAND_DECLARE ( ReflectMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_54","text":"COMMAND_DECLARE ( TransformMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_55","text":"COMMAND_DECLARE ( FillHoles , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_56","text":"COMMAND_DECLARE ( ProbeVolume , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_57","text":"COMMAND_DECLARE ( ClipMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_58","text":"COMMAND_DECLARE ( TranslateMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_59","text":"COMMAND_DECLARE ( ScaleMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_60","text":"COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_61","text":"COMMAND_DECLARE ( MeshBounds , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_62","text":"COMMAND_DECLARE ( Distance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_63","text":"COMMAND_DECLARE ( ComputeNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_64","text":"COMMAND_DECLARE ( SetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_65","text":"COMMAND_DECLARE ( GetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_66","text":"COMMAND_DECLARE ( SetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_67","text":"COMMAND_DECLARE ( GetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_68","text":"COMMAND_DECLARE ( FieldRange , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_69","text":"COMMAND_DECLARE ( FieldMean , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_70","text":"COMMAND_DECLARE ( FieldStd , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_71","text":"COMMAND_DECLARE ( FieldNames , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_72","text":"COMMAND_DECLARE ( FixElement , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_73","text":"COMMAND_DECLARE ( ClipClosedSurface , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_74","text":"COMMAND_DECLARE ( ClosestPoint , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_75","text":"COMMAND_DECLARE ( GeodesicDistance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_76","text":"COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_77","text":"COMMAND_DECLARE ( MeanNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_78","text":"COMMAND_DECLARE ( Curvature , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_79","text":"COMMAND_DECLARE ( MeshToImage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_80","text":"COMMAND_DECLARE ( MeshToDT , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_81","text":"COMMAND_DECLARE ( CompareMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_82","text":"COMMAND_DECLARE ( WarpMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_83","text":"COMMAND_DECLARE ( ComputeThickness , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_84","text":"COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_85","text":"COMMAND_DECLARE ( Seed , ShapeworksCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_86","text":"COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_87","text":"COMMAND_DECLARE ( GroomCommand , GroomCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_88","text":"COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_89","text":"COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-display_mode_to_string","text":"std :: string display_mode_to_string ( DisplayMode display_mode )","title":"function display_mode_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-string_to_display_mode","text":"DisplayMode string_to_display_mode ( std :: string str )","title":"function string_to_display_mode"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_1","text":"std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makevector","text":"Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version)","title":"function makeVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makepointarray","text":"PointArray makePointArray ( int size , Point3 value )","title":"function makePointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createtransform","text":"TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) )","title":"function createTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane","text":"Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane.","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane_1","text":"Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 )","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getorigin","text":"Point getOrigin ( const Plane plane ) Get origin and normal of plane.","title":"function getOrigin"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getnormal","text":"Vector3 getNormal ( const Plane plane )","title":"function getNormal"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createmeshtransform","text":"MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat )","title":"function createMeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint","text":"Point toPoint ( const Dims & d ) For deliberate conversions between types.","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_1","text":"Point toPoint ( const Coord & c )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector","text":"Vector toVector ( const Dims & d )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_1","text":"Vector toVector ( const Point & p )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_2","text":"Vector toVector ( const itk :: CovariantVector < double , 3 > & v )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_2","text":"Point toPoint ( const Vector & v )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord","text":"Coord toCoord ( const Dims & d )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims","text":"Dims toDims ( const Coord & c )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims_1","text":"Dims toDims ( const Point & p )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord_1","text":"Coord toCoord ( const Point & p )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate","text":"template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate_1","text":"Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue","text":"template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector.","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue_1","text":"Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector)","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-dotproduct","text":"Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products.","title":"function dotProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-crossproduct","text":"Vector3 crossProduct ( const Vector3 & a , const Vector3 & b )","title":"function crossProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-length","text":"double length ( const Vector3 & v )","title":"function length"},{"location":"api/Namespaces/namespaceshapeworks.html#function-toaxis","text":"Axis toAxis ( const std :: string & str )","title":"function toAxis"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axistostring","text":"std :: string axisToString ( Axis axis )","title":"function axisToString"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid","text":"bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid.","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid_1","text":"bool axis_is_valid ( const Axis & axis )","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-degtorad","text":"double degToRad ( const double deg ) convert degrees to radians","title":"function degToRad"},{"location":"api/Namespaces/namespaceshapeworks.html#function-mean","text":"double mean ( const Field field ) incrementally compute (single-component) mean of field","title":"function mean"},{"location":"api/Namespaces/namespaceshapeworks.html#function-stddev","text":"double stddev ( const Field field ) compute (single-component) standard deviation of field","title":"function stddev"},{"location":"api/Namespaces/namespaceshapeworks.html#function-range","text":"std :: vector < double > range ( const Field field ) compute (single-component) range of field","title":"function range"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_2","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q )","title":"function operator+"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q )","title":"function operator-"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_3","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_4","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_5","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q )","title":"function operator+="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q )","title":"function operator-="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_6","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_7","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_8","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_9","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal","text":"template < typename T > bool epsEqual ( T a , T b , T epsilon )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_2","text":"bool epsEqual ( double a , double b , double eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-clamp","text":"template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17.","title":"function clamp"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_10","text":"std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_11","text":"Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h]","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_12","text":"Image operator / ( const Image & img , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_13","text":"Image & operator *= ( Image & img , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_14","text":"Image & operator /= ( Image & img , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_15","text":"std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro","text":"itkEventMacro ( ParticleDomainAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_1","text":"itkEventMacro ( ParticleTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_2","text":"itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_3","text":"itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_4","text":"itkEventMacro ( ParticlePositionSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_5","text":"itkEventMacro ( ParticlePositionAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_6","text":"itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-savereconstructions","text":"void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo )","title":"function SaveReconstructions"},{"location":"api/Namespaces/namespaceshapeworks.html#function-variant_to_string","text":"template < typename T > std :: string variant_to_string ( T begin , T end )","title":"function variant_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-printnumpyarrayinfo","text":"void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc)","title":"function printNumpyArrayInfo"},{"location":"api/Namespaces/namespaceshapeworks.html#function-verifyorderandpacking","text":"void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not","title":"function verifyOrderAndPacking"},{"location":"api/Namespaces/namespaceshapeworks.html#function-setownership","text":"void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns","title":"function setOwnership"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapnumpyarr","text":"Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign","title":"function wrapNumpyArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-pytoarr","text":"Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data","title":"function pyToArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-arrtopy","text":"py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer","title":"function arrToPy"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktransformtoeigen","text":"Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform )","title":"function itkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44toitktransform","text":"TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat )","title":"function eigen44ToItkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vtktransformtoeigen","text":"Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform )","title":"function vtkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44tovtktransform","text":"MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat )","title":"function eigen44ToVtkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktoeigen","text":"template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix.","title":"function itkToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigentoitk","text":"template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix.","title":"function eigenToItk"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vnltoeigen","text":"template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix.","title":"function vnlToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen","text":"template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen_1","text":"template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawithitk","text":"template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data.","title":"function wrapDataWithItk"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#variable-pi","text":"const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-25 at 15:40:26 +0000","title":"variable Pi"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html","text":"shapeworks::mesh Functions Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT) Functions Documentation function compute_thickness void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#shapeworksmesh","text":"","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions","text":"Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#function-compute_thickness","text":"void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_thickness"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html","text":"shapeworks::particles Functions Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points) Functions Documentation function read_particles Eigen :: VectorXd read_particles ( std :: string filename ) function read_particles_as_vector std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename ) function write_particles void write_particles ( std :: string filename , const Eigen :: VectorXd & points ) function write_particles_from_vector void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#shapeworksparticles","text":"","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions","text":"Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles","text":"Eigen :: VectorXd read_particles ( std :: string filename )","title":"function read_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles_as_vector","text":"std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename )","title":"function read_particles_as_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles","text":"void write_particles ( std :: string filename , const Eigen :: VectorXd & points )","title":"function write_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles_from_vector","text":"void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_particles_from_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html","text":"shapeworks::project Namespaces Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#shapeworksproject","text":"","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#namespaces","text":"Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-25 at 15:40:27 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html","text":"shapeworks::project::prefixes Attributes Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX Attributes Documentation variable SEGMENTATION_PREFIX static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; variable LANDMARKS_FILE_PREFIX static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; variable SHAPE_PREFIX static constexpr const char * SHAPE_PREFIX = \"shape_\" ; variable MESH_PREFIX static constexpr const char * MESH_PREFIX = \"mesh_\" ; variable CONTOUR_PREFIX static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; variable GROOMED_PREFIX static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; variable GROOMED_CONTOUR_PREFIX static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; variable CONSTRAINTS_PREFIX static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; variable GROOMED_TRANSFORMS_PREFIX static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; variable PROCRUSTES_TRANSFORMS_PREFIX static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; variable IMAGE_PREFIX static constexpr const char * IMAGE_PREFIX = \"image_\" ; variable FEATURE_PREFIX static constexpr const char * FEATURE_PREFIX = \"feature_\" ; variable GROUP_PREFIX static constexpr const char * GROUP_PREFIX = \"group_\" ; variable LOCAL_PARTICLES static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; variable WORLD_PARTICLES static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; variable LOCAL_PARTICLES_PREFIX static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; variable WORLD_PARTICLES_PREFIX static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#shapeworksprojectprefixes","text":"","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes","text":"Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-segmentation_prefix","text":"static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ;","title":"variable SEGMENTATION_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-landmarks_file_prefix","text":"static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ;","title":"variable LANDMARKS_FILE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-shape_prefix","text":"static constexpr const char * SHAPE_PREFIX = \"shape_\" ;","title":"variable SHAPE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-mesh_prefix","text":"static constexpr const char * MESH_PREFIX = \"mesh_\" ;","title":"variable MESH_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-contour_prefix","text":"static constexpr const char * CONTOUR_PREFIX = \"contour_\" ;","title":"variable CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_prefix","text":"static constexpr const char * GROOMED_PREFIX = \"groomed_\" ;","title":"variable GROOMED_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_contour_prefix","text":"static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ;","title":"variable GROOMED_CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-constraints_prefix","text":"static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ;","title":"variable CONSTRAINTS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_transforms_prefix","text":"static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ;","title":"variable GROOMED_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-procrustes_transforms_prefix","text":"static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ;","title":"variable PROCRUSTES_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-image_prefix","text":"static constexpr const char * IMAGE_PREFIX = \"image_\" ;","title":"variable IMAGE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-feature_prefix","text":"static constexpr const char * FEATURE_PREFIX = \"feature_\" ;","title":"variable FEATURE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-group_prefix","text":"static constexpr const char * GROUP_PREFIX = \"group_\" ;","title":"variable GROUP_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles","text":"static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ;","title":"variable LOCAL_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles","text":"static constexpr const char * WORLD_PARTICLES = \"world_particles\" ;","title":"variable WORLD_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles_prefix","text":"static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ;","title":"variable LOCAL_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles_prefix","text":"static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable WORLD_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html","text":"shapeworks::project::types Types Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap Types Documentation using StringMap using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ; using StringList using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ; using StringMapList using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ; using StringMultiMap using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#shapeworksprojecttypes","text":"","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types","text":"Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmap","text":"using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringlist","text":"using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ;","title":"using StringList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmaplist","text":"using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ;","title":"using StringMapList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmultimap","text":"using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-25 at 15:40:27 +0000","title":"using StringMultiMap"},{"location":"api/Namespaces/namespacestd.html","text":"std Updated on 2023-10-25 at 15:40:27 +0000","title":"std"},{"location":"api/Namespaces/namespacestd.html#std","text":"Updated on 2023-10-25 at 15:40:27 +0000","title":"std"},{"location":"api/Namespaces/namespaceutils.html","text":"utils Updated on 2023-10-25 at 15:40:27 +0000","title":"utils"},{"location":"api/Namespaces/namespaceutils.html#utils","text":"Updated on 2023-10-25 at 15:40:27 +0000","title":"utils"},{"location":"backlog/ShapeworksCmdTools.html","text":"ShapeWorks Tools The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below. [Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities] Image Tools Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing Read This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read. Write This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write. AntiAliasing This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims]. PadVolumeWithConstant This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels. ResampleVolumesToBeIsotropic This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image]. Binarize This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0]. Recenter This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image ReflectVolumes A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored. ClipVolume Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44 CloseHoles TODO Cropping Images This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction ExtractGivenLabelImage A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image. FastMarching A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background. FindLargestBoundingBox A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides ThresholdImages A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold TopologyPreservingSmoothing A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0]. WriteImageInfoToText A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing. Mesh Tools Mesh manipulation is used to blah blah blah... ClipClosedSurface ComputeCurvatureAndCoordFiles ComputeGeodesicDistanceToCurve ComputeGeodesicDistanceToLandmark ComputeGeodesicDistanceFromVerticesToPoints ComputeMeshGeodesics ComputeRasterizationVolumeOriginAndSize ExtractVertexFeatureFromMesh FillMeshHoles FixCuttingPlanes GenerateBinaryAndDTImagesFromMeshes GenerateFeatureGradientFiles GenerateFidsFiles GenerateFidsFilesFromMeshes GetFeatureVolume ParticleBasedSurfaceReconstruction PreviewCmd ProbeFeatureVolumesAtMeshVertices ProbeNormals ProjectPointsOntoMesh ComputeMeanNormals GenerateNormalFeaFiles Reflect Meshes RemoveFidsDTLeakage SmoothMesh ClipClosedSurface Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region ComputeCurvatureAndCoordFiles Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files ComputeGeodesicDistanceToCurve Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceToLandmark Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceFromVerticesToPoints Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName ComputeMeshGeodesics Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance ComputeRasterizationVolumeOriginAndSize Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information ExtractVertexFeatureFromMesh Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files FillMeshHoles Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced FixCuttingPlanes Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file GenerateBinaryAndDTImagesFromMeshes Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform GenerateFeatureGradientFiles Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\" GenerateFidsFiles Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GenerateFidsFilesFromMeshes Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GetFeatureVolume Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values. PreviewCmd This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5) ProbeFeatureVolumesAtMeshVertices Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced ProbeNormals Usage: ProbeNormals DTfilename pointsFilename outFileName ComputeMeanNormals Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt) GenerateNormalFeaFiles Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed Reflect Meshes A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply) RemoveFidsDTLeakage This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames SmoothMesh Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration Alignment Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape] ICPRigid3DImageRegistration A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image. ICPRigid3DMeshRegistration Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment ReflectMeshes Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis TranslateShapeToImageOrigin A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters Resize_origin_resampleShape TODO Analysis Analysis is used to blah blah blah... Optimization Optimization is used to blah blah blah... File Utilities The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT] GENERIC MESH FORMAT CONVERSION Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile fea2vtk Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. stl2ply Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply) stl2vtk Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk) vtk2ply Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply) VTKUnstructuredGridToPolyData Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles MeshFromDT TODO FeaFromVTK TODO","title":"ShapeworksCmdTools"},{"location":"backlog/ShapeworksCmdTools.html#_1","text":"","title":""},{"location":"backlog/ShapeworksCmdTools.html#shapeworks-tools","text":"","title":"ShapeWorks Tools"},{"location":"backlog/ShapeworksCmdTools.html#_2","text":"The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below.","title":""},{"location":"backlog/ShapeworksCmdTools.html#_3","text":"[Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities]","title":""},{"location":"backlog/ShapeworksCmdTools.html#image-tools","text":"Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing","title":"Image Tools"},{"location":"backlog/ShapeworksCmdTools.html#read","text":"This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read.","title":"Read"},{"location":"backlog/ShapeworksCmdTools.html#write","text":"This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write.","title":"Write"},{"location":"backlog/ShapeworksCmdTools.html#antialiasing","text":"This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims].","title":" AntiAliasing"},{"location":"backlog/ShapeworksCmdTools.html#padvolumewithconstant","text":"This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels.","title":"PadVolumeWithConstant"},{"location":"backlog/ShapeworksCmdTools.html#resamplevolumestobeisotropic","text":"This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image].","title":"ResampleVolumesToBeIsotropic"},{"location":"backlog/ShapeworksCmdTools.html#binarize","text":"This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0].","title":"Binarize"},{"location":"backlog/ShapeworksCmdTools.html#recenter","text":"This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image","title":"Recenter"},{"location":"backlog/ShapeworksCmdTools.html#reflectvolumes","text":"A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored.","title":"ReflectVolumes"},{"location":"backlog/ShapeworksCmdTools.html#clipvolume","text":"Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44","title":"ClipVolume"},{"location":"backlog/ShapeworksCmdTools.html#closeholes","text":"TODO","title":"CloseHoles"},{"location":"backlog/ShapeworksCmdTools.html#cropping-images","text":"This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction","title":"Cropping Images"},{"location":"backlog/ShapeworksCmdTools.html#extractgivenlabelimage","text":"A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image.","title":"ExtractGivenLabelImage"},{"location":"backlog/ShapeworksCmdTools.html#fastmarching","text":"A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background.","title":"FastMarching"},{"location":"backlog/ShapeworksCmdTools.html#findlargestboundingbox","text":"A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides","title":"FindLargestBoundingBox"},{"location":"backlog/ShapeworksCmdTools.html#thresholdimages","text":"A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold","title":"ThresholdImages"},{"location":"backlog/ShapeworksCmdTools.html#topologypreservingsmoothing","text":"A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0].","title":"TopologyPreservingSmoothing"},{"location":"backlog/ShapeworksCmdTools.html#writeimageinfototext","text":"A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing.","title":"WriteImageInfoToText"},{"location":"backlog/ShapeworksCmdTools.html#mesh-tools","text":"Mesh manipulation is used to blah blah blah...","title":"Mesh Tools"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface","text":"","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles","text":"","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve","text":"","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark","text":"","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints","text":"","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics","text":"","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize","text":"","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh","text":"","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes","text":"","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes","text":"","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes","text":"","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles","text":"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles","text":"","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes","text":"","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume","text":"","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#particlebasedsurfacereconstruction","text":"","title":"ParticleBasedSurfaceReconstruction"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd","text":"","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices","text":"","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals","text":"","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#projectpointsontomesh","text":"","title":"ProjectPointsOntoMesh"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals","text":"","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles","text":"","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes","text":"","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage","text":"","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh","text":"","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface_1","text":"Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles_1","text":"Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints_1","text":"Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics_1","text":"Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize_1","text":"Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh_1","text":"Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes_1","text":"Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes_1","text":"Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes_1","text":"Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles_1","text":"Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume_1","text":"Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values.","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd_1","text":"This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5)","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices_1","text":"Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals_1","text":"Usage: ProbeNormals DTfilename pointsFilename outFileName","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals_1","text":"Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt)","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles_1","text":"Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes_1","text":"A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply)","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage_1","text":"This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh_1","text":"Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#alignment","text":"Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape]","title":"Alignment"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dimageregistration","text":"A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image.","title":"ICPRigid3DImageRegistration"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dmeshregistration","text":"Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment","title":"ICPRigid3DMeshRegistration"},{"location":"backlog/ShapeworksCmdTools.html#reflectmeshes","text":"Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis","title":"ReflectMeshes"},{"location":"backlog/ShapeworksCmdTools.html#translateshapetoimageorigin","text":"A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters","title":"TranslateShapeToImageOrigin"},{"location":"backlog/ShapeworksCmdTools.html#resize_origin_resampleshape","text":"TODO","title":"Resize_origin_resampleShape"},{"location":"backlog/ShapeworksCmdTools.html#analysis","text":"Analysis is used to blah blah blah...","title":"Analysis"},{"location":"backlog/ShapeworksCmdTools.html#optimization","text":"Optimization is used to blah blah blah...","title":"Optimization"},{"location":"backlog/ShapeworksCmdTools.html#file-utilities","text":"The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT]","title":"File Utilities"},{"location":"backlog/ShapeworksCmdTools.html#generic-mesh-format-conversion","text":"Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile","title":"GENERIC MESH FORMAT CONVERSION"},{"location":"backlog/ShapeworksCmdTools.html#fea2vtk","text":"Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on.","title":"fea2vtk"},{"location":"backlog/ShapeworksCmdTools.html#stl2ply","text":"Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply)","title":"stl2ply"},{"location":"backlog/ShapeworksCmdTools.html#stl2vtk","text":"Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk)","title":"stl2vtk"},{"location":"backlog/ShapeworksCmdTools.html#vtk2ply","text":"Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply)","title":"vtk2ply"},{"location":"backlog/ShapeworksCmdTools.html#vtkunstructuredgridtopolydata","text":"Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles","title":"VTKUnstructuredGridToPolyData"},{"location":"backlog/ShapeworksCmdTools.html#meshfromdt","text":"TODO","title":"MeshFromDT"},{"location":"backlog/ShapeworksCmdTools.html#feafromvtk","text":"TODO","title":"FeaFromVTK"},{"location":"backlog/fim_v4.html","text":"FIM_V4 Library Overview TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) -- License fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Building To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables. Library Export This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#fim_v4-library","text":"","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#overview","text":"TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) --","title":"Overview"},{"location":"backlog/fim_v4.html#license","text":"fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"backlog/fim_v4.html#building","text":"To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables.","title":"Building"},{"location":"backlog/fim_v4.html#library-export","text":"This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"Library Export"},{"location":"cloud/cloud-analyze-module.html","text":"ShapeWorks Cloud Analyze Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer . View PCA The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Group Difference The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing. Charts The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view Shape Viewer While in the analyze tab, the Shape Viewer displays the mean (average) shape generated. Show Difference From Mean This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Analyze Module"},{"location":"cloud/cloud-analyze-module.html#shapeworks-cloud-analyze-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer .","title":"ShapeWorks Cloud Analyze Module"},{"location":"cloud/cloud-analyze-module.html#view-pca","text":"The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"View PCA"},{"location":"cloud/cloud-analyze-module.html#group-difference","text":"The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing.","title":"Group Difference"},{"location":"cloud/cloud-analyze-module.html#charts","text":"The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view","title":"Charts"},{"location":"cloud/cloud-analyze-module.html#shape-viewer","text":"While in the analyze tab, the Shape Viewer displays the mean (average) shape generated.","title":"Shape Viewer"},{"location":"cloud/cloud-analyze-module.html#show-difference-from-mean","text":"This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Show Difference From Mean"},{"location":"cloud/cloud-data-module.html","text":"ShapeWorks Cloud Data Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data. Anatomies Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here . Subjects Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . Landmarks Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Data Module"},{"location":"cloud/cloud-data-module.html#shapeworks-cloud-data-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data.","title":"ShapeWorks Cloud Data Module"},{"location":"cloud/cloud-data-module.html#anatomies","text":"Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here .","title":"Anatomies"},{"location":"cloud/cloud-data-module.html#subjects","text":"Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer .","title":"Subjects"},{"location":"cloud/cloud-data-module.html#landmarks","text":"Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Landmarks"},{"location":"cloud/cloud-dataset.html","text":"ShapeWorks Cloud Dataset Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations . Create Subset The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset. Thumbnail The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view. Upload Dataset Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Datasets"},{"location":"cloud/cloud-dataset.html#shapeworks-cloud-dataset","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations .","title":"ShapeWorks Cloud Dataset"},{"location":"cloud/cloud-dataset.html#create-subset","text":"The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset.","title":"Create Subset"},{"location":"cloud/cloud-dataset.html#thumbnail","text":"The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view.","title":"Thumbnail"},{"location":"cloud/cloud-dataset.html#upload-dataset","text":"Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Upload Dataset"},{"location":"cloud/cloud-groom-module.html","text":"ShapeWorks Cloud Groom Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"cloud/cloud-groom-module.html#shapeworks-cloud-groom-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Cloud Groom Module"},{"location":"cloud/cloud-optimize-module.html","text":"ShapeWorks Cloud Optimize Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"cloud/cloud-optimize-module.html#shapeworks-cloud-optimize-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Cloud Optimize Module"},{"location":"cloud/cloud-project.html","text":"ShapeWorks Cloud Project Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data. Create a Project To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client . Edit a Project To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Projects"},{"location":"cloud/cloud-project.html#shapeworks-cloud-project","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data.","title":"ShapeWorks Cloud Project"},{"location":"cloud/cloud-project.html#create-a-project","text":"To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client .","title":"Create a Project"},{"location":"cloud/cloud-project.html#edit-a-project","text":"To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Edit a Project"},{"location":"cloud/cloud-shape-viewer.html","text":"ShapeWorks Cloud Shape Viewer Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. Shape Viewer Options Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle Layers The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features Set Thumbnail Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shapeworks-cloud-shape-viewer","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean.","title":"ShapeWorks Cloud Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shape-viewer-options","text":"Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle","title":"Shape Viewer Options"},{"location":"cloud/cloud-shape-viewer.html#layers","text":"The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features","title":"Layers"},{"location":"cloud/cloud-shape-viewer.html#set-thumbnail","text":"Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Set Thumbnail"},{"location":"cloud/getting-started-with-cloud.html","text":"Getting Stared with ShapeWorks Cloud Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data. Login Screen To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ . Dataset List The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information. Project List The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information. Data Module The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information. Groom Module The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information. Optimize Module The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information. Analyze Module The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information. Shape Viewer The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Getting Started"},{"location":"cloud/getting-started-with-cloud.html#getting-stared-with-shapeworks-cloud","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data.","title":"Getting Stared with ShapeWorks Cloud"},{"location":"cloud/getting-started-with-cloud.html#login-screen","text":"To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ .","title":"Login Screen"},{"location":"cloud/getting-started-with-cloud.html#dataset-list","text":"The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information.","title":"Dataset List"},{"location":"cloud/getting-started-with-cloud.html#project-list","text":"The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information.","title":"Project List"},{"location":"cloud/getting-started-with-cloud.html#data-module","text":"The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information.","title":"Data Module"},{"location":"cloud/getting-started-with-cloud.html#groom-module","text":"The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information.","title":"Groom Module"},{"location":"cloud/getting-started-with-cloud.html#optimize-module","text":"The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information.","title":"Optimize Module"},{"location":"cloud/getting-started-with-cloud.html#analyze-module","text":"The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information.","title":"Analyze Module"},{"location":"cloud/getting-started-with-cloud.html#shape-viewer","text":"The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Shape Viewer"},{"location":"cloud/swcc.html","text":"ShapeWorks Cloud Client (SWCC) Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users. Authentication & Sessions This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out Datasets and Projects The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you. Datasets The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d ) Projects The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects The Project File The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run. Other Classes and Methods As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database Examples def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"ShapeWorks Cloud Client"},{"location":"cloud/swcc.html#shapeworks-cloud-client-swcc","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users.","title":"ShapeWorks Cloud Client (SWCC)"},{"location":"cloud/swcc.html#authentication-sessions","text":"This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out","title":"Authentication & Sessions"},{"location":"cloud/swcc.html#datasets-and-projects","text":"The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you.","title":"Datasets and Projects"},{"location":"cloud/swcc.html#datasets","text":"The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d )","title":"Datasets"},{"location":"cloud/swcc.html#projects","text":"The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects","title":"Projects"},{"location":"cloud/swcc.html#the-project-file","text":"The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run.","title":"The Project File"},{"location":"cloud/swcc.html#other-classes-and-methods","text":"As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database","title":"Other Classes and Methods"},{"location":"cloud/swcc.html#examples","text":"def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"Examples"},{"location":"deep-learning/data-augmentation.html","text":"Data Augmentation for Deep Learning ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations. Using the Data Augmentation Package The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils Running Data Augmentation To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . Visualizing Data Augmentation This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. Data Augmentation Steps 0. Collect Real Data As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM). 1. Embed Real Data First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA). 2. Fit a Parametric Distribution Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace. 3. Sample from the Distribution Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved. 4. Project Samples The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples. 5. Complete Sample Generation The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample. Sampling Distributions The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate). Multivariate Gaussian Distribution To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space. Mixture of Multivariate Gaussians Distribution A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space. Kernel Density Estimate Distribution Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#data-augmentation-for-deep-learning","text":"ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#using-the-data-augmentation-package","text":"The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils","title":"Using the Data Augmentation Package"},{"location":"deep-learning/data-augmentation.html#running-data-augmentation","text":"To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list .","title":"Running Data Augmentation"},{"location":"deep-learning/data-augmentation.html#visualizing-data-augmentation","text":"This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed.","title":"Visualizing Data Augmentation"},{"location":"deep-learning/data-augmentation.html#data-augmentation-steps","text":"","title":"Data Augmentation Steps"},{"location":"deep-learning/data-augmentation.html#0-collect-real-data","text":"As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM).","title":"0. Collect Real Data"},{"location":"deep-learning/data-augmentation.html#1-embed-real-data","text":"First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA).","title":"1. Embed Real Data"},{"location":"deep-learning/data-augmentation.html#2-fit-a-parametric-distribution","text":"Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace.","title":"2. Fit a Parametric Distribution"},{"location":"deep-learning/data-augmentation.html#3-sample-from-the-distribution","text":"Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved.","title":"3. Sample from the Distribution"},{"location":"deep-learning/data-augmentation.html#4-project-samples","text":"The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples.","title":"4. Project Samples"},{"location":"deep-learning/data-augmentation.html#5-complete-sample-generation","text":"The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample.","title":"5. Complete Sample Generation"},{"location":"deep-learning/data-augmentation.html#sampling-distributions","text":"The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate).","title":"Sampling Distributions"},{"location":"deep-learning/data-augmentation.html#multivariate-gaussian-distribution","text":"To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space.","title":"Multivariate Gaussian Distribution"},{"location":"deep-learning/data-augmentation.html#mixture-of-multivariate-gaussians-distribution","text":"A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space.","title":"Mixture of Multivariate Gaussians Distribution"},{"location":"deep-learning/data-augmentation.html#kernel-density-estimate-distribution","text":"Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Kernel Density Estimate Distribution"},{"location":"deep-learning/deep-ssm.html","text":"SSMs Directly from Images DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018. What is DeepSSM? The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning. Why DeepSSM? The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently. DeepSSM Steps 1. Data Augmentation The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction. 2. Creation of Data Loaders The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user. 3. Training PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder. 4. Testing The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image. 5. Evaluation To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate. Using the DeepSSM Python Package The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils Get train and validation torch loaders This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None . Get test torch loader This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None . Train DeepSSM This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters. Config File Parameter Descriptions model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing. Test DeepSSM This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict. Analyze Results This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset. Visualizing Error The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#ssms-directly-from-images","text":"DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#what-is-deepssm","text":"The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning.","title":"What is DeepSSM?"},{"location":"deep-learning/deep-ssm.html#why-deepssm","text":"The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently.","title":"Why DeepSSM?"},{"location":"deep-learning/deep-ssm.html#deepssm-steps","text":"","title":"DeepSSM Steps"},{"location":"deep-learning/deep-ssm.html#1-data-augmentation","text":"The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction.","title":"1. Data Augmentation"},{"location":"deep-learning/deep-ssm.html#2-creation-of-data-loaders","text":"The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user.","title":"2. Creation of Data Loaders"},{"location":"deep-learning/deep-ssm.html#3-training","text":"PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder.","title":"3. Training"},{"location":"deep-learning/deep-ssm.html#4-testing","text":"The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image.","title":"4. Testing"},{"location":"deep-learning/deep-ssm.html#5-evaluation","text":"To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate.","title":"5. Evaluation"},{"location":"deep-learning/deep-ssm.html#using-the-deepssm-python-package","text":"The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils","title":"Using the DeepSSM Python Package"},{"location":"deep-learning/deep-ssm.html#get-train-and-validation-torch-loaders","text":"This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None .","title":"Get train and validation torch loaders"},{"location":"deep-learning/deep-ssm.html#get-test-torch-loader","text":"This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None .","title":"Get test torch loader"},{"location":"deep-learning/deep-ssm.html#train-deepssm","text":"This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters.","title":"Train DeepSSM"},{"location":"deep-learning/deep-ssm.html#config-file-parameter-descriptions","text":"model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing.","title":"Config File Parameter Descriptions"},{"location":"deep-learning/deep-ssm.html#test-deepssm","text":"This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict.","title":"Test DeepSSM"},{"location":"deep-learning/deep-ssm.html#analyze-results","text":"This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset.","title":"Analyze Results"},{"location":"deep-learning/deep-ssm.html#visualizing-error","text":"The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"Visualizing Error"},{"location":"deep-learning/pytorch-gpu.html","text":"PyTorch GPU Support for ShapeWorks ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch. Checking if PyTorch installation has GPU support To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment. Reinstalling the Correct PyTorch Version If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#pytorch-gpu-support-for-shapeworks","text":"ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#checking-if-pytorch-installation-has-gpu-support","text":"To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment.","title":"Checking if PyTorch installation has GPU support"},{"location":"deep-learning/pytorch-gpu.html#reinstalling-the-correct-pytorch-version","text":"If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"Reinstalling the Correct PyTorch Version"},{"location":"dev/build.html","text":"How to Build ShapeWorks from Source? If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything. Minimum Requirements Linux CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0 Mac CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0 Windows CMake 3.11 (provided by conda below if not already installed) MSVC 2019 Clone source To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands. Install dependencies Linux and Mac Anaconda We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. VXL, VTK, ITK, Eigen and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Windows CMake Download and install [CMake] Download and install [Visual Studio 2019] Anaconda Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Configure and Build Linux & Mac Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake . Options If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables. Building Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there. Before running Examples/Python scripts and Examples/Python/notebooks Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory] Examples OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj Windows Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it. Examples An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON .. Options Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#how-to-build-shapeworks-from-source","text":"If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#minimum-requirements","text":"","title":"Minimum Requirements"},{"location":"dev/build.html#linux","text":"CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0","title":"Linux"},{"location":"dev/build.html#mac","text":"CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0","title":"Mac"},{"location":"dev/build.html#windows","text":"CMake 3.11 (provided by conda below if not already installed) MSVC 2019","title":"Windows"},{"location":"dev/build.html#clone-source","text":"To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands.","title":"Clone source"},{"location":"dev/build.html#install-dependencies","text":"","title":"Install dependencies"},{"location":"dev/build.html#linux-and-mac","text":"","title":"Linux and Mac"},{"location":"dev/build.html#anaconda","text":"We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"Anaconda"},{"location":"dev/build.html#vxl-vtk-itk-eigen-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VXL, VTK, ITK, Eigen and OpenVDB"},{"location":"dev/build.html#windows_1","text":"","title":"Windows"},{"location":"dev/build.html#cmake","text":"Download and install [CMake] Download and install [Visual Studio 2019]","title":"CMake"},{"location":"dev/build.html#anaconda_1","text":"Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments.","title":"Anaconda"},{"location":"dev/build.html#vtk-itk-eigen-xlnt-jkqtplotter-libigl-geometry-central-acvd-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB"},{"location":"dev/build.html#configure-and-build","text":"","title":"Configure and Build"},{"location":"dev/build.html#linux-mac","text":"Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake .","title":"Linux & Mac"},{"location":"dev/build.html#options","text":"If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables.","title":"Options"},{"location":"dev/build.html#building","text":"Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there.","title":"Building"},{"location":"dev/build.html#before-running-examplespython-scripts-and-examplespythonnotebooks","text":"Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory]","title":"Before running Examples/Python scripts and Examples/Python/notebooks"},{"location":"dev/build.html#examples","text":"OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj","title":"Examples"},{"location":"dev/build.html#windows_2","text":"Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it.","title":"Windows"},{"location":"dev/build.html#examples_1","text":"An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON ..","title":"Examples"},{"location":"dev/build.html#options_1","text":"Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"Options"},{"location":"dev/commands.html","text":"How to Add ShapeWorks Commands? To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/commands.html#how-to-add-shapeworks-commands","text":"To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/contribute.html","text":"How to Contribute to ShapeWorks? ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account . Source and Branches To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run] Commits Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch. Logs and diffs View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only Tags Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github. Advanced There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#how-to-contribute-to-shapeworks","text":"ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account .","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#source-and-branches","text":"To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run]","title":"Source and Branches"},{"location":"dev/contribute.html#commits","text":"Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch.","title":"Commits"},{"location":"dev/contribute.html#logs-and-diffs","text":"View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only ","title":"Logs and diffs"},{"location":"dev/contribute.html#tags","text":"Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github.","title":"Tags"},{"location":"dev/contribute.html#advanced","text":"There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"Advanced"},{"location":"dev/datasets.html","text":"How to Add New Datasets? ShapeWorks Data Portal Dataset Requirements Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory. images/ contents: 3D images of the data file types: itk supported image formats segmentations/ contents: 3D segmentations of the data file types: itk supported image formats meshes/ contents: meshes file types: ply, vtk, stl landmarks/ contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label distance_transforms/ contents: 3D distance transform volumes file types: itk supported image formats shape_models/ contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles Uploading a Dataset Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Datasets API DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure DatasetUtils.uploadNewDataset(datasetName, datasetPath) Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure DatasetUtils.getDatasetList() Returns: a list of all existing datasets on the data portal DatasetUtils.getFileList(datasetName) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#how-to-add-new-datasets","text":"ShapeWorks Data Portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#dataset-requirements","text":"Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory.","title":"Dataset Requirements"},{"location":"dev/datasets.html#images","text":"contents: 3D images of the data file types: itk supported image formats","title":"images/"},{"location":"dev/datasets.html#segmentations","text":"contents: 3D segmentations of the data file types: itk supported image formats","title":"segmentations/"},{"location":"dev/datasets.html#meshes","text":"contents: meshes file types: ply, vtk, stl","title":"meshes/"},{"location":"dev/datasets.html#landmarks","text":"contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label","title":"landmarks/"},{"location":"dev/datasets.html#distance_transforms","text":"contents: 3D distance transform volumes file types: itk supported image formats","title":"distance_transforms/"},{"location":"dev/datasets.html#shape_models","text":"contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles","title":"shape_models/"},{"location":"dev/datasets.html#uploading-a-dataset","text":"Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/","title":"Uploading a Dataset"},{"location":"dev/datasets.html#datasets-api","text":"","title":"Datasets API"},{"location":"dev/datasets.html#datasetutilsdownloaddatasetdatasetname-destinationpath-aszip-true-filelist-none","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure","title":"DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None)"},{"location":"dev/datasets.html#datasetutilsuploadnewdatasetdatasetname-datasetpath","text":"Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure","title":"DatasetUtils.uploadNewDataset(datasetName, datasetPath)"},{"location":"dev/datasets.html#datasetutilsgetdatasetlist","text":"Returns: a list of all existing datasets on the data portal","title":"DatasetUtils.getDatasetList()"},{"location":"dev/datasets.html#datasetutilsgetfilelistdatasetname","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"DatasetUtils.getFileList(datasetName)"},{"location":"dev/docs.html","text":"Getting Started with Documentation Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files Naming and Organization Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder. Adding Call-outs We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title. Locally Building Documentation To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt. Deploying on GitHub Pages As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed. Contributing to Documentation Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List . Inserting Videos in Documentation Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ . Auto-generating ShapeWorks Commands Documentation The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated Auto-generating C++ Doxygen API Documentation To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml See Also MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"Getting Started with Documentation"},{"location":"dev/docs.html#getting-started-with-documentation","text":"Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files","title":"Getting Started with Documentation"},{"location":"dev/docs.html#naming-and-organization","text":"Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder.","title":"Naming and Organization"},{"location":"dev/docs.html#adding-call-outs","text":"We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title.","title":"Adding Call-outs"},{"location":"dev/docs.html#locally-building-documentation","text":"To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt.","title":"Locally Building Documentation"},{"location":"dev/docs.html#deploying-on-github-pages","text":"As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed.","title":"Deploying on GitHub Pages"},{"location":"dev/docs.html#contributing-to-documentation","text":"Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List .","title":"Contributing to Documentation"},{"location":"dev/docs.html#inserting-videos-in-documentation","text":"Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ .","title":"Inserting Videos in Documentation"},{"location":"dev/docs.html#auto-generating-shapeworks-commands-documentation","text":"The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated","title":"Auto-generating ShapeWorks Commands Documentation"},{"location":"dev/docs.html#auto-generating-c-doxygen-api-documentation","text":"To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml","title":"Auto-generating C++ Doxygen API Documentation"},{"location":"dev/docs.html#see-also","text":"MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"See Also"},{"location":"dev/gh-actions.html","text":"Getting Started with GitHub Actions ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/gh-actions.html#getting-started-with-github-actions","text":"ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/markdown.html","text":"Getting Started with Markdown ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline. Grip To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing! Markdown Basics ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com See Also GitHub Markdown Markdown Guide Markdown Editors","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#getting-started-with-markdown","text":"ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline.","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#grip","text":"To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing!","title":"Grip"},{"location":"dev/markdown.html#markdown-basics","text":"ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com","title":"Markdown Basics"},{"location":"dev/markdown.html#see-also","text":"GitHub Markdown Markdown Guide Markdown Editors","title":"See Also"},{"location":"dev/modify-datasets.html","text":"When Modifying Existing Datasets When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/modify-datasets.html#when-modifying-existing-datasets","text":"When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/new-notebook.html","text":"How to Add a New Notebook? Adding a new use case entails the following. Creating a notebook Notebook documentation Creating a notebook To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output . Notebook documentation Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook. Adding a video to a notebook Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"How to Add New Notebooks?"},{"location":"dev/new-notebook.html#how-to-add-a-new-notebook","text":"Adding a new use case entails the following. Creating a notebook Notebook documentation","title":"How to Add a New Notebook?"},{"location":"dev/new-notebook.html#creating-a-notebook","text":"To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output .","title":"Creating a notebook"},{"location":"dev/new-notebook.html#notebook-documentation","text":"Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook.","title":"Notebook documentation"},{"location":"dev/new-notebook.html#adding-a-video-to-a-notebook","text":"Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"Adding a video to a notebook"},{"location":"dev/new-use-case.html","text":"How to Add New Use Cases? Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation Python-scripted workflow To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster. Use case dataset To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset . Use case documentation To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#how-to-add-new-use-cases","text":"Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#python-scripted-workflow","text":"To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster.","title":"Python-scripted workflow"},{"location":"dev/new-use-case.html#use-case-dataset","text":"To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset .","title":"Use case dataset"},{"location":"dev/new-use-case.html#use-case-documentation","text":"To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"Use case documentation"},{"location":"dev/onboarding.html","text":"ShapeWorks Developer Onboarding Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks. Git A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To . GitHub The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples. Coding Style Guide We adopt the Google Style Guide for C++ coding style. C++ Core Guidelines A highly recommended resource for C++ are the C++ Core Guidelines . Building ShapeWorks Please see: How to Build ShapeWorks from Source? Continuous Integration / Continuous Delivery Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Onboarding"},{"location":"dev/onboarding.html#shapeworks-developer-onboarding","text":"Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks.","title":"ShapeWorks Developer Onboarding"},{"location":"dev/onboarding.html#git","text":"A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To .","title":"Git"},{"location":"dev/onboarding.html#github","text":"The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples.","title":"GitHub"},{"location":"dev/onboarding.html#coding-style-guide","text":"We adopt the Google Style Guide for C++ coding style.","title":"Coding Style Guide"},{"location":"dev/onboarding.html#c-core-guidelines","text":"A highly recommended resource for C++ are the C++ Core Guidelines .","title":"C++ Core Guidelines"},{"location":"dev/onboarding.html#building-shapeworks","text":"Please see: How to Build ShapeWorks from Source?","title":"Building ShapeWorks"},{"location":"dev/onboarding.html#continuous-integration-continuous-delivery","text":"Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Continuous Integration / Continuous Delivery"},{"location":"dev/paths.html","text":"Adding Environment Variables for Development This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms. Using devenv script to configure developer environment The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug Manually adding paths While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths. OSX/Linux $ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH Windows $ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Adding to PATH Environment Variable"},{"location":"dev/paths.html#adding-environment-variables-for-development","text":"This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms.","title":"Adding Environment Variables for Development"},{"location":"dev/paths.html#using-devenv-script-to-configure-developer-environment","text":"The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug","title":"Using devenv script to configure developer environment"},{"location":"dev/paths.html#manually-adding-paths","text":"While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths.","title":"Manually adding paths"},{"location":"dev/paths.html#osxlinux","text":"$ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH","title":"OSX/Linux"},{"location":"dev/paths.html#windows","text":"$ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Windows"},{"location":"dev/python-apis.html","text":"How to Add Python APIs? Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/python-apis.html#how-to-add-python-apis","text":"Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/shapeworks-library.html","text":"Using ShapeWorks as a library ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=
    /lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH=
    Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"ShapeWorks as a Library"},{"location":"dev/shapeworks-library.html#using-shapeworks-as-a-library","text":"ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=/lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH= Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"Using ShapeWorks as a library"},{"location":"dev/tests.html","text":"How to Add and Run Unit Tests? Running ShapeWorks Automated Tests To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example Adding New ShapeWorks Automated Tests Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#how-to-add-and-run-unit-tests","text":"","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#running-shapeworks-automated-tests","text":"To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example","title":"Running ShapeWorks Automated Tests"},{"location":"dev/tests.html#adding-new-shapeworks-automated-tests","text":"Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"Adding New ShapeWorks Automated Tests"},{"location":"getting-started/examples.html","text":"Examples Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features. Segmentation Based Use Cases This use case set demonstrates the Shape Modeling Workflow on segmentation images. Ellipsoid: Basic Example This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process. Left Atrium: Shape Model from Segmentations This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models. Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Shape Model for Multiple Domains from Segmentations This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets. Mesh-Based Use Cases This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming. Ellipsoid Mesh: Basic Example This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms. Lumps: Shape Model directly from Mesh This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Thin Cavity Bean: Shape Model with Geodesic Distances This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation. Shape Model for Multiple Domains directly from Mesh This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms. Contour Based Use Cases Supershapes:Shape Model for Contour Domains This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop. Constraints Based Use Cases Ellipsoid: Shape Model with Cutting Planes This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data. Femur: Shape Model from Meshes with Cutting Planes This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples. Multi-Step Optimization Use Cases Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Incremental Supershapes: Building a Shape Model Incrementally This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions. Statistics Based Use Cases Femur: Group Difference Statistics in Python This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case. Ellipsoid: Shape Statistics in Python This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case. Ellipsoid: Shape Evaluation in Python This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation. Deep Learning Based Use Cases Femur Shape Model Directly from Images This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . Shared Boundary Use Cases Peanut: Shape Model of Multiple Domains with Shared Boundaries This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions. Your Use Case You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Examples"},{"location":"getting-started/examples.html#examples","text":"Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features.","title":"Examples"},{"location":"getting-started/examples.html#segmentation-based-use-cases","text":"This use case set demonstrates the Shape Modeling Workflow on segmentation images.","title":"Segmentation Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-basic-example","text":"This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process.","title":"Ellipsoid: Basic Example"},{"location":"getting-started/examples.html#left-atrium-shape-model-from-segmentations","text":"This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-from-segmentations","text":"This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"getting-started/examples.html#mesh-based-use-cases","text":"This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming.","title":"Mesh-Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-mesh-basic-example","text":"This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms.","title":"Ellipsoid Mesh: Basic Example"},{"location":"getting-started/examples.html#lumps-shape-model-directly-from-mesh","text":"This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"Lumps: Shape Model directly from Mesh"},{"location":"getting-started/examples.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-directly-from-mesh","text":"This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"getting-started/examples.html#contour-based-use-cases","text":"","title":"Contour Based Use Cases"},{"location":"getting-started/examples.html#supershapesshape-model-for-contour-domains","text":"This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop.","title":"Supershapes:Shape Model for Contour Domains"},{"location":"getting-started/examples.html#constraints-based-use-cases","text":"","title":"Constraints Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-shape-model-with-cutting-planes","text":"This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"getting-started/examples.html#femur-shape-model-from-meshes-with-cutting-planes","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples.","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"getting-started/examples.html#multi-step-optimization-use-cases","text":"","title":"Multi-Step Optimization Use Cases"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes_1","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#incremental-supershapes-building-a-shape-model-incrementally","text":"This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"getting-started/examples.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"getting-started/examples.html#statistics-based-use-cases","text":"","title":"Statistics Based Use Cases"},{"location":"getting-started/examples.html#femur-group-difference-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case.","title":"Femur: Group Difference Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-evaluation-in-python","text":"This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation.","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"getting-started/examples.html#deep-learning-based-use-cases","text":"","title":"Deep Learning Based Use Cases"},{"location":"getting-started/examples.html#femur-shape-model-directly-from-images","text":"This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images .","title":"Femur Shape Model Directly from Images"},{"location":"getting-started/examples.html#shared-boundary-use-cases","text":"","title":"Shared Boundary Use Cases"},{"location":"getting-started/examples.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions.","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"getting-started/examples.html#your-use-case","text":"You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Your Use Case"},{"location":"getting-started/how-tos.html","text":"How-Tos Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/how-tos.html#how-tos","text":"Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/interfaces.html","text":"ShapeWorks Interfaces ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds . ShapeWorks Command ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. ShapeWorks in Python We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility. ShapeWorks Studio ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here ShapeWorks in the Cloud Work in progress ... Stay tuned!","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-interfaces","text":"ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds .","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-command","text":"ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"ShapeWorks Command"},{"location":"getting-started/interfaces.html#shapeworks-in-python","text":"We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility.","title":"ShapeWorks in Python"},{"location":"getting-started/interfaces.html#shapeworks-studio","text":"ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here","title":"ShapeWorks Studio"},{"location":"getting-started/interfaces.html#shapeworks-in-the-cloud","text":"Work in progress ... Stay tuned!","title":"ShapeWorks in the Cloud"},{"location":"getting-started/shapes.html","text":"Shapes, What & From Where? What is Shape? The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class. Where Shapes Come From? In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer What surfaces are \u201dgood\u201d for shape modeling? The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow . What is Shape Modeling? Shape Parameters Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population. Discovering Shape Parameters via Optimization ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#shapes-what-from-where","text":"","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#what-is-shape","text":"The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class.","title":"What is Shape?"},{"location":"getting-started/shapes.html#where-shapes-come-from","text":"In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer","title":"Where Shapes Come From?"},{"location":"getting-started/shapes.html#what-surfaces-are-good-for-shape-modeling","text":"The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow .","title":"What surfaces are \u201dgood\u201d for shape modeling?"},{"location":"getting-started/shapes.html#what-is-shape-modeling","text":"","title":"What is Shape Modeling?"},{"location":"getting-started/shapes.html#shape-parameters","text":"Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population.","title":"Shape Parameters"},{"location":"getting-started/shapes.html#discovering-shape-parameters-via-optimization","text":"ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Discovering Shape Parameters via Optimization"},{"location":"getting-started/sw-stories.html","text":"ShapeWorks Success Stories (selected) Hip Joint FAI Pathology Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015. Pose and Shape of the Dysplastic Hip Joint Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021. Scapular Morphology in Hill-Sachs Patients Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017. Shape Changes in Atrial Fibrillation Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018. Benchmarking ShapeWorks in Clinical Applications A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878. Next Story Can be Yours!","title":"ShapeWorks Success Stories"},{"location":"getting-started/sw-stories.html#shapeworks-success-stories-selected","text":"","title":"ShapeWorks Success Stories (selected)"},{"location":"getting-started/sw-stories.html#hip-joint-fai-pathology","text":"Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015.","title":"Hip Joint FAI Pathology"},{"location":"getting-started/sw-stories.html#pose-and-shape-of-the-dysplastic-hip-joint","text":"Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021.","title":"Pose and Shape of the Dysplastic Hip Joint"},{"location":"getting-started/sw-stories.html#scapular-morphology-in-hill-sachs-patients","text":"Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017.","title":"Scapular Morphology in Hill-Sachs Patients"},{"location":"getting-started/sw-stories.html#shape-changes-in-atrial-fibrillation","text":"Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018.","title":"Shape Changes in Atrial Fibrillation"},{"location":"getting-started/sw-stories.html#benchmarking-shapeworks-in-clinical-applications","text":"A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878.","title":"Benchmarking ShapeWorks in Clinical Applications"},{"location":"getting-started/sw-stories.html#next-story-can-be-yours","text":"","title":"Next Story Can be Yours!"},{"location":"getting-started/workflow.html","text":"Shape Modeling Workflow ShapeWorks supports the typical three-stage workflow for shape modeling. Groom Stage The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping. Optimize Stage The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split. Analyze Stage The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#shape-modeling-workflow","text":"ShapeWorks supports the typical three-stage workflow for shape modeling.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#groom-stage","text":"The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping.","title":"Groom Stage"},{"location":"getting-started/workflow.html#optimize-stage","text":"The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split.","title":"Optimize Stage"},{"location":"getting-started/workflow.html#analyze-stage","text":"The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Analyze Stage"},{"location":"new/ellipsoid-joint-generation.html","text":"Ellipsoid Joint Generation About ShapeCohortGenerator ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families. What is new? We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts. Getting Started with Shape Cohort Generator Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#ellipsoid-joint-generation","text":"","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"new/ellipsoid-joint-generation.html#what-is-new","text":"We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts.","title":"What is new?"},{"location":"new/ellipsoid-joint-generation.html#getting-started-with-shape-cohort-generator","text":"Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Getting Started with Shape Cohort Generator"},{"location":"new/free-form-constraints.html","text":"Free-Form Constraints The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/free-form-constraints.html#free-form-constraints","text":"The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/new-studio.html","text":"New in ShapeWorks Studio 6.2 DeepSSM in Studio New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information. Multiple Domain Alignments New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information. Shape Evaluation Charts New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information. Usability Features Group p-value Display New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences. Scalar range controls New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values. Surface opacity controls Shape surface opacity can now be controlled on a per domain basis. Added narrow band optimization parameter The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification. New message history window A new button in the lower corner has been added that brings up the message history from the status bar. New suppressible error dialog The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages Multiple domain export options (combined + separate) When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain. Allow initial landmark points Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization. Mesh warping improvements Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved. New in ShapeWorks Studio 6.1 Multiple Domains As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information. Mesh Grooming As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information. Mesh Support As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction Improved Studio Interface As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast Surface Reconstruction ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction Dynamic Loading ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading Live Particles Movement ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters). Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"New in ShapeWorks Studio"},{"location":"new/new-studio.html#new-in-shapeworks-studio-62","text":"","title":"New in ShapeWorks Studio 6.2"},{"location":"new/new-studio.html#deepssm-in-studio","text":"New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information.","title":"DeepSSM in Studio"},{"location":"new/new-studio.html#multiple-domain-alignments","text":"New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information.","title":"Multiple Domain Alignments"},{"location":"new/new-studio.html#shape-evaluation-charts","text":"New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information.","title":"Shape Evaluation Charts"},{"location":"new/new-studio.html#usability-features","text":"","title":"Usability Features"},{"location":"new/new-studio.html#group-p-value-display","text":"New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences.","title":"Group p-value Display"},{"location":"new/new-studio.html#scalar-range-controls","text":"New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values.","title":"Scalar range controls"},{"location":"new/new-studio.html#surface-opacity-controls","text":"Shape surface opacity can now be controlled on a per domain basis.","title":"Surface opacity controls"},{"location":"new/new-studio.html#added-narrow-band-optimization-parameter","text":"The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification.","title":"Added narrow band optimization parameter"},{"location":"new/new-studio.html#new-message-history-window","text":"A new button in the lower corner has been added that brings up the message history from the status bar.","title":"New message history window"},{"location":"new/new-studio.html#new-suppressible-error-dialog","text":"The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages","title":"New suppressible error dialog"},{"location":"new/new-studio.html#multiple-domain-export-options-combined-separate","text":"When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain.","title":"Multiple domain export options (combined + separate)"},{"location":"new/new-studio.html#allow-initial-landmark-points","text":"Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization.","title":"Allow initial landmark points"},{"location":"new/new-studio.html#mesh-warping-improvements","text":"Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved.","title":"Mesh warping improvements"},{"location":"new/new-studio.html#new-in-shapeworks-studio-61","text":"","title":"New in ShapeWorks Studio 6.1"},{"location":"new/new-studio.html#multiple-domains","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information.","title":"Multiple Domains"},{"location":"new/new-studio.html#mesh-grooming","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information.","title":"Mesh Grooming"},{"location":"new/new-studio.html#mesh-support","text":"As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction","title":"Mesh Support"},{"location":"new/new-studio.html#improved-studio-interface","text":"As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast","title":"Improved Studio Interface"},{"location":"new/new-studio.html#surface-reconstruction","text":"ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction","title":"Surface Reconstruction"},{"location":"new/new-studio.html#dynamic-loading","text":"ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading","title":"Dynamic Loading"},{"location":"new/new-studio.html#live-particles-movement","text":"ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters).","title":"Live Particles Movement"},{"location":"new/new-studio.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"new/openvdb.html","text":"ShapeWorks Takes ~85% Less Memory ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/openvdb.html#shapeworks-takes-85-less-memory","text":"ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/shapeworks-command.html","text":"ShapeWorks Command ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use Example: ResampleVolumesToBeIsotropic Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool Resampling images Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > ); Resampling segmentations Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#shapeworks-command","text":"ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#example-resamplevolumestobeisotropic","text":"Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool","title":"Example: ResampleVolumesToBeIsotropic"},{"location":"new/shapeworks-command.html#resampling-images","text":"Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > );","title":"Resampling images"},{"location":"new/shapeworks-command.html#resampling-segmentations","text":"Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"Resampling segmentations"},{"location":"new/shapeworks-python.html","text":"ShapeWorks in Python ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! . Why ShapeWorks in Python? One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model. Diving into ShapeWorks' \"Clear\" Box A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server. Getting Started with Juypter Notebooks Getting Started with Segmentations Getting Started with Meshes Getting Started with Segmentations Getting Started with Exploring Segmentations Getting Started with Shape Cohort Generation Getting Started with Data Augmentation","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#shapeworks-in-python","text":"ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! .","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#why-shapeworks-in-python","text":"One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model.","title":"Why ShapeWorks in Python?"},{"location":"new/shapeworks-python.html#diving-into-shapeworks-clear-box","text":"A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server.","title":"Diving into ShapeWorks' \"Clear\" Box"},{"location":"new/shapeworks-python.html#getting-started-with-juypter-notebooks","text":"","title":"Getting Started with Juypter Notebooks"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations_1","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-shape-cohort-generation","text":"","title":"Getting Started with Shape Cohort Generation"},{"location":"new/shapeworks-python.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"new/ssm-eval.html","text":"Shape Model Evaluation ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact). ShapeWorks Commands shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1 ShapeWorks Python tools # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference Model Evaluation in Studio Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shape-model-evaluation","text":"ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact).","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shapeworks-commands","text":"shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1","title":"ShapeWorks Commands"},{"location":"new/ssm-eval.html#shapeworks-python-tools","text":"# Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference","title":"ShapeWorks Python tools"},{"location":"new/ssm-eval.html#model-evaluation-in-studio","text":"Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Model Evaluation in Studio"},{"location":"new/sw-meshes.html","text":"ShapeWorks Directly on Meshes Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"new/sw-meshes.html#shapeworks-directly-on-meshes","text":"Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"notebooks/array-passing-without-copying.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); In [ ]: Copied! import shapeworks as sw import shapeworks as sw In [ ]: Copied! import numpy as np import numpy as np shapeworks Image from numpy array \u00b6 In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean() While the numpy can still look at the memory, it no longer has ownership: \u00b6 In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean() ...so the safest thing to do now is let the array go out of scope: \u00b6 having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr Only dtype.float32 arrays can be used to initialize an image: \u00b6 In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg No unnecessary copies and no memory leaks! \u00b6 The numpy array still owns its data since a copy was passed to create the Image. \u00b6 Ownership of the copy's memory was taken by the image before it went out of scope. \u00b6 In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() Now for the other way around. \u00b6 numpy array from shapeworks Image \u00b6 In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims() The numpy array references the memory of the current Image and can change it: \u00b6 In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean() ...but it still doesn't have ownership. \u00b6 Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above. \u00b6 In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr If a copy is needed, pass copy=True to toArray() \u00b6 In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA'] This can be useful when the array is created from a temporary Image: \u00b6 In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True)) viewing the image using pyvista \u00b6 One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument: \u00b6 In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show() Finally, we can assign a numpy array to an existing Image \u00b6 This retains the Image's origin, scale, and coordsys. \u00b6 In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved) Let's use a scipy operation on the image: \u00b6 In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0) The return from this filter is the right size and type, but it's a copy: \u00b6 In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA'] Let's assign it back to Image so we can retain Image's origin, scale, and coordsys: \u00b6 In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA'] Now we can look at it again in the plotter: \u00b6 In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Array passing without copying"},{"location":"notebooks/array-passing-without-copying.html#shapeworks-image-from-numpy-array","text":"In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean()","title":"shapeworks Image from numpy array"},{"location":"notebooks/array-passing-without-copying.html#while-the-numpy-can-still-look-at-the-memory-it-no-longer-has-ownership","text":"In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean()","title":"While the numpy can still look at the memory, it no longer has ownership:"},{"location":"notebooks/array-passing-without-copying.html#so-the-safest-thing-to-do-now-is-let-the-array-go-out-of-scope","text":"having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr","title":"...so the safest thing to do now is let the array go out of scope:"},{"location":"notebooks/array-passing-without-copying.html#only-dtypefloat32-arrays-can-be-used-to-initialize-an-image","text":"In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg","title":"Only dtype.float32 arrays can be used to initialize an image:"},{"location":"notebooks/array-passing-without-copying.html#no-unnecessary-copies-and-no-memory-leaks","text":"","title":"No unnecessary copies and no memory leaks!"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-still-owns-its-data-since-a-copy-was-passed-to-create-the-image","text":"","title":"The numpy array still owns its data since a copy was passed to create the Image."},{"location":"notebooks/array-passing-without-copying.html#ownership-of-the-copys-memory-was-taken-by-the-image-before-it-went-out-of-scope","text":"In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean()","title":"Ownership of the copy's memory was taken by the image before it went out of scope."},{"location":"notebooks/array-passing-without-copying.html#now-for-the-other-way-around","text":"","title":"Now for the other way around."},{"location":"notebooks/array-passing-without-copying.html#numpy-array-from-shapeworks-image","text":"In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims()","title":"numpy array from shapeworks Image"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-references-the-memory-of-the-current-image-and-can-change-it","text":"In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean()","title":"The numpy array references the memory of the current Image and can change it:"},{"location":"notebooks/array-passing-without-copying.html#but-it-still-doesnt-have-ownership","text":"","title":"...but it still doesn't have ownership."},{"location":"notebooks/array-passing-without-copying.html#since-many-image-operations-reallocate-internally-its-still-safest-to-let-it-go-out-of-scope-as-shown-above","text":"In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr","title":"Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above."},{"location":"notebooks/array-passing-without-copying.html#if-a-copy-is-needed-pass-copytrue-to-toarray","text":"In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA']","title":"If a copy is needed, pass copy=True to toArray()"},{"location":"notebooks/array-passing-without-copying.html#this-can-be-useful-when-the-array-is-created-from-a-temporary-image","text":"In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True))","title":"This can be useful when the array is created from a temporary Image:"},{"location":"notebooks/array-passing-without-copying.html#viewing-the-image-using-pyvista","text":"","title":"viewing the image using pyvista"},{"location":"notebooks/array-passing-without-copying.html#one-common-reason-to-get-the-images-array-is-for-viewing-using-pyvista-using-the-for_viewing-argument","text":"In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument:"},{"location":"notebooks/array-passing-without-copying.html#finally-we-can-assign-a-numpy-array-to-an-existing-image","text":"","title":"Finally, we can assign a numpy array to an existing Image"},{"location":"notebooks/array-passing-without-copying.html#this-retains-the-images-origin-scale-and-coordsys","text":"In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved)","title":"This retains the Image's origin, scale, and coordsys."},{"location":"notebooks/array-passing-without-copying.html#lets-use-a-scipy-operation-on-the-image","text":"In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0)","title":"Let's use a scipy operation on the image:"},{"location":"notebooks/array-passing-without-copying.html#the-return-from-this-filter-is-the-right-size-and-type-but-its-a-copy","text":"In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA']","title":"The return from this filter is the right size and type, but it's a copy:"},{"location":"notebooks/array-passing-without-copying.html#lets-assign-it-back-to-image-so-we-can-retain-images-origin-scale-and-coordsys","text":"In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA']","title":"Let's assign it back to Image so we can retain Image's origin, scale, and coordsys:"},{"location":"notebooks/array-passing-without-copying.html#now-we-can-look-at-it-again-in-the-plotter","text":"In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Now we can look at it again in the plotter:"},{"location":"notebooks/create-and-apply-image-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can be used to center image data or to align two images \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\" Center of mass transforms \u00b6 Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() create and apply transform, noting that center of mass is now roughly in the center of the image \u00b6 In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass()) visualization of different resampling methods \u00b6 In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! Rigid registration transforms \u00b6 Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" compute distance transforms to be used to compute alignment of the segmentations \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! create distance transforms to be used to compute the images' alignment \u00b6 In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0) create image alignment transforms \u00b6 In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1) apply the transforms to the original images \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1) visualize the results \u00b6 Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#transforms-can-be-used-to-center-image-data-or-to-align-two-images","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\"","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#center-of-mass-transforms","text":"Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show()","title":"Center of mass transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#create-and-apply-transform-noting-that-center-of-mass-is-now-roughly-in-the-center-of-the-image","text":"In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass())","title":"create and apply transform, noting that center of mass is now roughly in the center of the image"},{"location":"notebooks/create-and-apply-image-transforms.html#visualization-of-different-resampling-methods","text":"In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualization of different resampling methods"},{"location":"notebooks/create-and-apply-image-transforms.html#rigid-registration-transforms","text":"Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\"","title":"Rigid registration transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#compute-distance-transforms-to-be-used-to-compute-alignment-of-the-segmentations","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"compute distance transforms to be used to compute alignment of the segmentations"},{"location":"notebooks/create-and-apply-image-transforms.html#create-distance-transforms-to-be-used-to-compute-the-images-alignment","text":"In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0)","title":"create distance transforms to be used to compute the images' alignment"},{"location":"notebooks/create-and-apply-image-transforms.html#create-image-alignment-transforms","text":"In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1)","title":"create image alignment transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#apply-the-transforms-to-the-original-images","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1)","title":"apply the transforms to the original images"},{"location":"notebooks/create-and-apply-image-transforms.html#visualize-the-results","text":"Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualize the results"},{"location":"notebooks/create-and-apply-mesh-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can also be used to align two meshes \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\" Mesh alignment \u00b6 A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" Load meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) Visualize original meshes \u00b6 In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Rigid transformation \u00b6 create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Similarity transformation \u00b6 This type of transformation is very similar to rigid transformations above. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Affine transformation \u00b6 This type of transformation warps the points of one mesh into the other as well as translating its position. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#transforms-can-also-be-used-to-align-two-meshes","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\"","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-alignment","text":"A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\"","title":"Mesh alignment"},{"location":"notebooks/create-and-apply-mesh-transforms.html#load-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Load meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-original-meshes","text":"In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Visualize original meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#rigid-transformation","text":"","title":"Rigid transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#similarity-transformation","text":"This type of transformation is very similar to rigid transformations above.","title":"Similarity transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#affine-transformation","text":"This type of transformation warps the points of one mesh into the other as well as translating its position.","title":"Affine transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/getting-started-with-data-augmentation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Data Augmentation \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data. Data Augmentation Overview \u00b6 ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning . Import shapeworks and relevant libraries \u00b6 In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks Import Data Augmentation Package \u00b6 In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils 1. Defining the original dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir) Get file lists \u00b6 Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list))) Run data augmentation using a Gaussian Distribution \u00b6 Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using a Mixture of Gaussian Distribution \u00b6 In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using Kernel Density Estimation \u00b6 In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-data-augmentation.html#in-this-notebook-you-will-learn","text":"How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-data-augmentation.html#data-augmentation-overview","text":"ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning .","title":"Data Augmentation Overview"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-shapeworks-and-relevant-libraries","text":"In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks","title":"Import shapeworks and relevant libraries"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-data-augmentation-package","text":"In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils","title":"Import Data Augmentation Package"},{"location":"notebooks/getting-started-with-data-augmentation.html#1-defining-the-original-dataset","text":"","title":"1. Defining the original dataset"},{"location":"notebooks/getting-started-with-data-augmentation.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-data-augmentation.html#get-file-lists","text":"Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list)))","title":"Get file lists"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-gaussian-distribution","text":"Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-mixture-of-gaussian-distribution","text":"In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Mixture of Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-kernel-density-estimation","text":"In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using Kernel Density Estimation"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-exploring-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Exploring Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Exploring your dataset \u00b6 We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling. Loading your dataset \u00b6 First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...') Visualizing your dataset \u00b6 Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views ) 3. Deciding the grooming pipeline needed for your dataset \u00b6 Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe? Voxel spacing \u00b6 Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk) Segmentations and image boundaries \u00b6 Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size. Shape alignment \u00b6 One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True ) Too much background \u00b6 Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) Binary segmentations \u00b6 In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform. Tentative grooming \u00b6 Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#2-exploring-your-dataset","text":"We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling.","title":"2. Exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#loading-your-dataset","text":"First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...')","title":"Loading your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#visualizing-your-dataset","text":"Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views )","title":"Visualizing your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#3-deciding-the-grooming-pipeline-needed-for-your-dataset","text":"Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe?","title":"3. Deciding the grooming pipeline needed for your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#voxel-spacing","text":"Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk)","title":"Voxel spacing"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#segmentations-and-image-boundaries","text":"Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size.","title":"Segmentations and image boundaries"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#shape-alignment","text":"One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True )","title":"Shape alignment"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#too-much-background","text":"Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk)","title":"Too much background"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#binary-segmentations","text":"In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform.","title":"Binary segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#tentative-grooming","text":"Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Tentative grooming"},{"location":"notebooks/getting-started-with-meshes.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Meshes \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single mesh \u00b6 We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh) 3. Convert to a VTK mesh \u00b6 To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) 4. Visualizing surface mesh using pyvista \u00b6 pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook) 5. Visualizing multiple meshes \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second mesh and convert it to vtk mesh \u00b6 First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-meshes.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-meshes.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-meshes.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-meshes.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-meshes.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-meshes.html#2-loading-a-single-mesh","text":"We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh)","title":"2. Loading a single mesh"},{"location":"notebooks/getting-started-with-meshes.html#3-convert-to-a-vtk-mesh","text":"To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh)","title":"3. Convert to a VTK mesh"},{"location":"notebooks/getting-started-with-meshes.html#4-visualizing-surface-mesh-using-pyvista","text":"pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook)","title":"4. Visualizing surface mesh using pyvista"},{"location":"notebooks/getting-started-with-meshes.html#5-visualizing-multiple-meshes","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing multiple meshes"},{"location":"notebooks/getting-started-with-meshes.html#loading-the-second-mesh-and-convert-it-to-vtk-mesh","text":"First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Loading the second mesh and convert it to vtk mesh"},{"location":"notebooks/getting-started-with-notebooks.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Jupyter Notebooks \u00b6 In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks ShapeWorks Jupyter Notebook Tutorials \u00b6 What is Jupyter Notebook? \u00b6 The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded. Running a Jupyter notebook tutorial \u00b6 ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks. Importing ShapeWorks \u00b6 The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us. Notebook keyboard shortcuts \u00b6 Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name Jupyter Notebook Resources \u00b6 Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#getting-started-with-jupyter-notebooks","text":"In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#shapeworks-jupyter-notebook-tutorials","text":"","title":"ShapeWorks Jupyter Notebook Tutorials"},{"location":"notebooks/getting-started-with-notebooks.html#what-is-jupyter-notebook","text":"The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded.","title":"What is Jupyter Notebook?"},{"location":"notebooks/getting-started-with-notebooks.html#running-a-jupyter-notebook-tutorial","text":"ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks.","title":"Running a Jupyter notebook tutorial"},{"location":"notebooks/getting-started-with-notebooks.html#importing-shapeworks","text":"The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us.","title":"Importing ShapeWorks"},{"location":"notebooks/getting-started-with-notebooks.html#notebook-keyboard-shortcuts","text":"Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name","title":"Notebook keyboard shortcuts"},{"location":"notebooks/getting-started-with-notebooks.html#jupyter-notebook-resources","text":"Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Jupyter Notebook Resources"},{"location":"notebooks/getting-started-with-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single segmentation \u00b6 We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg) 3. Converting shapeworks image to vtk image for visualization \u00b6 We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk) 4. Visualizing segmentation using pyvista \u00b6 pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading 5. Visualizing two segmentations side-by-side using pyvista \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second segmentation and convert it to vtk image \u00b6 First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2) Defining pyvista plotter \u00b6 Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) 6. Visualizing two segmentations in the same rendering window \u00b6 This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-segmentations.html#2-loading-a-single-segmentation","text":"We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg)","title":"2. Loading a single segmentation"},{"location":"notebooks/getting-started-with-segmentations.html#3-converting-shapeworks-image-to-vtk-image-for-visualization","text":"We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk)","title":"3. Converting shapeworks image to vtk image for visualization"},{"location":"notebooks/getting-started-with-segmentations.html#4-visualizing-segmentation-using-pyvista","text":"pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading","title":"4. Visualizing segmentation using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#5-visualizing-two-segmentations-side-by-side-using-pyvista","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing two segmentations side-by-side using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#loading-the-second-segmentation-and-convert-it-to-vtk-image","text":"First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2)","title":"Loading the second segmentation and convert it to vtk image"},{"location":"notebooks/getting-started-with-segmentations.html#defining-pyvista-plotter","text":"Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True )","title":"Defining pyvista plotter"},{"location":"notebooks/getting-started-with-segmentations.html#6-visualizing-two-segmentations-in-the-same-rendering-window","text":"This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"6. Visualizing two segmentations in the same rendering window"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Shape Cohort Generator \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes. About ShapeCohortGenerator \u00b6 ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families. What is a shape cohort ? \u00b6 A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized. Why ShapeCohortGenerator ? \u00b6 We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow. What families of shape can be generated by ShapeCohortGenerator ? \u00b6 ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes . Ellipsoids \u00b6 An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$ Supershapes \u00b6 Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below. 2D Supershapes \u00b6 2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images. Joint Ellipsoids \u00b6 Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation. Torus \u00b6 Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside). What you can do with ShapeCohortGenerator ? \u00b6 The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code. Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw Importing ShapeCohortGen library \u00b6 To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen Defining parameters for pyvista plotter \u00b6 In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges Generating an Ellipsoid Cohort \u00b6 Step 1: Initalize Ellipsoid Generator \u00b6 Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views Step 4: Generate Images - Turning segmentations into non-binary images \u00b6 For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0) Generating Supershapes Cohort \u00b6 SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$. Step 1: Initialize SuperShapes Generator \u00b6 Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views) Step 4: Generate Images \u00b6 This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#getting-started-with-shape-cohort-generator","text":"","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#in-this-notebook-you-will-learn","text":"How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-is-a-shape-cohort","text":"A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized.","title":"What is a shape cohort ?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#why-shapecohortgenerator","text":"We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow.","title":"Why ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-families-of-shape-can-be-generated-by-shapecohortgenerator","text":"ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes .","title":"What families of shape can be generated by ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#ellipsoids","text":"An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$","title":"Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#supershapes","text":"Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below.","title":"Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#2d-supershapes","text":"2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images.","title":"2D Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#joint-ellipsoids","text":"Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation.","title":"Joint Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#torus","text":"Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside).","title":"Torus"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-you-can-do-with-shapecohortgenerator","text":"The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code.","title":"What you can do with ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapecohortgen-library","text":"To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen","title":"Importing ShapeCohortGen library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#defining-parameters-for-pyvista-plotter","text":"In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges","title":"Defining parameters for pyvista plotter"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-an-ellipsoid-cohort","text":"","title":"Generating an Ellipsoid Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initalize-ellipsoid-generator","text":"Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir)","title":"Step 1: Initalize Ellipsoid Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images-turning-segmentations-into-non-binary-images","text":"For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0)","title":"Step 4: Generate Images - Turning segmentations into non-binary images"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-supershapes-cohort","text":"SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$.","title":"Generating Supershapes Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initialize-supershapes-generator","text":"Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir)","title":"Step 1: Initialize SuperShapes Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views)","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images","text":"This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Step 4: Generate Images"},{"location":"python/python-api.html","text":"ShapeWorks Python API ShapeWorks Python API ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor Pi = 3.141592653589793 Convert a string or number to a floating point number, if possible. X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z Analyze () Bases: pybind11_object create_shape_from_points () method descriptor create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape get_mean_shape () method descriptor get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh get_mean_shape_points () method descriptor get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]] get_mode_shape () method descriptor get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape get_num_modes () method descriptor get_num_modes(self: shapeworks_py.Analyze) -> int get_num_particles () method descriptor get_num_particles(self: shapeworks_py.Analyze) -> int get_num_subjects () method descriptor get_num_subjects(self: shapeworks_py.Analyze) -> int get_shape_points () method descriptor get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles get_shapes () method descriptor get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > > get_subject_features () method descriptor get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]] groups_active () method descriptor groups_active(self: shapeworks_py.Analyze) -> bool run_offline_analysis () method descriptor run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None Axis () Bases: pybind11_object Members: invalid X Y Z X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z name property name(self: handle) -> str DomainType () Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain name property name(self: handle) -> str Image () Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). antialias () method descriptor antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified) applyCurvatureFilter () method descriptor applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter applyGradientFilter () method descriptor applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter applyIntensityFilter () method descriptor applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter applySigmoidFilter () method descriptor applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter applyTPLevelSetFilter () method descriptor applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter applyTransform () method descriptor applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor) assign () method descriptor assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). binarize () method descriptor binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value center () method descriptor center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval] clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0) closeHoles () method descriptor closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value compare () method descriptor compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images computeDT () method descriptor computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue coordsys () method descriptor coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space copy () method descriptor copy(self: shapeworks_py.Image) -> shapeworks_py.Image createCenterOfMassTransform () method descriptor createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image createRigidRegistrationTransform () method descriptor createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations crop () method descriptor crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding dims () method descriptor dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image evaluate () method descriptor evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space extractLabel () method descriptor extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image gaussianBlur () method descriptor gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur isolate () method descriptor isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object logicalBoundingBox () method descriptor logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region logicalToPhysical () method descriptor logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space max () method descriptor max(self: shapeworks_py.Image) -> float maximum of image mean () method descriptor mean(self: shapeworks_py.Image) -> float mean of image min () method descriptor min(self: shapeworks_py.Image) -> float minimum of image origin () method descriptor origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin pad () method descriptor pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value physicalBoundingBox () method descriptor physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue physicalToLogical () method descriptor physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space physicalboundingBox () method descriptor physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image recenter () method descriptor recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image reflect () method descriptor reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis resample () method descriptor resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing resize () method descriptor resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing) rotate () method descriptor rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) scale () method descriptor scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin) setCoordsys () method descriptor setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image setOrigin () method descriptor setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value setSpacing () method descriptor setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel size () method descriptor size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing) spacing () method descriptor spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image std () method descriptor std(self: shapeworks_py.Image) -> float standard deviation of image toArray () method descriptor toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this). toMesh () method descriptor toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue topologyPreservingSmooth () method descriptor topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] translate () method descriptor translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image write () method descriptor write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension) ImageUtils ( args , kwargs ) Bases: pybind11_object boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images createWarpTransform () staticmethod createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points IndexRegion () Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None max property max point of region min property min point of region origin () method descriptor origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount size () method descriptor size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid InterpolationType () Bases: pybind11_object Members: Linear NearestNeighbor Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor name property name(self: handle) -> str Mesh () Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Face = < FieldType . Face : 1 > Members: Point Face Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Point = < FieldType . Point : 0 > Members: Point Face PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine AlignmentType () Bases: pybind11_object Members: Rigid Similarity Affine Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine name property name(self: handle) -> str CurvatureType () Bases: pybind11_object Members: Principal Gaussian Mean Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean name property name(self: handle) -> str DistanceMethod () Bases: pybind11_object Members: PointToPoint PointToCell PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell name property name(self: handle) -> str FieldType () Bases: pybind11_object Members: Point Face Face = < FieldType . Face : 1 > Members: Point Face Point = < FieldType . Point : 0 > Members: Point Face name property name(self: handle) -> str SubdivisionType () Bases: pybind11_object Members: Butterfly Loop Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop name property name(self: handle) -> str applySubdivisionFilter () method descriptor applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop) applyTransform () method descriptor applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh boundingBox () method descriptor boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh center () method descriptor center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clipClosedSurface () method descriptor clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface closestPoint () method descriptor closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh closestPointId () method descriptor closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space compareField () method descriptor compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields computeNormals () method descriptor computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals computeThickness () method descriptor computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness copy () method descriptor copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh coverage () method descriptor coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) createTransform () method descriptor createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10) curvature () method descriptor curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean) distance () method descriptor distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points faces () method descriptor faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed fillHoles () method descriptor fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them fixElement () method descriptor fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh geodesicDistance () method descriptor geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh getFace () method descriptor getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed getField () method descriptor getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field getFieldNames () method descriptor getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh getFieldValue () method descriptor getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field getMultiFieldValue () method descriptor getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field getPoint () method descriptor getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index invertNormals () method descriptor invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals numFaces () method descriptor numFaces(self: shapeworks_py.Mesh) -> int number of faces numPoints () method descriptor numPoints(self: shapeworks_py.Mesh) -> int number of points points () method descriptor points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point probeVolume () method descriptor probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image reflect () method descriptor reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis remesh () method descriptor remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity remeshPercent () method descriptor remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity rotate () method descriptor rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees) scale () method descriptor scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh setField () method descriptor setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array setFieldValue () method descriptor setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value smooth () method descriptor smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing smoothSinc () method descriptor smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing toDistanceTransform () method descriptor toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding) toImage () method descriptor toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing) translate () method descriptor translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh write () method descriptor write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension MeshUtils ( args , kwargs ) Bases: pybind11_object boundaryLoopExtractor () staticmethod boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes computeMeanNormals () staticmethod computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes findReferenceMesh () staticmethod findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes generateNormals () staticmethod generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes sharedBoundaryExtractor () staticmethod sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes MeshWarper () Bases: pybind11_object buildMesh () method descriptor buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3]) extractLandmarks () method descriptor extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3]) generateWarp () method descriptor generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping getGoodParticlesIndices () method descriptor getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles. getLandmarksMap () method descriptor getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices. getReferenceMesh () method descriptor getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping. getReferenceParticles () method descriptor getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping. getWarpMatrix () method descriptor getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control). hasBadParticles () method descriptor hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s). prepareMesh () staticmethod prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted). Optimize () Bases: pybind11_object GetParticleSystem () method descriptor GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]] LoadParameterFile () method descriptor LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool Run () method descriptor Run(self: shapeworks_py.Optimize) -> bool SetIterationCallbackFunction () method descriptor SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None SetUpOptimize () method descriptor SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool Parameters () Bases: pybind11_object as_map () method descriptor as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map get () method descriptor get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist key_exists () method descriptor key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not remove_entry () method descriptor remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry reset_parameters () method descriptor reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank set () method descriptor set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key ParticleShapeStatistics () Bases: pybind11_object PCA () method descriptor PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data eigenValues () method descriptor eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values eigenVectors () method descriptor eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors numDims () method descriptor numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system pcaLoadings () method descriptor pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed percentVarByMode () method descriptor percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components principalComponentProjections () method descriptor principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components sampleSize () method descriptor sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system ParticleSystem () Bases: pybind11_object D () method descriptor D(self: shapeworks_py.ParticleSystem) -> int EvaluationCompare () method descriptor EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool ExactCompare () method descriptor ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool N () method descriptor N(self: shapeworks_py.ParticleSystem) -> int Particles () method descriptor Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]] Paths () method descriptor Paths(self: shapeworks_py.ParticleSystem) -> List[str] ShapeAsPointSet () method descriptor ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape PhysicalRegion () Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None max property max point of region min property min point of region expand () method descriptor expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point origin () method descriptor origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount shrink () method descriptor shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both size () method descriptor size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid Project () Bases: pybind11_object clear_parameters () method descriptor clear_parameters(self: shapeworks_py.Project, name: str) -> None get_domain_names () method descriptor get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc) get_feature_names () method descriptor get_feature_names(self: shapeworks_py.Project) -> List[str] get_filename () method descriptor get_filename(self: shapeworks_py.Project) -> str Return the filename get_groomed_domain_types () method descriptor get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types get_groomed_present () method descriptor get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present get_group_names () method descriptor get_group_names(self: shapeworks_py.Project) -> List[str] get_group_values () method descriptor get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str] get_headers () method descriptor get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet get_images_present () method descriptor get_images_present(self: shapeworks_py.Project) -> bool get_number_of_domains_per_subject () method descriptor get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains get_number_of_subjects () method descriptor get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project get_original_domain_types () method descriptor get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types get_originals_present () method descriptor get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present get_parameters () method descriptor get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters get_particles_present () method descriptor get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present get_string_column () method descriptor get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name get_subjects () method descriptor get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects get_supported_version () method descriptor get_supported_version(self: shapeworks_py.Project) -> int get_version () method descriptor get_version(self: shapeworks_py.Project) -> int load () method descriptor load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file save () method descriptor save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file set_filename () method descriptor set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename set_groomed_domain_types () method descriptor set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types set_original_domain_types () method descriptor set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types set_parameters () method descriptor set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None set_subjects () method descriptor set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None store_subjects () method descriptor store_subjects(self: shapeworks_py.Project) -> None ReconstructSurface_RBFSSparseTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None ReconstructSurface_ThinPlateSplineTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None ShapeEvaluation ( args , kwargs ) Bases: pybind11_object ComputeCompactness () staticmethod ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system ComputeFullCompactness () staticmethod ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes ComputeFullGeneralization () staticmethod ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes ComputeFullSpecificity () staticmethod ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes ComputeGeneralization () staticmethod ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system ComputeSpecificity () staticmethod ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system Subject () Bases: pybind11_object get_constraints_filenames () method descriptor get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain) get_display_name () method descriptor get_display_name(self: shapeworks_py.Subject) -> str Get the display name get_extra_values () method descriptor get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret) get_feature_filenames () method descriptor get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames get_groomed_filenames () method descriptor get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames get_groomed_transforms () method descriptor get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain) get_group_value () method descriptor get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value get_group_values () method descriptor get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map get_landmarks_filenames () method descriptor get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain) get_local_particle_filenames () method descriptor get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames get_number_of_domains () method descriptor get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains get_original_filenames () method descriptor get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames get_procrustes_transforms () method descriptor get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain) get_world_particle_filenames () method descriptor get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames set_constraints_filenames () method descriptor set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain) set_display_name () method descriptor set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name set_extra_values () method descriptor set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values set_feature_filenames () method descriptor set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames set_groomed_filenames () method descriptor set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames set_groomed_transforms () method descriptor set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain) set_group_values () method descriptor set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None set_landmarks_filenames () method descriptor set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain) set_local_particle_filenames () method descriptor set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain) set_number_of_domains () method descriptor set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains set_original_filenames () method descriptor set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain) set_procrustes_transforms () method descriptor set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain) set_world_particle_filenames () method descriptor set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames Variant () Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None as_str () method descriptor as_str(self: shapeworks_py.Variant) -> str Return the variant string content VectorImage () Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space evaluate () method descriptor evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space WarpTransform ( args , kwargs ) Bases: pybind11_object axis_is_valid () builtin axis_is_valid(axis: List[float]) -> bool ensure an axis is valid degToRad () builtin degToRad(deg: float) -> float convert degrees to radians mean () builtin mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field range () builtin range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field seed () builtin seed(seed: int = 1698248459365377) -> None sets the seed for random number generation (internal use) stddev () builtin stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field toAxis () builtin toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"Python API Reference"},{"location":"python/python-api.html#shapeworks-python-api","text":"ShapeWorks Python API","title":"ShapeWorks Python API"},{"location":"python/python-api.html#shapeworks_py.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.Pi","text":"Convert a string or number to a floating point number, if possible.","title":"Pi"},{"location":"python/python-api.html#shapeworks_py.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Analyze","text":"Bases: pybind11_object","title":"Analyze"},{"location":"python/python-api.html#shapeworks_py.Analyze.create_shape_from_points","text":"create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape","title":"create_shape_from_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape","text":"get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh","title":"get_mean_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape_points","text":"get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]]","title":"get_mean_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mode_shape","text":"get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape","title":"get_mode_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_modes","text":"get_num_modes(self: shapeworks_py.Analyze) -> int","title":"get_num_modes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_particles","text":"get_num_particles(self: shapeworks_py.Analyze) -> int","title":"get_num_particles()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_subjects","text":"get_num_subjects(self: shapeworks_py.Analyze) -> int","title":"get_num_subjects()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shape_points","text":"get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles","title":"get_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shapes","text":"get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > >","title":"get_shapes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_subject_features","text":"get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]]","title":"get_subject_features()"},{"location":"python/python-api.html#shapeworks_py.Analyze.groups_active","text":"groups_active(self: shapeworks_py.Analyze) -> bool","title":"groups_active()"},{"location":"python/python-api.html#shapeworks_py.Analyze.run_offline_analysis","text":"run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None","title":"run_offline_analysis()"},{"location":"python/python-api.html#shapeworks_py.Axis","text":"Bases: pybind11_object Members: invalid X Y Z","title":"Axis"},{"location":"python/python-api.html#shapeworks_py.Axis.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Axis.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Axis.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.Axis.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Axis.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.DomainType","text":"Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain","title":"DomainType"},{"location":"python/python-api.html#shapeworks_py.DomainType.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Image","text":"Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"Image"},{"location":"python/python-api.html#shapeworks_py.Image.antialias","text":"antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified)","title":"antialias()"},{"location":"python/python-api.html#shapeworks_py.Image.applyCurvatureFilter","text":"applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter","title":"applyCurvatureFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyGradientFilter","text":"applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter","title":"applyGradientFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyIntensityFilter","text":"applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter","title":"applyIntensityFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applySigmoidFilter","text":"applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter","title":"applySigmoidFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTPLevelSetFilter","text":"applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter","title":"applyTPLevelSetFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTransform","text":"applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor)","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.assign","text":"assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"assign()"},{"location":"python/python-api.html#shapeworks_py.Image.binarize","text":"binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value","title":"binarize()"},{"location":"python/python-api.html#shapeworks_py.Image.center","text":"center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Image.centerOfMass","text":"centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval]","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Image.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0)","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Image.closeHoles","text":"closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value","title":"closeHoles()"},{"location":"python/python-api.html#shapeworks_py.Image.compare","text":"compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images","title":"compare()"},{"location":"python/python-api.html#shapeworks_py.Image.computeDT","text":"computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue","title":"computeDT()"},{"location":"python/python-api.html#shapeworks_py.Image.coordsys","text":"coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space","title":"coordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.copy","text":"copy(self: shapeworks_py.Image) -> shapeworks_py.Image","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Image.createCenterOfMassTransform","text":"createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image","title":"createCenterOfMassTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.createRigidRegistrationTransform","text":"createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"createRigidRegistrationTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.crop","text":"crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding","title":"crop()"},{"location":"python/python-api.html#shapeworks_py.Image.dims","text":"dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image","title":"dims()"},{"location":"python/python-api.html#shapeworks_py.Image.evaluate","text":"evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.Image.extractLabel","text":"extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image","title":"extractLabel()"},{"location":"python/python-api.html#shapeworks_py.Image.gaussianBlur","text":"gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur","title":"gaussianBlur()"},{"location":"python/python-api.html#shapeworks_py.Image.isolate","text":"isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object","title":"isolate()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalBoundingBox","text":"logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region","title":"logicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalToPhysical","text":"logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space","title":"logicalToPhysical()"},{"location":"python/python-api.html#shapeworks_py.Image.max","text":"max(self: shapeworks_py.Image) -> float maximum of image","title":"max()"},{"location":"python/python-api.html#shapeworks_py.Image.mean","text":"mean(self: shapeworks_py.Image) -> float mean of image","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.Image.min","text":"min(self: shapeworks_py.Image) -> float minimum of image","title":"min()"},{"location":"python/python-api.html#shapeworks_py.Image.origin","text":"origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.Image.pad","text":"pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalBoundingBox","text":"physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue","title":"physicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalToLogical","text":"physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space","title":"physicalToLogical()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalboundingBox","text":"physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image","title":"physicalboundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.recenter","text":"recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image","title":"recenter()"},{"location":"python/python-api.html#shapeworks_py.Image.reflect","text":"reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Image.resample","text":"resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing","title":"resample()"},{"location":"python/python-api.html#shapeworks_py.Image.resize","text":"resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing)","title":"resize()"},{"location":"python/python-api.html#shapeworks_py.Image.rotate","text":"rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Image.scale","text":"scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin)","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Image.setCoordsys","text":"setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image","title":"setCoordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.setOrigin","text":"setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value","title":"setOrigin()"},{"location":"python/python-api.html#shapeworks_py.Image.setSpacing","text":"setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel","title":"setSpacing()"},{"location":"python/python-api.html#shapeworks_py.Image.size","text":"size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing)","title":"size()"},{"location":"python/python-api.html#shapeworks_py.Image.spacing","text":"spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image","title":"spacing()"},{"location":"python/python-api.html#shapeworks_py.Image.std","text":"std(self: shapeworks_py.Image) -> float standard deviation of image","title":"std()"},{"location":"python/python-api.html#shapeworks_py.Image.toArray","text":"toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this).","title":"toArray()"},{"location":"python/python-api.html#shapeworks_py.Image.toMesh","text":"toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue","title":"toMesh()"},{"location":"python/python-api.html#shapeworks_py.Image.topologyPreservingSmooth","text":"topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"topologyPreservingSmooth()"},{"location":"python/python-api.html#shapeworks_py.Image.translate","text":"translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Image.write","text":"write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension)","title":"write()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils","text":"Bases: pybind11_object","title":"ImageUtils"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.createWarpTransform","text":"createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points","title":"createWarpTransform()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion","text":"Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None","title":"IndexRegion"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.origin","text":"origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.pad","text":"pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.size","text":"size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.valid","text":"valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.InterpolationType","text":"Bases: pybind11_object Members: Linear NearestNeighbor","title":"InterpolationType"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh","text":"Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None","title":"Mesh"},{"location":"python/python-api.html#shapeworks_py.Mesh.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType","text":"Bases: pybind11_object Members: Rigid Similarity Affine","title":"AlignmentType"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType","text":"Bases: pybind11_object Members: Principal Gaussian Mean","title":"CurvatureType"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod","text":"Bases: pybind11_object Members: PointToPoint PointToCell","title":"DistanceMethod"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType","text":"Bases: pybind11_object Members: Point Face","title":"FieldType"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType","text":"Bases: pybind11_object Members: Butterfly Loop","title":"SubdivisionType"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.applySubdivisionFilter","text":"applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop)","title":"applySubdivisionFilter()"},{"location":"python/python-api.html#shapeworks_py.Mesh.applyTransform","text":"applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.boundingBox","text":"boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.Mesh.center","text":"center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Mesh.centerOfMass","text":"centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clipClosedSurface","text":"clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface","title":"clipClosedSurface()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPoint","text":"closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh","title":"closestPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPointId","text":"closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space","title":"closestPointId()"},{"location":"python/python-api.html#shapeworks_py.Mesh.compareField","text":"compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields","title":"compareField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeNormals","text":"computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals","title":"computeNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeThickness","text":"computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness","title":"computeThickness()"},{"location":"python/python-api.html#shapeworks_py.Mesh.copy","text":"copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Mesh.coverage","text":"coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"coverage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.createTransform","text":"createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10)","title":"createTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.curvature","text":"curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean)","title":"curvature()"},{"location":"python/python-api.html#shapeworks_py.Mesh.distance","text":"distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points","title":"distance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.faces","text":"faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed","title":"faces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fillHoles","text":"fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them","title":"fillHoles()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fixElement","text":"fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh","title":"fixElement()"},{"location":"python/python-api.html#shapeworks_py.Mesh.geodesicDistance","text":"geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh","title":"geodesicDistance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFace","text":"getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed","title":"getFace()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getField","text":"getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field","title":"getField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldNames","text":"getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh","title":"getFieldNames()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldValue","text":"getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field","title":"getFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getMultiFieldValue","text":"getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field","title":"getMultiFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getPoint","text":"getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index","title":"getPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.invertNormals","text":"invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals","title":"invertNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numFaces","text":"numFaces(self: shapeworks_py.Mesh) -> int number of faces","title":"numFaces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numPoints","text":"numPoints(self: shapeworks_py.Mesh) -> int number of points","title":"numPoints()"},{"location":"python/python-api.html#shapeworks_py.Mesh.points","text":"points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point","title":"points()"},{"location":"python/python-api.html#shapeworks_py.Mesh.probeVolume","text":"probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image","title":"probeVolume()"},{"location":"python/python-api.html#shapeworks_py.Mesh.reflect","text":"reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remesh","text":"remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"remesh()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remeshPercent","text":"remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"remeshPercent()"},{"location":"python/python-api.html#shapeworks_py.Mesh.rotate","text":"rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.scale","text":"scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setField","text":"setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array","title":"setField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setFieldValue","text":"setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value","title":"setFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smooth","text":"smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing","title":"smooth()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smoothSinc","text":"smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing","title":"smoothSinc()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toDistanceTransform","text":"toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding)","title":"toDistanceTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toImage","text":"toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"toImage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.translate","text":"translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.write","text":"write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension","title":"write()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils","text":"Bases: pybind11_object","title":"MeshUtils"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundaryLoopExtractor","text":"boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file","title":"boundaryLoopExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.computeMeanNormals","text":"computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes","title":"computeMeanNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.findReferenceMesh","text":"findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes","title":"findReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.generateNormals","text":"generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes","title":"generateNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.sharedBoundaryExtractor","text":"sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes","title":"sharedBoundaryExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper","text":"Bases: pybind11_object","title":"MeshWarper"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.buildMesh","text":"buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3])","title":"buildMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.extractLandmarks","text":"extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3])","title":"extractLandmarks()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.generateWarp","text":"generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping","title":"generateWarp()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getGoodParticlesIndices","text":"getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles.","title":"getGoodParticlesIndices()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getLandmarksMap","text":"getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices.","title":"getLandmarksMap()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceMesh","text":"getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping.","title":"getReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceParticles","text":"getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping.","title":"getReferenceParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getWarpMatrix","text":"getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control).","title":"getWarpMatrix()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.hasBadParticles","text":"hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s).","title":"hasBadParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.prepareMesh","text":"prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted).","title":"prepareMesh()"},{"location":"python/python-api.html#shapeworks_py.Optimize","text":"Bases: pybind11_object","title":"Optimize"},{"location":"python/python-api.html#shapeworks_py.Optimize.GetParticleSystem","text":"GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]]","title":"GetParticleSystem()"},{"location":"python/python-api.html#shapeworks_py.Optimize.LoadParameterFile","text":"LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool","title":"LoadParameterFile()"},{"location":"python/python-api.html#shapeworks_py.Optimize.Run","text":"Run(self: shapeworks_py.Optimize) -> bool","title":"Run()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetIterationCallbackFunction","text":"SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None","title":"SetIterationCallbackFunction()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetUpOptimize","text":"SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool","title":"SetUpOptimize()"},{"location":"python/python-api.html#shapeworks_py.Parameters","text":"Bases: pybind11_object","title":"Parameters"},{"location":"python/python-api.html#shapeworks_py.Parameters.as_map","text":"as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map","title":"as_map()"},{"location":"python/python-api.html#shapeworks_py.Parameters.get","text":"get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist","title":"get()"},{"location":"python/python-api.html#shapeworks_py.Parameters.key_exists","text":"key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not","title":"key_exists()"},{"location":"python/python-api.html#shapeworks_py.Parameters.remove_entry","text":"remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry","title":"remove_entry()"},{"location":"python/python-api.html#shapeworks_py.Parameters.reset_parameters","text":"reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank","title":"reset_parameters()"},{"location":"python/python-api.html#shapeworks_py.Parameters.set","text":"set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key","title":"set()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics","text":"Bases: pybind11_object","title":"ParticleShapeStatistics"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.PCA","text":"PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data","title":"PCA()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenValues","text":"eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values","title":"eigenValues()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenVectors","text":"eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors","title":"eigenVectors()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.numDims","text":"numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system","title":"numDims()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.pcaLoadings","text":"pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed","title":"pcaLoadings()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.percentVarByMode","text":"percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components","title":"percentVarByMode()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.principalComponentProjections","text":"principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components","title":"principalComponentProjections()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.sampleSize","text":"sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system","title":"sampleSize()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem","text":"Bases: pybind11_object","title":"ParticleSystem"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.D","text":"D(self: shapeworks_py.ParticleSystem) -> int","title":"D()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.EvaluationCompare","text":"EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"EvaluationCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ExactCompare","text":"ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"ExactCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.N","text":"N(self: shapeworks_py.ParticleSystem) -> int","title":"N()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Particles","text":"Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]]","title":"Particles()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Paths","text":"Paths(self: shapeworks_py.ParticleSystem) -> List[str]","title":"Paths()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ShapeAsPointSet","text":"ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape","title":"ShapeAsPointSet()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion","text":"Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None","title":"PhysicalRegion"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.expand","text":"expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point","title":"expand()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.origin","text":"origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.pad","text":"pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.shrink","text":"shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both","title":"shrink()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.size","text":"size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.valid","text":"valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.Project","text":"Bases: pybind11_object","title":"Project"},{"location":"python/python-api.html#shapeworks_py.Project.clear_parameters","text":"clear_parameters(self: shapeworks_py.Project, name: str) -> None","title":"clear_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_domain_names","text":"get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc)","title":"get_domain_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_feature_names","text":"get_feature_names(self: shapeworks_py.Project) -> List[str]","title":"get_feature_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_filename","text":"get_filename(self: shapeworks_py.Project) -> str Return the filename","title":"get_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_domain_types","text":"get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types","title":"get_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_present","text":"get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present","title":"get_groomed_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_names","text":"get_group_names(self: shapeworks_py.Project) -> List[str]","title":"get_group_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_values","text":"get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str]","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Project.get_headers","text":"get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet","title":"get_headers()"},{"location":"python/python-api.html#shapeworks_py.Project.get_images_present","text":"get_images_present(self: shapeworks_py.Project) -> bool","title":"get_images_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_domains_per_subject","text":"get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains","title":"get_number_of_domains_per_subject()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_subjects","text":"get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project","title":"get_number_of_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_original_domain_types","text":"get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types","title":"get_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_originals_present","text":"get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present","title":"get_originals_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_parameters","text":"get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters","title":"get_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_particles_present","text":"get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present","title":"get_particles_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_string_column","text":"get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name","title":"get_string_column()"},{"location":"python/python-api.html#shapeworks_py.Project.get_subjects","text":"get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects","title":"get_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_supported_version","text":"get_supported_version(self: shapeworks_py.Project) -> int","title":"get_supported_version()"},{"location":"python/python-api.html#shapeworks_py.Project.get_version","text":"get_version(self: shapeworks_py.Project) -> int","title":"get_version()"},{"location":"python/python-api.html#shapeworks_py.Project.load","text":"load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file","title":"load()"},{"location":"python/python-api.html#shapeworks_py.Project.save","text":"save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file","title":"save()"},{"location":"python/python-api.html#shapeworks_py.Project.set_filename","text":"set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename","title":"set_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.set_groomed_domain_types","text":"set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types","title":"set_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_original_domain_types","text":"set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types","title":"set_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_parameters","text":"set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None","title":"set_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.set_subjects","text":"set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None","title":"set_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.store_subjects","text":"store_subjects(self: shapeworks_py.Project) -> None","title":"store_subjects()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_RBFSSparseTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_ThinPlateSplineTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation","text":"Bases: pybind11_object","title":"ShapeEvaluation"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeCompactness","text":"ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system","title":"ComputeCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullCompactness","text":"ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes","title":"ComputeFullCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullGeneralization","text":"ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes","title":"ComputeFullGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullSpecificity","text":"ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes","title":"ComputeFullSpecificity()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeGeneralization","text":"ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system","title":"ComputeGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeSpecificity","text":"ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system","title":"ComputeSpecificity()"},{"location":"python/python-api.html#shapeworks_py.Subject","text":"Bases: pybind11_object","title":"Subject"},{"location":"python/python-api.html#shapeworks_py.Subject.get_constraints_filenames","text":"get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain)","title":"get_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_display_name","text":"get_display_name(self: shapeworks_py.Subject) -> str Get the display name","title":"get_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_extra_values","text":"get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret)","title":"get_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_feature_filenames","text":"get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames","title":"get_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_filenames","text":"get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames","title":"get_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_transforms","text":"get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain)","title":"get_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_value","text":"get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value","title":"get_group_value()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_values","text":"get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_landmarks_filenames","text":"get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain)","title":"get_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_local_particle_filenames","text":"get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames","title":"get_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_number_of_domains","text":"get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains","title":"get_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_original_filenames","text":"get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames","title":"get_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_procrustes_transforms","text":"get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain)","title":"get_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_world_particle_filenames","text":"get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames","title":"get_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_constraints_filenames","text":"set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain)","title":"set_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_display_name","text":"set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name","title":"set_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_extra_values","text":"set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values","title":"set_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_feature_filenames","text":"set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames","title":"set_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_filenames","text":"set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames","title":"set_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_transforms","text":"set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain)","title":"set_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_group_values","text":"set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None","title":"set_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_landmarks_filenames","text":"set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain)","title":"set_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_local_particle_filenames","text":"set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain)","title":"set_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_number_of_domains","text":"set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains","title":"set_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_original_filenames","text":"set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain)","title":"set_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_procrustes_transforms","text":"set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain)","title":"set_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_world_particle_filenames","text":"set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames","title":"set_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Variant","text":"Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None","title":"Variant"},{"location":"python/python-api.html#shapeworks_py.Variant.as_str","text":"as_str(self: shapeworks_py.Variant) -> str Return the variant string content","title":"as_str()"},{"location":"python/python-api.html#shapeworks_py.VectorImage","text":"Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space","title":"VectorImage"},{"location":"python/python-api.html#shapeworks_py.VectorImage.evaluate","text":"evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.WarpTransform","text":"Bases: pybind11_object","title":"WarpTransform"},{"location":"python/python-api.html#shapeworks_py.axis_is_valid","text":"axis_is_valid(axis: List[float]) -> bool ensure an axis is valid","title":"axis_is_valid()"},{"location":"python/python-api.html#shapeworks_py.degToRad","text":"degToRad(deg: float) -> float convert degrees to radians","title":"degToRad()"},{"location":"python/python-api.html#shapeworks_py.mean","text":"mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.range","text":"range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field","title":"range()"},{"location":"python/python-api.html#shapeworks_py.seed","text":"seed(seed: int = 1698248459365377) -> None sets the seed for random number generation (internal use)","title":"seed()"},{"location":"python/python-api.html#shapeworks_py.stddev","text":"stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field","title":"stddev()"},{"location":"python/python-api.html#shapeworks_py.toAxis","text":"toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"toAxis()"},{"location":"studio/deepssm-in-studio.html","text":"DeepSSM in Studio ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps. Importing Data for DeepSSM In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see: Defining Data Split The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10. Data Augmentation The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data. Training The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains. Testing In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"DeepSSM Module"},{"location":"studio/deepssm-in-studio.html#deepssm-in-studio","text":"ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps.","title":"DeepSSM in Studio"},{"location":"studio/deepssm-in-studio.html#importing-data-for-deepssm","text":"In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see:","title":"Importing Data for DeepSSM"},{"location":"studio/deepssm-in-studio.html#defining-data-split","text":"The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10.","title":"Defining Data Split"},{"location":"studio/deepssm-in-studio.html#data-augmentation","text":"The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data.","title":"Data Augmentation"},{"location":"studio/deepssm-in-studio.html#training","text":"The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains.","title":"Training"},{"location":"studio/deepssm-in-studio.html#testing","text":"In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"Testing"},{"location":"studio/getting-started-with-studio.html","text":"Getting Started With ShapeWorks Studio ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface. Splash Screen The splash screen provides access to recent projects and an option to create a new blank project. Data Module The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information. Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information. Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information. Analysis Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information. Preferences Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software Data Collection ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run). Viewer Controls See Studio Viewer Controls for details on viewer controls. Menus File Menu New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom Export Menu See Studio Export Options for details on export options. Project setup ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Getting Started"},{"location":"studio/getting-started-with-studio.html#getting-started-with-shapeworks-studio","text":"ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface.","title":"Getting Started With ShapeWorks Studio"},{"location":"studio/getting-started-with-studio.html#splash-screen","text":"The splash screen provides access to recent projects and an option to create a new blank project.","title":"Splash Screen"},{"location":"studio/getting-started-with-studio.html#data-module","text":"The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information.","title":"Data Module"},{"location":"studio/getting-started-with-studio.html#groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information.","title":"Groom Module"},{"location":"studio/getting-started-with-studio.html#optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information.","title":"Optimize Module"},{"location":"studio/getting-started-with-studio.html#analysis-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information.","title":"Analysis Module"},{"location":"studio/getting-started-with-studio.html#preferences","text":"Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software","title":"Preferences"},{"location":"studio/getting-started-with-studio.html#data-collection","text":"ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run).","title":"Data Collection"},{"location":"studio/getting-started-with-studio.html#viewer-controls","text":"See Studio Viewer Controls for details on viewer controls.","title":"Viewer Controls"},{"location":"studio/getting-started-with-studio.html#menus","text":"","title":"Menus"},{"location":"studio/getting-started-with-studio.html#file-menu","text":"New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom","title":"File Menu"},{"location":"studio/getting-started-with-studio.html#export-menu","text":"See Studio Export Options for details on export options.","title":"Export Menu"},{"location":"studio/getting-started-with-studio.html#project-setup","text":"ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Project setup"},{"location":"studio/multiple-domains.html","text":"Multiple Domains SSM ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet: Importing Data for Multiple Domains In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see: Grooming Multiple Domains When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox. Optimizing Multi-Domain SSM For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process. Analyzing Multi-Domain SSM Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow. Mixed-type Domains Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation. Multiple Domain Alignments In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#multiple-domains-ssm","text":"ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet:","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#importing-data-for-multiple-domains","text":"In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see:","title":"Importing Data for Multiple Domains"},{"location":"studio/multiple-domains.html#grooming-multiple-domains","text":"When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox.","title":"Grooming Multiple Domains"},{"location":"studio/multiple-domains.html#optimizing-multi-domain-ssm","text":"For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process.","title":"Optimizing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#analyzing-multi-domain-ssm","text":"Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow.","title":"Analyzing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#mixed-type-domains","text":"Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation.","title":"Mixed-type Domains"},{"location":"studio/multiple-domains.html#multiple-domain-alignments","text":"In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domain Alignments"},{"location":"studio/studio-analyze.html","text":"ShapeWorks Studio Analyze Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. View Panel The View panel contains all of the options for controlling the analyis viewer options. Group The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences: Network Analysis The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D Samples The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample. PCA The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Multi-Level PCA The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure. Show Difference to Mean This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well. Metrics Panel The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation. Surface Reconstruction Panel The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option. Particles Panel The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Analyze Module"},{"location":"studio/studio-analyze.html#shapeworks-studio-analyze-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module.","title":"ShapeWorks Studio Analyze Module"},{"location":"studio/studio-analyze.html#view-panel","text":"The View panel contains all of the options for controlling the analyis viewer options.","title":"View Panel"},{"location":"studio/studio-analyze.html#group","text":"The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences:","title":"Group"},{"location":"studio/studio-analyze.html#network-analysis","text":"The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D","title":"Network Analysis"},{"location":"studio/studio-analyze.html#samples","text":"The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample.","title":"Samples"},{"location":"studio/studio-analyze.html#pca","text":"The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"PCA"},{"location":"studio/studio-analyze.html#multi-level-pca","text":"The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure.","title":"Multi-Level PCA"},{"location":"studio/studio-analyze.html#show-difference-to-mean","text":"This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well.","title":"Show Difference to Mean"},{"location":"studio/studio-analyze.html#metrics-panel","text":"The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation.","title":"Metrics Panel"},{"location":"studio/studio-analyze.html#surface-reconstruction-panel","text":"The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option.","title":"Surface Reconstruction Panel"},{"location":"studio/studio-analyze.html#particles-panel","text":"The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Particles Panel"},{"location":"studio/studio-data.html","text":"ShapeWorks Studio Data Module Importing data There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window Landmarks Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality. Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Data Module"},{"location":"studio/studio-data.html#shapeworks-studio-data-module","text":"","title":"ShapeWorks Studio Data Module"},{"location":"studio/studio-data.html#importing-data","text":"There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window","title":"Importing data"},{"location":"studio/studio-data.html#landmarks","text":"Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality.","title":"Landmarks"},{"location":"studio/studio-data.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/studio-data.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/studio-data.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/studio-data.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Removing a Constraint"},{"location":"studio/studio-export.html","text":"ShapeWorks Studio Export Options The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display Export Screenshot Dialog The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export Export PCA Montage The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export Creating Videos The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Export Options"},{"location":"studio/studio-export.html#shapeworks-studio-export-options","text":"The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display","title":"ShapeWorks Studio Export Options"},{"location":"studio/studio-export.html#export-screenshot-dialog","text":"The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export","title":"Export Screenshot Dialog"},{"location":"studio/studio-export.html#export-pca-montage","text":"The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export","title":"Export PCA Montage"},{"location":"studio/studio-export.html#creating-videos","text":"The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Creating Videos"},{"location":"studio/studio-groom.html","text":"ShapeWorks Studio Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"studio/studio-groom.html#shapeworks-studio-groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Studio Groom Module"},{"location":"studio/studio-optimize.html","text":"ShapeWorks Studio Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"studio/studio-optimize.html#shapeworks-studio-optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Studio Optimize Module"},{"location":"studio/studio-viewer.html","text":"ShapeWorks Studio Viewer Controls At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64) Comparing mesh types The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance: Feature maps and scalars controls When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set. Image volume support When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers Keyboard Shortcuts The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item. Point selection As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Viewer Controls"},{"location":"studio/studio-viewer.html#shapeworks-studio-viewer-controls","text":"At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64)","title":"ShapeWorks Studio Viewer Controls"},{"location":"studio/studio-viewer.html#comparing-mesh-types","text":"The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance:","title":"Comparing mesh types"},{"location":"studio/studio-viewer.html#feature-maps-and-scalars-controls","text":"When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set.","title":"Feature maps and scalars controls"},{"location":"studio/studio-viewer.html#image-volume-support","text":"When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers","title":"Image volume support"},{"location":"studio/studio-viewer.html#keyboard-shortcuts","text":"The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item.","title":"Keyboard Shortcuts"},{"location":"studio/studio-viewer.html#point-selection","text":"As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Point selection"},{"location":"studio/using-constraints.html","text":"Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/using-constraints.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/using-constraints.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Removing a Constraint"},{"location":"tools/ShapeWorksCommands.html","text":"ShapeWorks Commands shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable . shapeworks Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top Analyze Commands analyze Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands Groom Commands groom Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands Image Commands add Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands antialias Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands binarize Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands blur Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands bounding-box-image Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands clip-image Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands close-holes Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands compare-image Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands compute-dt Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands crop Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands curvature Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands divide Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands extract-label Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands gradient Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands icp-image Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands image-bounds Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands image-info Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands image-to-mesh Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands intensity Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands isolate Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands multiply Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands negate Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands pad Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands read-image Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands recenter Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands reflect-image Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands resample Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands resize Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands rotate Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands scale-image Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands set-origin Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands set-region Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands set-spacing Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands sigmoid Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands subtract Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands topo-preserving-smooth Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands tp-levelset Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands translate-image Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands warp-image Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands write-image Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands Mesh Commands bounding-box-mesh Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands clip-closed-surface Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands clip-mesh Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands closest-point Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands compare-mesh Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands compute-normals Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands compute-thickness Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands coverage Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands distance Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands field-mean Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-names Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands field-range Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-std Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands fill-holes Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands fix-element Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands geodesic-distance Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands geodesic-distance-landmark Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands get-field Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands get-field-value Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands invert-normal Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands landmark-geodesics Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands mean-normals Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands mesh-bounds Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands mesh-curvature Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands mesh-info Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands mesh-to-dt Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands mesh-to-image Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands probe-volume Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands read-mesh Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands reflect-mesh Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands remesh Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands remesh-percent Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands scale-mesh Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands set-field Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands set-field-value Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands smooth Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands smooth-sinc Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands transform-mesh Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands translate-mesh Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands warp-mesh Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands write-mesh Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands Optimize Commands optimize Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands ParticleSystem Commands compactness Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands generalization Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands read-particle-system Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands specificity Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands Project Commands convert-project Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands Shapeworks Commands seed Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands","text":"shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable .","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks","text":"Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top","title":"shapeworks"},{"location":"tools/ShapeWorksCommands.html#analyze-commands","text":"","title":"Analyze Commands"},{"location":"tools/ShapeWorksCommands.html#analyze","text":"Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands","title":"analyze"},{"location":"tools/ShapeWorksCommands.html#groom-commands","text":"","title":"Groom Commands"},{"location":"tools/ShapeWorksCommands.html#groom","text":"Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands","title":"groom"},{"location":"tools/ShapeWorksCommands.html#image-commands","text":"","title":"Image Commands"},{"location":"tools/ShapeWorksCommands.html#add","text":"Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands","title":"add"},{"location":"tools/ShapeWorksCommands.html#antialias","text":"Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands","title":"antialias"},{"location":"tools/ShapeWorksCommands.html#binarize","text":"Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands","title":"binarize"},{"location":"tools/ShapeWorksCommands.html#blur","text":"Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands","title":"blur"},{"location":"tools/ShapeWorksCommands.html#bounding-box-image","text":"Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands","title":"bounding-box-image"},{"location":"tools/ShapeWorksCommands.html#clip-image","text":"Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands","title":"clip-image"},{"location":"tools/ShapeWorksCommands.html#close-holes","text":"Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands","title":"close-holes"},{"location":"tools/ShapeWorksCommands.html#compare-image","text":"Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands","title":"compare-image"},{"location":"tools/ShapeWorksCommands.html#compute-dt","text":"Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands","title":"compute-dt"},{"location":"tools/ShapeWorksCommands.html#crop","text":"Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"crop"},{"location":"tools/ShapeWorksCommands.html#curvature","text":"Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands","title":"curvature"},{"location":"tools/ShapeWorksCommands.html#divide","text":"Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands","title":"divide"},{"location":"tools/ShapeWorksCommands.html#extract-label","text":"Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands","title":"extract-label"},{"location":"tools/ShapeWorksCommands.html#gradient","text":"Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"gradient"},{"location":"tools/ShapeWorksCommands.html#icp-image","text":"Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands","title":"icp-image"},{"location":"tools/ShapeWorksCommands.html#image-bounds","text":"Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands","title":"image-bounds"},{"location":"tools/ShapeWorksCommands.html#image-info","text":"Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands","title":"image-info"},{"location":"tools/ShapeWorksCommands.html#image-to-mesh","text":"Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands","title":"image-to-mesh"},{"location":"tools/ShapeWorksCommands.html#intensity","text":"Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands","title":"intensity"},{"location":"tools/ShapeWorksCommands.html#isolate","text":"Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"isolate"},{"location":"tools/ShapeWorksCommands.html#multiply","text":"Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands","title":"multiply"},{"location":"tools/ShapeWorksCommands.html#negate","text":"Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"negate"},{"location":"tools/ShapeWorksCommands.html#pad","text":"Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands","title":"pad"},{"location":"tools/ShapeWorksCommands.html#read-image","text":"Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands","title":"read-image"},{"location":"tools/ShapeWorksCommands.html#recenter","text":"Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"recenter"},{"location":"tools/ShapeWorksCommands.html#reflect-image","text":"Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands","title":"reflect-image"},{"location":"tools/ShapeWorksCommands.html#resample","text":"Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands","title":"resample"},{"location":"tools/ShapeWorksCommands.html#resize","text":"Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands","title":"resize"},{"location":"tools/ShapeWorksCommands.html#rotate","text":"Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands","title":"rotate"},{"location":"tools/ShapeWorksCommands.html#scale-image","text":"Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands","title":"scale-image"},{"location":"tools/ShapeWorksCommands.html#set-origin","text":"Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands","title":"set-origin"},{"location":"tools/ShapeWorksCommands.html#set-region","text":"Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands","title":"set-region"},{"location":"tools/ShapeWorksCommands.html#set-spacing","text":"Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands","title":"set-spacing"},{"location":"tools/ShapeWorksCommands.html#sigmoid","text":"Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands","title":"sigmoid"},{"location":"tools/ShapeWorksCommands.html#subtract","text":"Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands","title":"subtract"},{"location":"tools/ShapeWorksCommands.html#topo-preserving-smooth","text":"Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands","title":"topo-preserving-smooth"},{"location":"tools/ShapeWorksCommands.html#tp-levelset","text":"Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands","title":"tp-levelset"},{"location":"tools/ShapeWorksCommands.html#translate-image","text":"Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands","title":"translate-image"},{"location":"tools/ShapeWorksCommands.html#warp-image","text":"Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands","title":"warp-image"},{"location":"tools/ShapeWorksCommands.html#write-image","text":"Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands","title":"write-image"},{"location":"tools/ShapeWorksCommands.html#mesh-commands","text":"","title":"Mesh Commands"},{"location":"tools/ShapeWorksCommands.html#bounding-box-mesh","text":"Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands","title":"bounding-box-mesh"},{"location":"tools/ShapeWorksCommands.html#clip-closed-surface","text":"Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-closed-surface"},{"location":"tools/ShapeWorksCommands.html#clip-mesh","text":"Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-mesh"},{"location":"tools/ShapeWorksCommands.html#closest-point","text":"Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands","title":"closest-point"},{"location":"tools/ShapeWorksCommands.html#compare-mesh","text":"Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands","title":"compare-mesh"},{"location":"tools/ShapeWorksCommands.html#compute-normals","text":"Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"compute-normals"},{"location":"tools/ShapeWorksCommands.html#compute-thickness","text":"Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands","title":"compute-thickness"},{"location":"tools/ShapeWorksCommands.html#coverage","text":"Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands","title":"coverage"},{"location":"tools/ShapeWorksCommands.html#distance","text":"Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands","title":"distance"},{"location":"tools/ShapeWorksCommands.html#field-mean","text":"Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-mean"},{"location":"tools/ShapeWorksCommands.html#field-names","text":"Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"field-names"},{"location":"tools/ShapeWorksCommands.html#field-range","text":"Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-range"},{"location":"tools/ShapeWorksCommands.html#field-std","text":"Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-std"},{"location":"tools/ShapeWorksCommands.html#fill-holes","text":"Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fill-holes"},{"location":"tools/ShapeWorksCommands.html#fix-element","text":"Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fix-element"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance","text":"Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands","title":"geodesic-distance"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance-landmark","text":"Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands","title":"geodesic-distance-landmark"},{"location":"tools/ShapeWorksCommands.html#get-field","text":"Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"get-field"},{"location":"tools/ShapeWorksCommands.html#get-field-value","text":"Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands","title":"get-field-value"},{"location":"tools/ShapeWorksCommands.html#invert-normal","text":"Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"invert-normal"},{"location":"tools/ShapeWorksCommands.html#landmark-geodesics","text":"Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands","title":"landmark-geodesics"},{"location":"tools/ShapeWorksCommands.html#mean-normals","text":"Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands","title":"mean-normals"},{"location":"tools/ShapeWorksCommands.html#mesh-bounds","text":"Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"mesh-bounds"},{"location":"tools/ShapeWorksCommands.html#mesh-curvature","text":"Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands","title":"mesh-curvature"},{"location":"tools/ShapeWorksCommands.html#mesh-info","text":"Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands","title":"mesh-info"},{"location":"tools/ShapeWorksCommands.html#mesh-to-dt","text":"Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands","title":"mesh-to-dt"},{"location":"tools/ShapeWorksCommands.html#mesh-to-image","text":"Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands","title":"mesh-to-image"},{"location":"tools/ShapeWorksCommands.html#probe-volume","text":"Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands","title":"probe-volume"},{"location":"tools/ShapeWorksCommands.html#read-mesh","text":"Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands","title":"read-mesh"},{"location":"tools/ShapeWorksCommands.html#reflect-mesh","text":"Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands","title":"reflect-mesh"},{"location":"tools/ShapeWorksCommands.html#remesh","text":"Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh"},{"location":"tools/ShapeWorksCommands.html#remesh-percent","text":"Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh-percent"},{"location":"tools/ShapeWorksCommands.html#scale-mesh","text":"Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands","title":"scale-mesh"},{"location":"tools/ShapeWorksCommands.html#set-field","text":"Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"set-field"},{"location":"tools/ShapeWorksCommands.html#set-field-value","text":"Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands","title":"set-field-value"},{"location":"tools/ShapeWorksCommands.html#smooth","text":"Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands","title":"smooth"},{"location":"tools/ShapeWorksCommands.html#smooth-sinc","text":"Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands","title":"smooth-sinc"},{"location":"tools/ShapeWorksCommands.html#transform-mesh","text":"Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands","title":"transform-mesh"},{"location":"tools/ShapeWorksCommands.html#translate-mesh","text":"Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands","title":"translate-mesh"},{"location":"tools/ShapeWorksCommands.html#warp-mesh","text":"Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands","title":"warp-mesh"},{"location":"tools/ShapeWorksCommands.html#write-mesh","text":"Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands","title":"write-mesh"},{"location":"tools/ShapeWorksCommands.html#optimize-commands","text":"","title":"Optimize Commands"},{"location":"tools/ShapeWorksCommands.html#optimize","text":"Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands","title":"optimize"},{"location":"tools/ShapeWorksCommands.html#particlesystem-commands","text":"","title":"ParticleSystem Commands"},{"location":"tools/ShapeWorksCommands.html#compactness","text":"Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands","title":"compactness"},{"location":"tools/ShapeWorksCommands.html#generalization","text":"Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"generalization"},{"location":"tools/ShapeWorksCommands.html#read-particle-system","text":"Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands","title":"read-particle-system"},{"location":"tools/ShapeWorksCommands.html#specificity","text":"Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"specificity"},{"location":"tools/ShapeWorksCommands.html#project-commands","text":"","title":"Project Commands"},{"location":"tools/ShapeWorksCommands.html#convert-project","text":"Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands","title":"convert-project"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands_1","text":"","title":"Shapeworks Commands"},{"location":"tools/ShapeWorksCommands.html#seed","text":"Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"seed"},{"location":"use-cases/right-ventricle.html","text":"Right Ventricle: Highly Variable Shapes What is the Use Case? This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released! Grooming Steps For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Supported Tags --use_subsample --num_subsample --skip_grooming --tiny_test Optimizing Parameters Analyzing Shape Model","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#right-ventricle-highly-variable-shapes","text":"","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#what-is-the-use-case","text":"This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released!","title":"What is the Use Case?"},{"location":"use-cases/right-ventricle.html#grooming-steps","text":"For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase.","title":"Grooming Steps"},{"location":"use-cases/right-ventricle.html#supported-tags","text":"--use_subsample --num_subsample --skip_grooming --tiny_test","title":"Supported Tags"},{"location":"use-cases/right-ventricle.html#optimizing-parameters","text":"","title":"Optimizing Parameters"},{"location":"use-cases/right-ventricle.html#analyzing-shape-model","text":"","title":"Analyzing Shape Model"},{"location":"use-cases/use-cases.html","text":"Getting Started with Use Cases What is a Use Case? Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples . Running A Use Case The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case. Uploading a Dataset Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite) Downloading a Dataset Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory] Use Case Data When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj Use Cases Arguments When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below. --use_subsample Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10 --use_single_scale Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale --mesh_mode Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode --tiny_test Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test --verify Use Case Workflow Overview The use cases which demomstrate the Shape Modeling Workflow follow this general outline: Grooming Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet. Optimization Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters . Analysis of Results The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#getting-started-with-use-cases","text":"","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#what-is-a-use-case","text":"Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples .","title":"What is a Use Case?"},{"location":"use-cases/use-cases.html#running-a-use-case","text":"The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case.","title":"Running A Use Case"},{"location":"use-cases/use-cases.html#uploading-a-dataset","text":"Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite)","title":"Uploading a Dataset"},{"location":"use-cases/use-cases.html#downloading-a-dataset","text":"Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory]","title":"Downloading a Dataset"},{"location":"use-cases/use-cases.html#use-case-data","text":"When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj","title":"Use Case Data"},{"location":"use-cases/use-cases.html#use-cases-arguments","text":"When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below.","title":"Use Cases Arguments"},{"location":"use-cases/use-cases.html#-use_subsample","text":"Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10","title":"--use_subsample"},{"location":"use-cases/use-cases.html#-use_single_scale","text":"Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale","title":"--use_single_scale"},{"location":"use-cases/use-cases.html#-mesh_mode","text":"Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode","title":"--mesh_mode"},{"location":"use-cases/use-cases.html#-tiny_test","text":"Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test","title":"--tiny_test"},{"location":"use-cases/use-cases.html#-verify","text":"","title":"--verify"},{"location":"use-cases/use-cases.html#use-case-workflow-overview","text":"The use cases which demomstrate the Shape Modeling Workflow follow this general outline:","title":"Use Case Workflow Overview"},{"location":"use-cases/use-cases.html#grooming","text":"Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet.","title":"Grooming"},{"location":"use-cases/use-cases.html#optimization","text":"Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters .","title":"Optimization"},{"location":"use-cases/use-cases.html#analysis-of-results","text":"The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Analysis of Results"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html","text":"Ellipsoid: Cutting Planes What is the Use Case? The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid: Grooming Steps This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15. Analyzing Shape Models Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#ellipsoid-cutting-planes","text":"","title":"Ellipsoid: Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#what-is-the-use-case","text":"The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid:","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#grooming-steps","text":"This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation.","title":"Grooming Steps"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#analyzing-shape-models","text":"Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Analyzing Shape Models"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html","text":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP) What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results. Starting a New Project with Constraints Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs. Grooming Steps You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs: Optimization Parameters We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure: Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio-wip","text":"","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP)"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#starting-a-new-project-with-constraints","text":"Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs.","title":"Starting a New Project with Constraints"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#grooming-steps","text":"You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#optimization-parameters","text":"We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure:","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Analyzing Shape Model"},{"location":"use-cases/constraint-based/femur-cutting-planes.html","text":"Femur: Shape Model from Meshes with Cutting Planes What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case. Grooming Steps Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur. Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Femur:Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#femur-shape-model-from-meshes-with-cutting-planes","text":"","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#grooming-steps","text":"Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Analyzing Shape Model"},{"location":"use-cases/contour-based/supershapes-contour.html","text":"Supershapes:Shape Model for Contour Domains What is the Use Case? The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data: Grooming Steps In this use case, we download pre-groomed data. The input contours are: Relevant Arguments This use case does not support any arguments Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#supershapesshape-model-for-contour-domains","text":"","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#what-is-the-use-case","text":"The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data:","title":"What is the Use Case?"},{"location":"use-cases/contour-based/supershapes-contour.html#grooming-steps","text":"In this use case, we download pre-groomed data. The input contours are:","title":"Grooming Steps"},{"location":"use-cases/contour-based/supershapes-contour.html#relevant-arguments","text":"This use case does not support any arguments","title":"Relevant Arguments"},{"location":"use-cases/contour-based/supershapes-contour.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , }","title":"Optimization Parameters"},{"location":"use-cases/contour-based/supershapes-contour.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Analyzing Shape Model"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html","text":"Femur Shape Model Directly from Images What is the Use Case? The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU. Relevant Arguments --tiny_test Use Case Pipeline The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below. Step 1: Getting the original data The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green). Step 2: Define the data split The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing. Step 3: Find training alignment transforms Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed. Step 4: Optimize training particles Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model. Step 5: Groom training images Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4. Step 6: Data augmentation Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots. Step 7: Find validation and test alignment transforms and groom images To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images. Step 8: Optimize validation particles with fixed domains In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs. Step 9: Create PyTorch loaders from data The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased. Step 10: Training DeepSSM A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch. Step 11: Predict validation particles and analyze accuracy The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults . Step 12: Predict test particles and analyze accuracy Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Femur SSM Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#femur-shape-model-directly-from-images","text":"","title":"Femur Shape Model Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#what-is-the-use-case","text":"The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU.","title":"What is the Use Case?"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#use-case-pipeline","text":"The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below.","title":"Use Case Pipeline"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-1-getting-the-original-data","text":"The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green).","title":"Step 1: Getting the original data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-2-define-the-data-split","text":"The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing.","title":"Step 2: Define the data split"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-3-find-training-alignment-transforms","text":"Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed.","title":"Step 3: Find training alignment transforms"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-4-optimize-training-particles","text":"Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model.","title":"Step 4: Optimize training particles"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-5-groom-training-images","text":"Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4.","title":"Step 5: Groom training images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-6-data-augmentation","text":"Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots.","title":"Step 6: Data augmentation"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-7-find-validation-and-test-alignment-transforms-and-groom-images","text":"To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images.","title":"Step 7: Find validation and test alignment transforms and groom images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-8-optimize-validation-particles-with-fixed-domains","text":"In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs.","title":"Step 8: Optimize validation particles with fixed domains"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-9-create-pytorch-loaders-from-data","text":"The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased.","title":"Step 9: Create PyTorch loaders from data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-10-training-deepssm","text":"A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch.","title":"Step 10: Training DeepSSM"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-11-predict-validation-particles-and-analyze-accuracy","text":"The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults .","title":"Step 11: Predict validation particles and analyze accuracy"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-12-predict-test-particles-and-analyze-accuracy","text":"Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Step 12: Predict test particles and analyze accuracy"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Data This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#grooming-data","text":"This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Data"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html","text":"Ellipsoid Mesh: Basic Example What is the Use Case? The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks. Grooming Steps This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#ellipsoid-mesh-basic-example","text":"","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#what-is-the-use-case","text":"The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#analyzing-shape-model","text":"Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/hip.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones. Grooming Data This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Hip: Multiple Domains Alignment"},{"location":"use-cases/mesh-based/hip.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/hip.html#what-is-the-use-case","text":"The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/hip.html#grooming-data","text":"This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint:","title":"Grooming Data"},{"location":"use-cases/mesh-based/hip.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/hip.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/hip.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/lumps.html","text":"Lumps: Shape Model directly from Mesh What is the Use Case? The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Grooming Steps This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#lumps-shape-model-directly-from-mesh","text":"","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#what-is-the-use-case","text":"The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/lumps.html#grooming-steps","text":"This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/lumps.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/lumps.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/lumps.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/thin-cavity-bean.html","text":"Thin Cavity Bean: Shape Model with Geodesic Distances What is the Use Case? The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation. Grooming Steps In this use case, we download pre-groomed data. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on. Analyzing Shape Model Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#what-is-the-use-case","text":"The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#grooming-steps","text":"In this use case, we download pre-groomed data. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on.","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#analyzing-shape-model","text":"Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html","text":"Fixed Domains Ellipsoid: Shape Model on New Shapes What is the Use Case? The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids. Grooming Steps This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms. Relevant Arguments --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" } Analyzing Shape Model Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#what-is-the-use-case","text":"The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids.","title":"What is the Use Case?"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#grooming-steps","text":"This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms.","title":"Grooming Steps"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" }","title":"Optimization Parameters"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#analyzing-shape-model","text":"Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html","text":"Incremental Supershapes: Building a Shape Model Incrementally What is the Use Case? The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script. Use Case Options When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size. Sorting Method The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median. Initial Model Size The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed. Incremental Batch Size The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization. Grooming Steps In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --tiny_test --interactive Incremental Optimization In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized. Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch. Analyzing Shape Model The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes. Evaluation of the Benefits of Incremental Optimization To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model. Subsample of Dataset The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-supershapes-building-a-shape-model-incrementally","text":"","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#what-is-the-use-case","text":"The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script.","title":"What is the Use Case?"},{"location":"use-cases/multistep/incremental_supershapes.html#use-case-options","text":"When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size.","title":"Use Case Options"},{"location":"use-cases/multistep/incremental_supershapes.html#sorting-method","text":"The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median.","title":"Sorting Method"},{"location":"use-cases/multistep/incremental_supershapes.html#initial-model-size","text":"The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed.","title":"Initial Model Size"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-batch-size","text":"The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization.","title":"Incremental Batch Size"},{"location":"use-cases/multistep/incremental_supershapes.html#grooming-steps","text":"In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/multistep/incremental_supershapes.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test --interactive","title":"Relevant Arguments"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-optimization","text":"In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized.","title":"Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch.","title":"Optimization Parameters"},{"location":"use-cases/multistep/incremental_supershapes.html#analyzing-shape-model","text":"The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html#evaluation-of-the-benefits-of-incremental-optimization","text":"To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model.","title":"Evaluation of the Benefits of Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#subsample-of-dataset","text":"The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Subsample of Dataset"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html","text":"Shape Model for Multiple Domains from Segmentations What is the Use Case? The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#shape-model-for-multiple-domains-from-segmentations","text":"","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/ellipsoid.html","text":"Ellipsoid: Basic Example What is the Use Case? The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#ellipsoid-basic-example","text":"","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#what-is-the-use-case","text":"The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid.html#relevant-arguments","text":"--use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/left-atrium.html","text":"Left Atrium: Shape Model from Segmentations What is the Use Case? The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#left-atrium-shape-model-from-segmentations","text":"","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#what-is-the-use-case","text":"The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/left-atrium.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/left-atrium.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/left-atrium.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/left-atrium.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Analyzing Shape Model"},{"location":"use-cases/shared-boundary-based/peanut.html","text":"Peanut: Shape Model of Multiple Domains with Shared Boundaries What is the Use Case? The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller. Grooming Steps This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset. Relevant Arguments --use_subsample --num_subsample --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Peanut:Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#what-is-the-use-case","text":"The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller.","title":"What is the Use Case?"},{"location":"use-cases/shared-boundary-based/peanut.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset.","title":"Grooming Steps"},{"location":"use-cases/shared-boundary-based/peanut.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/shared-boundary-based/peanut.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/shared-boundary-based/peanut.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Analyzing Shape Model"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html","text":"Ellipsoid: Shape Evaluation in Python What is the Use Case? The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#ellipsoid-shape-evaluation-in-python","text":"","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#what-is-the-use-case","text":"The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#analyzing-shape-model-using-python-apis","text":"The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/ellipsoid-pca.html","text":"Ellipsoid: Shape Statistics in Python What is the Use Case? The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#ellipsoid-shape-statistics-in-python","text":"","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#what-is-the-use-case","text":"The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-pca.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-pca.html#analyzing-shape-model-using-python-apis","text":"The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/femur-pvalues.html","text":"Femur: Group Difference Statistics in Python What and Where is the Use Case? This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution. Relevant Arguments --tiny_test Analyzing Shape Model For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#femur-group-difference-statistics-in-python","text":"","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#what-and-where-is-the-use-case","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution.","title":"What and Where is the Use Case?"},{"location":"use-cases/stats-based/femur-pvalues.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/femur-pvalues.html#analyzing-shape-model","text":"For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Analyzing Shape Model"},{"location":"users/citation.html","text":"How to Cite ShapeWorks? Acknowledgements If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\" Citation When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#how-to-cite-shapeworks","text":"","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#acknowledgements","text":"If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\"","title":"Acknowledgements"},{"location":"users/citation.html#citation","text":"When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"Citation"},{"location":"users/install.html","text":"How to Install ShapeWorks? First, download ShapeWorks Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases. Next, follow the instructions for your platform. Windows Mac Linux Installing ShapeWorks on Windows Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\ Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid ShapeWorks also includes interactive Jupyter Python notebook examples. Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Mac Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Linux Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"How to Install ShapeWorks?"},{"location":"users/install.html#how-to-install-shapeworks","text":"","title":"How to Install ShapeWorks?"},{"location":"users/install.html#first-download-shapeworks","text":"Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases.","title":"First, download ShapeWorks"},{"location":"users/install.html#next-follow-the-instructions-for-your-platform","text":"Windows Mac Linux","title":"Next, follow the instructions for your platform."},{"location":"users/install.html#installing-shapeworks-on-windows","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Windows"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started","text":"Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-mac","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Mac"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_1","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_1","text":"Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-linux","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Linux"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_2","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_2","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/papers.html","text":"Relevant Papers Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Revelant Papers"},{"location":"users/papers.html#relevant-papers","text":"Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Relevant Papers"},{"location":"workflow/analyze.html","text":"How to Analyze Your Shape Model? Surface Correspondences ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out Running ShapeWorks Studio When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen Using XML Files You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml Using Spreadsheets ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets Surface Reconstruction For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... . Statistical Analysis Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis. Group Differences If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups) Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#how-to-analyze-your-shape-model","text":"","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#surface-correspondences","text":"ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out","title":"Surface Correspondences"},{"location":"workflow/analyze.html#running-shapeworks-studio","text":"When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen","title":"Running ShapeWorks Studio"},{"location":"workflow/analyze.html#using-xml-files","text":"You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml","title":"Using XML Files"},{"location":"workflow/analyze.html#using-spreadsheets","text":"ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets","title":"Using Spreadsheets"},{"location":"workflow/analyze.html#surface-reconstruction","text":"For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... .","title":"Surface Reconstruction"},{"location":"workflow/analyze.html#statistical-analysis","text":"Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis.","title":"Statistical Analysis"},{"location":"workflow/analyze.html#group-differences","text":"If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups)","title":"Group Differences"},{"location":"workflow/analyze.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"workflow/groom.html","text":"How to Groom Your Dataset? ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands . Common Pre-Processing Steps for Segmentations Resampling images and segmentations This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing. Aligning segmentations Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Clip segmentations In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename ) Cropping and padding segmentations In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename ) Converting segmentations to smooth signed distance transforms For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon. Common Pre-Processing Steps for Meshes Reflect meshes It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename ) Meshes to volumes Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands Remesh Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 ) Aligning meshes Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform ) Extract Shared Boundary In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol ) Input shapes with shared surface Output extracted surfaces Extract Contour The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes ) Smoothing Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#how-to-groom-your-dataset","text":"ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands .","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#common-pre-processing-steps-for-segmentations","text":"","title":"Common Pre-Processing Steps for Segmentations"},{"location":"workflow/groom.html#resampling-images-and-segmentations","text":"This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing.","title":"Resampling images and segmentations"},{"location":"workflow/groom.html#aligning-segmentations","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename )","title":"Aligning segmentations"},{"location":"workflow/groom.html#clip-segmentations","text":"In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename )","title":"Clip segmentations"},{"location":"workflow/groom.html#cropping-and-padding-segmentations","text":"In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename )","title":"Cropping and padding segmentations"},{"location":"workflow/groom.html#converting-segmentations-to-smooth-signed-distance-transforms","text":"For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon.","title":"Converting segmentations to smooth signed distance transforms"},{"location":"workflow/groom.html#common-pre-processing-steps-for-meshes","text":"","title":"Common Pre-Processing Steps for Meshes"},{"location":"workflow/groom.html#reflect-meshes","text":"It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename )","title":"Reflect meshes"},{"location":"workflow/groom.html#meshes-to-volumes","text":"Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands","title":"Meshes to volumes"},{"location":"workflow/groom.html#remesh","text":"Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 )","title":"Remesh"},{"location":"workflow/groom.html#aligning-meshes","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform )","title":"Aligning meshes"},{"location":"workflow/groom.html#extract-shared-boundary","text":"In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol )","title":"Extract Shared Boundary"},{"location":"workflow/groom.html#input-shapes-with-shared-surface","text":"","title":"Input shapes with shared surface"},{"location":"workflow/groom.html#output-extracted-surfaces","text":"","title":"Output extracted surfaces"},{"location":"workflow/groom.html#extract-contour","text":"The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes )","title":"Extract Contour"},{"location":"workflow/groom.html#smoothing","text":"Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"Smoothing"},{"location":"workflow/optimize.html","text":"How to Optimize Your Shape Model? Particle-based Shape Modeling ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term) Particle-based Representation More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration . Shape vs. Configuration Spaces This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization. World vs. Local Coordinates For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) . Optimization Cost Function Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces. Particles Initialization & Optimization ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes. On Algorithmic Parameters Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand. Correspondence Relative Weighting One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape) Shape Statistics in Initialization and Optimization Steps At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles Starting and Ending Regularization Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure. Optimizing Correspondences You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format. Parameter Tuning General Process The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model. Qualitative Assessment To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors. Tips and Tricks Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this. Correspondences on New Samples ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#how-to-optimize-your-shape-model","text":"","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#particle-based-shape-modeling","text":"ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term)","title":"Particle-based Shape Modeling"},{"location":"workflow/optimize.html#particle-based-representation","text":"More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration .","title":"Particle-based Representation"},{"location":"workflow/optimize.html#shape-vs-configuration-spaces","text":"This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization.","title":"Shape vs. Configuration Spaces"},{"location":"workflow/optimize.html#world-vs-local-coordinates","text":"For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) .","title":"World vs. Local Coordinates"},{"location":"workflow/optimize.html#optimization-cost-function","text":"Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces.","title":"Optimization Cost Function"},{"location":"workflow/optimize.html#particles-initialization-optimization","text":"ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes.","title":"Particles Initialization & Optimization"},{"location":"workflow/optimize.html#on-algorithmic-parameters","text":"Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand.","title":"On Algorithmic Parameters"},{"location":"workflow/optimize.html#correspondence-relative-weighting","text":"One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape)","title":"Correspondence Relative Weighting"},{"location":"workflow/optimize.html#shape-statistics-in-initialization-and-optimization-steps","text":"At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles","title":"Shape Statistics in Initialization and Optimization Steps"},{"location":"workflow/optimize.html#starting-and-ending-regularization","text":"Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure.","title":"Starting and Ending Regularization"},{"location":"workflow/optimize.html#optimizing-correspondences","text":"You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format.","title":"Optimizing Correspondences"},{"location":"workflow/optimize.html#parameter-tuning","text":"","title":"Parameter Tuning"},{"location":"workflow/optimize.html#general-process","text":"The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model.","title":"General Process"},{"location":"workflow/optimize.html#qualitative-assessment","text":"To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors.","title":"Qualitative Assessment"},{"location":"workflow/optimize.html#tips-and-tricks","text":"Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this.","title":"Tips and Tricks"},{"location":"workflow/optimize.html#correspondences-on-new-samples","text":"ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"Correspondences on New Samples"},{"location":"workflow/parameters.html","text":"ShapeWorks supports two formats for handling the data for performing grooming and optimization via the python interface and ShapeWorksStudio : XML Parameter file Project excel file Project JSON file (swproj) The project excel/json file formats are the current standard project file format. The older XML format is deprecated and will not have newer features added to it. Users are encouraged to use the project excel/json file. XML Parameter File (deprecated) Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed. Parameter Dictionary in Python Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , } Project Excel File ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings. Project JSON File ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ... Python API for Generation Project Sheet The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Optimization Parameters"},{"location":"workflow/parameters.html#xml-parameter-file-deprecated","text":"Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed.","title":"XML Parameter File (deprecated)"},{"location":"workflow/parameters.html#parameter-dictionary-in-python","text":"Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , }","title":"Parameter Dictionary in Python"},{"location":"workflow/parameters.html#project-excel-file","text":"ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings.","title":"Project Excel File"},{"location":"workflow/parameters.html#project-json-file","text":"ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ...","title":"Project JSON File"},{"location":"workflow/parameters.html#python-api-for-generation-project-sheet","text":"The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Python API for Generation Project Sheet"}]} \ No newline at end of file diff --git a/6.5/sitemap.xml b/6.5/sitemap.xml index 68973b7e3a..b52937db12 100644 --- a/6.5/sitemap.xml +++ b/6.5/sitemap.xml @@ -2,3042 +2,3042 @@ https://www.sci.utah.edu/software/shapeworks.html/6.5/index.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/todo.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/contact.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/license.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/release-notes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/team.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classColorScheme.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classColorSchemes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classCustomSlider.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classCustomSurfaceReconstructionFilter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEAreaCoverage.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEAreaCoverage_1_1Surface.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEAutoMesher.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECVDDecimationModifier.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECoreMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEEdge.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEElement.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEElementData.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEElement__.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFace.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFillHole.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFillHole_1_1EdgeRing.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFixMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEItem.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEMeshSmoothingModifier.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENode.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENodeElementList.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENodeFaceList.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENodeNodeList.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFETri3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEVTKExport.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEVTKimport.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classGLCOLOR.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classLegacyMeshGenerator.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classMeshSettings.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classObjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classObjectWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleEvent_1_1_01Parent.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomainWithCurvature.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomainWithGradN.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomainWithGradients.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImplicitSurfaceDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleMeanCurvatureAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleProcrustesRegistration.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleShapeMatrixAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classPreferences.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classProcrustes3D.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classReconstruction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classStudioLogger.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classSurfaceReconstructor.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1AdvancedTransform.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1KernelTransform2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1SparseKernelTransform.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classmat3d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classmatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classmeshFIM.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classobject__reader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classobject__writer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classquatd.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1AnalysisTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Analyze.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ColorMap.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ColorMaps.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Command.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CompareSettings.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CompareWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Constraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Constraints.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ContourDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DataTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1EigenUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Executable.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExportUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GenericContainer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Groom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroomParameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroomTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Image.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageLabel.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1IndexRegion.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Job.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Lightbox.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LogWindow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Logging.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MatrixContainer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshCache.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshGenerator.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshManager.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshSlice.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWarper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWorker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWrapper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Observer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Optimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PaintWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Parameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleArea.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleColors.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleEvent.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSystem.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Particles.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PickResult.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PlaneWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Project.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProjectUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PythonWorker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1QMeshWarper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1QOptimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Sampler.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1SamplingFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Session.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Shape.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1SliceView.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1SplashScreen.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StringUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Style.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Subject.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Telemetry.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1UpdateChecker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Variant.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1VectorFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1VectorImage.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Viewer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Visualizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Worker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvec2d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvec3d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvec6d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvtkPolyDataToImageData.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/index_classes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structColorScheme_1_1rgb.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structFEFillHole_1_1FACE.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structIntersection.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structQuad.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structRay.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structSimilarityTransform3D.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structTriangle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structVTKEXPORT.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Reconstruction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1SharedCommandData.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1powstruct.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/AnalysisTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/AnalysisUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Analyze_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ColorMap_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ColorSchemes_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Command_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Commands_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CompareWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ConstraintType_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Constraint_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Constraints_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ContourDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CorrespondenceFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CorrespondenceMode_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CurvatureSamplingFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CustomSlider_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DataTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DeepSSMJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DeepSSMParameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DeepSSMTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DisentangledCorrespondenceFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DomainType_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DualVectorFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/EigenUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/EvaluationUtil_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExcelProjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExcelProjectWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Exception_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Executable_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExportImageDialog_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExportUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEAreaCoverage_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEAutoMesher_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FECVDDecimationModifier_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FECoreMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEElement_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEFillHole_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEFixMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEMeshSmoothingModifier_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FENodeElementList_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FENodeFaceList_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FENodeNodeList_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEVTKExport_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEVTKImport_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FreeFormConstraint_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GenericContainerArray_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GenericContainer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GradientDescentOptimizer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GroomParameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GroomTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Groom_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GroupPvalueJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomainWithCurvature_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomainWithGradN_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomainWithGradients_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageLabel_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Image_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImplicitSurfaceDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Intersect_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ItkToVtk_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Job_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/JsonProjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/JsonProjectWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/KeyboardShortcuts_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LandmarkItemDelegate_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LandmarkTableModel_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LandmarkWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LegacyCorrespondenceFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LegacyMeshGenerator_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LegacyShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Lightbox_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LinearRegressionShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LogWindow_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Logging_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeanCurvatureContainer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MemoryUsage_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshCache_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshComputeThickness_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshGenerator_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshGeoEntry_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshGroup_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshManager_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshSettings_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshSlice_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWarper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWorkQueue_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWorker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWrapper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Mesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MixedEffectsShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Module_8dox.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/NetworkAnalysisJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ObjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ObjectWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Observer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizationVisualizer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizeParameterFile_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizeParameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizeTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Optimize_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PaintWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Parameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleAreaJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleAreaPanel_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleArea_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleColors_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleEvents_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleFile_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleGaussianModeWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleGoodBadAssessment_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleNeighborhood_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleNormalEvaluationJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleNormalEvaluation_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticlePointIndexPair_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleRegionDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleRegionNeighborhood_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleShapeStatistics_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleSurfaceNeighborhood_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleSystemEvaluation_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleSystem_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Particles_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PlaneConstraint_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PlaneWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PowerOfTwoPointTree_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PreferencesWindow_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Preferences_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Procrustes3D_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ProcrustesRegistration_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ProjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ProjectUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Project_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PythonAnalyze_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PythonWorker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/QMeshWarper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/QOptimize_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ReconstructSurface_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Reconstruction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Region_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Sampler_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SamplingFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Session_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeEvaluationJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeEvaluation_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeGradientMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeWorksStudioApp_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeWorksWorker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Shape_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeworksUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Shapeworks_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SharedCommandData_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SliceView_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SplashScreen_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StackWalker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StatsGroupLDAJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StatusBarWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StringUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioEnums_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioHandleWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioInteractorStyle_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioLogger_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioSliceInteractorStyle_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioVtkOutputWindow_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Style_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Subject_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SurfaceReconstructor_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Telemetry_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/UpdateChecker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Utils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Variant_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/VectorFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/VectorImage_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Viewer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Visualizer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/VtkMeshWrapper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/WheelEventForwarder_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/WindowsCrashHandler_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Worker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/index_files.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkAdvancedTransform_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkKernelTransform2_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkSparseKernelTransform_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/math3d_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/meshFIM_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/pybind__utils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/resource_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/stdafx_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/vtkPolyDataToImageData_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Common.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Constraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Image.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/index_groups.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/index_namespaces.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceUi.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespacefmt.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceitk.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceitk_1_1Functor.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1particles.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1project.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespacestd.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceutils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/backlog/ShapeworksCmdTools.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/backlog/fim_v4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-analyze-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-data-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-dataset.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-groom-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-optimize-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-project.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-shape-viewer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/getting-started-with-cloud.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/swcc.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/deep-learning/data-augmentation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/deep-learning/deep-ssm.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/deep-learning/pytorch-gpu.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/build.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/commands.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/contribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/datasets.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/docs.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/gh-actions.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/markdown.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/modify-datasets.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/new-notebook.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/new-use-case.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/onboarding.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/paths.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/python-apis.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/shapeworks-library.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/tests.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/examples.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/how-tos.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/interfaces.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/shapes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/sw-stories.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/workflow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/ellipsoid-joint-generation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/free-form-constraints.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/new-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/openvdb.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/shapeworks-command.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/shapeworks-python.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/ssm-eval.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/sw-meshes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/array-passing-without-copying.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/create-and-apply-image-transforms.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/create-and-apply-mesh-transforms.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-data-augmentation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-exploring-segmentations.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-meshes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-notebooks.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-segmentations.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-shape-cohort-generation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/python/python-api.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/deepssm-in-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/getting-started-with-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/multiple-domains.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-analyze.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-data.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-export.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-groom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-optimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-viewer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/using-constraints.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/tools/ShapeWorksCommands.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/right-ventricle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/use-cases.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/constraint-based/ellipsoid-cutting-planes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/constraint-based/femur-cutting-planes-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/constraint-based/femur-cutting-planes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/contour-based/supershapes-contour.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/deep-learning-based/deep-ssm-femur.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/ellipsoid_mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/hip.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/lumps.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/thin-cavity-bean.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/multistep/fixed-domain-ellipsoid.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/multistep/incremental_supershapes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/segmentation-based/ellipsoid-multiple-domain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/segmentation-based/ellipsoid.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/segmentation-based/left-atrium.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/shared-boundary-based/peanut.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/stats-based/ellipsoid-evaluate.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/stats-based/ellipsoid-pca.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/stats-based/femur-pvalues.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/users/citation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/users/install.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/users/papers.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/analyze.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/groom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/optimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/parameters.html - 2023-10-24 + 2023-10-25 daily \ No newline at end of file diff --git a/6.5/sitemap.xml.gz b/6.5/sitemap.xml.gz index 7fb986d5f8f4e1557c860a0a8daf93865375ec0a..c2b33014648741eb413533c2b21902e6b66b0513 100644 GIT binary patch delta 5428 zcmV-470c@KEAuM{ABzYG6*oDN2l9W((tTwA+R?}Omh~HIH2v#m!DPGp>E!5@`P-g6 zeck`NFK(4kA%1UGtI?it)mz4GxB#u>)Ef#HKvPT1(4tqCOt=`9SQq5CALPlI`#Ofq z3HLwGRIBvLOFTm3F&IFjv8r3OQjkUh8g;`seI_T8jnyN!?&`jjtp%aHyf}Z=#Lkpc zO4x<~k#6JLc)y4!bfZ<*WVSFn@a)U^IdR!Bf3~ijHrz;THoqs&S|?xdF+Y4fzd&JB zn*6x~!MPAH^8TWAYE*BrXwI2sSVXtCAUu~i%7jy8+h0_RhU2duFW^4QeglK{2z2|r zx72~40IiBgS#?U;tvfehn)rVQB?t&*f2UqaV}Ypr%?gI({{})@Yng(ed|Cf?@i-`L zad>10!}IRy?BmtP&k!tEv|)VbZ`XI!lV(<7+^UnlK-M~K0V9g>vHmA<`*{D?9mbu(f>O zu??N8j>#UC>#MZevr*qOJ8D9P^c(jBI-oz91`Kj&C6{&|Dg``@*Tnj#6L@N^mi1_{ zj^d40T>G%1`Ai#Ua_T7@2ZgxuAHI@3G3^*N8J|jd&D?4}Vy@`~j1MRuNnA9I(^U;5 ztfq#XlFC7{y`CjadJca9^fJK<0%>JOA=Q=IY(UI~Kjz|rxKVz$vc-@K(%yNS{8ZdC zC+oyov)(jHcSvw=S58&#>3wfW52|H$wh%7Iev%#DMmSev-O`z&rtyjJ7HVolqoP6#*DEx6;-@H3LyP|t)SA@EV>#gi>{QWXtIFJXkV>T5iB+hKbKq0fee18qW zqNV`Y?XAX%=^c%}{* z#sQFWs9 zW>CHGfyRSB8WHr6#<5~PZKdA;v-&bnQ0w8GXjrYTe^oUu+zr#LBWI=?Tt?LGDGl}3 zeUFyJcOzQQN7jBJAL#;yypS8}QGFH{kDS^Yt-uNy{v3Z2sJP)ZBysnP>XsnkeD1)U zTP<0uHn5DSg62{aT`Ju{Tf|enp5)$ibcB#%<~8D})@+B!`Ld)6tCZ?Bs!|;)7kJEK zVuUsuCqhu8aoUwP_pBWW)2}gUY^YqgfhV*Q+drklE42NOs5s@ee~F1xbo&j|D^^pB z3WsU|;}(BSzvA>$KzvCtq&FB-Py5xV9^DIk#0cvI{*89EVp^=WN?Sfc-hfw5=kA!k zJEunW5;W*^fb^YD #ivjmK}_Hm1AB_Oq$10-yg+uX43yNP*l3Joz0cr+&8>WbRZ6^N;?#f6bl3~~f#haeE4_8h$e2oZtiAAscnmaY z?axrL)q}YV0selOF~5_;I{8{x*6m*7o+E$jMf*yj?`2(g1~Z2B5)e1B=q2ZOahpO) zpY6^_&RWV)ZmNfJI2v&9nSw}Q;g7z4i;ilX0ds#_rq4UMw zeH`sDTG&u1?Cult zoioeUYMvG59)^x4{hXy+K0gZ`W=@`(IvuR|)){18-sw$^!F73Y_T~JXxa_7(hifHd zBS}wFzt7)Ypg>;Aw*5u5)7o90o`G;pu17-X=DO}-((cxp z^`=p}OV2UT*4{_63EwL^(|mtf|90`;Hy=N*F>spBdTH(V8?#Q%-KMuu{Amt=x<|Je z2IfmU>S^xC>%`ybO|6WXJ4PTC-hb==!#pfOUGxCn?{D&rt(B9H*zWtDd}h5+9U|+Y zeXV~yO-3Yf#@e=K+-EKN&m&SF>hPzO#cA;D4U-y~^pCAxrkT5To_K%ai)c~*4;&TQ zz-Z#%tgxA{C~MutG}XGVcLRaru7)jXT+priH^n~b7{T@QEyzJV7}$H}32xGl*=-cL zA5qW>vTv+yP7Xc&eT(MXa*F{oB~f9}{F{R3n4G%TY`_4Sz0(E&X1a|~I3N~eaG#np zvH@rg9jLrg2ZRHJf^dIkdaFh~d+Pvbv?epCUifxVPd-U3EZ-tLe55~hAcs$8tm;;+ z6wWXQftfq9ymTMA4_E-gIi&@_bUP;+R;%k@RgHr3JU<782xFs3L%p2>(gO6toz)=- zz59G*?aNY#;E^umhI$MS)pPG2&l5h*Bd7L7i%2M>c`y$I(tv*<2_A{Nf2VE<0A*0x z&Z*UswQ2)GgdwLdFZ`IiGj&heEf50EXs4bB0OIV=Qo{kblqSDO04Nu}L>$2Pdz7M& zfbs~ky*$RMQ_5~-zX6f}Aj{*E>h==gN*W77bjdgY;rPEnaD0iuqVV=T6Awg`WFkSJ7>670 zq$Y&G;_P0Vf;(TO-99BDpn-XL_W=>g3vq)4hQV^hYHBf1F#OdM3IN5>N-hr*p-@iD zp&Lf{B=&CYJJJRZf}q>{YE+LEdOsopiM;RhMa{@BsW`ID+G|9nEp%~ zJx{oVS|qiZ2PGhoYKY0bJ*9p6m+`0!3=)4tKI;J{c#s=kcmNUx1v)H;?(DwK z8bQA~=DA@#KnlSz5e&@KkrwClfW!q3IMbk2oYjF))DAH3*l3JozTX0YSUyi^N{P2j zocd<=2BK}jf$YW96BwvzFwt`>EhP2fH5&}r%XvdESo3fpuxt1m6O&NTCU^JBy0c~6 za~ywFV_!0Zxn?_KsRNXWGZ+jGz-jWs!+_dVOgt#QFZDqBW3zrxlPa;+1YlcfYDoKH z1_P3|d_)AmqPQNNh&Jgt5RBLEynw^FN}(zs_cR!(WqX+LId*oddX(96GYv>)*(ad% z#ZNF1*Q2>Hd$SY?3E|e99X!Ef9L6C-a3Fup#9GajrQvh&3GJf}!wGdL-GHa%q?5p!r2;I{Gjpi-WAR(!h)6n`2$YnEWXBYk0p|F4a z;;x#OV78h^np%l6KiqR=cL2GiGnH?31R<_H3`BwOj54V>m|G4>W`D7FA4fZk79@oL zWS@;SMD%kX!8rW~45`o2*DX;ym1ABi?LL2xkX<+H$L35kvz?s-08AJGC?WN2MAfqzv`!0_hfkPLBg!a^iy}_a zq%7+ysiKm2QsoUTi!yw|G#3$Z%E~(7%c|n6;G#+0G8Pfb;y4B%EJVZ8w2FUIo)tVR zc@ps?;i7Kh<+9=t03lDyLX^!iVa<}oysFD+S>;JmF5_jM0IXpaRYh44rHQCg#&VX# zNma(8N+=h+VgQ6$>DH=bqAsE+FY2sze=RvhRbEzcod6J)%OsBC#0k%&&P7wlwMd$T z(ULLVpXXXKbzQPfSIIuV+uaTKwpjH0qG zS>0se6Xw~H$CW4qi>i{M*ojXrsIK$eFJxW-5OPr#X&e{PlGRyOXL-aq#Z{S>EaJ@) zfRJ)tSIazgf3mV_1Qpq`s^g|w(z0RzghlGMXTymoiQEn?-7Q!}PU(NBE*wfZL+<7yZ&%Pf69VxX9CpXGu}=EEcRt5cJZDvYHiT zUOK%dk4o-@DT|6Kk63>#;W z9?au9tMa7~Ny!VhUn2%!AJ%zHSzJa9%c{a1NS@Vcp0O%hx}Sg45CS20I;hARCrBf~ zi;5Mj5(&?%co{kKAAqn*cu{bt+7xkFxVwXA&WK8*Wn4I;u|QZuXYPtTPolzmNmF<2 zH)ZY&j)JqQ1DkJZ}h?=U(Dra6)5zEs! zjjDnKz>P1QAa&+NQWR-jWFn5UtaK~NL=|TVF9BpJRcYz$LlKE&$x2E~XHT%Gj*=?R zoiYdDFKr?xTSQ4^OfdE|d0P1>A~msyn`IL_gSaW#?+SL-)}_q zU`U7N>LBOkwm)$|YTZU7^-0tshw z#e@h{Gk({q%~3E5l#$#kc%apMQGPcth3ko+@ay6{PcomHA|7n@-W6XyP;9%U;+{qlTnsc*vl z{=L<*9xa7Ru-6lVT>+tZu-|>NU9hP+VX%J$9n*J0J@mnTeDeyYLeVwJ-P!8|LXz*ci_TWl_5q#8LEwkF#nvw5*52Y^WRcE5v~H&i^H8 z@Q7A9rkT%-1L--Iyx6}JHr|VL?LFin{d_U4X4rg_YxcFUd1WyzLallK&zQGRSX(*3 zu(V@07#JG6bw`M^duexznpl4yIGC3W#?o-&I}3<|h2~^%o%cH7dYG2eMT&5HTHt(-5zgnLUXi%leq;me>ieJ&17Vj5ZQ(> z2b+8wYqr}4zg)rI0ooaBGTiKhnLzrE=4~4;z`(pN5#skhq#~aL9DXEvVhA?Y@k9`E enBxgzV48Jg|KCo;^uv(-`F{XOcEDZi{s91tYHyMN delta 5427 zcmV-370l}MEAlG`ABzYGLP9u^2l9VO=0382?dW5C%lZv9n*Q~(V6xr)baM2{{B2L3 zzV83s7q?2N5WhF8)o4$+>Mi3oT!2<`>J5bpps6KhXwfT6CR_|ltPAqn5Ax*9eH}yQ zg!`Xos#SXBB_5&i7!07%Sk#M8*U^vo8OaXt&=bKm>)i#U!X85 zP5#`0;9Lk8d4JJ5HLAB*H0R7RETY?65S~jMWx}bl?JufD!|_*-7jU0tzkxw}1iF3R zTk1eifL6t$tU9Ia)}0$LP5gg@5(I>@zf-TIu|QP*W(7m?e*+<{wM;=!zN~+{cpQ|r zI6Sh0;dys;_VMcDX9$)n+AzNJx9dCVNi(Z3Zq-R&AZwkrfDy&`SpSo_{Y(rciZKIy z)e^#2dYhwM=2|Tq{%X+j} zNAX50u6vIrS8dgF;;S4`0cin0Absj8CP!W^OefG1qhg#s`#-Brcl9>8b`2 zR#QVxN#!8fUeA&yJ%@h)dYRw_fwZ!tkm^cpHX!E0A9L|Q+$g_W*<#2AY45yEek$&n zlXYUPS#KJpJ0!TbE2k>=^uD*G2h}n=TL_n9KgkYnBb=+TZs|->)A&Sq3$?gssv8)$ z?QS&=-rG##^V`eSz_g*?NcYr2uKKjRYRYN59$PDicK3F7<^_Kd193g=L0_$5g2eX6 zm79+)PCoY@6#h7_Z{D4rUC}+YD?(kw^;Y&b{(hM+9LR&&F`Eh$5@)tzppe;KzQ2ZG zQBwfy_EzJ>^bSZ5I8nWSjm%<*f#(lRhEUJiosnj(R11uUW59lc@85(==4`o+_2QjY z;{ZrGRoPxMWHf&R$u{juOfqMg5me69HwnK=u^|h|=Y7vi_SkTkTeG)n)Ihlnulckl zGpJtpK;yw5jR<;3<5)4Dw$g8aS$!EOsP%A8G^|$Fzp5G+?uKdBku%c`E+gvpl!kii zzDG;qyAiGDBWu5qk8}Y;UdRpgs6LB}M^5dHR$zq;e-3{MRNU|ylDPXtbxV+NK6hZw zt(L4+8(2nEL362zE|u<}E#j$OPjYWMIzmV>^BVC~Yqmq=d|6V3RZ8_5RjCe@3p{2q zF+!V-6CtS4IPJ=td)AJG>DQPvHdHR$z!O@D?Vr-&725tsRGf0#zr@5Ty8Q;~6|1R5 zg+sM~af^SZUvc^=Aiks+(i@Dar~PVFkM0FNVuW=9|3E(7=hV`MSpvpf`?$rm5|CQW0TMRLZEjfi-9)`-+@n?-h>UWxwY9=T zd)W^Ld?D55tL%k(z+~H?v}}J#Hg8AdIO2;2TiAb~APwLDh;_#JmQdMXo%@~+*7=0j zHTfHSps{SvcFlUWfxQP{eQPt^QKu~f3c2#Lib2^>123NKE7Jq)$@{8iMpLgZS9!whV|3}GfvIBkWV3O zG~&hhIbgnbY&1r)-e+*Z=2kwzDka`Baq2&3I_!o0KytIKmEJmLWK5+y)?WBRJO-My z_GhTr>cL!w0Dr&CnBU1^oqVk;>vpek&yj!iqJ5>%_p+`#gBinm35c6m^pf+txJ@CY z&vs`dXDw_A-;LyVpUI3Zq~_kTo}im7O@z2^SM@;pW3zrxH_ENwS`&RAlpmCUBz>Oc z3R{N(JW2WwpuT(S5F6K0zm{egaO;IZA!s`)mLqr}2LY zkX!RR7!0wRYn>6v{4-Q8XeZh$Ld;0i1bJvk2b&>|o&P@3d9~B5>?ou<9R^g&**Syh zI9xqF!;Qf_Gol)S&xEjs;8bM#MG~T~a5cEswkxiQAaxqcteM+hc6W|7XykKEEp=oy;t;Ff2f-|zZHZ$VN?(|k4ANHtKUH-GM4b=hjd#ow zhul8GsVCSiYrbxY+Nl`vQfc=~FtcD_{enl&Zt0QJ0CP9o6Hf#RNeV-fgOGpNyBpQ+ z&Y5LvHO~rj4?{kKk4@ARg|;JUmx`*MCxTy|5Y!?hB! zk))@o-{ZqwT+{xki>zrdGzx9V3tm@4xl`VIG#CE_wj(_c!^**2>98Z1;UnKC@n^4w3cH zzScjUCL@wKV{KbA?z0yC=Mkw7b@)@t;xu^nhDnV~`o~r;)688vPdtC|MYO2@2abwt zU^MY>R@lr}l(p_+nrhwGyMe%QSHqSxF6h?%n_{1IjNp3u7UZBF4D3Dg1UKo&>^6$r zk0@vb**DfUCx@Q?zD4tGxy68)lBh6f{!PJiOitZvHei6v-f05>Gu=ig91sgKxKGU) z*#I<$4pd&L1Hu79K{$Uiy;Y;0y>$RIT9X-6FMPYGC!Zu1mTwUrKGL5$ki#c4R&}dZ z3TK#uz|0+4Ub>Im2P^>LoYDedx}6gZtJU?dszyP1o}Yt4gt5`2q25jbX#slS&gu|^ z-hDo@_GKwV@JJVOLp_Fv>bZB1=LsL@kyHDkMI;o`JeUUpX~2Jw1dqhszf-pafHEj; z=hSM+TD1Wo!jRLK7k*6MnYt(K76<`nv{TOm0CDzbso?-zN|RqC0F(<~A`amDJxb9> zKzRh&ULIrBDP^~^-vCJfkmd17b$bbLC5;6kx@4SyaQxpOIKISS(mpX*-gg)*n&?vL z4k#4-j(XCP`zU{^;~{;jHQT{ag%7mv9(_)RyB~)+3J73IbwF{Fi3cJ|GLaxqjKht0 zQWHX8adxjw!JV(tZl976(7?RB`+x}Lg}6Zi!(h2$HMJNh82;)B1%P5`C6|YZP$(zn z&RKz^7ZcFi0T9F;{M*@f~RP;S4vo7U}1%1RzXDL(ak{lAEoq6#__4On;`0 zo+n&FEt1;IgAx!(Hol`&=p5I?`X|2|PK4o_I;D5N8w9i4-#llGZ$U^@H;k6nTgmTw zC*dHVKwN(zSUS#eGdK(wAN_$Kxn{kS%otm2MN?xd3_&)HCW9cs2pmk)JD46o&Wayo z@oA)yU}#VlW}XlO!4f`%d?azvG{mhzvi`4?7=5C?P>*4Qd?4%JJ9KA52v>cqfg)8i z3`mgbsSk4SAak1MR2B9-bqxiJp3*-3%Xm}<1_^&6pY;F}JjjhNJOBxU0v(n^cXnTA zjiBEg^W3l=Acf$V2nJ^ANQ-lNK;i-ioN3T1&gwuYY6qBiY&1qP-*16HET1PdrNmn% zPJJ_b1JSnNK=xwl2@KRUnCQ8c7Lxk#nhgf*<-8#nta-Q)*fso(iAgAEle>Fm-Ptnk zIgWp-u`ijyT(h0A)B(!G84Lyo;57N+VLumwF)mu~|Q;NtIY@0=RJ> z;wPAh>(Shpy;+Kcgm7!l4xZpK4&#s^IFNs4Vy))N((pO_yI6sSS4bEVOlbP>_Mz1gU$}umMcAtMo$gZ39V{@jN+0M=Z049t8l#u#1qHLLGtf{Ib ztI{%}CT`Lwi?S?=c*N513FDGiO`WH_B3?&%EYiB+O`K(UTBile!zWCr5oMIdMG+@y zQkHd7NX&4TE%}U&kCNE zJc)Rca8Wn$a#`^RfRLwUA-B0M;;zs-i52(nM4#V>wIW zq$*=kC6o(ZF#y7>bZb>IQ5R8^7j;&(gC$?7btvpnLQ;;Kwb7V%~Y zKu9^St7V?LKUrBdf{JWe)p1iTX<0Dfr*wbwrQ54jUI7q_ zOo&vJEU9A=vxurBFB5lB)XSoY8UU@WT;|J^7tGy-&K{&FO3B?G8FQL=&1wd)hGh|@ zV!4bMH5D(bN-TNflyEMb^kK^-z->|bi+<^>r=)6FT;yrQv!p0_77JD+2zqHnS5Rrykgq~wL$uMq>V59>UpEH0ylWmVx0B+u$J&sdc$-A{jN2!W709aLnE6Qq&g zMa2qMiG=4>yo{Xr4?tKYyePO+ZHl-o+}*)5XGEpZGA^9aSRkySGj~OvCsEN5NTDasoJqJWfe?E8iW%Vo6jdVp%25kcv~zoT>vrSh6${HCvY6QR-|c;r1)5 z)1=5sx2Oz(kW+sV*G0n%w^f&EwQRDCCrK4kUeyJFq~Ud0m63N~L`_v?l`}7@h~;UV zMpZ!q;KmnDkUH}sDT=f%G7-mFR=O2sqKdPGmjJSqsAXWF@7gvnN)|*D@@LN$j zC_n#~aog@z<1i>~Nql~Lxf+-@^c(4(S}59ANC^Vd_1IcDw7a*vsTC*d?Uc0X-bZLU z?*L(U#`qi9lrV;kHQ`dxr?>C}) zFr-6sawx263qle3Vvx{*W?Of{3f9>Dz???l48ngWoc`$r0Hi0F-z5@F(^(`OXFY)7 z+{U-@R2Zr>64|TI!cqBU>jJ)*{+ez$%%TBCocrp-1I`brk&oZOYWjzEH-M2^frK-; zVnPI}8NX}Q=BT0QSttCI`k-kV+1=g;nG?-hHH!J43pURcS#*=l6*`SzmI0v{vY}%* z>s^0!AWNe56H-8M0#@XXF{bwy_ftoja9K8Ft?V}oW0}txSUgC(T}*F<%VZvSko6{l zXjrtwbnjN=WV%z>xbcJ8r_2$ezgwPIR0%_3BSf!S@a$6%O-!!Fn$gGG3LebLHVGrbFy#F7b9puRGt zPv~))(+R<{RSyfRAW)>A?9hao2=kg|`V0oigL|m7#GvtSH?4XIk;Q3LC)BobFiL-l z#XprhF^diLq=R)sc_R0ppoOnlSn#K0QWGkSS9;Af1|?JiHBf&q>QKM_k-oL}MFEh^ zdT_8Hrd!ZGYlHp%4-2297UunT@FJKKrZw9w24;-E4}CmIjn*BKVHc=*`;5jlF-r?~ z*qyC7w7Z4$`TGldsD?9Ocz!#=(0zY1(g_h{`wK>T99pHPm+2W4aWxUd=QqKg-Ueht z-;{Hn2v=LBLpP&l{qV?L8Y0AOHcjz-uQAF#U_)xp^6h;WI#oCK!=Qywoio-=z$o*N zL(*&bAYN?>pTa3dP9}%XG3C03k8wzI4WA_3q|iObIN9!j`$?^@^q7l3zD|F|9|7l# z9TFVOiI$tKUHA!w+86wV4fFIUY>elFvZ&n);wXB;$5}NSTGqp1Hq?#!6=J}8=l_y4 zctool)68eaf%F_pUhLlq8}CKB_8#((e!iGiGi<)eHTzoFyt0@Uq1L?rXUtnDtgRei zSlY203=ECkx+BEdy|lYUO{{+p9L&oGV`(_?odv`}L_D1;6gt^+O_M{py*;|s!p1xH zk^hy{$0da$YpJmd<_x*93!H81J|h;j8hgR?ZjU!Op*h;X$=rgOKO8xqW->BMh-^cc zgH67THQQ~2U#?*90PT!58E$sMOdx$n^R^8aU|?RC2=V(LQjt#r4nHG3F$5dycp?Zn d%<%*variable alt

    rgb alt;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classColorScheme.md b/dev/api/Classes/classColorScheme.md index 8c247a2382..b3fe53dd9f 100644 --- a/dev/api/Classes/classColorScheme.md +++ b/dev/api/Classes/classColorScheme.md @@ -105,4 +105,4 @@ rgb alt; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classColorSchemes.html b/dev/api/Classes/classColorSchemes.html index a6f8b03540..8716db85ef 100644 --- a/dev/api/Classes/classColorSchemes.html +++ b/dev/api/Classes/classColorSchemes.html @@ -2451,7 +2451,7 @@

    function ~ColorSchemes

    inline ~ColorSchemes()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classColorSchemes.md b/dev/api/Classes/classColorSchemes.md index e07268b356..f0d5ff1ff7 100644 --- a/dev/api/Classes/classColorSchemes.md +++ b/dev/api/Classes/classColorSchemes.md @@ -36,4 +36,4 @@ inline ~ColorSchemes() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classCustomSlider.html b/dev/api/Classes/classCustomSlider.html index cccd1beb98..3ccab02186 100644 --- a/dev/api/Classes/classCustomSlider.html +++ b/dev/api/Classes/classCustomSlider.html @@ -2504,7 +2504,7 @@

    function paintEvent

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classCustomSlider.md b/dev/api/Classes/classCustomSlider.md index 151b4274e1..afec477cb6 100644 --- a/dev/api/Classes/classCustomSlider.md +++ b/dev/api/Classes/classCustomSlider.md @@ -58,4 +58,4 @@ virtual void paintEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classCustomSurfaceReconstructionFilter.html b/dev/api/Classes/classCustomSurfaceReconstructionFilter.html index 099c401b5f..c72b49171d 100644 --- a/dev/api/Classes/classCustomSurfaceReconstructionFilter.html +++ b/dev/api/Classes/classCustomSurfaceReconstructionFilter.html @@ -2712,7 +2712,7 @@

    variable SampleSpacing

    double SampleSpacing;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classCustomSurfaceReconstructionFilter.md b/dev/api/Classes/classCustomSurfaceReconstructionFilter.md index 39b63781b5..e1d0b7e07f 100644 --- a/dev/api/Classes/classCustomSurfaceReconstructionFilter.md +++ b/dev/api/Classes/classCustomSurfaceReconstructionFilter.md @@ -175,4 +175,4 @@ double SampleSpacing; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEAreaCoverage.html b/dev/api/Classes/classFEAreaCoverage.html index 9014d61ad5..e4da8d0117 100644 --- a/dev/api/Classes/classFEAreaCoverage.html +++ b/dev/api/Classes/classFEAreaCoverage.html @@ -2763,7 +2763,7 @@

    variable m_backSearchRadius

    double m_backSearchRadius;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFEAreaCoverage.md b/dev/api/Classes/classFEAreaCoverage.md index b81566916b..0ab7086c94 100644 --- a/dev/api/Classes/classFEAreaCoverage.md +++ b/dev/api/Classes/classFEAreaCoverage.md @@ -201,4 +201,4 @@ double m_backSearchRadius; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEAreaCoverage_1_1Surface.html b/dev/api/Classes/classFEAreaCoverage_1_1Surface.html index ac45ec5283..e427263bf3 100644 --- a/dev/api/Classes/classFEAreaCoverage_1_1Surface.html +++ b/dev/api/Classes/classFEAreaCoverage_1_1Surface.html @@ -2624,7 +2624,7 @@

    variable m_NLT

    vector< vector< int > > m_NLT;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFEAreaCoverage_1_1Surface.md b/dev/api/Classes/classFEAreaCoverage_1_1Surface.md index 7b4d77c88a..eff397a7a0 100644 --- a/dev/api/Classes/classFEAreaCoverage_1_1Surface.md +++ b/dev/api/Classes/classFEAreaCoverage_1_1Surface.md @@ -123,4 +123,4 @@ vector< vector< int > > m_NLT; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEAutoMesher.html b/dev/api/Classes/classFEAutoMesher.html index 8149746e1b..0ccb7c4471 100644 --- a/dev/api/Classes/classFEAutoMesher.html +++ b/dev/api/Classes/classFEAutoMesher.html @@ -2670,7 +2670,7 @@

    variable m_wsmooth

    double m_wsmooth;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFEAutoMesher.md b/dev/api/Classes/classFEAutoMesher.md index 595a96eb2c..df98185073 100644 --- a/dev/api/Classes/classFEAutoMesher.md +++ b/dev/api/Classes/classFEAutoMesher.md @@ -144,4 +144,4 @@ double m_wsmooth; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFECVDDecimationModifier.html b/dev/api/Classes/classFECVDDecimationModifier.html index ced73292c3..5282b01b82 100644 --- a/dev/api/Classes/classFECVDDecimationModifier.html +++ b/dev/api/Classes/classFECVDDecimationModifier.html @@ -2556,7 +2556,7 @@

    variable m_gradient

    double m_gradient;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFECVDDecimationModifier.md b/dev/api/Classes/classFECVDDecimationModifier.md index fe076f183c..68fac8f063 100644 --- a/dev/api/Classes/classFECVDDecimationModifier.md +++ b/dev/api/Classes/classFECVDDecimationModifier.md @@ -90,4 +90,4 @@ double m_gradient; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.html b/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.html index ecf0927a69..a4fd0f03ee 100644 --- a/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.html +++ b/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.html @@ -2524,7 +2524,7 @@

    variable m_fid

    vector< int > m_fid;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.md b/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.md index b1cac824eb..91e6740b3b 100644 --- a/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.md +++ b/dev/api/Classes/classFECVDDecimationModifier_1_1Cluster.md @@ -65,4 +65,4 @@ vector< int > m_fid; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.html b/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.html index 5bd98a5c1a..3b94f76d38 100644 --- a/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.html +++ b/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.html @@ -2572,7 +2572,7 @@

    variable nc

    int nc;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.md b/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.md index 9bb0886241..701df3b093 100644 --- a/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.md +++ b/dev/api/Classes/classFECVDDecimationModifier_1_1NODE.md @@ -76,4 +76,4 @@ int nc; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFECoreMesh.html b/dev/api/Classes/classFECoreMesh.html index 0acea3a363..92e3b83aca 100644 --- a/dev/api/Classes/classFECoreMesh.html +++ b/dev/api/Classes/classFECoreMesh.html @@ -2771,7 +2771,7 @@

    variable m_Face

    FE faces.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFECoreMesh.md b/dev/api/Classes/classFECoreMesh.md index ad07dbbf80..23407c6123 100644 --- a/dev/api/Classes/classFECoreMesh.md +++ b/dev/api/Classes/classFECoreMesh.md @@ -236,4 +236,4 @@ FE faces. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEEdge.html b/dev/api/Classes/classFEEdge.html index 295c60efc3..044fc8a537 100644 --- a/dev/api/Classes/classFEEdge.html +++ b/dev/api/Classes/classFEEdge.html @@ -2702,7 +2702,7 @@

    variable m_nbr

    the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1)


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFEEdge.md b/dev/api/Classes/classFEEdge.md index e9cccda54a..a83813c2f5 100644 --- a/dev/api/Classes/classFEEdge.md +++ b/dev/api/Classes/classFEEdge.md @@ -136,4 +136,4 @@ the two adjacent edges (if there are more edges incident to a node, the neighbou ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEElement.html b/dev/api/Classes/classFEElement.html index e690a0bac3..0fe676c7d5 100644 --- a/dev/api/Classes/classFEElement.html +++ b/dev/api/Classes/classFEElement.html @@ -2783,7 +2783,7 @@

    function SetType

    Set the element type.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classFEElement.md b/dev/api/Classes/classFEElement.md index 5d8fe698ac..913739564c 100644 --- a/dev/api/Classes/classFEElement.md +++ b/dev/api/Classes/classFEElement.md @@ -152,4 +152,4 @@ Set the element type. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEElementData.html b/dev/api/Classes/classFEElementData.html index 35b9e06098..d0a949d607 100644 --- a/dev/api/Classes/classFEElementData.html +++ b/dev/api/Classes/classFEElementData.html @@ -2595,7 +2595,7 @@

    function FillRandomBox

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEElementData.md b/dev/api/Classes/classFEElementData.md index 70ec980e42..5db2a77bc3 100644 --- a/dev/api/Classes/classFEElementData.md +++ b/dev/api/Classes/classFEElementData.md @@ -125,4 +125,4 @@ void FillRandomBox( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEElement__.html b/dev/api/Classes/classFEElement__.html index c5b7bf7a47..e223c24232 100644 --- a/dev/api/Classes/classFEElement__.html +++ b/dev/api/Classes/classFEElement__.html @@ -3027,7 +3027,7 @@

    variable m_nedges

    nr of edges ( 0 for solids)


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEElement__.md b/dev/api/Classes/classFEElement__.md index d10c00aa94..8b40bf9918 100644 --- a/dev/api/Classes/classFEElement__.md +++ b/dev/api/Classes/classFEElement__.md @@ -330,4 +330,4 @@ nr of edges ( 0 for solids) ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEFace.html b/dev/api/Classes/classFEFace.html index e1af7858fb..09a746f8b3 100644 --- a/dev/api/Classes/classFEFace.html +++ b/dev/api/Classes/classFEFace.html @@ -2845,7 +2845,7 @@

    variable m_elem

    the elements to which this face belongs


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEFace.md b/dev/api/Classes/classFEFace.md index 48ca938bc6..ee6e8c6b04 100644 --- a/dev/api/Classes/classFEFace.md +++ b/dev/api/Classes/classFEFace.md @@ -225,4 +225,4 @@ the elements to which this face belongs ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEFillHole.html b/dev/api/Classes/classFEFillHole.html index 82678266f2..3bada673cc 100644 --- a/dev/api/Classes/classFEFillHole.html +++ b/dev/api/Classes/classFEFillHole.html @@ -2628,7 +2628,7 @@

    variable insertNodes

    bool insertNodes;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEFillHole.md b/dev/api/Classes/classFEFillHole.md index cd5791b7e7..859c14c6dc 100644 --- a/dev/api/Classes/classFEFillHole.md +++ b/dev/api/Classes/classFEFillHole.md @@ -126,4 +126,4 @@ bool insertNodes; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEFillHole_1_1EdgeRing.html b/dev/api/Classes/classFEFillHole_1_1EdgeRing.html index 8df7208ec0..303ae1d025 100644 --- a/dev/api/Classes/classFEFillHole_1_1EdgeRing.html +++ b/dev/api/Classes/classFEFillHole_1_1EdgeRing.html @@ -2668,7 +2668,7 @@

    variable m_normal

    vector< vec3d > m_normal;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEFillHole_1_1EdgeRing.md b/dev/api/Classes/classFEFillHole_1_1EdgeRing.md index b733adf05a..12389d581d 100644 --- a/dev/api/Classes/classFEFillHole_1_1EdgeRing.md +++ b/dev/api/Classes/classFEFillHole_1_1EdgeRing.md @@ -155,4 +155,4 @@ vector< vec3d > m_normal; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEFixMesh.html b/dev/api/Classes/classFEFixMesh.html index fea2ba1344..2a79a13231 100644 --- a/dev/api/Classes/classFEFixMesh.html +++ b/dev/api/Classes/classFEFixMesh.html @@ -2596,7 +2596,7 @@

    function InterpolateShellThickness)
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEFixMesh.md b/dev/api/Classes/classFEFixMesh.md index 9f882a1dfb..d69629ff82 100644 --- a/dev/api/Classes/classFEFixMesh.md +++ b/dev/api/Classes/classFEFixMesh.md @@ -126,4 +126,4 @@ FEMesh * InterpolateShellThickness( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEItem.html b/dev/api/Classes/classFEItem.html index 001f379b62..ba789a2ed4 100644 --- a/dev/api/Classes/classFEItem.html +++ b/dev/api/Classes/classFEItem.html @@ -2625,7 +2625,7 @@

    variable m_nid

    int m_nid;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEItem.md b/dev/api/Classes/classFEItem.md index 24530a2983..0f7e3743b9 100644 --- a/dev/api/Classes/classFEItem.md +++ b/dev/api/Classes/classFEItem.md @@ -125,4 +125,4 @@ int m_nid; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEMesh.html b/dev/api/Classes/classFEMesh.html index 90e037921b..2eb035f8ed 100644 --- a/dev/api/Classes/classFEMesh.html +++ b/dev/api/Classes/classFEMesh.html @@ -3815,7 +3815,7 @@

    variable m_map

    vector< FEElementData > m_map;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEMesh.md b/dev/api/Classes/classFEMesh.md index 77b5f4a64b..0017eab166 100644 --- a/dev/api/Classes/classFEMesh.md +++ b/dev/api/Classes/classFEMesh.md @@ -837,4 +837,4 @@ vector< FEElementData > m_map; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEMeshSmoothingModifier.html b/dev/api/Classes/classFEMeshSmoothingModifier.html index 7132a681c3..f23d2d6d95 100644 --- a/dev/api/Classes/classFEMeshSmoothingModifier.html +++ b/dev/api/Classes/classFEMeshSmoothingModifier.html @@ -2719,7 +2719,7 @@

    variable m_method

    int m_method;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEMeshSmoothingModifier.md b/dev/api/Classes/classFEMeshSmoothingModifier.md index 4946b6b299..ccefa9c034 100644 --- a/dev/api/Classes/classFEMeshSmoothingModifier.md +++ b/dev/api/Classes/classFEMeshSmoothingModifier.md @@ -180,4 +180,4 @@ int m_method; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFENode.html b/dev/api/Classes/classFENode.html index bce589bd03..7fb5923c51 100644 --- a/dev/api/Classes/classFENode.html +++ b/dev/api/Classes/classFENode.html @@ -2589,7 +2589,7 @@

    variable m_ndata

    double m_ndata;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFENode.md b/dev/api/Classes/classFENode.md index 73dbc4a936..f11d5312da 100644 --- a/dev/api/Classes/classFENode.md +++ b/dev/api/Classes/classFENode.md @@ -84,4 +84,4 @@ double m_ndata; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFENodeElementList.html b/dev/api/Classes/classFENodeElementList.html index 7aef700ee5..095cd9dfec 100644 --- a/dev/api/Classes/classFENodeElementList.html +++ b/dev/api/Classes/classFENodeElementList.html @@ -2587,7 +2587,7 @@

    variable m_pelem

    vector< FEElement * > m_pelem;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFENodeElementList.md b/dev/api/Classes/classFENodeElementList.md index 17e9d4eb3f..6bee7e3730 100644 --- a/dev/api/Classes/classFENodeElementList.md +++ b/dev/api/Classes/classFENodeElementList.md @@ -104,4 +104,4 @@ vector< FEElement * > m_pelem; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFENodeFaceList.html b/dev/api/Classes/classFENodeFaceList.html index 6ddb79254a..8a76ff1a5d 100644 --- a/dev/api/Classes/classFENodeFaceList.html +++ b/dev/api/Classes/classFENodeFaceList.html @@ -2712,7 +2712,7 @@

    variable m_off

    vector< int > m_off;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFENodeFaceList.md b/dev/api/Classes/classFENodeFaceList.md index c4c5d033d9..a4bb1ec987 100644 --- a/dev/api/Classes/classFENodeFaceList.md +++ b/dev/api/Classes/classFENodeFaceList.md @@ -168,4 +168,4 @@ vector< int > m_off; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFENodeNodeList.html b/dev/api/Classes/classFENodeNodeList.html index 5855999c0e..50983b3ad5 100644 --- a/dev/api/Classes/classFENodeNodeList.html +++ b/dev/api/Classes/classFENodeNodeList.html @@ -2587,7 +2587,7 @@

    variable m_node

    vector< int > m_node;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFENodeNodeList.md b/dev/api/Classes/classFENodeNodeList.md index 31c84ef8f8..fe8c20663c 100644 --- a/dev/api/Classes/classFENodeNodeList.md +++ b/dev/api/Classes/classFENodeNodeList.md @@ -104,4 +104,4 @@ vector< int > m_node; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFETri3.html b/dev/api/Classes/classFETri3.html index 754cf47559..6ea87ed3b6 100644 --- a/dev/api/Classes/classFETri3.html +++ b/dev/api/Classes/classFETri3.html @@ -2706,7 +2706,7 @@

    function operator=

    assignment operator


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFETri3.md b/dev/api/Classes/classFETri3.md index b3d868e3b5..47def90e7b 100644 --- a/dev/api/Classes/classFETri3.md +++ b/dev/api/Classes/classFETri3.md @@ -124,4 +124,4 @@ assignment operator ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEVTKExport.html b/dev/api/Classes/classFEVTKExport.html index 40dccfb7f7..64ec0a06e7 100644 --- a/dev/api/Classes/classFEVTKExport.html +++ b/dev/api/Classes/classFEVTKExport.html @@ -2532,7 +2532,7 @@

    function ExportToVTK

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEVTKExport.md b/dev/api/Classes/classFEVTKExport.md index 2dce1c4dd2..be6d51288f 100644 --- a/dev/api/Classes/classFEVTKExport.md +++ b/dev/api/Classes/classFEVTKExport.md @@ -86,4 +86,4 @@ vtkSmartPointer< vtkPolyData > ExportToVTK( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classFEVTKimport.html b/dev/api/Classes/classFEVTKimport.html index 7a7a3deb8f..4f99ed1d37 100644 --- a/dev/api/Classes/classFEVTKimport.html +++ b/dev/api/Classes/classFEVTKimport.html @@ -2577,7 +2577,7 @@

    function Close

    void Close()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classFEVTKimport.md b/dev/api/Classes/classFEVTKimport.md index f424b6a7f7..e032c87396 100644 --- a/dev/api/Classes/classFEVTKimport.md +++ b/dev/api/Classes/classFEVTKimport.md @@ -100,4 +100,4 @@ void Close() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classGLCOLOR.html b/dev/api/Classes/classGLCOLOR.html index 4e60669613..ec01a5e978 100644 --- a/dev/api/Classes/classGLCOLOR.html +++ b/dev/api/Classes/classGLCOLOR.html @@ -2575,7 +2575,7 @@

    variable r

    uchar r;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classGLCOLOR.md b/dev/api/Classes/classGLCOLOR.md index 8c6e82600f..33305de36c 100644 --- a/dev/api/Classes/classGLCOLOR.md +++ b/dev/api/Classes/classGLCOLOR.md @@ -98,4 +98,4 @@ uchar r; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classLegacyMeshGenerator.html b/dev/api/Classes/classLegacyMeshGenerator.html index 64f0cabba3..a65c5a9df6 100644 --- a/dev/api/Classes/classLegacyMeshGenerator.html +++ b/dev/api/Classes/classLegacyMeshGenerator.html @@ -2530,7 +2530,7 @@

    function buildMesh

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classLegacyMeshGenerator.md b/dev/api/Classes/classLegacyMeshGenerator.md index f8d547fc81..d9a461d731 100644 --- a/dev/api/Classes/classLegacyMeshGenerator.md +++ b/dev/api/Classes/classLegacyMeshGenerator.md @@ -84,4 +84,4 @@ vtkSmartPointer< vtkPolyData > buildMesh( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classMeshSettings.html b/dev/api/Classes/classMeshSettings.html index 702cd12ac9..860918be4e 100644 --- a/dev/api/Classes/classMeshSettings.html +++ b/dev/api/Classes/classMeshSettings.html @@ -2466,7 +2466,7 @@

    function ~MeshSettings

    Destructor.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classMeshSettings.md b/dev/api/Classes/classMeshSettings.md index ccb37da00a..2350f04187 100644 --- a/dev/api/Classes/classMeshSettings.md +++ b/dev/api/Classes/classMeshSettings.md @@ -50,4 +50,4 @@ Destructor. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classObjectReader.html b/dev/api/Classes/classObjectReader.html index 016a73425b..340008beb6 100644 --- a/dev/api/Classes/classObjectReader.html +++ b/dev/api/Classes/classObjectReader.html @@ -2627,7 +2627,7 @@

    function ~ObjectReader

    inline virtual ~ObjectReader()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classObjectReader.md b/dev/api/Classes/classObjectReader.md index 77b3f5de71..b4f3054fcb 100644 --- a/dev/api/Classes/classObjectReader.md +++ b/dev/api/Classes/classObjectReader.md @@ -133,4 +133,4 @@ inline virtual ~ObjectReader() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classObjectWriter.html b/dev/api/Classes/classObjectWriter.html index 6d9b8a6e6b..4e74ed69f6 100644 --- a/dev/api/Classes/classObjectWriter.html +++ b/dev/api/Classes/classObjectWriter.html @@ -2615,7 +2615,7 @@

    function ~ObjectWriter

    inline virtual ~ObjectWriter()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classObjectWriter.md b/dev/api/Classes/classObjectWriter.md index c480a313d4..d6f54f5281 100644 --- a/dev/api/Classes/classObjectWriter.md +++ b/dev/api/Classes/classObjectWriter.md @@ -127,4 +127,4 @@ inline virtual ~ObjectWriter() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleEvent_1_1_01Parent.html b/dev/api/Classes/classParticleEvent_1_1_01Parent.html index 998a10e0c2..719ac5e7f4 100644 --- a/dev/api/Classes/classParticleEvent_1_1_01Parent.html +++ b/dev/api/Classes/classParticleEvent_1_1_01Parent.html @@ -2406,7 +2406,7 @@

    Detailed Description

    all Particle events.

    Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classParticleEvent_1_1_01Parent.md b/dev/api/Classes/classParticleEvent_1_1_01Parent.md index c4f4442b95..ba80eef1af 100644 --- a/dev/api/Classes/classParticleEvent_1_1_01Parent.md +++ b/dev/api/Classes/classParticleEvent_1_1_01Parent.md @@ -22,4 +22,4 @@ Event that carries Position index and a Domain index information. This is used, ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleGradientDescentPositionOptimizer.html b/dev/api/Classes/classParticleGradientDescentPositionOptimizer.html index c75245e087..4660d4b62e 100644 --- a/dev/api/Classes/classParticleGradientDescentPositionOptimizer.html +++ b/dev/api/Classes/classParticleGradientDescentPositionOptimizer.html @@ -2403,7 +2403,7 @@

    Detailed Description

    This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed).


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleGradientDescentPositionOptimizer.md b/dev/api/Classes/classParticleGradientDescentPositionOptimizer.md index 2f113eaaae..5f9e441145 100644 --- a/dev/api/Classes/classParticleGradientDescentPositionOptimizer.md +++ b/dev/api/Classes/classParticleGradientDescentPositionOptimizer.md @@ -23,4 +23,4 @@ This class optimizes a list of particle system positions with respect to a speci ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleImageDomain.html b/dev/api/Classes/classParticleImageDomain.html index 4c2f6e2482..0de9d3d888 100644 --- a/dev/api/Classes/classParticleImageDomain.html +++ b/dev/api/Classes/classParticleImageDomain.html @@ -2403,7 +2403,7 @@

    Detailed Description

    A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleImageDomain.md b/dev/api/Classes/classParticleImageDomain.md index 662a3908c4..6dcc523b06 100644 --- a/dev/api/Classes/classParticleImageDomain.md +++ b/dev/api/Classes/classParticleImageDomain.md @@ -23,4 +23,4 @@ A bounding-box region domain that sets its bounding box according to the origin, ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleImageDomainWithCurvature.html b/dev/api/Classes/classParticleImageDomainWithCurvature.html index 112c411557..6820014725 100644 --- a/dev/api/Classes/classParticleImageDomainWithCurvature.html +++ b/dev/api/Classes/classParticleImageDomainWithCurvature.html @@ -2409,7 +2409,7 @@

    Detailed Description

    An image domain that extends ParticleImageDomainWithGradN with curvature information.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleImageDomainWithCurvature.md b/dev/api/Classes/classParticleImageDomainWithCurvature.md index dda5300c01..8ee969360c 100644 --- a/dev/api/Classes/classParticleImageDomainWithCurvature.md +++ b/dev/api/Classes/classParticleImageDomainWithCurvature.md @@ -30,4 +30,4 @@ An image domain that extends [ParticleImageDomainWithGradN](../Classes/classPart ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleImageDomainWithGradN.html b/dev/api/Classes/classParticleImageDomainWithGradN.html index b85c070f03..a6d23511ce 100644 --- a/dev/api/Classes/classParticleImageDomainWithGradN.html +++ b/dev/api/Classes/classParticleImageDomainWithGradN.html @@ -2409,7 +2409,7 @@

    Detailed Description

    An image domain that extends ParticleImageDomainWithGradients with gradient of normals information.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleImageDomainWithGradN.md b/dev/api/Classes/classParticleImageDomainWithGradN.md index d6477280c2..efe679507c 100644 --- a/dev/api/Classes/classParticleImageDomainWithGradN.md +++ b/dev/api/Classes/classParticleImageDomainWithGradN.md @@ -30,4 +30,4 @@ An image domain that extends [ParticleImageDomainWithGradients](../Classes/class ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleImageDomainWithGradients.html b/dev/api/Classes/classParticleImageDomainWithGradients.html index 76ccbce1d0..a7a798ba6c 100644 --- a/dev/api/Classes/classParticleImageDomainWithGradients.html +++ b/dev/api/Classes/classParticleImageDomainWithGradients.html @@ -2409,7 +2409,7 @@

    Detailed Description

    An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleImageDomainWithGradients.md b/dev/api/Classes/classParticleImageDomainWithGradients.md index 1505192361..9e3d1cdc1e 100644 --- a/dev/api/Classes/classParticleImageDomainWithGradients.md +++ b/dev/api/Classes/classParticleImageDomainWithGradients.md @@ -30,4 +30,4 @@ An image domain that extends [ParticleImageDomainWithGradients](../Classes/class ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleImplicitSurfaceDomain.html b/dev/api/Classes/classParticleImplicitSurfaceDomain.html index 77406e4121..355439a78b 100644 --- a/dev/api/Classes/classParticleImplicitSurfaceDomain.html +++ b/dev/api/Classes/classParticleImplicitSurfaceDomain.html @@ -2403,7 +2403,7 @@

    Detailed Description

    A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleImplicitSurfaceDomain.md b/dev/api/Classes/classParticleImplicitSurfaceDomain.md index 9451ab76aa..53a601cad0 100644 --- a/dev/api/Classes/classParticleImplicitSurfaceDomain.md +++ b/dev/api/Classes/classParticleImplicitSurfaceDomain.md @@ -23,4 +23,4 @@ A 3D cartesian domain that constrains points so that they always lie an implicit ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleMeanCurvatureAttribute.html b/dev/api/Classes/classParticleMeanCurvatureAttribute.html index 258286378f..a01956ade6 100644 --- a/dev/api/Classes/classParticleMeanCurvatureAttribute.html +++ b/dev/api/Classes/classParticleMeanCurvatureAttribute.html @@ -2382,7 +2382,7 @@

    ParticleMeanCurvatureAttribute


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleMeanCurvatureAttribute.md b/dev/api/Classes/classParticleMeanCurvatureAttribute.md index 918d877124..0c11b748d3 100644 --- a/dev/api/Classes/classParticleMeanCurvatureAttribute.md +++ b/dev/api/Classes/classParticleMeanCurvatureAttribute.md @@ -11,4 +11,4 @@ title: ParticleMeanCurvatureAttribute ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleProcrustesRegistration.html b/dev/api/Classes/classParticleProcrustesRegistration.html index 0dfe33f103..52046406f6 100644 --- a/dev/api/Classes/classParticleProcrustesRegistration.html +++ b/dev/api/Classes/classParticleProcrustesRegistration.html @@ -2382,7 +2382,7 @@

    ParticleProcrustesRegistration


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleProcrustesRegistration.md b/dev/api/Classes/classParticleProcrustesRegistration.md index 2cb1e9fe5e..5f9bd3fbb6 100644 --- a/dev/api/Classes/classParticleProcrustesRegistration.md +++ b/dev/api/Classes/classParticleProcrustesRegistration.md @@ -11,4 +11,4 @@ title: ParticleProcrustesRegistration ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html b/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html index a1cbbf7889..fce8b81f62 100644 --- a/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html +++ b/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html @@ -2382,7 +2382,7 @@

    ParticleShapeLinearRegressionMatrixAttribute


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md b/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md index 5d5f20894c..01c399000c 100644 --- a/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md +++ b/dev/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.md @@ -11,4 +11,4 @@ title: ParticleShapeLinearRegressionMatrixAttribute ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleShapeMatrixAttribute.html b/dev/api/Classes/classParticleShapeMatrixAttribute.html index 8f3fec5392..849b2d4402 100644 --- a/dev/api/Classes/classParticleShapeMatrixAttribute.html +++ b/dev/api/Classes/classParticleShapeMatrixAttribute.html @@ -2404,7 +2404,7 @@

    Detailed Description

    Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!

    Each column represents a single shape.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleShapeMatrixAttribute.md b/dev/api/Classes/classParticleShapeMatrixAttribute.md index 1bcf841a02..c40c390b0a 100644 --- a/dev/api/Classes/classParticleShapeMatrixAttribute.md +++ b/dev/api/Classes/classParticleShapeMatrixAttribute.md @@ -25,4 +25,4 @@ Each column represents a single shape. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html b/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html index cf6eaf5219..3d286b5c51 100644 --- a/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html +++ b/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html @@ -2382,7 +2382,7 @@

    ParticleShapeMixedEffectsMatrixAttribute


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md b/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md index 4fd5d7bedc..85fbb94b1f 100644 --- a/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md +++ b/dev/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.md @@ -11,4 +11,4 @@ title: ParticleShapeMixedEffectsMatrixAttribute ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classPreferences.html b/dev/api/Classes/classPreferences.html index 777b8e3bc6..0efb21111e 100644 --- a/dev/api/Classes/classPreferences.html +++ b/dev/api/Classes/classPreferences.html @@ -3865,7 +3865,7 @@

    function set_pending_telemetry_ev )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classPreferences.md b/dev/api/Classes/classPreferences.md index 6a9b639d42..2e8057aa20 100644 --- a/dev/api/Classes/classPreferences.md +++ b/dev/api/Classes/classPreferences.md @@ -834,4 +834,4 @@ void set_pending_telemetry_events( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classProcrustes3D.html b/dev/api/Classes/classProcrustes3D.html index 0535ce48de..2e35f01218 100644 --- a/dev/api/Classes/classProcrustes3D.html +++ b/dev/api/Classes/classProcrustes3D.html @@ -2942,7 +2942,7 @@

    function ComputeSumOfSquares

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classProcrustes3D.md b/dev/api/Classes/classProcrustes3D.md index fe9c36b063..54d48c515d 100644 --- a/dev/api/Classes/classProcrustes3D.md +++ b/dev/api/Classes/classProcrustes3D.md @@ -321,4 +321,4 @@ static RealType ComputeSumOfSquares( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classReconstruction.html b/dev/api/Classes/classReconstruction.html index 43be0f7486..2cc077e874 100644 --- a/dev/api/Classes/classReconstruction.html +++ b/dev/api/Classes/classReconstruction.html @@ -3153,7 +3153,7 @@

    function DisablePa
    inline void DisablePairwiseNormalsDifferencesForGoodBad()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classReconstruction.md b/dev/api/Classes/classReconstruction.md index eed5e569bb..29cecedf0a 100644 --- a/dev/api/Classes/classReconstruction.md +++ b/dev/api/Classes/classReconstruction.md @@ -451,4 +451,4 @@ inline void DisablePairwiseNormalsDifferencesForGoodBad() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classStudioLogger.html b/dev/api/Classes/classStudioLogger.html index 22727a4539..ac89747ad6 100644 --- a/dev/api/Classes/classStudioLogger.html +++ b/dev/api/Classes/classStudioLogger.html @@ -2693,7 +2693,7 @@

    function handle_progress

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classStudioLogger.md b/dev/api/Classes/classStudioLogger.md index 6a2991592a..3e71197676 100644 --- a/dev/api/Classes/classStudioLogger.md +++ b/dev/api/Classes/classStudioLogger.md @@ -177,4 +177,4 @@ void handle_progress( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classSurfaceReconstructor.html b/dev/api/Classes/classSurfaceReconstructor.html index 9d8d4a50a9..9bf4953001 100644 --- a/dev/api/Classes/classSurfaceReconstructor.html +++ b/dev/api/Classes/classSurfaceReconstructor.html @@ -2629,7 +2629,7 @@

    function build_mesh

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classSurfaceReconstructor.md b/dev/api/Classes/classSurfaceReconstructor.md index 6d7e1fdb02..b0dd19b0d3 100644 --- a/dev/api/Classes/classSurfaceReconstructor.md +++ b/dev/api/Classes/classSurfaceReconstructor.md @@ -147,4 +147,4 @@ vtkSmartPointer< vtkPolyData > build_mesh( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classUtils.html b/dev/api/Classes/classUtils.html index 1b2088b8e4..9762a8a015 100644 --- a/dev/api/Classes/classUtils.html +++ b/dev/api/Classes/classUtils.html @@ -2930,7 +2930,7 @@

    function averageThetaArc

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classUtils.md b/dev/api/Classes/classUtils.md index d7778f9960..acd4c914b1 100644 --- a/dev/api/Classes/classUtils.md +++ b/dev/api/Classes/classUtils.md @@ -382,4 +382,4 @@ static double averageThetaArc( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1AdvancedTransform.html b/dev/api/Classes/classitk_1_1AdvancedTransform.html index 79d5f922ac..0d729348d8 100644 --- a/dev/api/Classes/classitk_1_1AdvancedTransform.html +++ b/dev/api/Classes/classitk_1_1AdvancedTransform.html @@ -3365,7 +3365,7 @@

    variable m_HasNonZeroJaco
    bool m_HasNonZeroJacobianOfSpatialHessian;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1AdvancedTransform.md b/dev/api/Classes/classitk_1_1AdvancedTransform.md index ff496c3a52..4a2523b848 100644 --- a/dev/api/Classes/classitk_1_1AdvancedTransform.md +++ b/dev/api/Classes/classitk_1_1AdvancedTransform.md @@ -636,4 +636,4 @@ bool m_HasNonZeroJacobianOfSpatialHessian; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html b/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html index 100e09d490..bb8c1d875e 100644 --- a/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html +++ b/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html @@ -2404,7 +2404,7 @@

    Detailed Description

    class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents;
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md b/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md index d1ef559dc7..15ff53ddb2 100644 --- a/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md +++ b/dev/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.md @@ -21,4 +21,4 @@ class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html b/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html index 537927008a..400fa80216 100644 --- a/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html +++ b/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html @@ -3212,7 +3212,7 @@

    function ComputeDeformationCont

    Reimplements: itk::SparseKernelTransform::ComputeDeformationContribution

    Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md b/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md index 869ac495f9..a9c8e1404b 100644 --- a/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md +++ b/dev/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.md @@ -392,4 +392,4 @@ Compute the contribution of the landmarks weighted by the kernel funcion to the ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html b/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html index 1e173154d8..f65de4ff61 100644 --- a/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html +++ b/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html @@ -2588,7 +2588,7 @@

    variable m_Constant

    TConstant m_Constant;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md b/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md index 10474d2ee4..0f087c7266 100644 --- a/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md +++ b/dev/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.md @@ -106,4 +106,4 @@ TConstant m_Constant; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1KernelTransform2.html b/dev/api/Classes/classitk_1_1KernelTransform2.html index 6df1ecc60e..44b641fd5d 100644 --- a/dev/api/Classes/classitk_1_1KernelTransform2.html +++ b/dev/api/Classes/classitk_1_1KernelTransform2.html @@ -4566,7 +4566,7 @@

    variable m_FastComputationPossible

    The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1KernelTransform2.md b/dev/api/Classes/classitk_1_1KernelTransform2.md index 8346a39acd..3c34a6d780 100644 --- a/dev/api/Classes/classitk_1_1KernelTransform2.md +++ b/dev/api/Classes/classitk_1_1KernelTransform2.md @@ -1439,4 +1439,4 @@ The Jacobian can be computed much faster for some of the derived kerbel transfor ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html b/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html index 09d5721cf5..800fc8ca56 100644 --- a/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html +++ b/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html @@ -2675,7 +2675,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md b/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md index 4b4e469b3f..f00c12cfe6 100644 --- a/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md +++ b/dev/api/Classes/classitk_1_1MultiplyByConstantImageFilter.md @@ -168,4 +168,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1SparseKernelTransform.html b/dev/api/Classes/classitk_1_1SparseKernelTransform.html index 1765abdcf8..ca8e709e9a 100644 --- a/dev/api/Classes/classitk_1_1SparseKernelTransform.html +++ b/dev/api/Classes/classitk_1_1SparseKernelTransform.html @@ -3830,7 +3830,7 @@

    variable m_I

    Identity matrix.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1SparseKernelTransform.md b/dev/api/Classes/classitk_1_1SparseKernelTransform.md index 1be44e0658..3d14cfffd6 100644 --- a/dev/api/Classes/classitk_1_1SparseKernelTransform.md +++ b/dev/api/Classes/classitk_1_1SparseKernelTransform.md @@ -980,4 +980,4 @@ Identity matrix. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html b/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html index d4e2f26ca1..d0fe61344b 100644 --- a/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html +++ b/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html @@ -2778,7 +2778,7 @@

    function CalculateUpdateValue

  • surface flow under certain conditions.

  • -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md b/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md index 901df052ea..17bde1acd3 100644 --- a/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md +++ b/dev/api/Classes/classitk_1_1TPGACLevelSetImageFilter.md @@ -221,4 +221,4 @@ Overridden from the parent class to indroduce a constraint on ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html b/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html index 6823a045c4..e8a59aaa13 100644 --- a/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html +++ b/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html @@ -3528,7 +3528,7 @@

    function ComputeDeformationCont

    Reimplements: itk::KernelTransform2::ComputeDeformationContribution

    Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md b/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md index 16ef307721..2787bf07a2 100644 --- a/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md +++ b/dev/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.md @@ -479,4 +479,4 @@ Compute the contribution of the landmarks weighted by the kernel function to the ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classmat3d.html b/dev/api/Classes/classmat3d.html index 1082cb766f..2deb3c213d 100644 --- a/dev/api/Classes/classmat3d.html +++ b/dev/api/Classes/classmat3d.html @@ -2719,7 +2719,7 @@

    variable m_data

    double m_data;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classmat3d.md b/dev/api/Classes/classmat3d.md index 1e1da62b4d..09a861a650 100644 --- a/dev/api/Classes/classmat3d.md +++ b/dev/api/Classes/classmat3d.md @@ -188,4 +188,4 @@ double m_data; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classmatrix.html b/dev/api/Classes/classmatrix.html index 34ed779f70..41716ee12a 100644 --- a/dev/api/Classes/classmatrix.html +++ b/dev/api/Classes/classmatrix.html @@ -2598,7 +2598,7 @@

    function mult_transpose_self

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classmatrix.md b/dev/api/Classes/classmatrix.md index 4b6a48a272..b900ff5efa 100644 --- a/dev/api/Classes/classmatrix.md +++ b/dev/api/Classes/classmatrix.md @@ -128,4 +128,4 @@ void mult_transpose_self( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classmeshFIM.html b/dev/api/Classes/classmeshFIM.html index f9be2c7c16..60cec44ffc 100644 --- a/dev/api/Classes/classmeshFIM.html +++ b/dev/api/Classes/classmeshFIM.html @@ -2933,7 +2933,7 @@

    variable colors

    std::vector< Color > colors;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classmeshFIM.md b/dev/api/Classes/classmeshFIM.md index 7c0288508f..2e86c617f3 100644 --- a/dev/api/Classes/classmeshFIM.md +++ b/dev/api/Classes/classmeshFIM.md @@ -281,4 +281,4 @@ std::vector< Color > colors; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classobject__reader.html b/dev/api/Classes/classobject__reader.html index 7ef62cdf4f..a62dd2ece5 100644 --- a/dev/api/Classes/classobject__reader.html +++ b/dev/api/Classes/classobject__reader.html @@ -2403,7 +2403,7 @@

    Detailed Description

    Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classobject__reader.md b/dev/api/Classes/classobject__reader.md index 840b878d6d..3cf0d9b56c 100644 --- a/dev/api/Classes/classobject__reader.md +++ b/dev/api/Classes/classobject__reader.md @@ -23,4 +23,4 @@ Reads a std::vector of c++ objects. The first integer in the file is assumed to ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classobject__writer.html b/dev/api/Classes/classobject__writer.html index f8573b4932..85f47b1f15 100644 --- a/dev/api/Classes/classobject__writer.html +++ b/dev/api/Classes/classobject__writer.html @@ -2382,7 +2382,7 @@

    object_writer


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classobject__writer.md b/dev/api/Classes/classobject__writer.md index b7c325d28b..1d87ce0c4f 100644 --- a/dev/api/Classes/classobject__writer.md +++ b/dev/api/Classes/classobject__writer.md @@ -11,4 +11,4 @@ title: object_writer ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classquatd.html b/dev/api/Classes/classquatd.html index ba4662ec62..63508a7b62 100644 --- a/dev/api/Classes/classquatd.html +++ b/dev/api/Classes/classquatd.html @@ -2969,7 +2969,7 @@

    variable w

    double w;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classquatd.md b/dev/api/Classes/classquatd.md index 5a86f11e86..9da949bfc0 100644 --- a/dev/api/Classes/classquatd.md +++ b/dev/api/Classes/classquatd.md @@ -342,4 +342,4 @@ double w; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1AnalysisTool.html b/dev/api/Classes/classshapeworks_1_1AnalysisTool.html index 1fa4b441ba..9b86296f79 100644 --- a/dev/api/Classes/classshapeworks_1_1AnalysisTool.html +++ b/dev/api/Classes/classshapeworks_1_1AnalysisTool.html @@ -3939,7 +3939,7 @@

    variable MODE_REGRESSION_C

    static const std::string MODE_REGRESSION_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1AnalysisTool.md b/dev/api/Classes/classshapeworks_1_1AnalysisTool.md index bac5f94d17..9b08ede850 100644 --- a/dev/api/Classes/classshapeworks_1_1AnalysisTool.md +++ b/dev/api/Classes/classshapeworks_1_1AnalysisTool.md @@ -846,4 +846,4 @@ static const std::string MODE_REGRESSION_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1AnalysisUtils.html b/dev/api/Classes/classshapeworks_1_1AnalysisUtils.html index 741697fc17..9961344f75 100644 --- a/dev/api/Classes/classshapeworks_1_1AnalysisUtils.html +++ b/dev/api/Classes/classshapeworks_1_1AnalysisUtils.html @@ -2439,7 +2439,7 @@

    function get_local_particle_system)
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1AnalysisUtils.md b/dev/api/Classes/classshapeworks_1_1AnalysisUtils.md index a45a72f775..1167626566 100644 --- a/dev/api/Classes/classshapeworks_1_1AnalysisUtils.md +++ b/dev/api/Classes/classshapeworks_1_1AnalysisUtils.md @@ -29,4 +29,4 @@ static ParticleSystemEvaluation get_local_particle_system( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Analyze.html b/dev/api/Classes/classshapeworks_1_1Analyze.html index 44dbbec46a..948b7a2387 100644 --- a/dev/api/Classes/classshapeworks_1_1Analyze.html +++ b/dev/api/Classes/classshapeworks_1_1Analyze.html @@ -2775,7 +2775,7 @@

    function get_local_particle_system)
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Analyze.md b/dev/api/Classes/classshapeworks_1_1Analyze.md index 4427d486b1..3ee387368c 100644 --- a/dev/api/Classes/classshapeworks_1_1Analyze.md +++ b/dev/api/Classes/classshapeworks_1_1Analyze.md @@ -222,4 +222,4 @@ ParticleSystemEvaluation get_local_particle_system( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html b/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html index ca6281c7da..b9d5fa6898 100644 --- a/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html +++ b/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md b/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md index 22abedf125..b1bb876562 100644 --- a/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md +++ b/dev/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ColorMap.html b/dev/api/Classes/classshapeworks_1_1ColorMap.html index 4468d0918f..79e7310320 100644 --- a/dev/api/Classes/classshapeworks_1_1ColorMap.html +++ b/dev/api/Classes/classshapeworks_1_1ColorMap.html @@ -2546,7 +2546,7 @@

    variable color_series_

    vtkSmartPointer< vtkColorSeries > color_series_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ColorMap.md b/dev/api/Classes/classshapeworks_1_1ColorMap.md index 994fdb6256..73e23ff208 100644 --- a/dev/api/Classes/classshapeworks_1_1ColorMap.md +++ b/dev/api/Classes/classshapeworks_1_1ColorMap.md @@ -81,4 +81,4 @@ vtkSmartPointer< vtkColorSeries > color_series_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ColorMaps.html b/dev/api/Classes/classshapeworks_1_1ColorMaps.html index 8017f0035e..adf1282b3d 100644 --- a/dev/api/Classes/classshapeworks_1_1ColorMaps.html +++ b/dev/api/Classes/classshapeworks_1_1ColorMaps.html @@ -2469,7 +2469,7 @@

    function get_color_map

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ColorMaps.md b/dev/api/Classes/classshapeworks_1_1ColorMaps.md index e8bf7872e5..67ab928865 100644 --- a/dev/api/Classes/classshapeworks_1_1ColorMaps.md +++ b/dev/api/Classes/classshapeworks_1_1ColorMaps.md @@ -48,4 +48,4 @@ inline ColorMap get_color_map( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Command.html b/dev/api/Classes/classshapeworks_1_1Command.html index 6695759a89..8129bf4863 100644 --- a/dev/api/Classes/classshapeworks_1_1Command.html +++ b/dev/api/Classes/classshapeworks_1_1Command.html @@ -2606,7 +2606,7 @@

    variable parser

    optparse::OptionParser parser;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Command.md b/dev/api/Classes/classshapeworks_1_1Command.md index 699059c78a..baf58e083d 100644 --- a/dev/api/Classes/classshapeworks_1_1Command.md +++ b/dev/api/Classes/classshapeworks_1_1Command.md @@ -107,4 +107,4 @@ optparse::OptionParser parser; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1CompareSettings.html b/dev/api/Classes/classshapeworks_1_1CompareSettings.html index f187dc1338..2a80c1999e 100644 --- a/dev/api/Classes/classshapeworks_1_1CompareSettings.html +++ b/dev/api/Classes/classshapeworks_1_1CompareSettings.html @@ -2580,7 +2580,7 @@

    variable opacity_

    float opacity_ = 1.0;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1CompareSettings.md b/dev/api/Classes/classshapeworks_1_1CompareSettings.md index 15fe24058a..ca315b540e 100644 --- a/dev/api/Classes/classshapeworks_1_1CompareSettings.md +++ b/dev/api/Classes/classshapeworks_1_1CompareSettings.md @@ -97,4 +97,4 @@ float opacity_ = 1.0; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1CompareWidget.html b/dev/api/Classes/classshapeworks_1_1CompareWidget.html index fb1f0e7d72..7125f18fa0 100644 --- a/dev/api/Classes/classshapeworks_1_1CompareWidget.html +++ b/dev/api/Classes/classshapeworks_1_1CompareWidget.html @@ -2560,7 +2560,7 @@

    function check_any_available

    bool check_any_available()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1CompareWidget.md b/dev/api/Classes/classshapeworks_1_1CompareWidget.md index a746fa260f..b6bed9a326 100644 --- a/dev/api/Classes/classshapeworks_1_1CompareWidget.md +++ b/dev/api/Classes/classshapeworks_1_1CompareWidget.md @@ -90,4 +90,4 @@ bool check_any_available() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Constraint.html b/dev/api/Classes/classshapeworks_1_1Constraint.html index 32fa033ac2..4ab89c7f97 100644 --- a/dev/api/Classes/classshapeworks_1_1Constraint.html +++ b/dev/api/Classes/classshapeworks_1_1Constraint.html @@ -2689,7 +2689,7 @@

    variable mus_

    Mu is the lagrangian momentum term.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Constraint.md b/dev/api/Classes/classshapeworks_1_1Constraint.md index c562c63b78..9393529634 100644 --- a/dev/api/Classes/classshapeworks_1_1Constraint.md +++ b/dev/api/Classes/classshapeworks_1_1Constraint.md @@ -177,4 +177,4 @@ Mu is the lagrangian momentum term. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Constraints.html b/dev/api/Classes/classshapeworks_1_1Constraints.html index dae1458494..e0a16fd7d6 100644 --- a/dev/api/Classes/classshapeworks_1_1Constraints.html +++ b/dev/api/Classes/classshapeworks_1_1Constraints.html @@ -2831,7 +2831,7 @@

    function clipMesh

    Clips the mesh that has been passed into it by the constraints stored in this object.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Constraints.md b/dev/api/Classes/classshapeworks_1_1Constraints.md index 94e08e66f9..6307503944 100644 --- a/dev/api/Classes/classshapeworks_1_1Constraints.md +++ b/dev/api/Classes/classshapeworks_1_1Constraints.md @@ -270,4 +270,4 @@ Clips the mesh that has been passed into it by the constraints stored in this ob ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ContourDomain.html b/dev/api/Classes/classshapeworks_1_1ContourDomain.html index b3ba91a8dd..037c88c8ce 100644 --- a/dev/api/Classes/classshapeworks_1_1ContourDomain.html +++ b/dev/api/Classes/classshapeworks_1_1ContourDomain.html @@ -3028,7 +3028,7 @@

    function GetPositionAfterSplit

    Reimplements: shapeworks::ParticleDomain::GetPositionAfterSplit


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ContourDomain.md b/dev/api/Classes/classshapeworks_1_1ContourDomain.md index edb224da7a..2c28e1689a 100644 --- a/dev/api/Classes/classshapeworks_1_1ContourDomain.md +++ b/dev/api/Classes/classshapeworks_1_1ContourDomain.md @@ -438,4 +438,4 @@ virtual PointType GetPositionAfterSplit( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.html b/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.html index 4a96263e9c..992b09bc19 100644 --- a/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.html +++ b/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.html @@ -3646,7 +3646,7 @@

    variable num_samples

    int num_samples;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.md b/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.md index 9ddf6a9a3f..8461e2293c 100644 --- a/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.md +++ b/dev/api/Classes/classshapeworks_1_1CorrespondenceFunction.md @@ -714,4 +714,4 @@ int num_samples; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html b/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html index 06bea03650..1e19e73f73 100644 --- a/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html +++ b/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html @@ -3548,7 +3548,7 @@

    variable m_MaxMoveFactor

    float m_MaxMoveFactor = 0;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md b/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md index 4c1beb8ff6..a21d93ffbb 100644 --- a/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md +++ b/dev/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.md @@ -623,4 +623,4 @@ float m_MaxMoveFactor = 0; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1DataTool.html b/dev/api/Classes/classshapeworks_1_1DataTool.html index 23848622d5..679480f29c 100644 --- a/dev/api/Classes/classshapeworks_1_1DataTool.html +++ b/dev/api/Classes/classshapeworks_1_1DataTool.html @@ -2819,7 +2819,7 @@

    function store_data

    void store_data()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1DataTool.md b/dev/api/Classes/classshapeworks_1_1DataTool.md index d6907a5d98..74bbc051dc 100644 --- a/dev/api/Classes/classshapeworks_1_1DataTool.md +++ b/dev/api/Classes/classshapeworks_1_1DataTool.md @@ -228,4 +228,4 @@ void store_data() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1DeepSSMJob.html b/dev/api/Classes/classshapeworks_1_1DeepSSMJob.html index 1a20485835..9756ff75cb 100644 --- a/dev/api/Classes/classshapeworks_1_1DeepSSMJob.html +++ b/dev/api/Classes/classshapeworks_1_1DeepSSMJob.html @@ -2756,7 +2756,7 @@

    function get_list

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1DeepSSMJob.md b/dev/api/Classes/classshapeworks_1_1DeepSSMJob.md index 4c2138b82e..59b0ddb95c 100644 --- a/dev/api/Classes/classshapeworks_1_1DeepSSMJob.md +++ b/dev/api/Classes/classshapeworks_1_1DeepSSMJob.md @@ -177,4 +177,4 @@ std::vector< std::string > get_list( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.html b/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.html index fb2675d130..30ab691671 100644 --- a/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.html +++ b/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.html @@ -3032,7 +3032,7 @@

    variable DEEPSSM_SAMPLER_KDE_C

    static const std::string DEEPSSM_SAMPLER_KDE_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.md b/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.md index f474e14b9c..b699b7ec71 100644 --- a/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.md +++ b/dev/api/Classes/classshapeworks_1_1DeepSSMParameters.md @@ -369,4 +369,4 @@ static const std::string DEEPSSM_SAMPLER_KDE_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1DeepSSMTool.html b/dev/api/Classes/classshapeworks_1_1DeepSSMTool.html index 409050274a..8a801fbc63 100644 --- a/dev/api/Classes/classshapeworks_1_1DeepSSMTool.html +++ b/dev/api/Classes/classshapeworks_1_1DeepSSMTool.html @@ -2905,7 +2905,7 @@

    function get_display_feature

    std::string get_display_feature()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1DeepSSMTool.md b/dev/api/Classes/classshapeworks_1_1DeepSSMTool.md index 11e490acd2..09ba072b80 100644 --- a/dev/api/Classes/classshapeworks_1_1DeepSSMTool.md +++ b/dev/api/Classes/classshapeworks_1_1DeepSSMTool.md @@ -259,4 +259,4 @@ std::string get_display_feature() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html b/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html index 568e89d9e7..d3379bb49b 100644 --- a/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html +++ b/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html @@ -3542,7 +3542,7 @@

    variable m_Shape_PointsUpdate

    shared_vnl_matrix_array_type m_Shape_PointsUpdate;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md b/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md index 8a155cf78f..8b04b6b727 100644 --- a/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md +++ b/dev/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.md @@ -654,4 +654,4 @@ shared_vnl_matrix_array_type m_Shape_PointsUpdate; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1DualVectorFunction.html b/dev/api/Classes/classshapeworks_1_1DualVectorFunction.html index 01ca782fd5..591799b852 100644 --- a/dev/api/Classes/classshapeworks_1_1DualVectorFunction.html +++ b/dev/api/Classes/classshapeworks_1_1DualVectorFunction.html @@ -3485,7 +3485,7 @@

    variable m_FunctionB

    VectorFunction::Pointer m_FunctionB;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1DualVectorFunction.md b/dev/api/Classes/classshapeworks_1_1DualVectorFunction.md index 921f12f180..323bea4aff 100644 --- a/dev/api/Classes/classshapeworks_1_1DualVectorFunction.md +++ b/dev/api/Classes/classshapeworks_1_1DualVectorFunction.md @@ -648,4 +648,4 @@ VectorFunction::Pointer m_FunctionB; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1EigenUtils.html b/dev/api/Classes/classshapeworks_1_1EigenUtils.html index 6511e2a7fc..7952562633 100644 --- a/dev/api/Classes/classshapeworks_1_1EigenUtils.html +++ b/dev/api/Classes/classshapeworks_1_1EigenUtils.html @@ -2439,7 +2439,7 @@

    function compute_mean_and_stddev

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1EigenUtils.md b/dev/api/Classes/classshapeworks_1_1EigenUtils.md index 34ad6293e8..a3aff30989 100644 --- a/dev/api/Classes/classshapeworks_1_1EigenUtils.md +++ b/dev/api/Classes/classshapeworks_1_1EigenUtils.md @@ -29,4 +29,4 @@ static std::pair< double, double > compute_mean_and_stddev( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.html b/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.html index 8c3951a9cf..d749175fe4 100644 --- a/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.html +++ b/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.html @@ -2623,7 +2623,7 @@

    function get_multi_parameters

    Reimplements: shapeworks::ProjectReader::get_multi_parameters


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.md b/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.md index 27279b6381..9ab0850892 100644 --- a/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.md +++ b/dev/api/Classes/classshapeworks_1_1ExcelProjectReader.md @@ -128,4 +128,4 @@ virtual StringMultiMap get_multi_parameters( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.html b/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.html index 1e9939de87..ff9c312279 100644 --- a/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.html +++ b/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.html @@ -2453,7 +2453,7 @@

    function write_project

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.md b/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.md index bda4a3c262..49c2f3d198 100644 --- a/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.md +++ b/dev/api/Classes/classshapeworks_1_1ExcelProjectWriter.md @@ -43,4 +43,4 @@ static bool write_project( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Executable.html b/dev/api/Classes/classshapeworks_1_1Executable.html index b3fe82851c..73e68a63d2 100644 --- a/dev/api/Classes/classshapeworks_1_1Executable.html +++ b/dev/api/Classes/classshapeworks_1_1Executable.html @@ -2469,7 +2469,7 @@

    function run

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Executable.md b/dev/api/Classes/classshapeworks_1_1Executable.md index 63dd2ef233..497b78756c 100644 --- a/dev/api/Classes/classshapeworks_1_1Executable.md +++ b/dev/api/Classes/classshapeworks_1_1Executable.md @@ -47,4 +47,4 @@ int run( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ExportImageDialog.html b/dev/api/Classes/classshapeworks_1_1ExportImageDialog.html index af92f052a8..8906e771fc 100644 --- a/dev/api/Classes/classshapeworks_1_1ExportImageDialog.html +++ b/dev/api/Classes/classshapeworks_1_1ExportImageDialog.html @@ -2456,7 +2456,7 @@

    function ExportImageDialog

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ExportImageDialog.md b/dev/api/Classes/classshapeworks_1_1ExportImageDialog.md index 1685b71025..a9668ae0d1 100644 --- a/dev/api/Classes/classshapeworks_1_1ExportImageDialog.md +++ b/dev/api/Classes/classshapeworks_1_1ExportImageDialog.md @@ -46,4 +46,4 @@ ExportImageDialog( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ExportUtils.html b/dev/api/Classes/classshapeworks_1_1ExportUtils.html index 0adfd40b49..49979d3c2a 100644 --- a/dev/api/Classes/classshapeworks_1_1ExportUtils.html +++ b/dev/api/Classes/classshapeworks_1_1ExportUtils.html @@ -2496,7 +2496,7 @@

    function write_particle_scalars

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ExportUtils.md b/dev/api/Classes/classshapeworks_1_1ExportUtils.md index a786385939..1d08f9d5d1 100644 --- a/dev/api/Classes/classshapeworks_1_1ExportUtils.md +++ b/dev/api/Classes/classshapeworks_1_1ExportUtils.md @@ -70,4 +70,4 @@ static bool write_particle_scalars( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.html b/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.html index 744a617696..f197e9a3ee 100644 --- a/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.html +++ b/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.html @@ -2875,7 +2875,7 @@

    function convertLegacyFFC

    Convert legacy FFC to new format.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.md b/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.md index dbe3d433cb..25467c29a5 100644 --- a/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.md +++ b/dev/api/Classes/classshapeworks_1_1FreeFormConstraint.md @@ -308,4 +308,4 @@ Convert legacy FFC to new format. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1GenericContainer.html b/dev/api/Classes/classshapeworks_1_1GenericContainer.html index 8b99557429..8d3c96c3e1 100644 --- a/dev/api/Classes/classshapeworks_1_1GenericContainer.html +++ b/dev/api/Classes/classshapeworks_1_1GenericContainer.html @@ -2716,7 +2716,7 @@

    function ~GenericContainer

    inline virtual ~GenericContainer()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1GenericContainer.md b/dev/api/Classes/classshapeworks_1_1GenericContainer.md index 5122abc4c7..cabcc2ba4d 100644 --- a/dev/api/Classes/classshapeworks_1_1GenericContainer.md +++ b/dev/api/Classes/classshapeworks_1_1GenericContainer.md @@ -191,4 +191,4 @@ inline virtual ~GenericContainer() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1GenericContainerArray.html b/dev/api/Classes/classshapeworks_1_1GenericContainerArray.html index 9a17528ae6..10d0b1ced8 100644 --- a/dev/api/Classes/classshapeworks_1_1GenericContainerArray.html +++ b/dev/api/Classes/classshapeworks_1_1GenericContainerArray.html @@ -2819,7 +2819,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1GenericContainerArray.md b/dev/api/Classes/classshapeworks_1_1GenericContainerArray.md index e35f279af4..f5bc8e2ff9 100644 --- a/dev/api/Classes/classshapeworks_1_1GenericContainerArray.md +++ b/dev/api/Classes/classshapeworks_1_1GenericContainerArray.md @@ -235,4 +235,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html b/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html index b1fc3b77fa..03bbe0dac7 100644 --- a/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html +++ b/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html @@ -3193,7 +3193,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md b/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md index f5c5802824..fe1b073539 100644 --- a/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md +++ b/dev/api/Classes/classshapeworks_1_1GradientDescentOptimizer.md @@ -497,4 +497,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Groom.html b/dev/api/Classes/classshapeworks_1_1Groom.html index 8d6ddf013a..1c47918544 100644 --- a/dev/api/Classes/classshapeworks_1_1Groom.html +++ b/dev/api/Classes/classshapeworks_1_1Groom.html @@ -2607,7 +2607,7 @@

    variable progress_counter_

    std::atomic< int > progress_counter_ = 0;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Groom.md b/dev/api/Classes/classshapeworks_1_1Groom.md index 60d3534013..c09dbb790c 100644 --- a/dev/api/Classes/classshapeworks_1_1Groom.md +++ b/dev/api/Classes/classshapeworks_1_1Groom.md @@ -124,4 +124,4 @@ std::atomic< int > progress_counter_ = 0; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.html b/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.html index 33e332b48b..85022c1012 100644 --- a/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.html +++ b/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.md b/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.md index 7a2383e819..7ec28ca24d 100644 --- a/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.md +++ b/dev/api/Classes/classshapeworks_1_1GroomCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1GroomParameters.html b/dev/api/Classes/classshapeworks_1_1GroomParameters.html index c1b744617c..c5b16e986e 100644 --- a/dev/api/Classes/classshapeworks_1_1GroomParameters.html +++ b/dev/api/Classes/classshapeworks_1_1GroomParameters.html @@ -3720,7 +3720,7 @@

    variable GROOM_ALIGNMENT_LANDMARK_C
    static const std::string GROOM_ALIGNMENT_LANDMARK_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1GroomParameters.md b/dev/api/Classes/classshapeworks_1_1GroomParameters.md index 6fb3f8add7..1596e75e07 100644 --- a/dev/api/Classes/classshapeworks_1_1GroomParameters.md +++ b/dev/api/Classes/classshapeworks_1_1GroomParameters.md @@ -786,4 +786,4 @@ static const std::string GROOM_ALIGNMENT_LANDMARK_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1GroomTool.html b/dev/api/Classes/classshapeworks_1_1GroomTool.html index 9ff6e2e906..4285220eb6 100644 --- a/dev/api/Classes/classshapeworks_1_1GroomTool.html +++ b/dev/api/Classes/classshapeworks_1_1GroomTool.html @@ -2930,7 +2930,7 @@

    function shutdown_threads

    shut down any running threads


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1GroomTool.md b/dev/api/Classes/classshapeworks_1_1GroomTool.md index 6eaaa8bcaa..e96d826903 100644 --- a/dev/api/Classes/classshapeworks_1_1GroomTool.md +++ b/dev/api/Classes/classshapeworks_1_1GroomTool.md @@ -303,4 +303,4 @@ shut down any running threads ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.html b/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.html index b57c723084..1981ce02ee 100644 --- a/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.html +++ b/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.html @@ -2563,7 +2563,7 @@

    function get_group_pvalues

    Eigen::VectorXf get_group_pvalues()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.md b/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.md index b2d4222a4c..03b66c6aef 100644 --- a/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.md +++ b/dev/api/Classes/classshapeworks_1_1GroupPvalueJob.md @@ -87,4 +87,4 @@ Eigen::VectorXf get_group_pvalues() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Image.html b/dev/api/Classes/classshapeworks_1_1Image.html index e9357b1bb4..7b25c880f1 100644 --- a/dev/api/Classes/classshapeworks_1_1Image.html +++ b/dev/api/Classes/classshapeworks_1_1Image.html @@ -4064,7 +4064,7 @@

    friend SharedCommandData

    );
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Image.md b/dev/api/Classes/classshapeworks_1_1Image.md index 5e75f123f8..608325ee0f 100644 --- a/dev/api/Classes/classshapeworks_1_1Image.md +++ b/dev/api/Classes/classshapeworks_1_1Image.md @@ -1054,4 +1054,4 @@ friend struct SharedCommandData( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImageCommand.html b/dev/api/Classes/classshapeworks_1_1ImageCommand.html index 542846204b..42e7bf9d69 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageCommand.html +++ b/dev/api/Classes/classshapeworks_1_1ImageCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImageCommand.md b/dev/api/Classes/classshapeworks_1_1ImageCommand.md index e76a25d44a..6cb1b1b53a 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageCommand.md +++ b/dev/api/Classes/classshapeworks_1_1ImageCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomain.html b/dev/api/Classes/classshapeworks_1_1ImageDomain.html index d0bae218fa..f93a42b6f9 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomain.html +++ b/dev/api/Classes/classshapeworks_1_1ImageDomain.html @@ -3045,7 +3045,7 @@

    function ToVDBCoord

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomain.md b/dev/api/Classes/classshapeworks_1_1ImageDomain.md index 5ce02a917f..f80ab1fd27 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomain.md +++ b/dev/api/Classes/classshapeworks_1_1ImageDomain.md @@ -334,4 +334,4 @@ inline openvdb::Vec3R ToVDBCoord( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html b/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html index 87a08df8c3..57c4961322 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html +++ b/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html @@ -3167,7 +3167,7 @@

    function ~ImageDomainWithCurvature<
    inline virtual ~ImageDomainWithCurvature()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md b/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md index 146d435105..2cab0bb678 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md +++ b/dev/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.md @@ -325,4 +325,4 @@ inline virtual ~ImageDomainWithCurvature() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html index 22fe0ee5ca..a74cf0da2c 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html +++ b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html @@ -3084,7 +3084,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md index f3cb64191c..d7c0e1224e 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md +++ b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradN.md @@ -302,4 +302,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html index ed947c1518..8ec93c5ef9 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html +++ b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html @@ -3040,7 +3040,7 @@

    function GetVDBGradient

    inline openvdb::VectorGrid::Ptr GetVDBGradient()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md index 11123b21d0..715db2458a 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md +++ b/dev/api/Classes/classshapeworks_1_1ImageDomainWithGradients.md @@ -294,4 +294,4 @@ inline openvdb::VectorGrid::Ptr GetVDBGradient() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImageLabel.html b/dev/api/Classes/classshapeworks_1_1ImageLabel.html index 3b6ccd631d..7bf05bfbc1 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageLabel.html +++ b/dev/api/Classes/classshapeworks_1_1ImageLabel.html @@ -2505,7 +2505,7 @@

    function resizeEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImageLabel.md b/dev/api/Classes/classshapeworks_1_1ImageLabel.md index 493c61ebd6..15e6cb6c03 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageLabel.md +++ b/dev/api/Classes/classshapeworks_1_1ImageLabel.md @@ -61,4 +61,4 @@ void resizeEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImageUtils.html b/dev/api/Classes/classshapeworks_1_1ImageUtils.html index 787a337ee7..e31262dffe 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageUtils.html +++ b/dev/api/Classes/classshapeworks_1_1ImageUtils.html @@ -2525,7 +2525,7 @@

    function createWarpTransform

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImageUtils.md b/dev/api/Classes/classshapeworks_1_1ImageUtils.md index 262ec9a414..5ee8f9bce4 100644 --- a/dev/api/Classes/classshapeworks_1_1ImageUtils.md +++ b/dev/api/Classes/classshapeworks_1_1ImageUtils.md @@ -74,4 +74,4 @@ static TPSTransform::Pointer createWarpTransform( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html b/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html index 2952cccaa4..adb1f0e6ec 100644 --- a/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html +++ b/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html @@ -3192,7 +3192,7 @@

    function ~ImplicitSurfaceDomain

    inline virtual ~ImplicitSurfaceDomain()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md b/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md index 1b3fef84a7..dd935a9088 100644 --- a/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md +++ b/dev/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.md @@ -342,4 +342,4 @@ inline virtual ~ImplicitSurfaceDomain() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1IndexRegion.html b/dev/api/Classes/classshapeworks_1_1IndexRegion.html index 8125df4008..c2ab3bfe69 100644 --- a/dev/api/Classes/classshapeworks_1_1IndexRegion.html +++ b/dev/api/Classes/classshapeworks_1_1IndexRegion.html @@ -2623,7 +2623,7 @@

    variable max

    Coord max {-1000000000, -1000000000, -1000000000};
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1IndexRegion.md b/dev/api/Classes/classshapeworks_1_1IndexRegion.md index 5f64f23c81..1ef51096a5 100644 --- a/dev/api/Classes/classshapeworks_1_1IndexRegion.md +++ b/dev/api/Classes/classshapeworks_1_1IndexRegion.md @@ -130,4 +130,4 @@ Coord max {-1000000000, -1000000000, -1000000000}; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Job.html b/dev/api/Classes/classshapeworks_1_1Job.html index 4149609a8b..f0d63e2a49 100644 --- a/dev/api/Classes/classshapeworks_1_1Job.html +++ b/dev/api/Classes/classshapeworks_1_1Job.html @@ -2668,7 +2668,7 @@

    function is_aborted

    was the job aborted?


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Job.md b/dev/api/Classes/classshapeworks_1_1Job.md index 6b75d61992..9ae13c2243 100644 --- a/dev/api/Classes/classshapeworks_1_1Job.md +++ b/dev/api/Classes/classshapeworks_1_1Job.md @@ -161,4 +161,4 @@ was the job aborted? ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1JsonProjectReader.html b/dev/api/Classes/classshapeworks_1_1JsonProjectReader.html index 523d1ab99d..6c64e87103 100644 --- a/dev/api/Classes/classshapeworks_1_1JsonProjectReader.html +++ b/dev/api/Classes/classshapeworks_1_1JsonProjectReader.html @@ -2623,7 +2623,7 @@

    function get_multi_parameters

    Reimplements: shapeworks::ProjectReader::get_multi_parameters


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1JsonProjectReader.md b/dev/api/Classes/classshapeworks_1_1JsonProjectReader.md index 23ad7d57f9..21f9212345 100644 --- a/dev/api/Classes/classshapeworks_1_1JsonProjectReader.md +++ b/dev/api/Classes/classshapeworks_1_1JsonProjectReader.md @@ -128,4 +128,4 @@ virtual StringMultiMap get_multi_parameters( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.html b/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.html index 05c5399433..a2f13b5caa 100644 --- a/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.html +++ b/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.html @@ -2453,7 +2453,7 @@

    function write_project

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.md b/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.md index d100e8f8c6..061770595a 100644 --- a/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.md +++ b/dev/api/Classes/classshapeworks_1_1JsonProjectWriter.md @@ -43,4 +43,4 @@ static bool write_project( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.html b/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.html index 5aa3e7ac1a..b9abf926be 100644 --- a/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.html +++ b/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.html @@ -2468,7 +2468,7 @@

    function ~KeyboardShortcuts

    destructor


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.md b/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.md index 58908e3a8a..f41a2f8b8e 100644 --- a/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.md +++ b/dev/api/Classes/classshapeworks_1_1KeyboardShortcuts.md @@ -52,4 +52,4 @@ destructor ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.html b/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.html index 441345b8c0..64c809e6a4 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.html +++ b/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.html @@ -2522,7 +2522,7 @@

    variable comment_

    std::string comment_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.md b/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.md index f9ab2d60a3..e3c2055b8a 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.md +++ b/dev/api/Classes/classshapeworks_1_1LandmarkDefinition.md @@ -78,4 +78,4 @@ std::string comment_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html b/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html index 0ca58a56bf..c1943a1404 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html +++ b/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html @@ -2625,7 +2625,7 @@

    function set_model

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md b/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md index 7192d72dc4..2a80f1457f 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md +++ b/dev/api/Classes/classshapeworks_1_1LandmarkItemDelegate.md @@ -137,4 +137,4 @@ void set_model( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.html b/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.html index c09ebd08b8..e45121d71f 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.html +++ b/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.html @@ -2805,7 +2805,7 @@

    function flags

    QAbstractTableModel::flags implementation.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.md b/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.md index 1eba8619a7..8996543869 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.md +++ b/dev/api/Classes/classshapeworks_1_1LandmarkTableModel.md @@ -251,4 +251,4 @@ QAbstractTableModel::flags implementation. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkWidget.html b/dev/api/Classes/classshapeworks_1_1LandmarkWidget.html index 56f46f5b66..0c7dc98f99 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkWidget.html +++ b/dev/api/Classes/classshapeworks_1_1LandmarkWidget.html @@ -2522,7 +2522,7 @@

    function clear_landmark_handles

    void clear_landmark_handles()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LandmarkWidget.md b/dev/api/Classes/classshapeworks_1_1LandmarkWidget.md index 4ffa4cb163..2e6112396f 100644 --- a/dev/api/Classes/classshapeworks_1_1LandmarkWidget.md +++ b/dev/api/Classes/classshapeworks_1_1LandmarkWidget.md @@ -82,4 +82,4 @@ void clear_landmark_handles() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html b/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html index 1c673b754c..f1e63ea9d4 100644 --- a/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html +++ b/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html @@ -3431,7 +3431,7 @@

    variable m_InverseCovMatrix

    std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md b/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md index 38a075b12f..bd7415d008 100644 --- a/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md +++ b/dev/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.md @@ -586,4 +586,4 @@ std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html b/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html index d49cf1cb3a..95e4a3815a 100644 --- a/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html +++ b/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html @@ -2963,7 +2963,7 @@

    variable m_DomainsPerShape

    int m_DomainsPerShape;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md b/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md index 3e9c49973e..067587784d 100644 --- a/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md +++ b/dev/api/Classes/classshapeworks_1_1LegacyShapeMatrix.md @@ -321,4 +321,4 @@ int m_DomainsPerShape; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Lightbox.html b/dev/api/Classes/classshapeworks_1_1Lightbox.html index 85c80b0ae5..e574f398d3 100644 --- a/dev/api/Classes/classshapeworks_1_1Lightbox.html +++ b/dev/api/Classes/classshapeworks_1_1Lightbox.html @@ -3015,7 +3015,7 @@

    function get_render_window

    vtkRenderWindow * get_render_window()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Lightbox.md b/dev/api/Classes/classshapeworks_1_1Lightbox.md index eb938c7d72..e4423d88fc 100644 --- a/dev/api/Classes/classshapeworks_1_1Lightbox.md +++ b/dev/api/Classes/classshapeworks_1_1Lightbox.md @@ -358,4 +358,4 @@ vtkRenderWindow * get_render_window() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html b/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html index 618a44c8fc..ab14b07ee1 100644 --- a/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html +++ b/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html @@ -3178,7 +3178,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md b/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md index 8bda56c3c5..772e67a0fd 100644 --- a/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md +++ b/dev/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.md @@ -443,4 +443,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1LogWindow.html b/dev/api/Classes/classshapeworks_1_1LogWindow.html index ca40415a44..f4e7158748 100644 --- a/dev/api/Classes/classshapeworks_1_1LogWindow.html +++ b/dev/api/Classes/classshapeworks_1_1LogWindow.html @@ -2471,7 +2471,7 @@

    function add_message

    add a message to the history


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1LogWindow.md b/dev/api/Classes/classshapeworks_1_1LogWindow.md index a4ec91a56d..ea6cdbfc64 100644 --- a/dev/api/Classes/classshapeworks_1_1LogWindow.md +++ b/dev/api/Classes/classshapeworks_1_1LogWindow.md @@ -56,4 +56,4 @@ add a message to the history ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Logging.html b/dev/api/Classes/classshapeworks_1_1Logging.html index 03888c24c7..0ca0fdd4f7 100644 --- a/dev/api/Classes/classshapeworks_1_1Logging.html +++ b/dev/api/Classes/classshapeworks_1_1Logging.html @@ -2791,7 +2791,7 @@

    function set_progress_callback

    Set a progress callback function to be called whenever a progress update is posted.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Logging.md b/dev/api/Classes/classshapeworks_1_1Logging.md index f1cfdc686e..741bfab248 100644 --- a/dev/api/Classes/classshapeworks_1_1Logging.md +++ b/dev/api/Classes/classshapeworks_1_1Logging.md @@ -298,4 +298,4 @@ Set a progress callback function to be called whenever a progress update is post ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MatrixContainer.html b/dev/api/Classes/classshapeworks_1_1MatrixContainer.html index 13f4da240e..8b16d0fb8e 100644 --- a/dev/api/Classes/classshapeworks_1_1MatrixContainer.html +++ b/dev/api/Classes/classshapeworks_1_1MatrixContainer.html @@ -2436,7 +2436,7 @@

    variable matrix_

    Eigen::MatrixXd matrix_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MatrixContainer.md b/dev/api/Classes/classshapeworks_1_1MatrixContainer.md index 4108a15a6c..d2cd67efe4 100644 --- a/dev/api/Classes/classshapeworks_1_1MatrixContainer.md +++ b/dev/api/Classes/classshapeworks_1_1MatrixContainer.md @@ -26,4 +26,4 @@ Eigen::MatrixXd matrix_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html b/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html index d5ace5fcef..e84a748ccc 100644 --- a/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html +++ b/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html @@ -2994,7 +2994,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md b/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md index ae6e890240..a642c5c924 100644 --- a/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md +++ b/dev/api/Classes/classshapeworks_1_1MeanCurvatureContainer.md @@ -322,4 +322,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Mesh.html b/dev/api/Classes/classshapeworks_1_1Mesh.html index 4971f6854e..30702935ff 100644 --- a/dev/api/Classes/classshapeworks_1_1Mesh.html +++ b/dev/api/Classes/classshapeworks_1_1Mesh.html @@ -4013,7 +4013,7 @@

    friend SharedCommandData

    );
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Mesh.md b/dev/api/Classes/classshapeworks_1_1Mesh.md index 5d1750b5d8..7107b06912 100644 --- a/dev/api/Classes/classshapeworks_1_1Mesh.md +++ b/dev/api/Classes/classshapeworks_1_1Mesh.md @@ -972,4 +972,4 @@ friend struct SharedCommandData( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshCache.html b/dev/api/Classes/classshapeworks_1_1MeshCache.html index 537cc4d31a..bd912a48ff 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshCache.html +++ b/dev/api/Classes/classshapeworks_1_1MeshCache.html @@ -2529,7 +2529,7 @@

    function clear

    void clear()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshCache.md b/dev/api/Classes/classshapeworks_1_1MeshCache.md index 413ccd9bf3..31405aecf0 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshCache.md +++ b/dev/api/Classes/classshapeworks_1_1MeshCache.md @@ -89,4 +89,4 @@ void clear() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshCommand.html b/dev/api/Classes/classshapeworks_1_1MeshCommand.html index 74b5c20c68..c83cfdf7c2 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshCommand.html +++ b/dev/api/Classes/classshapeworks_1_1MeshCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshCommand.md b/dev/api/Classes/classshapeworks_1_1MeshCommand.md index 258ec9986a..2b8abb7abd 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshCommand.md +++ b/dev/api/Classes/classshapeworks_1_1MeshCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshDomain.html b/dev/api/Classes/classshapeworks_1_1MeshDomain.html index 9fe3034f4b..c61b0eaea8 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshDomain.html +++ b/dev/api/Classes/classshapeworks_1_1MeshDomain.html @@ -3032,7 +3032,7 @@

    function UpdateZeroCrossingPoint

    Reimplements: shapeworks::ParticleDomain::UpdateZeroCrossingPoint


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshDomain.md b/dev/api/Classes/classshapeworks_1_1MeshDomain.md index 6b58e7ae4f..f3c26ee2a2 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshDomain.md +++ b/dev/api/Classes/classshapeworks_1_1MeshDomain.md @@ -440,4 +440,4 @@ inline virtual void UpdateZeroCrossingPoint() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshGenerator.html b/dev/api/Classes/classshapeworks_1_1MeshGenerator.html index 748271afcd..d21cd11e4b 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshGenerator.html +++ b/dev/api/Classes/classshapeworks_1_1MeshGenerator.html @@ -2637,7 +2637,7 @@

    variable RECONSTRUCTION_MESH_WARP
    static const std::string RECONSTRUCTION_MESH_WARPER_C;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshGenerator.md b/dev/api/Classes/classshapeworks_1_1MeshGenerator.md index 0cb015ac39..1ba4406856 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshGenerator.md +++ b/dev/api/Classes/classshapeworks_1_1MeshGenerator.md @@ -136,4 +136,4 @@ static const std::string RECONSTRUCTION_MESH_WARPER_C; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshGroup.html b/dev/api/Classes/classshapeworks_1_1MeshGroup.html index 7715a2ff58..1cca94fea8 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshGroup.html +++ b/dev/api/Classes/classshapeworks_1_1MeshGroup.html @@ -2557,7 +2557,7 @@

    function get_combined_poly_data

    Return polydata of all meshes, combined.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshGroup.md b/dev/api/Classes/classshapeworks_1_1MeshGroup.md index 47849f7e5c..743ede3e66 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshGroup.md +++ b/dev/api/Classes/classshapeworks_1_1MeshGroup.md @@ -105,4 +105,4 @@ Return polydata of all meshes, combined. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshManager.html b/dev/api/Classes/classshapeworks_1_1MeshManager.html index 77fee3884b..eafe6c36b3 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshManager.html +++ b/dev/api/Classes/classshapeworks_1_1MeshManager.html @@ -2808,7 +2808,7 @@

    function clear_cache

    clear the cache


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshManager.md b/dev/api/Classes/classshapeworks_1_1MeshManager.md index 4feaf2dcaf..18d49bf58f 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshManager.md +++ b/dev/api/Classes/classshapeworks_1_1MeshManager.md @@ -241,4 +241,4 @@ clear the cache ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshReader.html b/dev/api/Classes/classshapeworks_1_1MeshReader.html index 3307f833f2..340d5d9556 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshReader.html +++ b/dev/api/Classes/classshapeworks_1_1MeshReader.html @@ -2384,7 +2384,7 @@

    shapeworks::MeshReader

    reads mesh (used only by one of the Mesh constructors)

    #include <Mesh.h>


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshReader.md b/dev/api/Classes/classshapeworks_1_1MeshReader.md index c1e141b852..953b9c3196 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshReader.md +++ b/dev/api/Classes/classshapeworks_1_1MeshReader.md @@ -15,4 +15,4 @@ reads mesh (used only by one of the [Mesh](../Classes/classshapeworks_1_1Mesh.md ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshReconstructors.html b/dev/api/Classes/classshapeworks_1_1MeshReconstructors.html index 1d7dd49441..f99ebe557e 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshReconstructors.html +++ b/dev/api/Classes/classshapeworks_1_1MeshReconstructors.html @@ -2450,7 +2450,7 @@

    variable mesh_warpers_

    std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshReconstructors.md b/dev/api/Classes/classshapeworks_1_1MeshReconstructors.md index d0ea299fab..42b1ff8929 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshReconstructors.md +++ b/dev/api/Classes/classshapeworks_1_1MeshReconstructors.md @@ -34,4 +34,4 @@ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshSlice.html b/dev/api/Classes/classshapeworks_1_1MeshSlice.html index 5a8517df2b..29e29166af 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshSlice.html +++ b/dev/api/Classes/classshapeworks_1_1MeshSlice.html @@ -2526,7 +2526,7 @@

    function handle_key

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshSlice.md b/dev/api/Classes/classshapeworks_1_1MeshSlice.md index 7394ef63cf..5f3e0cb48f 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshSlice.md +++ b/dev/api/Classes/classshapeworks_1_1MeshSlice.md @@ -86,4 +86,4 @@ void handle_key( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshUtils.html b/dev/api/Classes/classshapeworks_1_1MeshUtils.html index d5635334ea..cdfb272cce 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshUtils.html +++ b/dev/api/Classes/classshapeworks_1_1MeshUtils.html @@ -2669,7 +2669,7 @@

    function getArrow

    Used as an auxiliary function for vector field visualizations.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshUtils.md b/dev/api/Classes/classshapeworks_1_1MeshUtils.md index 2afaee4bb9..b0dd4858ef 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshUtils.md +++ b/dev/api/Classes/classshapeworks_1_1MeshUtils.md @@ -187,4 +187,4 @@ Used as an auxiliary function for vector field visualizations. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshWarper.html b/dev/api/Classes/classshapeworks_1_1MeshWarper.html index cb195fd4f1..56d40680aa 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWarper.html +++ b/dev/api/Classes/classshapeworks_1_1MeshWarper.html @@ -2707,7 +2707,7 @@

    function update_progress

    For overriding to handle progress updates.

    Reimplemented by: shapeworks::QMeshWarper::update_progress


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshWarper.md b/dev/api/Classes/classshapeworks_1_1MeshWarper.md index 67cee6638d..1f80025c59 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWarper.md +++ b/dev/api/Classes/classshapeworks_1_1MeshWarper.md @@ -192,4 +192,4 @@ For overriding to handle progress updates. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshWorkItem.html b/dev/api/Classes/classshapeworks_1_1MeshWorkItem.html index 02b591ae38..1f533b97ff 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWorkItem.html +++ b/dev/api/Classes/classshapeworks_1_1MeshWorkItem.html @@ -2548,7 +2548,7 @@

    friend operator==

    );
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshWorkItem.md b/dev/api/Classes/classshapeworks_1_1MeshWorkItem.md index 4a83753dd7..4c3dab16cd 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWorkItem.md +++ b/dev/api/Classes/classshapeworks_1_1MeshWorkItem.md @@ -85,4 +85,4 @@ friend bool operator==( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.html b/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.html index 296d63332c..59bb663d83 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.html +++ b/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.html @@ -2586,7 +2586,7 @@

    function size

    int size()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.md b/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.md index a5206a4e81..4d2efef8b9 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.md +++ b/dev/api/Classes/classshapeworks_1_1MeshWorkQueue.md @@ -103,4 +103,4 @@ int size() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshWorker.html b/dev/api/Classes/classshapeworks_1_1MeshWorker.html index aabc6525b3..5bf0497b8d 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWorker.html +++ b/dev/api/Classes/classshapeworks_1_1MeshWorker.html @@ -2531,7 +2531,7 @@

    function run

    void run()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshWorker.md b/dev/api/Classes/classshapeworks_1_1MeshWorker.md index a925c0cede..708d228082 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWorker.md +++ b/dev/api/Classes/classshapeworks_1_1MeshWorker.md @@ -73,4 +73,4 @@ void run() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MeshWrapper.html b/dev/api/Classes/classshapeworks_1_1MeshWrapper.html index 118899ffcd..27a0164b98 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWrapper.html +++ b/dev/api/Classes/classshapeworks_1_1MeshWrapper.html @@ -2709,7 +2709,7 @@

    function GetPolydata

    Reimplemented by: shapeworks::VtkMeshWrapper::GetPolydata


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MeshWrapper.md b/dev/api/Classes/classshapeworks_1_1MeshWrapper.md index 869ed2537a..f826fdb64d 100644 --- a/dev/api/Classes/classshapeworks_1_1MeshWrapper.md +++ b/dev/api/Classes/classshapeworks_1_1MeshWrapper.md @@ -215,4 +215,4 @@ virtual vtkSmartPointer< vtkPolyData > GetPolydata() const =0 ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html b/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html index 16b5ec7b64..62e5bd6f14 100644 --- a/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html +++ b/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html @@ -3236,7 +3236,7 @@

    function PrintSelf

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md b/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md index 3cbbb07bc8..b5dea883f3 100644 --- a/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md +++ b/dev/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.md @@ -477,4 +477,4 @@ inline void PrintSelf( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html b/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html index f39bd854a9..43cd272d77 100644 --- a/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html +++ b/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html @@ -2627,7 +2627,7 @@

    function get_spm_values

    Eigen::VectorXf get_spm_values()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md b/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md index 289fe0d52b..93ea4a75f7 100644 --- a/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md +++ b/dev/api/Classes/classshapeworks_1_1NetworkAnalysisJob.md @@ -127,4 +127,4 @@ Eigen::VectorXf get_spm_values() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Observer.html b/dev/api/Classes/classshapeworks_1_1Observer.html index 8c4fa294fd..e1bb9843c0 100644 --- a/dev/api/Classes/classshapeworks_1_1Observer.html +++ b/dev/api/Classes/classshapeworks_1_1Observer.html @@ -2833,7 +2833,7 @@

    variable m_DefinedCallbacks

    DefinedCallbacksStruct m_DefinedCallbacks;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Observer.md b/dev/api/Classes/classshapeworks_1_1Observer.md index b200ef7024..6abec72f9b 100644 --- a/dev/api/Classes/classshapeworks_1_1Observer.md +++ b/dev/api/Classes/classshapeworks_1_1Observer.md @@ -250,4 +250,4 @@ DefinedCallbacksStruct m_DefinedCallbacks; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.html b/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.html index 9bf66d74c5..19ebb76d1f 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.html +++ b/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.html @@ -2516,7 +2516,7 @@

    function ~OptimizationVisualizer

    inline ~OptimizationVisualizer()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.md b/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.md index a307cc3490..f8eca5a13c 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.md +++ b/dev/api/Classes/classshapeworks_1_1OptimizationVisualizer.md @@ -76,4 +76,4 @@ inline ~OptimizationVisualizer() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Optimize.html b/dev/api/Classes/classshapeworks_1_1Optimize.html index 9e61706e39..6a9eff78d3 100644 --- a/dev/api/Classes/classshapeworks_1_1Optimize.html +++ b/dev/api/Classes/classshapeworks_1_1Optimize.html @@ -5939,7 +5939,7 @@

    variable m_remaining_time_message

    std::string m_remaining_time_message;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Optimize.md b/dev/api/Classes/classshapeworks_1_1Optimize.md index 0364f366fb..d5807fcf83 100644 --- a/dev/api/Classes/classshapeworks_1_1Optimize.md +++ b/dev/api/Classes/classshapeworks_1_1Optimize.md @@ -2133,4 +2133,4 @@ std::string m_remaining_time_message; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html b/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html index 02477bb830..03ca0011d3 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html +++ b/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md b/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md index 3b204701eb..ea204a7d74 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md +++ b/dev/api/Classes/classshapeworks_1_1OptimizeCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.html b/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.html index b1dbba8c74..8dcc86ee9f 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.html +++ b/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.html @@ -2469,7 +2469,7 @@

    function load_parameter_file

    Load a parameter file and set the values on an Optimize object.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.md b/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.md index 8b30ecb483..dd1dc16a35 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.md +++ b/dev/api/Classes/classshapeworks_1_1OptimizeParameterFile.md @@ -55,4 +55,4 @@ Load a parameter file and set the values on an [Optimize](../Classes/classshapew ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeParameters.html b/dev/api/Classes/classshapeworks_1_1OptimizeParameters.html index 8a6332e309..4f1907278b 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeParameters.html +++ b/dev/api/Classes/classshapeworks_1_1OptimizeParameters.html @@ -3549,7 +3549,7 @@

    function set_particle_format

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeParameters.md b/dev/api/Classes/classshapeworks_1_1OptimizeParameters.md index ffc46f7d11..4be94014ac 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeParameters.md +++ b/dev/api/Classes/classshapeworks_1_1OptimizeParameters.md @@ -700,4 +700,4 @@ void set_particle_format( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeTool.html b/dev/api/Classes/classshapeworks_1_1OptimizeTool.html index 35143ceb36..4cce77080c 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeTool.html +++ b/dev/api/Classes/classshapeworks_1_1OptimizeTool.html @@ -2835,7 +2835,7 @@

    function shutdown_threads

    shut down any running threads


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1OptimizeTool.md b/dev/api/Classes/classshapeworks_1_1OptimizeTool.md index 48f5dc51c4..dd3c519166 100644 --- a/dev/api/Classes/classshapeworks_1_1OptimizeTool.md +++ b/dev/api/Classes/classshapeworks_1_1OptimizeTool.md @@ -244,4 +244,4 @@ shut down any running threads ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PaintWidget.html b/dev/api/Classes/classshapeworks_1_1PaintWidget.html index 805407e263..dde038e145 100644 --- a/dev/api/Classes/classshapeworks_1_1PaintWidget.html +++ b/dev/api/Classes/classshapeworks_1_1PaintWidget.html @@ -3085,7 +3085,7 @@

    variable viewer_

    Viewer * viewer_;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PaintWidget.md b/dev/api/Classes/classshapeworks_1_1PaintWidget.md index 77b218daf9..c6d80e5538 100644 --- a/dev/api/Classes/classshapeworks_1_1PaintWidget.md +++ b/dev/api/Classes/classshapeworks_1_1PaintWidget.md @@ -377,4 +377,4 @@ Viewer * viewer_; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Parameters.html b/dev/api/Classes/classshapeworks_1_1Parameters.html index 8b872475c8..b2e90554c3 100644 --- a/dev/api/Classes/classshapeworks_1_1Parameters.html +++ b/dev/api/Classes/classshapeworks_1_1Parameters.html @@ -2701,7 +2701,7 @@

    variable DEEPSSM_PARAMS

    static constexpr const char * DEEPSSM_PARAMS = "deepssm";
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Parameters.md b/dev/api/Classes/classshapeworks_1_1Parameters.md index 8dea24463e..c70184f613 100644 --- a/dev/api/Classes/classshapeworks_1_1Parameters.md +++ b/dev/api/Classes/classshapeworks_1_1Parameters.md @@ -182,4 +182,4 @@ static constexpr const char * DEEPSSM_PARAMS = "deepssm"; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleArea.html b/dev/api/Classes/classshapeworks_1_1ParticleArea.html index db996125bc..46a246b214 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleArea.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleArea.html @@ -2511,7 +2511,7 @@

    function compute_particle_tria

    compute the area assigned to each particle


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleArea.md b/dev/api/Classes/classshapeworks_1_1ParticleArea.md index a181121f38..e5243ae35f 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleArea.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleArea.md @@ -77,4 +77,4 @@ compute the area assigned to each particle ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.html b/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.html index 9ba48122ea..8c969a328b 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.html @@ -2577,7 +2577,7 @@

    function get_stddev_areas

    inline const Eigen::VectorXf & get_stddev_areas() const
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.md b/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.md index cafe23243e..8f04d5c931 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleAreaJob.md @@ -95,4 +95,4 @@ inline const Eigen::VectorXf & get_stddev_areas() const ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.html b/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.html index ac518dbbfb..af313bbc7d 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.html @@ -2676,7 +2676,7 @@

    function get_computed_value_name

    std::string get_computed_value_name() const
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.md b/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.md index e54aa87e2f..41b6db09b5 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleAreaPanel.md @@ -145,4 +145,4 @@ std::string get_computed_value_name() const ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleColors.html b/dev/api/Classes/classshapeworks_1_1ParticleColors.html index 5b3921195f..14dd3dcf85 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleColors.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleColors.html @@ -2532,7 +2532,7 @@

    function construct_distinct

    static vtkSmartPointer< vtkLookupTable > construct_distinct()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleColors.md b/dev/api/Classes/classshapeworks_1_1ParticleColors.md index d6d0d73248..73eb4e201b 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleColors.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleColors.md @@ -70,4 +70,4 @@ static vtkSmartPointer< vtkLookupTable > construct_distinct() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleDomain.html b/dev/api/Classes/classshapeworks_1_1ParticleDomain.html index e386225092..250f6034d4 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleDomain.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleDomain.html @@ -3160,7 +3160,7 @@

    variable constraints

    std::shared_ptr< shapeworks::Constraints > constraints;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleDomain.md b/dev/api/Classes/classshapeworks_1_1ParticleDomain.md index d2f1658a66..ad6305f043 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleDomain.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleDomain.md @@ -528,4 +528,4 @@ std::shared_ptr< shapeworks::Constraints > constraints; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleEvent.html b/dev/api/Classes/classshapeworks_1_1ParticleEvent.html index 8d74188fb2..3b95d87cf8 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleEvent.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleEvent.html @@ -2637,7 +2637,7 @@

    function GetDomainIndex

    inline int GetDomainIndex() const
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleEvent.md b/dev/api/Classes/classshapeworks_1_1ParticleEvent.md index 3c1c617c2b..113f6ca2c7 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleEvent.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleEvent.md @@ -145,4 +145,4 @@ inline int GetDomainIndex() const ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html b/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html index 071ea4e792..04066eed97 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html @@ -2966,7 +2966,7 @@

    variable m_FileName

    std::string m_FileName;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md b/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md index e7dc461e34..fd32a8f86a 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.md @@ -325,4 +325,4 @@ std::string m_FileName; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html b/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html index f3b0fe11c1..7a96b395a4 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html @@ -2519,7 +2519,7 @@

    function run_assessment

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md b/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md index 035df0a217..9af6698ed0 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.md @@ -68,4 +68,4 @@ std::vector< std::vector< int > > run_assessment( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.html b/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.html index 6782a343b9..68c242411c 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.html @@ -2983,7 +2983,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.md b/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.md index 617ba8b6f4..4517e69841 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleNeighborhood.md @@ -385,4 +385,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html index b8da4f3a78..64456ff5d1 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html @@ -2474,7 +2474,7 @@

    function compute_particle_normals

    Compute normals at particle positions.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md index a9e393442d..b6f6f3fc83 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.md @@ -52,4 +52,4 @@ Compute normals at particle positions. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html index 22c7a43ac5..b8579a9f87 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html @@ -2612,7 +2612,7 @@

    function get_good_bad

    std::vector< bool > get_good_bad()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md index dd1405876b..4a10e6f19f 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.md @@ -105,4 +105,4 @@ std::vector< bool > get_good_bad() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.html b/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.html index 1c9897c502..7f1ac11aa9 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.html @@ -2866,7 +2866,7 @@

    function IsInsideBuffer

    Check whether the point p may be sampled in this domain.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.md b/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.md index 186dc50e37..13343a5a88 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleRegionDomain.md @@ -227,4 +227,4 @@ Check whether the point p may be sampled in this domain. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html b/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html index bf31854626..4fd93d2bf1 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html @@ -3111,7 +3111,7 @@

    variable m_TreeLevels

    unsigned int m_TreeLevels;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md b/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md index 6cb5fc6c0c..7ca9cd4478 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.md @@ -397,4 +397,4 @@ unsigned int m_TreeLevels; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html b/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html index 8a18885dd0..451904307f 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html @@ -3312,7 +3312,7 @@

    variable VDimension

    static constexpr static int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md b/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md index 3d2273e60e..22925a781a 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleShapeStatistics.md @@ -558,4 +558,4 @@ static constexpr static int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html b/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html index c93d400d28..26ad7823c5 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html @@ -3103,7 +3103,7 @@

    function ~ParticleSurfaceNeighbo
    inline virtual ~ParticleSurfaceNeighborhood()
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md b/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md index 38055a2012..358baf7962 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.md @@ -380,4 +380,4 @@ inline virtual ~ParticleSurfaceNeighborhood() ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSystem.html b/dev/api/Classes/classshapeworks_1_1ParticleSystem.html index b9edfa5801..d83904eff4 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSystem.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleSystem.html @@ -4119,7 +4119,7 @@

    variable VDimension

    static constexpr int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSystem.md b/dev/api/Classes/classshapeworks_1_1ParticleSystem.md index fec5cc41af..3da289e631 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSystem.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleSystem.md @@ -1163,4 +1163,4 @@ static constexpr int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.html b/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.html index 03276e64a8..649113da89 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.md b/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.md index 6e352f13d2..a047150425 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleSystemCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html b/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html index 24affc4749..ca5716377a 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html +++ b/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html @@ -2609,7 +2609,7 @@

    friend SharedCommandData

    );
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md b/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md index 221838887a..b6452914c5 100644 --- a/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md +++ b/dev/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.md @@ -120,4 +120,4 @@ friend struct SharedCommandData( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Particles.html b/dev/api/Classes/classshapeworks_1_1Particles.html index d51af6ac8f..e0250252fa 100644 --- a/dev/api/Classes/classshapeworks_1_1Particles.html +++ b/dev/api/Classes/classshapeworks_1_1Particles.html @@ -2769,7 +2769,7 @@

    function save_particles_file

    )
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Particles.md b/dev/api/Classes/classshapeworks_1_1Particles.md index 45bf3d9119..8b502652a9 100644 --- a/dev/api/Classes/classshapeworks_1_1Particles.md +++ b/dev/api/Classes/classshapeworks_1_1Particles.md @@ -239,4 +239,4 @@ static void save_particles_file( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PhysicalRegion.html b/dev/api/Classes/classshapeworks_1_1PhysicalRegion.html index 2f10db7bba..301152523c 100644 --- a/dev/api/Classes/classshapeworks_1_1PhysicalRegion.html +++ b/dev/api/Classes/classshapeworks_1_1PhysicalRegion.html @@ -2658,7 +2658,7 @@

    variable max

    Point max;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PhysicalRegion.md b/dev/api/Classes/classshapeworks_1_1PhysicalRegion.md index 23c4a43f7a..97214599aa 100644 --- a/dev/api/Classes/classshapeworks_1_1PhysicalRegion.md +++ b/dev/api/Classes/classshapeworks_1_1PhysicalRegion.md @@ -153,4 +153,4 @@ Point max; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PickResult.html b/dev/api/Classes/classshapeworks_1_1PickResult.html index aeb6f72c14..f397c97f59 100644 --- a/dev/api/Classes/classshapeworks_1_1PickResult.html +++ b/dev/api/Classes/classshapeworks_1_1PickResult.html @@ -2464,7 +2464,7 @@

    variable subject_

    int subject_ = -1;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PickResult.md b/dev/api/Classes/classshapeworks_1_1PickResult.md index 79cc1d62fc..f880f819c1 100644 --- a/dev/api/Classes/classshapeworks_1_1PickResult.md +++ b/dev/api/Classes/classshapeworks_1_1PickResult.md @@ -42,4 +42,4 @@ int subject_ = -1; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PlaneConstraint.html b/dev/api/Classes/classshapeworks_1_1PlaneConstraint.html index dc62962495..3442bd6076 100644 --- a/dev/api/Classes/classshapeworks_1_1PlaneConstraint.html +++ b/dev/api/Classes/classshapeworks_1_1PlaneConstraint.html @@ -2725,7 +2725,7 @@

    function getVTKPlane

    Return this plane as a vtkPlane.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PlaneConstraint.md b/dev/api/Classes/classshapeworks_1_1PlaneConstraint.md index 0d07309f82..761b26b2a7 100644 --- a/dev/api/Classes/classshapeworks_1_1PlaneConstraint.md +++ b/dev/api/Classes/classshapeworks_1_1PlaneConstraint.md @@ -204,4 +204,4 @@ Return this plane as a vtkPlane. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PlaneWidget.html b/dev/api/Classes/classshapeworks_1_1PlaneWidget.html index 03b05a7512..261004236e 100644 --- a/dev/api/Classes/classshapeworks_1_1PlaneWidget.html +++ b/dev/api/Classes/classshapeworks_1_1PlaneWidget.html @@ -2636,7 +2636,7 @@

    function finalize_plane_offset

    Finalize the offset for a given plane.


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PlaneWidget.md b/dev/api/Classes/classshapeworks_1_1PlaneWidget.md index cc988db3cf..a7aa1fcf72 100644 --- a/dev/api/Classes/classshapeworks_1_1PlaneWidget.md +++ b/dev/api/Classes/classshapeworks_1_1PlaneWidget.md @@ -160,4 +160,4 @@ Finalize the offset for a given plane. ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html index 857de3e1ae..edad965e68 100644 --- a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html +++ b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html @@ -3061,7 +3061,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md index 21c5486a4d..ff760626ac 100644 --- a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md +++ b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.md @@ -426,4 +426,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html index 1ca099ba6b..50b5d87fee 100644 --- a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html +++ b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html @@ -3000,7 +3000,7 @@

    variable VDimension

    static constexpr static unsigned int VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md index a9be0d2943..54f7fe9f75 100644 --- a/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md +++ b/dev/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.md @@ -371,4 +371,4 @@ static constexpr static unsigned int VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PreferencesWindow.html b/dev/api/Classes/classshapeworks_1_1PreferencesWindow.html index a1030ad963..4dcb441ee1 100644 --- a/dev/api/Classes/classshapeworks_1_1PreferencesWindow.html +++ b/dev/api/Classes/classshapeworks_1_1PreferencesWindow.html @@ -2744,7 +2744,7 @@

    function closeEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PreferencesWindow.md b/dev/api/Classes/classshapeworks_1_1PreferencesWindow.md index 60ace7c4ea..9cf639ea87 100644 --- a/dev/api/Classes/classshapeworks_1_1PreferencesWindow.md +++ b/dev/api/Classes/classshapeworks_1_1PreferencesWindow.md @@ -195,4 +195,4 @@ void closeEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.html b/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.html index 1195982d84..f959aa5c31 100644 --- a/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.html +++ b/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.html @@ -2663,7 +2663,7 @@

    function SetRotationTranslation

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.md b/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.md index 2c54af9634..c8f5f909d9 100644 --- a/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.md +++ b/dev/api/Classes/classshapeworks_1_1ProcrustesRegistration.md @@ -152,4 +152,4 @@ inline void SetRotationTranslation( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Project.html b/dev/api/Classes/classshapeworks_1_1Project.html index df91e62a71..6b4d50e2a8 100644 --- a/dev/api/Classes/classshapeworks_1_1Project.html +++ b/dev/api/Classes/classshapeworks_1_1Project.html @@ -3152,7 +3152,7 @@

    function set_groomed_domain_types

    Get the groomed domain types.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Project.md b/dev/api/Classes/classshapeworks_1_1Project.md index 0c2c0da323..02620d9782 100644 --- a/dev/api/Classes/classshapeworks_1_1Project.md +++ b/dev/api/Classes/classshapeworks_1_1Project.md @@ -465,4 +465,4 @@ Get the groomed domain types. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.html b/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.html index 1f9d300ced..8ef9d062bf 100644 --- a/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.html +++ b/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.md b/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.md index c793590561..d5284405bb 100644 --- a/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.md +++ b/dev/api/Classes/classshapeworks_1_1ProjectCommandGroup.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ProjectReader.html b/dev/api/Classes/classshapeworks_1_1ProjectReader.html index 284981ede4..70af82ec8f 100644 --- a/dev/api/Classes/classshapeworks_1_1ProjectReader.html +++ b/dev/api/Classes/classshapeworks_1_1ProjectReader.html @@ -2784,7 +2784,7 @@

    variable project_

    Project & project_;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ProjectReader.md b/dev/api/Classes/classshapeworks_1_1ProjectReader.md index 30e902e39c..b47307a2d5 100644 --- a/dev/api/Classes/classshapeworks_1_1ProjectReader.md +++ b/dev/api/Classes/classshapeworks_1_1ProjectReader.md @@ -216,4 +216,4 @@ Project & project_; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ProjectUtils.html b/dev/api/Classes/classshapeworks_1_1ProjectUtils.html index 4879c48fae..7bc3061d01 100644 --- a/dev/api/Classes/classshapeworks_1_1ProjectUtils.html +++ b/dev/api/Classes/classshapeworks_1_1ProjectUtils.html @@ -2771,7 +2771,7 @@

    function convert_subject_to_map

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ProjectUtils.md b/dev/api/Classes/classshapeworks_1_1ProjectUtils.md index f6535b4ed0..e2d19815c2 100644 --- a/dev/api/Classes/classshapeworks_1_1ProjectUtils.md +++ b/dev/api/Classes/classshapeworks_1_1ProjectUtils.md @@ -228,4 +228,4 @@ static StringMap convert_subject_to_map( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1PythonWorker.html b/dev/api/Classes/classshapeworks_1_1PythonWorker.html index f8beb9c51a..02444a5403 100644 --- a/dev/api/Classes/classshapeworks_1_1PythonWorker.html +++ b/dev/api/Classes/classshapeworks_1_1PythonWorker.html @@ -2725,7 +2725,7 @@

    variable python_api_version

    static constexpr static const char * python_api_version = "6.5";
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1PythonWorker.md b/dev/api/Classes/classshapeworks_1_1PythonWorker.md index c327ba9a76..de9cafdcfd 100644 --- a/dev/api/Classes/classshapeworks_1_1PythonWorker.md +++ b/dev/api/Classes/classshapeworks_1_1PythonWorker.md @@ -163,4 +163,4 @@ static constexpr static const char * python_api_version = "6.5"; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1QMeshWarper.html b/dev/api/Classes/classshapeworks_1_1QMeshWarper.html index 1e4033c2ec..4ee4c87c62 100644 --- a/dev/api/Classes/classshapeworks_1_1QMeshWarper.html +++ b/dev/api/Classes/classshapeworks_1_1QMeshWarper.html @@ -2626,7 +2626,7 @@

    function update_progress

    For overriding to handle progress updates.

    Reimplements: shapeworks::MeshWarper::update_progress


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1QMeshWarper.md b/dev/api/Classes/classshapeworks_1_1QMeshWarper.md index d5bdcd42a6..f03c7ae700 100644 --- a/dev/api/Classes/classshapeworks_1_1QMeshWarper.md +++ b/dev/api/Classes/classshapeworks_1_1QMeshWarper.md @@ -100,4 +100,4 @@ For overriding to handle progress updates. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1QOptimize.html b/dev/api/Classes/classshapeworks_1_1QOptimize.html index 3061271507..366613a326 100644 --- a/dev/api/Classes/classshapeworks_1_1QOptimize.html +++ b/dev/api/Classes/classshapeworks_1_1QOptimize.html @@ -3570,7 +3570,7 @@

    function IterateCallback

    Reimplements: shapeworks::Optimize::IterateCallback


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1QOptimize.md b/dev/api/Classes/classshapeworks_1_1QOptimize.md index 4bbf0530ca..9fe0e3e3e7 100644 --- a/dev/api/Classes/classshapeworks_1_1QOptimize.md +++ b/dev/api/Classes/classshapeworks_1_1QOptimize.md @@ -388,4 +388,4 @@ virtual void IterateCallback( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ReconstructSurface.html b/dev/api/Classes/classshapeworks_1_1ReconstructSurface.html index b68b8cce3b..6f8a16e8b7 100644 --- a/dev/api/Classes/classshapeworks_1_1ReconstructSurface.html +++ b/dev/api/Classes/classshapeworks_1_1ReconstructSurface.html @@ -3034,7 +3034,7 @@

    function setMaxAngleDegrees

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ReconstructSurface.md b/dev/api/Classes/classshapeworks_1_1ReconstructSurface.md index e2197931e8..072bb7a6d2 100644 --- a/dev/api/Classes/classshapeworks_1_1ReconstructSurface.md +++ b/dev/api/Classes/classshapeworks_1_1ReconstructSurface.md @@ -390,4 +390,4 @@ inline void setMaxAngleDegrees( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Sampler.html b/dev/api/Classes/classshapeworks_1_1Sampler.html index bf51843055..d04abb4f5d 100644 --- a/dev/api/Classes/classshapeworks_1_1Sampler.html +++ b/dev/api/Classes/classshapeworks_1_1Sampler.html @@ -3771,7 +3771,7 @@

    variable Dimension

    static constexpr unsigned int Dimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Sampler.md b/dev/api/Classes/classshapeworks_1_1Sampler.md index f9dfde491b..4d610e6176 100644 --- a/dev/api/Classes/classshapeworks_1_1Sampler.md +++ b/dev/api/Classes/classshapeworks_1_1Sampler.md @@ -808,4 +808,4 @@ static constexpr unsigned int Dimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1SamplingFunction.html b/dev/api/Classes/classshapeworks_1_1SamplingFunction.html index 54a049b3e4..af34802298 100644 --- a/dev/api/Classes/classshapeworks_1_1SamplingFunction.html +++ b/dev/api/Classes/classshapeworks_1_1SamplingFunction.html @@ -3336,7 +3336,7 @@

    variable m_SpatialSigmaCache

    SigmaCacheType::Pointer m_SpatialSigmaCache;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1SamplingFunction.md b/dev/api/Classes/classshapeworks_1_1SamplingFunction.md index 695e120114..6192301b97 100644 --- a/dev/api/Classes/classshapeworks_1_1SamplingFunction.md +++ b/dev/api/Classes/classshapeworks_1_1SamplingFunction.md @@ -568,4 +568,4 @@ SigmaCacheType::Pointer m_SpatialSigmaCache; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Session.html b/dev/api/Classes/classshapeworks_1_1Session.html index 04f4298a9a..da27564bd0 100644 --- a/dev/api/Classes/classshapeworks_1_1Session.html +++ b/dev/api/Classes/classshapeworks_1_1Session.html @@ -4414,7 +4414,7 @@

    variable DEEPSSM_C

    static const std::string DEEPSSM_C;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Session.md b/dev/api/Classes/classshapeworks_1_1Session.md index 1d86c9e98d..aeb8f423c5 100644 --- a/dev/api/Classes/classshapeworks_1_1Session.md +++ b/dev/api/Classes/classshapeworks_1_1Session.md @@ -1180,4 +1180,4 @@ static const std::string DEEPSSM_C; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Shape.html b/dev/api/Classes/classshapeworks_1_1Shape.html index b56fc658bd..13b6257453 100644 --- a/dev/api/Classes/classshapeworks_1_1Shape.html +++ b/dev/api/Classes/classshapeworks_1_1Shape.html @@ -3435,7 +3435,7 @@

    function get_groomed_mesh_wrappers
    std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Shape.md b/dev/api/Classes/classshapeworks_1_1Shape.md index 5175a121ba..41e430e2ad 100644 --- a/dev/api/Classes/classshapeworks_1_1Shape.md +++ b/dev/api/Classes/classshapeworks_1_1Shape.md @@ -633,4 +633,4 @@ std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.html b/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.html index 248738840f..137562ba21 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.html @@ -2587,7 +2587,7 @@

    variable VDimension

    static const unsigned VDimension = 3;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.md b/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.md index 894f2c3800..3dfc0227bf 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeEvaluation.md @@ -110,4 +110,4 @@ static const unsigned VDimension = 3; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html b/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html index 76dbfdf2d9..3e4a6bfdfe 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html @@ -2686,7 +2686,7 @@

    function name

    get the name of the job

    Reimplements: shapeworks::Job::name


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md b/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md index 7b27e3975b..1a6eb92fe8 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeEvaluationJob.md @@ -128,4 +128,4 @@ get the name of the job ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html b/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html index f458c4856e..d89cc665c5 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html @@ -3053,7 +3053,7 @@

    variable m_DomainsPerShape

    int m_DomainsPerShape;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md b/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md index 7dd1993b46..f507055f76 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeGradientMatrix.md @@ -371,4 +371,4 @@ int m_DomainsPerShape; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeMatrix.html b/dev/api/Classes/classshapeworks_1_1ShapeMatrix.html index f450b76051..ef5f332dca 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeMatrix.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeMatrix.html @@ -3069,7 +3069,7 @@

    variable m_DomainsPerShape

    int m_DomainsPerShape;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeMatrix.md b/dev/api/Classes/classshapeworks_1_1ShapeMatrix.md index 970da5b4f5..5c6163557f 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeMatrix.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeMatrix.md @@ -385,4 +385,4 @@ int m_DomainsPerShape; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html b/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html index 6157cb4056..29c3b652cb 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html @@ -3718,7 +3718,7 @@

    function dropEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md b/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md index 47286d1a40..50eb30f1bb 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.md @@ -761,4 +761,4 @@ void dropEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.html b/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.html index b1714494be..38a38dcb36 100644 --- a/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.html +++ b/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.html @@ -2534,7 +2534,7 @@

    variable z

    double z;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.md b/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.md index e49cfbdbbc..c872c9b0a0 100644 --- a/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.md +++ b/dev/api/Classes/classshapeworks_1_1Shape_1_1Point.md @@ -73,4 +73,4 @@ double z; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.html b/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.html index 1144c14b1f..ad2baa99be 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.html @@ -2507,7 +2507,7 @@

    function type

    Reimplements: shapeworks::Command::type


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.md b/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.md index 48e1539126..c949335a91 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeworksCommand.md @@ -56,4 +56,4 @@ inline virtual const std::string type() override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.html b/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.html index ac89dcd91c..b4f5f329b0 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.html @@ -2570,7 +2570,7 @@

    function getOffset

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.md b/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.md index ddb881546c..8594392189 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeworksUtils.md @@ -112,4 +112,4 @@ static Vector3 getOffset( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.html b/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.html index e8fac03971..c0b4c93985 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.html +++ b/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.html @@ -2650,7 +2650,7 @@

    function ~ShapeworksWorker

    ~ShapeworksWorker()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.md b/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.md index f07fd330ca..555b024f8f 100644 --- a/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.md +++ b/dev/api/Classes/classshapeworks_1_1ShapeworksWorker.md @@ -110,4 +110,4 @@ ShapeworksWorker( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1SliceView.html b/dev/api/Classes/classshapeworks_1_1SliceView.html index 5d2dac3ae5..26d266f561 100644 --- a/dev/api/Classes/classshapeworks_1_1SliceView.html +++ b/dev/api/Classes/classshapeworks_1_1SliceView.html @@ -2760,7 +2760,7 @@

    function should_point_show

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1SliceView.md b/dev/api/Classes/classshapeworks_1_1SliceView.md index a7ae35b428..d504607c2b 100644 --- a/dev/api/Classes/classshapeworks_1_1SliceView.md +++ b/dev/api/Classes/classshapeworks_1_1SliceView.md @@ -207,4 +207,4 @@ bool should_point_show( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1SplashScreen.html b/dev/api/Classes/classshapeworks_1_1SplashScreen.html index b532153868..f8209b77c3 100644 --- a/dev/api/Classes/classshapeworks_1_1SplashScreen.html +++ b/dev/api/Classes/classshapeworks_1_1SplashScreen.html @@ -2518,7 +2518,7 @@

    function ~SplashScreen

    destructor


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1SplashScreen.md b/dev/api/Classes/classshapeworks_1_1SplashScreen.md index 3c8ad4aef4..1455ad8be2 100644 --- a/dev/api/Classes/classshapeworks_1_1SplashScreen.md +++ b/dev/api/Classes/classshapeworks_1_1SplashScreen.md @@ -71,4 +71,4 @@ destructor ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html b/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html index d29b56f43a..4a97785606 100644 --- a/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html +++ b/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html @@ -2595,7 +2595,7 @@

    function plot

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md b/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md index c82e530891..c507ed9809 100644 --- a/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md +++ b/dev/api/Classes/classshapeworks_1_1StatsGroupLDAJob.md @@ -107,4 +107,4 @@ void plot( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StatusBarWidget.html b/dev/api/Classes/classshapeworks_1_1StatusBarWidget.html index 38fe724f4a..ac1b8077cd 100644 --- a/dev/api/Classes/classshapeworks_1_1StatusBarWidget.html +++ b/dev/api/Classes/classshapeworks_1_1StatusBarWidget.html @@ -2548,7 +2548,7 @@

    function resizeEvent

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StatusBarWidget.md b/dev/api/Classes/classshapeworks_1_1StatusBarWidget.md index 7d0bcbf2f6..9d2bd45d28 100644 --- a/dev/api/Classes/classshapeworks_1_1StatusBarWidget.md +++ b/dev/api/Classes/classshapeworks_1_1StatusBarWidget.md @@ -90,4 +90,4 @@ void resizeEvent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StringUtils.html b/dev/api/Classes/classshapeworks_1_1StringUtils.html index f629e7239a..ebb98e9e21 100644 --- a/dev/api/Classes/classshapeworks_1_1StringUtils.html +++ b/dev/api/Classes/classshapeworks_1_1StringUtils.html @@ -2590,7 +2590,7 @@

    function replace_string

    Replace a search string with a replacement.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StringUtils.md b/dev/api/Classes/classshapeworks_1_1StringUtils.md index 36dedf914b..a9b8528af1 100644 --- a/dev/api/Classes/classshapeworks_1_1StringUtils.md +++ b/dev/api/Classes/classshapeworks_1_1StringUtils.md @@ -128,4 +128,4 @@ Replace a search string with a replacement. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.html b/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.html index dd6242bbac..e51e6e1ba9 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.html +++ b/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.html @@ -2727,7 +2727,7 @@

    variable start_y_

    int start_y_ = 0;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.md b/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.md index 275ec70eb6..c1920b8755 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.md +++ b/dev/api/Classes/classshapeworks_1_1StudioHandleWidget.md @@ -178,4 +178,4 @@ int start_y_ = 0; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.html b/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.html index 412b245722..bf93eea2f3 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.html +++ b/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.html @@ -2672,7 +2672,7 @@

    function Dolly

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.md b/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.md index d874f0c8e7..c2e214d50e 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.md +++ b/dev/api/Classes/classshapeworks_1_1StudioInteractorStyle.md @@ -154,4 +154,4 @@ void Dolly( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StudioMesh.html b/dev/api/Classes/classshapeworks_1_1StudioMesh.html index 8ec7bbf12d..70d3cadfac 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioMesh.html +++ b/dev/api/Classes/classshapeworks_1_1StudioMesh.html @@ -2698,7 +2698,7 @@

    variable FFC_PAINT

    static constexpr const char *const FFC_PAINT = "ffc_paint";
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StudioMesh.md b/dev/api/Classes/classshapeworks_1_1StudioMesh.md index 293564d5a5..f7202781d1 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioMesh.md +++ b/dev/api/Classes/classshapeworks_1_1StudioMesh.md @@ -186,4 +186,4 @@ static constexpr const char *const FFC_PAINT = "ffc_paint"; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html b/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html index 4a8814b0cc..35c2790945 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html +++ b/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html @@ -2554,7 +2554,7 @@

    function WindowLevel

    void WindowLevel() override
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md b/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md index 776c0e92e8..150c6ef552 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md +++ b/dev/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.md @@ -97,4 +97,4 @@ void WindowLevel() override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StudioUtils.html b/dev/api/Classes/classshapeworks_1_1StudioUtils.html index 48772cc2c7..5b42b5b589 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioUtils.html +++ b/dev/api/Classes/classshapeworks_1_1StudioUtils.html @@ -2525,7 +2525,7 @@

    function add_viewport_border

    add a color border to a viewport


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StudioUtils.md b/dev/api/Classes/classshapeworks_1_1StudioUtils.md index 710567396f..4cfb6fa834 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioUtils.md +++ b/dev/api/Classes/classshapeworks_1_1StudioUtils.md @@ -87,4 +87,4 @@ add a color border to a viewport ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html b/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html index 0a98db5e94..2f3421516a 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html +++ b/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html @@ -2534,7 +2534,7 @@

    function DisplayDebugText

    ) override
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md b/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md index bf96642e28..3aabc803e1 100644 --- a/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md +++ b/dev/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.md @@ -91,4 +91,4 @@ void DisplayDebugText( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Style.html b/dev/api/Classes/classshapeworks_1_1Style.html index b3196e8822..b83bfc58d7 100644 --- a/dev/api/Classes/classshapeworks_1_1Style.html +++ b/dev/api/Classes/classshapeworks_1_1Style.html @@ -2468,7 +2468,7 @@

    function apply_abort_button_style

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Style.md b/dev/api/Classes/classshapeworks_1_1Style.md index 10e5a83737..1fe8efb92b 100644 --- a/dev/api/Classes/classshapeworks_1_1Style.md +++ b/dev/api/Classes/classshapeworks_1_1Style.md @@ -46,4 +46,4 @@ static void apply_abort_button_style( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Subject.html b/dev/api/Classes/classshapeworks_1_1Subject.html index 238545fb62..afa145a1f4 100644 --- a/dev/api/Classes/classshapeworks_1_1Subject.html +++ b/dev/api/Classes/classshapeworks_1_1Subject.html @@ -3037,7 +3037,7 @@

    function set_fixed

    Set if this subject is fixed or not.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Subject.md b/dev/api/Classes/classshapeworks_1_1Subject.md index a9d71b977d..4988cc75e2 100644 --- a/dev/api/Classes/classshapeworks_1_1Subject.md +++ b/dev/api/Classes/classshapeworks_1_1Subject.md @@ -392,4 +392,4 @@ Set if this subject is fixed or not. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Telemetry.html b/dev/api/Classes/classshapeworks_1_1Telemetry.html index ce4642f25e..47300454f7 100644 --- a/dev/api/Classes/classshapeworks_1_1Telemetry.html +++ b/dev/api/Classes/classshapeworks_1_1Telemetry.html @@ -2504,7 +2504,7 @@

    function record_event

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Telemetry.md b/dev/api/Classes/classshapeworks_1_1Telemetry.md index 04439d18e2..0041ba91ff 100644 --- a/dev/api/Classes/classshapeworks_1_1Telemetry.md +++ b/dev/api/Classes/classshapeworks_1_1Telemetry.md @@ -58,4 +58,4 @@ void record_event( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1UpdateChecker.html b/dev/api/Classes/classshapeworks_1_1UpdateChecker.html index 7d613511e5..0aeaf72c87 100644 --- a/dev/api/Classes/classshapeworks_1_1UpdateChecker.html +++ b/dev/api/Classes/classshapeworks_1_1UpdateChecker.html @@ -2544,7 +2544,7 @@

    function run_manual_update_check

    void run_manual_update_check()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1UpdateChecker.md b/dev/api/Classes/classshapeworks_1_1UpdateChecker.md index 97658c9717..580cc9b56b 100644 --- a/dev/api/Classes/classshapeworks_1_1UpdateChecker.md +++ b/dev/api/Classes/classshapeworks_1_1UpdateChecker.md @@ -86,4 +86,4 @@ void run_manual_update_check() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Variant.html b/dev/api/Classes/classshapeworks_1_1Variant.html index 33889680a5..b0f34d40c2 100644 --- a/dev/api/Classes/classshapeworks_1_1Variant.html +++ b/dev/api/Classes/classshapeworks_1_1Variant.html @@ -2762,7 +2762,7 @@

    function operator std::vector<
    operator std::vector< std::string >() const
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Variant.md b/dev/api/Classes/classshapeworks_1_1Variant.md index 7d9f9b8af7..8e08b583f5 100644 --- a/dev/api/Classes/classshapeworks_1_1Variant.md +++ b/dev/api/Classes/classshapeworks_1_1Variant.md @@ -226,4 +226,4 @@ operator std::vector< std::string >() const ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1VectorFunction.html b/dev/api/Classes/classshapeworks_1_1VectorFunction.html index de9b1a9819..26ce245550 100644 --- a/dev/api/Classes/classshapeworks_1_1VectorFunction.html +++ b/dev/api/Classes/classshapeworks_1_1VectorFunction.html @@ -3014,7 +3014,7 @@

    variable m_DomainNumber

    unsigned int m_DomainNumber;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1VectorFunction.md b/dev/api/Classes/classshapeworks_1_1VectorFunction.md index 0eba3b5444..e3ecbddc93 100644 --- a/dev/api/Classes/classshapeworks_1_1VectorFunction.md +++ b/dev/api/Classes/classshapeworks_1_1VectorFunction.md @@ -385,4 +385,4 @@ unsigned int m_DomainNumber; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1VectorImage.html b/dev/api/Classes/classshapeworks_1_1VectorImage.html index f306fd2227..a1a966570a 100644 --- a/dev/api/Classes/classshapeworks_1_1VectorImage.html +++ b/dev/api/Classes/classshapeworks_1_1VectorImage.html @@ -2588,7 +2588,7 @@

    function iterator

    ImageIterator iterator()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1VectorImage.md b/dev/api/Classes/classshapeworks_1_1VectorImage.md index 7a46a39120..406f872426 100644 --- a/dev/api/Classes/classshapeworks_1_1VectorImage.md +++ b/dev/api/Classes/classshapeworks_1_1VectorImage.md @@ -107,4 +107,4 @@ ImageIterator iterator() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Viewer.html b/dev/api/Classes/classshapeworks_1_1Viewer.html index c1632736fa..d412e5226c 100644 --- a/dev/api/Classes/classshapeworks_1_1Viewer.html +++ b/dev/api/Classes/classshapeworks_1_1Viewer.html @@ -3271,7 +3271,7 @@

    function is_reverse

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Viewer.md b/dev/api/Classes/classshapeworks_1_1Viewer.md index c5e018bbd3..19ae983308 100644 --- a/dev/api/Classes/classshapeworks_1_1Viewer.md +++ b/dev/api/Classes/classshapeworks_1_1Viewer.md @@ -531,4 +531,4 @@ static bool is_reverse( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Visualizer.html b/dev/api/Classes/classshapeworks_1_1Visualizer.html index 6a99730243..5f330f4df0 100644 --- a/dev/api/Classes/classshapeworks_1_1Visualizer.html +++ b/dev/api/Classes/classshapeworks_1_1Visualizer.html @@ -3349,7 +3349,7 @@

    function get_render_size

    Return render window size.


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Visualizer.md b/dev/api/Classes/classshapeworks_1_1Visualizer.md index c91b6442ba..516dc45ec0 100644 --- a/dev/api/Classes/classshapeworks_1_1Visualizer.md +++ b/dev/api/Classes/classshapeworks_1_1Visualizer.md @@ -585,4 +585,4 @@ Return render window size. ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.html b/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.html index db22f06118..418a95a4c5 100644 --- a/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.html +++ b/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.html @@ -2754,7 +2754,7 @@

    function GetPolydata

    Reimplements: shapeworks::MeshWrapper::GetPolydata


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.md b/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.md index f1979d1a50..3c03ac136e 100644 --- a/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.md +++ b/dev/api/Classes/classshapeworks_1_1VtkMeshWrapper.md @@ -240,4 +240,4 @@ inline virtual vtkSmartPointer< vtkPolyData > GetPolydata() const override ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.html b/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.html index f65fd34134..ac9c347d27 100644 --- a/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.html +++ b/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.html @@ -2470,7 +2470,7 @@

    function eventFilter

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.md b/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.md index 8fe0cfdad4..f235c49337 100644 --- a/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.md +++ b/dev/api/Classes/classshapeworks_1_1WheelEventForwarder.md @@ -49,4 +49,4 @@ bool eventFilter( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1Worker.html b/dev/api/Classes/classshapeworks_1_1Worker.html index 3eff511bdc..de8f63b306 100644 --- a/dev/api/Classes/classshapeworks_1_1Worker.html +++ b/dev/api/Classes/classshapeworks_1_1Worker.html @@ -2637,7 +2637,7 @@

    function create_worker

    static Worker * create_worker()
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1Worker.md b/dev/api/Classes/classshapeworks_1_1Worker.md index 54a7e2bb45..791886b18a 100644 --- a/dev/api/Classes/classshapeworks_1_1Worker.md +++ b/dev/api/Classes/classshapeworks_1_1Worker.md @@ -124,4 +124,4 @@ static Worker * create_worker() ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classshapeworks_1_1shapeworks__exception.html b/dev/api/Classes/classshapeworks_1_1shapeworks__exception.html index aef73a09b8..b00ff44f4c 100644 --- a/dev/api/Classes/classshapeworks_1_1shapeworks__exception.html +++ b/dev/api/Classes/classshapeworks_1_1shapeworks__exception.html @@ -2455,7 +2455,7 @@

    function shapeworks_exception

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/classshapeworks_1_1shapeworks__exception.md b/dev/api/Classes/classshapeworks_1_1shapeworks__exception.md index 6b058eecdc..602055d7c0 100644 --- a/dev/api/Classes/classshapeworks_1_1shapeworks__exception.md +++ b/dev/api/Classes/classshapeworks_1_1shapeworks__exception.md @@ -40,4 +40,4 @@ shapeworks_exception( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classvec2d.html b/dev/api/Classes/classvec2d.html index d0966ff09a..8a108df191 100644 --- a/dev/api/Classes/classvec2d.html +++ b/dev/api/Classes/classvec2d.html @@ -2635,7 +2635,7 @@

    variable y

    double y;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classvec2d.md b/dev/api/Classes/classvec2d.md index 67a24aa100..5f1a864aed 100644 --- a/dev/api/Classes/classvec2d.md +++ b/dev/api/Classes/classvec2d.md @@ -134,4 +134,4 @@ double y; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classvec3d.html b/dev/api/Classes/classvec3d.html index a03f8a604d..b91d5c8eb5 100644 --- a/dev/api/Classes/classvec3d.html +++ b/dev/api/Classes/classvec3d.html @@ -2776,7 +2776,7 @@

    variable z

    double z;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classvec3d.md b/dev/api/Classes/classvec3d.md index 8b596ce570..1da5a33b51 100644 --- a/dev/api/Classes/classvec3d.md +++ b/dev/api/Classes/classvec3d.md @@ -221,4 +221,4 @@ double z; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classvec6d.html b/dev/api/Classes/classvec6d.html index 068e922680..3dcee9dab5 100644 --- a/dev/api/Classes/classvec6d.html +++ b/dev/api/Classes/classvec6d.html @@ -2552,7 +2552,7 @@

    variable xz

    double xz;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classvec6d.md b/dev/api/Classes/classvec6d.md index 4002db5fab..186f41c9f6 100644 --- a/dev/api/Classes/classvec6d.md +++ b/dev/api/Classes/classvec6d.md @@ -81,4 +81,4 @@ double xz; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/classvtkPolyDataToImageData.html b/dev/api/Classes/classvtkPolyDataToImageData.html index 96f8201303..9da579c945 100644 --- a/dev/api/Classes/classvtkPolyDataToImageData.html +++ b/dev/api/Classes/classvtkPolyDataToImageData.html @@ -2772,7 +2772,7 @@

    function RequestUpdateExtent

    )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/classvtkPolyDataToImageData.md b/dev/api/Classes/classvtkPolyDataToImageData.md index 10dd84a7a7..91ab94a790 100644 --- a/dev/api/Classes/classvtkPolyDataToImageData.md +++ b/dev/api/Classes/classvtkPolyDataToImageData.md @@ -230,4 +230,4 @@ virtual int RequestUpdateExtent( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/index_classes.html b/dev/api/Classes/index_classes.html index da286cfdd1..f9f2f4a18e 100644 --- a/dev/api/Classes/index_classes.html +++ b/dev/api/Classes/index_classes.html @@ -2689,7 +2689,7 @@

    Classes

  • class vtkPolyDataToImageData

  • -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/index_classes.md b/dev/api/Classes/index_classes.md index d58a0e2622..7b6b2e537c 100644 --- a/dev/api/Classes/index_classes.md +++ b/dev/api/Classes/index_classes.md @@ -278,4 +278,4 @@ title: Classes ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Classes/structColorScheme_1_1rgb.html b/dev/api/Classes/structColorScheme_1_1rgb.html index 29b161ae81..08e0928ba0 100644 --- a/dev/api/Classes/structColorScheme_1_1rgb.html +++ b/dev/api/Classes/structColorScheme_1_1rgb.html @@ -2528,7 +2528,7 @@

    variable b

    float b;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structColorScheme_1_1rgb.md b/dev/api/Classes/structColorScheme_1_1rgb.md index ca0279050e..36e95688aa 100644 --- a/dev/api/Classes/structColorScheme_1_1rgb.md +++ b/dev/api/Classes/structColorScheme_1_1rgb.md @@ -69,4 +69,4 @@ float b; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.html b/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.html index 6d538b9bd4..023da6d44b 100644 --- a/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.html +++ b/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.html @@ -2450,7 +2450,7 @@

    variable node

    int node;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.md b/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.md index e784af3ba0..4f574d9231 100644 --- a/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.md +++ b/dev/api/Classes/structFECVDDecimationModifier_1_1EDGE.md @@ -34,4 +34,4 @@ int node; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structFEFillHole_1_1FACE.html b/dev/api/Classes/structFEFillHole_1_1FACE.html index 924677edd0..b1d05cd3ce 100644 --- a/dev/api/Classes/structFEFillHole_1_1FACE.html +++ b/dev/api/Classes/structFEFillHole_1_1FACE.html @@ -2450,7 +2450,7 @@

    variable n

    int n;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Classes/structFEFillHole_1_1FACE.md b/dev/api/Classes/structFEFillHole_1_1FACE.md index 91d87d1090..871b93ac46 100644 --- a/dev/api/Classes/structFEFillHole_1_1FACE.md +++ b/dev/api/Classes/structFEFillHole_1_1FACE.md @@ -34,4 +34,4 @@ int n; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structIntersection.html b/dev/api/Classes/structIntersection.html index edfb04ae03..6772e4fa94 100644 --- a/dev/api/Classes/structIntersection.html +++ b/dev/api/Classes/structIntersection.html @@ -2478,7 +2478,7 @@

    variable m_faceIndex

    int m_faceIndex;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structIntersection.md b/dev/api/Classes/structIntersection.md index 998bd94741..23000605ee 100644 --- a/dev/api/Classes/structIntersection.md +++ b/dev/api/Classes/structIntersection.md @@ -50,4 +50,4 @@ int m_faceIndex; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structQuad.html b/dev/api/Classes/structQuad.html index 96542e36f0..4f57e07493 100644 --- a/dev/api/Classes/structQuad.html +++ b/dev/api/Classes/structQuad.html @@ -2478,7 +2478,7 @@

    variable r3

    vec3d r3;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structQuad.md b/dev/api/Classes/structQuad.md index ace5c44a45..7518b586af 100644 --- a/dev/api/Classes/structQuad.md +++ b/dev/api/Classes/structQuad.md @@ -50,4 +50,4 @@ vec3d r3; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structRay.html b/dev/api/Classes/structRay.html index 0b21e2b0fd..482a4f63f1 100644 --- a/dev/api/Classes/structRay.html +++ b/dev/api/Classes/structRay.html @@ -2450,7 +2450,7 @@

    variable direction

    vec3d direction;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structRay.md b/dev/api/Classes/structRay.md index ffad951535..7d1f02918f 100644 --- a/dev/api/Classes/structRay.md +++ b/dev/api/Classes/structRay.md @@ -34,4 +34,4 @@ vec3d direction; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structSimilarityTransform3D.html b/dev/api/Classes/structSimilarityTransform3D.html index d2bbfd77fa..794779e89c 100644 --- a/dev/api/Classes/structSimilarityTransform3D.html +++ b/dev/api/Classes/structSimilarityTransform3D.html @@ -2464,7 +2464,7 @@

    variable translation

    vnl_vector_fixed< double, 3 > translation;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structSimilarityTransform3D.md b/dev/api/Classes/structSimilarityTransform3D.md index 91ac70d23d..1611c7b983 100644 --- a/dev/api/Classes/structSimilarityTransform3D.md +++ b/dev/api/Classes/structSimilarityTransform3D.md @@ -42,4 +42,4 @@ vnl_vector_fixed< double, 3 > translation; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structTriangle.html b/dev/api/Classes/structTriangle.html index 1509f374d1..b1e94b339a 100644 --- a/dev/api/Classes/structTriangle.html +++ b/dev/api/Classes/structTriangle.html @@ -2478,7 +2478,7 @@

    variable fn

    vec3d fn;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structTriangle.md b/dev/api/Classes/structTriangle.md index 1a0e60dd87..e33f3a74b7 100644 --- a/dev/api/Classes/structTriangle.md +++ b/dev/api/Classes/structTriangle.md @@ -50,4 +50,4 @@ vec3d fn; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structVTKEXPORT.html b/dev/api/Classes/structVTKEXPORT.html index 73f7ca572b..0f91ac49de 100644 --- a/dev/api/Classes/structVTKEXPORT.html +++ b/dev/api/Classes/structVTKEXPORT.html @@ -2450,7 +2450,7 @@

    variable bscalar_data

    bool bscalar_data;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structVTKEXPORT.md b/dev/api/Classes/structVTKEXPORT.md index bd905b4b85..b90b064b15 100644 --- a/dev/api/Classes/structVTKEXPORT.md +++ b/dev/api/Classes/structVTKEXPORT.md @@ -34,4 +34,4 @@ bool bscalar_data; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html b/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html index c60d7616af..e26a5dd742 100644 --- a/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html +++ b/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html @@ -2456,7 +2456,7 @@

    function format

    ) const
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md b/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md index 60c2a83cb6..c2d297713b 100644 --- a/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md +++ b/dev/api/Classes/structfmt_1_1formatter_3_01QString_01_4.md @@ -40,4 +40,4 @@ inline auto format( ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html b/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html index a3eb6b8ef7..ab2fc57154 100644 --- a/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html +++ b/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html @@ -2529,7 +2529,7 @@

    variable dom

    int dom;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md b/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md index 737dc3afa3..70db71f1fb 100644 --- a/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md +++ b/dev/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.md @@ -70,4 +70,4 @@ int dom; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.html b/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.html index b749e16c3f..f3a3ae1adf 100644 --- a/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.html +++ b/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.html @@ -2633,7 +2633,7 @@

    variable data_full

    std::array< Eigen::VectorXd, 3 > data_full;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.md b/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.md index 0925e91efe..62b095a8b4 100644 --- a/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.md +++ b/dev/api/Classes/structshapeworks_1_1MeshGeoEntry.md @@ -109,4 +109,4 @@ std::array< Eigen::VectorXd, 3 > data_full; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html b/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html index d6af4d9fa8..f6181caa87 100644 --- a/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html +++ b/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html @@ -2557,7 +2557,7 @@

    variable dist

    boost::normal_distribution dist;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md b/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md index 3c3c66c8a6..9086e6eb62 100644 --- a/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md +++ b/dev/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.md @@ -86,4 +86,4 @@ boost::normal_distribution dist; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html b/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html index 812f85daf0..6c4b924a77 100644 --- a/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html +++ b/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html @@ -2579,7 +2579,7 @@

    variable PositionRemoveEvent

    bool PositionRemoveEvent;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md b/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md index bec023b301..94c9649006 100644 --- a/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md +++ b/dev/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.md @@ -101,4 +101,4 @@ bool PositionRemoveEvent; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html b/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html index 0cdba736f8..67ac08311c 100644 --- a/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html +++ b/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html @@ -2604,7 +2604,7 @@

    variable Index

    unsigned int Index;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md b/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md index f11b356fd4..903ed889f0 100644 --- a/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md +++ b/dev/api/Classes/structshapeworks_1_1ParticlePointIndexPair.md @@ -107,4 +107,4 @@ unsigned int Index; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html b/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html index 84f958d1aa..6cf562de5c 100644 --- a/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html +++ b/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html @@ -2632,7 +2632,7 @@

    variable NodePointer

    NodePointerType NodePointer;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md b/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md index e1fc900a2e..1ef4527605 100644 --- a/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md +++ b/dev/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.md @@ -123,4 +123,4 @@ NodePointerType NodePointer; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1Reconstruction.html b/dev/api/Classes/structshapeworks_1_1Reconstruction.html index 973b926540..829389ec32 100644 --- a/dev/api/Classes/structshapeworks_1_1Reconstruction.html +++ b/dev/api/Classes/structshapeworks_1_1Reconstruction.html @@ -2464,7 +2464,7 @@

    variable rec

    Eigen::MatrixXd rec;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1Reconstruction.md b/dev/api/Classes/structshapeworks_1_1Reconstruction.md index a584bb6b7b..ef740e06c0 100644 --- a/dev/api/Classes/structshapeworks_1_1Reconstruction.md +++ b/dev/api/Classes/structshapeworks_1_1Reconstruction.md @@ -42,4 +42,4 @@ Eigen::MatrixXd rec; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html b/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html index 14e9b6ab4b..13fafde0f1 100644 --- a/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html +++ b/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html @@ -2477,7 +2477,7 @@

    variable c

    vnl_vector_fixed< double, 3 > c;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md b/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md index 17e3be9a63..380c98c792 100644 --- a/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md +++ b/dev/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.md @@ -54,4 +54,4 @@ vnl_vector_fixed< double, 3 > c; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html b/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html index b75ee8796c..fc955e6688 100644 --- a/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html +++ b/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html @@ -2463,7 +2463,7 @@

    variable radius

    double radius;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md b/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md index f80769d8b1..0d1bb803fd 100644 --- a/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md +++ b/dev/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.md @@ -46,4 +46,4 @@ double radius; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1SharedCommandData.html b/dev/api/Classes/structshapeworks_1_1SharedCommandData.html index 09ecef50d7..e86cc89d01 100644 --- a/dev/api/Classes/structshapeworks_1_1SharedCommandData.html +++ b/dev/api/Classes/structshapeworks_1_1SharedCommandData.html @@ -2566,7 +2566,7 @@

    variable field

    Field field;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1SharedCommandData.md b/dev/api/Classes/structshapeworks_1_1SharedCommandData.md index 34266b0182..ee5e01994f 100644 --- a/dev/api/Classes/structshapeworks_1_1SharedCommandData.md +++ b/dev/api/Classes/structshapeworks_1_1SharedCommandData.md @@ -89,4 +89,4 @@ Field field; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1powstruct.html b/dev/api/Classes/structshapeworks_1_1powstruct.html index 7981ced970..7210981133 100644 --- a/dev/api/Classes/structshapeworks_1_1powstruct.html +++ b/dev/api/Classes/structshapeworks_1_1powstruct.html @@ -2451,7 +2451,7 @@

    variable c

    static const int c = a * powstruct<a, b - 1>::c;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1powstruct.md b/dev/api/Classes/structshapeworks_1_1powstruct.md index fbf6a04440..36b3cd2a31 100644 --- a/dev/api/Classes/structshapeworks_1_1powstruct.md +++ b/dev/api/Classes/structshapeworks_1_1powstruct.md @@ -40,4 +40,4 @@ static const int c = a * powstruct::c; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html b/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html index 89462b7d62..758560cd7c 100644 --- a/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html +++ b/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html @@ -2448,7 +2448,7 @@

    variable c

    static const int c = 1;
     

    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md b/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md index fa214c3be2..8eae3e45e1 100644 --- a/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md +++ b/dev/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.md @@ -33,4 +33,4 @@ static const int c = 1; ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Files/AnalysisTool_8h.html b/dev/api/Files/AnalysisTool_8h.html index e556865e8c..8af03397da 100644 --- a/dev/api/Files/AnalysisTool_8h.html +++ b/dev/api/Files/AnalysisTool_8h.html @@ -2710,7 +2710,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/AnalysisTool_8h.md b/dev/api/Files/AnalysisTool_8h.md index ed24b10f48..e34c8f4f15 100644 --- a/dev/api/Files/AnalysisTool_8h.md +++ b/dev/api/Files/AnalysisTool_8h.md @@ -299,4 +299,4 @@ class AnalysisTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/AnalysisUtils_8h.html b/dev/api/Files/AnalysisUtils_8h.html index dcb38a20d5..a3308809f3 100644 --- a/dev/api/Files/AnalysisUtils_8h.html +++ b/dev/api/Files/AnalysisUtils_8h.html @@ -2458,7 +2458,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/AnalysisUtils_8h.md b/dev/api/Files/AnalysisUtils_8h.md index 15f526830d..6efb663d64 100644 --- a/dev/api/Files/AnalysisUtils_8h.md +++ b/dev/api/Files/AnalysisUtils_8h.md @@ -47,4 +47,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Analyze_8h.html b/dev/api/Files/Analyze_8h.html index e067894ca1..1aafc5a3e2 100644 --- a/dev/api/Files/Analyze_8h.html +++ b/dev/api/Files/Analyze_8h.html @@ -2518,7 +2518,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Analyze_8h.md b/dev/api/Files/Analyze_8h.md index 446c2eacea..a257372aac 100644 --- a/dev/api/Files/Analyze_8h.md +++ b/dev/api/Files/Analyze_8h.md @@ -107,4 +107,4 @@ class Analyze { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ColorMap_8h.html b/dev/api/Files/ColorMap_8h.html index 8f09775547..a700d4df24 100644 --- a/dev/api/Files/ColorMap_8h.html +++ b/dev/api/Files/ColorMap_8h.html @@ -2501,7 +2501,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ColorMap_8h.md b/dev/api/Files/ColorMap_8h.md index 06759db9fb..f7bfe7324b 100644 --- a/dev/api/Files/ColorMap_8h.md +++ b/dev/api/Files/ColorMap_8h.md @@ -87,4 +87,4 @@ class ColorMaps : public std::vector { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ColorSchemes_8h.html b/dev/api/Files/ColorSchemes_8h.html index af146039d6..cd53dd407e 100644 --- a/dev/api/Files/ColorSchemes_8h.html +++ b/dev/api/Files/ColorSchemes_8h.html @@ -2551,7 +2551,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ColorSchemes_8h.md b/dev/api/Files/ColorSchemes_8h.md index 517daaccf1..6c6d77577d 100644 --- a/dev/api/Files/ColorSchemes_8h.md +++ b/dev/api/Files/ColorSchemes_8h.md @@ -148,4 +148,4 @@ class ColorSchemes : public std::vector { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Command_8h.html b/dev/api/Files/Command_8h.html index deaeae5585..6a1e369abd 100644 --- a/dev/api/Files/Command_8h.html +++ b/dev/api/Files/Command_8h.html @@ -2695,7 +2695,7 @@

    Source code

    std::ostream& operator<<(std::ostream& os, const shapeworks::Command &cmd);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Command_8h.md b/dev/api/Files/Command_8h.md index 9fcbb2f874..718ae03de4 100644 --- a/dev/api/Files/Command_8h.md +++ b/dev/api/Files/Command_8h.md @@ -198,4 +198,4 @@ std::ostream& operator<<(std::ostream& os, const shapeworks::Command &cmd); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Commands_8h.html b/dev/api/Files/Commands_8h.html index e8b5514569..6a152a8102 100644 --- a/dev/api/Files/Commands_8h.html +++ b/dev/api/Files/Commands_8h.html @@ -2524,7 +2524,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Commands_8h.md b/dev/api/Files/Commands_8h.md index 55aaad0eeb..83f22ec5df 100644 --- a/dev/api/Files/Commands_8h.md +++ b/dev/api/Files/Commands_8h.md @@ -129,4 +129,4 @@ COMMAND_DECLARE(ConvertProjectCommand, ProjectCommandGroup); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/CompareWidget_8h.html b/dev/api/Files/CompareWidget_8h.html index 9c046fb850..c805c9b404 100644 --- a/dev/api/Files/CompareWidget_8h.html +++ b/dev/api/Files/CompareWidget_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/CompareWidget_8h.md b/dev/api/Files/CompareWidget_8h.md index f5d6462b07..bf741f2347 100644 --- a/dev/api/Files/CompareWidget_8h.md +++ b/dev/api/Files/CompareWidget_8h.md @@ -65,4 +65,4 @@ class CompareWidget : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ConstraintType_8h.html b/dev/api/Files/ConstraintType_8h.html index 2c4e9ce9bb..e448b61fd0 100644 --- a/dev/api/Files/ConstraintType_8h.html +++ b/dev/api/Files/ConstraintType_8h.html @@ -2475,7 +2475,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ConstraintType_8h.md b/dev/api/Files/ConstraintType_8h.md index c5aaef9a13..3b1bb7715d 100644 --- a/dev/api/Files/ConstraintType_8h.md +++ b/dev/api/Files/ConstraintType_8h.md @@ -49,4 +49,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Constraint_8h.html b/dev/api/Files/Constraint_8h.html index 629ea0cd02..71ddff469e 100644 --- a/dev/api/Files/Constraint_8h.html +++ b/dev/api/Files/Constraint_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Constraint_8h.md b/dev/api/Files/Constraint_8h.md index b21b42cab3..e5968060b3 100644 --- a/dev/api/Files/Constraint_8h.md +++ b/dev/api/Files/Constraint_8h.md @@ -67,4 +67,4 @@ class Constraint { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Constraints_8h.html b/dev/api/Files/Constraints_8h.html index 848e052aa0..745aff7d0a 100644 --- a/dev/api/Files/Constraints_8h.html +++ b/dev/api/Files/Constraints_8h.html @@ -2551,7 +2551,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Constraints_8h.md b/dev/api/Files/Constraints_8h.md index bbc3d9ecd5..f1204518c0 100644 --- a/dev/api/Files/Constraints_8h.md +++ b/dev/api/Files/Constraints_8h.md @@ -140,4 +140,4 @@ class Constraints { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ContourDomain_8h.html b/dev/api/Files/ContourDomain_8h.html index 388972997b..039990a3aa 100644 --- a/dev/api/Files/ContourDomain_8h.html +++ b/dev/api/Files/ContourDomain_8h.html @@ -2583,7 +2583,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ContourDomain_8h.md b/dev/api/Files/ContourDomain_8h.md index 55622a6b92..c6c1580797 100644 --- a/dev/api/Files/ContourDomain_8h.md +++ b/dev/api/Files/ContourDomain_8h.md @@ -172,4 +172,4 @@ class ContourDomain : public ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/CorrespondenceFunction_8h.html b/dev/api/Files/CorrespondenceFunction_8h.html index a4d8b1e9a2..13c7f07850 100644 --- a/dev/api/Files/CorrespondenceFunction_8h.html +++ b/dev/api/Files/CorrespondenceFunction_8h.html @@ -2635,7 +2635,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/CorrespondenceFunction_8h.md b/dev/api/Files/CorrespondenceFunction_8h.md index 3234d3ad26..7cd3076425 100644 --- a/dev/api/Files/CorrespondenceFunction_8h.md +++ b/dev/api/Files/CorrespondenceFunction_8h.md @@ -224,4 +224,4 @@ class CorrespondenceFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/CorrespondenceMode_8h.html b/dev/api/Files/CorrespondenceMode_8h.html index 361a2760f6..9c6fee0729 100644 --- a/dev/api/Files/CorrespondenceMode_8h.html +++ b/dev/api/Files/CorrespondenceMode_8h.html @@ -2434,7 +2434,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/CorrespondenceMode_8h.md b/dev/api/Files/CorrespondenceMode_8h.md index 085c6bdaff..672624ba07 100644 --- a/dev/api/Files/CorrespondenceMode_8h.md +++ b/dev/api/Files/CorrespondenceMode_8h.md @@ -39,4 +39,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/CurvatureSamplingFunction_8h.html b/dev/api/Files/CurvatureSamplingFunction_8h.html index 270f995811..0822f45b36 100644 --- a/dev/api/Files/CurvatureSamplingFunction_8h.html +++ b/dev/api/Files/CurvatureSamplingFunction_8h.html @@ -2578,7 +2578,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/CurvatureSamplingFunction_8h.md b/dev/api/Files/CurvatureSamplingFunction_8h.md index 9fd2d49a55..d66a27dada 100644 --- a/dev/api/Files/CurvatureSamplingFunction_8h.md +++ b/dev/api/Files/CurvatureSamplingFunction_8h.md @@ -167,4 +167,4 @@ class CurvatureSamplingFunction : public SamplingFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/CustomSlider_8h.html b/dev/api/Files/CustomSlider_8h.html index b9aebf119b..469929323b 100644 --- a/dev/api/Files/CustomSlider_8h.html +++ b/dev/api/Files/CustomSlider_8h.html @@ -2435,7 +2435,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/CustomSlider_8h.md b/dev/api/Files/CustomSlider_8h.md index b7b02ce639..9f004efd67 100644 --- a/dev/api/Files/CustomSlider_8h.md +++ b/dev/api/Files/CustomSlider_8h.md @@ -38,4 +38,4 @@ class CustomSlider : public QSlider { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/CustomSurfaceReconstructionFilter_8h.html b/dev/api/Files/CustomSurfaceReconstructionFilter_8h.html index 18ab0eee05..73a63088df 100644 --- a/dev/api/Files/CustomSurfaceReconstructionFilter_8h.html +++ b/dev/api/Files/CustomSurfaceReconstructionFilter_8h.html @@ -2498,7 +2498,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/CustomSurfaceReconstructionFilter_8h.md b/dev/api/Files/CustomSurfaceReconstructionFilter_8h.md index 29442f5104..c633715a22 100644 --- a/dev/api/Files/CustomSurfaceReconstructionFilter_8h.md +++ b/dev/api/Files/CustomSurfaceReconstructionFilter_8h.md @@ -101,4 +101,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/DataTool_8h.html b/dev/api/Files/DataTool_8h.html index ebf3c6654e..cf91fd3b90 100644 --- a/dev/api/Files/DataTool_8h.html +++ b/dev/api/Files/DataTool_8h.html @@ -2525,7 +2525,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/DataTool_8h.md b/dev/api/Files/DataTool_8h.md index f5c0ec7c7d..c947b458ec 100644 --- a/dev/api/Files/DataTool_8h.md +++ b/dev/api/Files/DataTool_8h.md @@ -114,4 +114,4 @@ class DataTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/DeepSSMJob_8h.html b/dev/api/Files/DeepSSMJob_8h.html index 4c7d4b6c6e..57750b3c2f 100644 --- a/dev/api/Files/DeepSSMJob_8h.html +++ b/dev/api/Files/DeepSSMJob_8h.html @@ -2489,7 +2489,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/DeepSSMJob_8h.md b/dev/api/Files/DeepSSMJob_8h.md index e4a0a6b444..cf26030e3d 100644 --- a/dev/api/Files/DeepSSMJob_8h.md +++ b/dev/api/Files/DeepSSMJob_8h.md @@ -78,4 +78,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/DeepSSMParameters_8h.html b/dev/api/Files/DeepSSMParameters_8h.html index e56f11649b..719dfa7227 100644 --- a/dev/api/Files/DeepSSMParameters_8h.html +++ b/dev/api/Files/DeepSSMParameters_8h.html @@ -2524,7 +2524,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/DeepSSMParameters_8h.md b/dev/api/Files/DeepSSMParameters_8h.md index 721835b3e5..634e690875 100644 --- a/dev/api/Files/DeepSSMParameters_8h.md +++ b/dev/api/Files/DeepSSMParameters_8h.md @@ -113,4 +113,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/DeepSSMTool_8h.html b/dev/api/Files/DeepSSMTool_8h.html index d321a71515..1cd8d841a6 100644 --- a/dev/api/Files/DeepSSMTool_8h.html +++ b/dev/api/Files/DeepSSMTool_8h.html @@ -2546,7 +2546,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/DeepSSMTool_8h.md b/dev/api/Files/DeepSSMTool_8h.md index d02fa047ef..9ab7481a50 100644 --- a/dev/api/Files/DeepSSMTool_8h.md +++ b/dev/api/Files/DeepSSMTool_8h.md @@ -135,4 +135,4 @@ class DeepSSMTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/DisentangledCorrespondenceFunction_8h.html b/dev/api/Files/DisentangledCorrespondenceFunction_8h.html index 4de0cdfab1..283a6ec22e 100644 --- a/dev/api/Files/DisentangledCorrespondenceFunction_8h.html +++ b/dev/api/Files/DisentangledCorrespondenceFunction_8h.html @@ -2638,7 +2638,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/DisentangledCorrespondenceFunction_8h.md b/dev/api/Files/DisentangledCorrespondenceFunction_8h.md index 1337a500fa..6b9fa9b3ea 100644 --- a/dev/api/Files/DisentangledCorrespondenceFunction_8h.md +++ b/dev/api/Files/DisentangledCorrespondenceFunction_8h.md @@ -227,4 +227,4 @@ class DisentangledCorrespondenceFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/DomainType_8h.html b/dev/api/Files/DomainType_8h.html index bba5bfe1ce..f73c83dec9 100644 --- a/dev/api/Files/DomainType_8h.html +++ b/dev/api/Files/DomainType_8h.html @@ -2476,7 +2476,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/DomainType_8h.md b/dev/api/Files/DomainType_8h.md index bfd085ac53..f549b59645 100644 --- a/dev/api/Files/DomainType_8h.md +++ b/dev/api/Files/DomainType_8h.md @@ -50,4 +50,4 @@ namespace shapeworks { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/DualVectorFunction_8h.html b/dev/api/Files/DualVectorFunction_8h.html index 9c50cc3fc7..15e512b77a 100644 --- a/dev/api/Files/DualVectorFunction_8h.html +++ b/dev/api/Files/DualVectorFunction_8h.html @@ -2808,7 +2808,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/DualVectorFunction_8h.md b/dev/api/Files/DualVectorFunction_8h.md index 32bb5285d9..8fe5ec2200 100644 --- a/dev/api/Files/DualVectorFunction_8h.md +++ b/dev/api/Files/DualVectorFunction_8h.md @@ -397,4 +397,4 @@ class DualVectorFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/EigenUtils_8h.html b/dev/api/Files/EigenUtils_8h.html index bf582fc6e0..738485bd1b 100644 --- a/dev/api/Files/EigenUtils_8h.html +++ b/dev/api/Files/EigenUtils_8h.html @@ -2506,7 +2506,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/EigenUtils_8h.md b/dev/api/Files/EigenUtils_8h.md index 3a9e54fde0..0e28223430 100644 --- a/dev/api/Files/EigenUtils_8h.md +++ b/dev/api/Files/EigenUtils_8h.md @@ -95,4 +95,4 @@ class EigenUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/EvaluationUtil_8h.html b/dev/api/Files/EvaluationUtil_8h.html index 96b0b4a84f..74d1854635 100644 --- a/dev/api/Files/EvaluationUtil_8h.html +++ b/dev/api/Files/EvaluationUtil_8h.html @@ -2522,7 +2522,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/EvaluationUtil_8h.md b/dev/api/Files/EvaluationUtil_8h.md index c49f8fb23e..a7cb1b1dc7 100644 --- a/dev/api/Files/EvaluationUtil_8h.md +++ b/dev/api/Files/EvaluationUtil_8h.md @@ -108,4 +108,4 @@ void SaveReconstructions(std::vector &reconstructions, const std ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ExcelProjectReader_8h.html b/dev/api/Files/ExcelProjectReader_8h.html index cb4096cae3..51c195e03f 100644 --- a/dev/api/Files/ExcelProjectReader_8h.html +++ b/dev/api/Files/ExcelProjectReader_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ExcelProjectReader_8h.md b/dev/api/Files/ExcelProjectReader_8h.md index 22d53a9d16..9035ab8c60 100644 --- a/dev/api/Files/ExcelProjectReader_8h.md +++ b/dev/api/Files/ExcelProjectReader_8h.md @@ -55,4 +55,4 @@ class ExcelProjectReader : public ProjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ExcelProjectWriter_8h.html b/dev/api/Files/ExcelProjectWriter_8h.html index fb7befe8c2..5c45414939 100644 --- a/dev/api/Files/ExcelProjectWriter_8h.html +++ b/dev/api/Files/ExcelProjectWriter_8h.html @@ -2455,7 +2455,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ExcelProjectWriter_8h.md b/dev/api/Files/ExcelProjectWriter_8h.md index cd042fc92c..00f435e8d9 100644 --- a/dev/api/Files/ExcelProjectWriter_8h.md +++ b/dev/api/Files/ExcelProjectWriter_8h.md @@ -44,4 +44,4 @@ class ExcelProjectWriter { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Exception_8h.html b/dev/api/Files/Exception_8h.html index 48babe752e..92a8fb23f6 100644 --- a/dev/api/Files/Exception_8h.html +++ b/dev/api/Files/Exception_8h.html @@ -2456,7 +2456,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Exception_8h.md b/dev/api/Files/Exception_8h.md index df328ff9a1..0bc4daa10e 100644 --- a/dev/api/Files/Exception_8h.md +++ b/dev/api/Files/Exception_8h.md @@ -45,4 +45,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Executable_8h.html b/dev/api/Files/Executable_8h.html index c2e88bebff..679a9f4d84 100644 --- a/dev/api/Files/Executable_8h.html +++ b/dev/api/Files/Executable_8h.html @@ -2469,7 +2469,7 @@

    Source code

    }; // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Executable_8h.md b/dev/api/Files/Executable_8h.md index ef4b4dafc2..d6125b7a2c 100644 --- a/dev/api/Files/Executable_8h.md +++ b/dev/api/Files/Executable_8h.md @@ -58,4 +58,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ExportImageDialog_8h.html b/dev/api/Files/ExportImageDialog_8h.html index d181c3990d..406945fbd9 100644 --- a/dev/api/Files/ExportImageDialog_8h.html +++ b/dev/api/Files/ExportImageDialog_8h.html @@ -2487,7 +2487,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ExportImageDialog_8h.md b/dev/api/Files/ExportImageDialog_8h.md index 919a3f3799..5c91912f80 100644 --- a/dev/api/Files/ExportImageDialog_8h.md +++ b/dev/api/Files/ExportImageDialog_8h.md @@ -76,4 +76,4 @@ class ExportImageDialog : public QDialog { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ExportUtils_8h.html b/dev/api/Files/ExportUtils_8h.html index c304930808..176eaddd18 100644 --- a/dev/api/Files/ExportUtils_8h.html +++ b/dev/api/Files/ExportUtils_8h.html @@ -2464,7 +2464,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ExportUtils_8h.md b/dev/api/Files/ExportUtils_8h.md index 5b81873967..299a2d9f35 100644 --- a/dev/api/Files/ExportUtils_8h.md +++ b/dev/api/Files/ExportUtils_8h.md @@ -54,4 +54,4 @@ class ExportUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEAreaCoverage_8h.html b/dev/api/Files/FEAreaCoverage_8h.html index c34fbf86e0..29b97b9dca 100644 --- a/dev/api/Files/FEAreaCoverage_8h.html +++ b/dev/api/Files/FEAreaCoverage_8h.html @@ -2513,7 +2513,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEAreaCoverage_8h.md b/dev/api/Files/FEAreaCoverage_8h.md index 7f83757138..30bc58b292 100644 --- a/dev/api/Files/FEAreaCoverage_8h.md +++ b/dev/api/Files/FEAreaCoverage_8h.md @@ -102,4 +102,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEAutoMesher_8h.html b/dev/api/Files/FEAutoMesher_8h.html index 544bb6b964..6e6ddb4ce4 100644 --- a/dev/api/Files/FEAutoMesher_8h.html +++ b/dev/api/Files/FEAutoMesher_8h.html @@ -2451,7 +2451,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEAutoMesher_8h.md b/dev/api/Files/FEAutoMesher_8h.md index 2db27d2b4e..1d4f8faa0e 100644 --- a/dev/api/Files/FEAutoMesher_8h.md +++ b/dev/api/Files/FEAutoMesher_8h.md @@ -54,4 +54,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FECVDDecimationModifier_8h.html b/dev/api/Files/FECVDDecimationModifier_8h.html index 94c86a5c86..fbb9e805c7 100644 --- a/dev/api/Files/FECVDDecimationModifier_8h.html +++ b/dev/api/Files/FECVDDecimationModifier_8h.html @@ -2498,7 +2498,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FECVDDecimationModifier_8h.md b/dev/api/Files/FECVDDecimationModifier_8h.md index 5a3a68f33a..4465a5b999 100644 --- a/dev/api/Files/FECVDDecimationModifier_8h.md +++ b/dev/api/Files/FECVDDecimationModifier_8h.md @@ -101,4 +101,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FECoreMesh_8h.html b/dev/api/Files/FECoreMesh_8h.html index 71c5f0fd0e..2d3f5a5379 100644 --- a/dev/api/Files/FECoreMesh_8h.html +++ b/dev/api/Files/FECoreMesh_8h.html @@ -2464,7 +2464,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FECoreMesh_8h.md b/dev/api/Files/FECoreMesh_8h.md index 855f929bcb..8c5b1e4a41 100644 --- a/dev/api/Files/FECoreMesh_8h.md +++ b/dev/api/Files/FECoreMesh_8h.md @@ -67,4 +67,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEElement_8h.html b/dev/api/Files/FEElement_8h.html index 99640c42f5..6b00f7b637 100644 --- a/dev/api/Files/FEElement_8h.html +++ b/dev/api/Files/FEElement_8h.html @@ -2969,7 +2969,7 @@

    Source code

    #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_)
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEElement_8h.md b/dev/api/Files/FEElement_8h.md index 6a438a571c..17d570fdc5 100644 --- a/dev/api/Files/FEElement_8h.md +++ b/dev/api/Files/FEElement_8h.md @@ -433,4 +433,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEFillHole_8h.html b/dev/api/Files/FEFillHole_8h.html index 1fa82d5dc4..06cbae6e41 100644 --- a/dev/api/Files/FEFillHole_8h.html +++ b/dev/api/Files/FEFillHole_8h.html @@ -2514,7 +2514,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEFillHole_8h.md b/dev/api/Files/FEFillHole_8h.md index 9d942991f5..eaea6427eb 100644 --- a/dev/api/Files/FEFillHole_8h.md +++ b/dev/api/Files/FEFillHole_8h.md @@ -111,4 +111,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEFixMesh_8h.html b/dev/api/Files/FEFixMesh_8h.html index 01d09795d8..948e0d4bf1 100644 --- a/dev/api/Files/FEFixMesh_8h.html +++ b/dev/api/Files/FEFixMesh_8h.html @@ -2449,7 +2449,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEFixMesh_8h.md b/dev/api/Files/FEFixMesh_8h.md index 0dfd348968..91c2a00776 100644 --- a/dev/api/Files/FEFixMesh_8h.md +++ b/dev/api/Files/FEFixMesh_8h.md @@ -52,4 +52,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEMeshSmoothingModifier_8h.html b/dev/api/Files/FEMeshSmoothingModifier_8h.html index 672e361446..d7c6e52638 100644 --- a/dev/api/Files/FEMeshSmoothingModifier_8h.html +++ b/dev/api/Files/FEMeshSmoothingModifier_8h.html @@ -2451,7 +2451,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEMeshSmoothingModifier_8h.md b/dev/api/Files/FEMeshSmoothingModifier_8h.md index e220663fdf..d5a2010929 100644 --- a/dev/api/Files/FEMeshSmoothingModifier_8h.md +++ b/dev/api/Files/FEMeshSmoothingModifier_8h.md @@ -54,4 +54,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEMesh_8h.html b/dev/api/Files/FEMesh_8h.html index c69f0a8004..4fbe630a25 100644 --- a/dev/api/Files/FEMesh_8h.html +++ b/dev/api/Files/FEMesh_8h.html @@ -2856,7 +2856,7 @@

    Source code

    #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_)
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEMesh_8h.md b/dev/api/Files/FEMesh_8h.md index 988c930787..7e8193b145 100644 --- a/dev/api/Files/FEMesh_8h.md +++ b/dev/api/Files/FEMesh_8h.md @@ -346,4 +346,4 @@ double area_triangle(vec3d r[3]); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FENodeElementList_8h.html b/dev/api/Files/FENodeElementList_8h.html index 263f9bac0b..2361489618 100644 --- a/dev/api/Files/FENodeElementList_8h.html +++ b/dev/api/Files/FENodeElementList_8h.html @@ -2446,7 +2446,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FENodeElementList_8h.md b/dev/api/Files/FENodeElementList_8h.md index 123c60a5a1..6ed5774f10 100644 --- a/dev/api/Files/FENodeElementList_8h.md +++ b/dev/api/Files/FENodeElementList_8h.md @@ -49,4 +49,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FENodeFaceList_8h.html b/dev/api/Files/FENodeFaceList_8h.html index 578d9452da..aa6be7b652 100644 --- a/dev/api/Files/FENodeFaceList_8h.html +++ b/dev/api/Files/FENodeFaceList_8h.html @@ -2455,7 +2455,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FENodeFaceList_8h.md b/dev/api/Files/FENodeFaceList_8h.md index 929de49cbd..6f1cc8b59f 100644 --- a/dev/api/Files/FENodeFaceList_8h.md +++ b/dev/api/Files/FENodeFaceList_8h.md @@ -58,4 +58,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FENodeNodeList_8h.html b/dev/api/Files/FENodeNodeList_8h.html index 730f1ba6ab..96dbc4e5e8 100644 --- a/dev/api/Files/FENodeNodeList_8h.html +++ b/dev/api/Files/FENodeNodeList_8h.html @@ -2446,7 +2446,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FENodeNodeList_8h.md b/dev/api/Files/FENodeNodeList_8h.md index 4146a4bc5d..3aac60e278 100644 --- a/dev/api/Files/FENodeNodeList_8h.md +++ b/dev/api/Files/FENodeNodeList_8h.md @@ -49,4 +49,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEVTKExport_8h.html b/dev/api/Files/FEVTKExport_8h.html index 4a495117ed..ce48448617 100644 --- a/dev/api/Files/FEVTKExport_8h.html +++ b/dev/api/Files/FEVTKExport_8h.html @@ -2458,7 +2458,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEVTKExport_8h.md b/dev/api/Files/FEVTKExport_8h.md index 57a4ad8560..6cb7acc4cf 100644 --- a/dev/api/Files/FEVTKExport_8h.md +++ b/dev/api/Files/FEVTKExport_8h.md @@ -58,4 +58,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FEVTKImport_8h.html b/dev/api/Files/FEVTKImport_8h.html index faf7887649..143310013c 100644 --- a/dev/api/Files/FEVTKImport_8h.html +++ b/dev/api/Files/FEVTKImport_8h.html @@ -2453,7 +2453,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FEVTKImport_8h.md b/dev/api/Files/FEVTKImport_8h.md index bd4f1bf118..45f246dbdd 100644 --- a/dev/api/Files/FEVTKImport_8h.md +++ b/dev/api/Files/FEVTKImport_8h.md @@ -56,4 +56,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/FreeFormConstraint_8h.html b/dev/api/Files/FreeFormConstraint_8h.html index 9af50a0878..2c9b77c5ad 100644 --- a/dev/api/Files/FreeFormConstraint_8h.html +++ b/dev/api/Files/FreeFormConstraint_8h.html @@ -2522,7 +2522,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/FreeFormConstraint_8h.md b/dev/api/Files/FreeFormConstraint_8h.md index d50df44b51..99ab366b36 100644 --- a/dev/api/Files/FreeFormConstraint_8h.md +++ b/dev/api/Files/FreeFormConstraint_8h.md @@ -111,4 +111,4 @@ class FreeFormConstraint : public Constraint { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/GenericContainerArray_8h.html b/dev/api/Files/GenericContainerArray_8h.html index 1250ac9471..43ab72c76a 100644 --- a/dev/api/Files/GenericContainerArray_8h.html +++ b/dev/api/Files/GenericContainerArray_8h.html @@ -2505,7 +2505,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/GenericContainerArray_8h.md b/dev/api/Files/GenericContainerArray_8h.md index c5fdddbef5..4bc3cd1cd4 100644 --- a/dev/api/Files/GenericContainerArray_8h.md +++ b/dev/api/Files/GenericContainerArray_8h.md @@ -94,4 +94,4 @@ class GenericContainerArray : public std::vector::P ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/GenericContainer_8h.html b/dev/api/Files/GenericContainer_8h.html index 2e282e038d..aa8e741f74 100644 --- a/dev/api/Files/GenericContainer_8h.html +++ b/dev/api/Files/GenericContainer_8h.html @@ -2492,7 +2492,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/GenericContainer_8h.md b/dev/api/Files/GenericContainer_8h.md index b9a27a8e9e..0f8abafb34 100644 --- a/dev/api/Files/GenericContainer_8h.md +++ b/dev/api/Files/GenericContainer_8h.md @@ -81,4 +81,4 @@ class GenericContainer : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/GradientDescentOptimizer_8h.html b/dev/api/Files/GradientDescentOptimizer_8h.html index d41ac85db9..89d954793a 100644 --- a/dev/api/Files/GradientDescentOptimizer_8h.html +++ b/dev/api/Files/GradientDescentOptimizer_8h.html @@ -2552,7 +2552,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/GradientDescentOptimizer_8h.md b/dev/api/Files/GradientDescentOptimizer_8h.md index 43b90cb7cf..a00ac209a1 100644 --- a/dev/api/Files/GradientDescentOptimizer_8h.md +++ b/dev/api/Files/GradientDescentOptimizer_8h.md @@ -141,4 +141,4 @@ class GradientDescentOptimizer : public itk::Object { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/GroomParameters_8h.html b/dev/api/Files/GroomParameters_8h.html index 28112d9254..aba29e6c9f 100644 --- a/dev/api/Files/GroomParameters_8h.html +++ b/dev/api/Files/GroomParameters_8h.html @@ -2581,7 +2581,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/GroomParameters_8h.md b/dev/api/Files/GroomParameters_8h.md index da1248dead..50029e2d92 100644 --- a/dev/api/Files/GroomParameters_8h.md +++ b/dev/api/Files/GroomParameters_8h.md @@ -170,4 +170,4 @@ class GroomParameters { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/GroomTool_8h.html b/dev/api/Files/GroomTool_8h.html index 43a8a2fc25..494ef43db6 100644 --- a/dev/api/Files/GroomTool_8h.html +++ b/dev/api/Files/GroomTool_8h.html @@ -2543,7 +2543,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/GroomTool_8h.md b/dev/api/Files/GroomTool_8h.md index 7c5069c4e1..a05d205d47 100644 --- a/dev/api/Files/GroomTool_8h.md +++ b/dev/api/Files/GroomTool_8h.md @@ -132,4 +132,4 @@ class GroomTool : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Groom_8h.html b/dev/api/Files/Groom_8h.html index 62b08b26f4..7771f4d97a 100644 --- a/dev/api/Files/Groom_8h.html +++ b/dev/api/Files/Groom_8h.html @@ -2523,7 +2523,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Groom_8h.md b/dev/api/Files/Groom_8h.md index b4c6a46101..7553a5f1a5 100644 --- a/dev/api/Files/Groom_8h.md +++ b/dev/api/Files/Groom_8h.md @@ -112,4 +112,4 @@ class Groom { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/GroupPvalueJob_8h.html b/dev/api/Files/GroupPvalueJob_8h.html index e66483cda2..e2f5c3e65b 100644 --- a/dev/api/Files/GroupPvalueJob_8h.html +++ b/dev/api/Files/GroupPvalueJob_8h.html @@ -2465,7 +2465,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/GroupPvalueJob_8h.md b/dev/api/Files/GroupPvalueJob_8h.md index 324b612f10..c2846c2fff 100644 --- a/dev/api/Files/GroupPvalueJob_8h.md +++ b/dev/api/Files/GroupPvalueJob_8h.md @@ -54,4 +54,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ImageDomainWithCurvature_8h.html b/dev/api/Files/ImageDomainWithCurvature_8h.html index 5508ce497f..46e4de4fdf 100644 --- a/dev/api/Files/ImageDomainWithCurvature_8h.html +++ b/dev/api/Files/ImageDomainWithCurvature_8h.html @@ -2548,7 +2548,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ImageDomainWithCurvature_8h.md b/dev/api/Files/ImageDomainWithCurvature_8h.md index 33f64cbb65..05c1fedfb8 100644 --- a/dev/api/Files/ImageDomainWithCurvature_8h.md +++ b/dev/api/Files/ImageDomainWithCurvature_8h.md @@ -137,4 +137,4 @@ class ImageDomainWithCurvature : public ImageDomainWithGradN { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ImageDomainWithGradN_8h.html b/dev/api/Files/ImageDomainWithGradN_8h.html index feb43605fe..696061fb2a 100644 --- a/dev/api/Files/ImageDomainWithGradN_8h.html +++ b/dev/api/Files/ImageDomainWithGradN_8h.html @@ -2519,7 +2519,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ImageDomainWithGradN_8h.md b/dev/api/Files/ImageDomainWithGradN_8h.md index c2e6e36463..4984cf0b7c 100644 --- a/dev/api/Files/ImageDomainWithGradN_8h.md +++ b/dev/api/Files/ImageDomainWithGradN_8h.md @@ -108,4 +108,4 @@ class ImageDomainWithGradN : public ImageDomainWithGradients { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ImageDomainWithGradients_8h.html b/dev/api/Files/ImageDomainWithGradients_8h.html index 4b6235eebd..282f99144d 100644 --- a/dev/api/Files/ImageDomainWithGradients_8h.html +++ b/dev/api/Files/ImageDomainWithGradients_8h.html @@ -2526,7 +2526,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ImageDomainWithGradients_8h.md b/dev/api/Files/ImageDomainWithGradients_8h.md index 0e208f1570..d2a5f17055 100644 --- a/dev/api/Files/ImageDomainWithGradients_8h.md +++ b/dev/api/Files/ImageDomainWithGradients_8h.md @@ -115,4 +115,4 @@ class ImageDomainWithGradients : public ImageDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ImageDomain_8h.html b/dev/api/Files/ImageDomain_8h.html index e2a51202fe..293e25268e 100644 --- a/dev/api/Files/ImageDomain_8h.html +++ b/dev/api/Files/ImageDomain_8h.html @@ -2689,7 +2689,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ImageDomain_8h.md b/dev/api/Files/ImageDomain_8h.md index 8186bd8aa8..5e7f08a375 100644 --- a/dev/api/Files/ImageDomain_8h.md +++ b/dev/api/Files/ImageDomain_8h.md @@ -278,4 +278,4 @@ class ImageDomain : public ParticleRegionDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ImageLabel_8h.html b/dev/api/Files/ImageLabel_8h.html index 63490d8a1e..a7fbc576ba 100644 --- a/dev/api/Files/ImageLabel_8h.html +++ b/dev/api/Files/ImageLabel_8h.html @@ -2464,7 +2464,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ImageLabel_8h.md b/dev/api/Files/ImageLabel_8h.md index cfa4ec877b..6af94c4782 100644 --- a/dev/api/Files/ImageLabel_8h.md +++ b/dev/api/Files/ImageLabel_8h.md @@ -53,4 +53,4 @@ class ImageLabel : public QLabel { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ImageUtils_8h.html b/dev/api/Files/ImageUtils_8h.html index 658abbe217..0878f94aaa 100644 --- a/dev/api/Files/ImageUtils_8h.html +++ b/dev/api/Files/ImageUtils_8h.html @@ -2467,7 +2467,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ImageUtils_8h.md b/dev/api/Files/ImageUtils_8h.md index 073d1d7791..02a3cf4795 100644 --- a/dev/api/Files/ImageUtils_8h.md +++ b/dev/api/Files/ImageUtils_8h.md @@ -56,4 +56,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Image_8h.html b/dev/api/Files/Image_8h.html index b4ee22f17a..b76993ff1a 100644 --- a/dev/api/Files/Image_8h.html +++ b/dev/api/Files/Image_8h.html @@ -2674,7 +2674,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Image_8h.md b/dev/api/Files/Image_8h.md index 453a53f693..593b636e7f 100644 --- a/dev/api/Files/Image_8h.md +++ b/dev/api/Files/Image_8h.md @@ -263,4 +263,4 @@ Image& operator/=(Image& img, const double x); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ImplicitSurfaceDomain_8h.html b/dev/api/Files/ImplicitSurfaceDomain_8h.html index 1747295626..b5751d283d 100644 --- a/dev/api/Files/ImplicitSurfaceDomain_8h.html +++ b/dev/api/Files/ImplicitSurfaceDomain_8h.html @@ -2546,7 +2546,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ImplicitSurfaceDomain_8h.md b/dev/api/Files/ImplicitSurfaceDomain_8h.md index f0193346d2..2079326069 100644 --- a/dev/api/Files/ImplicitSurfaceDomain_8h.md +++ b/dev/api/Files/ImplicitSurfaceDomain_8h.md @@ -135,4 +135,4 @@ class ImplicitSurfaceDomain : public ImageDomainWithCurvature { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Intersect_8h.html b/dev/api/Files/Intersect_8h.html index 6be61dda93..6cd7506efd 100644 --- a/dev/api/Files/Intersect_8h.html +++ b/dev/api/Files/Intersect_8h.html @@ -2566,7 +2566,7 @@

    Source code

    bool FastIntersectQuad(const Ray& ray, const Quad& quad, Intersection& q);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Intersect_8h.md b/dev/api/Files/Intersect_8h.md index 3c3c6e75f9..12807f5bc0 100644 --- a/dev/api/Files/Intersect_8h.md +++ b/dev/api/Files/Intersect_8h.md @@ -117,4 +117,4 @@ bool FastIntersectQuad(const Ray& ray, const Quad& quad, Intersection& q); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ItkToVtk_8h.html b/dev/api/Files/ItkToVtk_8h.html index f962bb447e..3f9965f20b 100644 --- a/dev/api/Files/ItkToVtk_8h.html +++ b/dev/api/Files/ItkToVtk_8h.html @@ -2469,7 +2469,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ItkToVtk_8h.md b/dev/api/Files/ItkToVtk_8h.md index 48e43695d3..faf701981f 100644 --- a/dev/api/Files/ItkToVtk_8h.md +++ b/dev/api/Files/ItkToVtk_8h.md @@ -59,4 +59,4 @@ void ConnectPipelines(ITK_Exporter exporter, VTK_Importer* importer) ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Job_8h.html b/dev/api/Files/Job_8h.html index da2ff24d08..612ce691dc 100644 --- a/dev/api/Files/Job_8h.html +++ b/dev/api/Files/Job_8h.html @@ -2488,7 +2488,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Job_8h.md b/dev/api/Files/Job_8h.md index fb84528d52..cfdf81aa47 100644 --- a/dev/api/Files/Job_8h.md +++ b/dev/api/Files/Job_8h.md @@ -77,4 +77,4 @@ class Job : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/JsonProjectReader_8h.html b/dev/api/Files/JsonProjectReader_8h.html index 6fc161c41a..c54b45eb54 100644 --- a/dev/api/Files/JsonProjectReader_8h.html +++ b/dev/api/Files/JsonProjectReader_8h.html @@ -2465,7 +2465,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/JsonProjectReader_8h.md b/dev/api/Files/JsonProjectReader_8h.md index 23292d0089..0fc82c4c6d 100644 --- a/dev/api/Files/JsonProjectReader_8h.md +++ b/dev/api/Files/JsonProjectReader_8h.md @@ -54,4 +54,4 @@ class JsonProjectReader : public ProjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/JsonProjectWriter_8h.html b/dev/api/Files/JsonProjectWriter_8h.html index 2e74bc04ca..5b5e0bf021 100644 --- a/dev/api/Files/JsonProjectWriter_8h.html +++ b/dev/api/Files/JsonProjectWriter_8h.html @@ -2455,7 +2455,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/JsonProjectWriter_8h.md b/dev/api/Files/JsonProjectWriter_8h.md index 7d20da4517..3259017443 100644 --- a/dev/api/Files/JsonProjectWriter_8h.md +++ b/dev/api/Files/JsonProjectWriter_8h.md @@ -44,4 +44,4 @@ class JsonProjectWriter { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/KeyboardShortcuts_8h.html b/dev/api/Files/KeyboardShortcuts_8h.html index 8a3d8b6667..b2e6d578d6 100644 --- a/dev/api/Files/KeyboardShortcuts_8h.html +++ b/dev/api/Files/KeyboardShortcuts_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // end namespace
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/KeyboardShortcuts_8h.md b/dev/api/Files/KeyboardShortcuts_8h.md index 0d07246621..25a71be0f3 100644 --- a/dev/api/Files/KeyboardShortcuts_8h.md +++ b/dev/api/Files/KeyboardShortcuts_8h.md @@ -55,4 +55,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LandmarkItemDelegate_8h.html b/dev/api/Files/LandmarkItemDelegate_8h.html index 409719cf9d..6410bbc36b 100644 --- a/dev/api/Files/LandmarkItemDelegate_8h.html +++ b/dev/api/Files/LandmarkItemDelegate_8h.html @@ -2487,7 +2487,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LandmarkItemDelegate_8h.md b/dev/api/Files/LandmarkItemDelegate_8h.md index ec4cb7818a..11d6f64eda 100644 --- a/dev/api/Files/LandmarkItemDelegate_8h.md +++ b/dev/api/Files/LandmarkItemDelegate_8h.md @@ -76,4 +76,4 @@ class LandmarkItemDelegate : public QStyledItemDelegate { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LandmarkTableModel_8h.html b/dev/api/Files/LandmarkTableModel_8h.html index 8ab5890cf8..e7857cfe04 100644 --- a/dev/api/Files/LandmarkTableModel_8h.html +++ b/dev/api/Files/LandmarkTableModel_8h.html @@ -2529,7 +2529,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LandmarkTableModel_8h.md b/dev/api/Files/LandmarkTableModel_8h.md index 198a751f3e..e21e4d0e0a 100644 --- a/dev/api/Files/LandmarkTableModel_8h.md +++ b/dev/api/Files/LandmarkTableModel_8h.md @@ -118,4 +118,4 @@ class LandmarkTableModel : public QAbstractTableModel { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LandmarkWidget_8h.html b/dev/api/Files/LandmarkWidget_8h.html index 84c82ff43e..e246968b5a 100644 --- a/dev/api/Files/LandmarkWidget_8h.html +++ b/dev/api/Files/LandmarkWidget_8h.html @@ -2500,7 +2500,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LandmarkWidget_8h.md b/dev/api/Files/LandmarkWidget_8h.md index 8c04fb0d60..89b9324c03 100644 --- a/dev/api/Files/LandmarkWidget_8h.md +++ b/dev/api/Files/LandmarkWidget_8h.md @@ -90,4 +90,4 @@ class LandmarkWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LegacyCorrespondenceFunction_8h.html b/dev/api/Files/LegacyCorrespondenceFunction_8h.html index 340005ce07..947a63946d 100644 --- a/dev/api/Files/LegacyCorrespondenceFunction_8h.html +++ b/dev/api/Files/LegacyCorrespondenceFunction_8h.html @@ -2590,7 +2590,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LegacyCorrespondenceFunction_8h.md b/dev/api/Files/LegacyCorrespondenceFunction_8h.md index e0880997b4..6a51311a5a 100644 --- a/dev/api/Files/LegacyCorrespondenceFunction_8h.md +++ b/dev/api/Files/LegacyCorrespondenceFunction_8h.md @@ -179,4 +179,4 @@ class LegacyCorrespondenceFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LegacyMeshGenerator_8h.html b/dev/api/Files/LegacyMeshGenerator_8h.html index 68249570df..1b8501ebdb 100644 --- a/dev/api/Files/LegacyMeshGenerator_8h.html +++ b/dev/api/Files/LegacyMeshGenerator_8h.html @@ -2496,7 +2496,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LegacyMeshGenerator_8h.md b/dev/api/Files/LegacyMeshGenerator_8h.md index b5387fb804..abd0d0f22d 100644 --- a/dev/api/Files/LegacyMeshGenerator_8h.md +++ b/dev/api/Files/LegacyMeshGenerator_8h.md @@ -95,4 +95,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LegacyShapeMatrix_8h.html b/dev/api/Files/LegacyShapeMatrix_8h.html index b3b9f7790a..be81842ae4 100644 --- a/dev/api/Files/LegacyShapeMatrix_8h.html +++ b/dev/api/Files/LegacyShapeMatrix_8h.html @@ -2579,7 +2579,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LegacyShapeMatrix_8h.md b/dev/api/Files/LegacyShapeMatrix_8h.md index 9f15a6af21..ee5186bd59 100644 --- a/dev/api/Files/LegacyShapeMatrix_8h.md +++ b/dev/api/Files/LegacyShapeMatrix_8h.md @@ -168,4 +168,4 @@ class LegacyShapeMatrix : public vnl_matrix, public Observer { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Lightbox_8h.html b/dev/api/Files/Lightbox_8h.html index ad512493c4..f66d9b0b2d 100644 --- a/dev/api/Files/Lightbox_8h.html +++ b/dev/api/Files/Lightbox_8h.html @@ -2592,7 +2592,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Lightbox_8h.md b/dev/api/Files/Lightbox_8h.md index 303095ec86..6fdcad3a5b 100644 --- a/dev/api/Files/Lightbox_8h.md +++ b/dev/api/Files/Lightbox_8h.md @@ -181,4 +181,4 @@ class Lightbox : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LinearRegressionShapeMatrix_8h.html b/dev/api/Files/LinearRegressionShapeMatrix_8h.html index 480b51dd72..e91ae2129d 100644 --- a/dev/api/Files/LinearRegressionShapeMatrix_8h.html +++ b/dev/api/Files/LinearRegressionShapeMatrix_8h.html @@ -2688,7 +2688,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LinearRegressionShapeMatrix_8h.md b/dev/api/Files/LinearRegressionShapeMatrix_8h.md index a964ee91b2..89e2ee3c4d 100644 --- a/dev/api/Files/LinearRegressionShapeMatrix_8h.md +++ b/dev/api/Files/LinearRegressionShapeMatrix_8h.md @@ -277,4 +277,4 @@ class LinearRegressionShapeMatrix : public LegacyShapeMatrix { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/LogWindow_8h.html b/dev/api/Files/LogWindow_8h.html index 9f7d86db03..0329f6e437 100644 --- a/dev/api/Files/LogWindow_8h.html +++ b/dev/api/Files/LogWindow_8h.html @@ -2469,7 +2469,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/LogWindow_8h.md b/dev/api/Files/LogWindow_8h.md index 23d3279f53..2010653f64 100644 --- a/dev/api/Files/LogWindow_8h.md +++ b/dev/api/Files/LogWindow_8h.md @@ -58,4 +58,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Logging_8h.html b/dev/api/Files/Logging_8h.html index ca4161c06f..623a1430b0 100644 --- a/dev/api/Files/Logging_8h.html +++ b/dev/api/Files/Logging_8h.html @@ -2803,7 +2803,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Logging_8h.md b/dev/api/Files/Logging_8h.md index 90605e62f1..af11a230ed 100644 --- a/dev/api/Files/Logging_8h.md +++ b/dev/api/Files/Logging_8h.md @@ -298,4 +298,4 @@ class Logging { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeanCurvatureContainer_8h.html b/dev/api/Files/MeanCurvatureContainer_8h.html index 28d6255358..4228fb37e2 100644 --- a/dev/api/Files/MeanCurvatureContainer_8h.html +++ b/dev/api/Files/MeanCurvatureContainer_8h.html @@ -2530,7 +2530,7 @@

    Source code

    #include "MeanCurvatureContainer.txx"
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeanCurvatureContainer_8h.md b/dev/api/Files/MeanCurvatureContainer_8h.md index 2847814146..c03c56bccc 100644 --- a/dev/api/Files/MeanCurvatureContainer_8h.md +++ b/dev/api/Files/MeanCurvatureContainer_8h.md @@ -119,4 +119,4 @@ class MeanCurvatureContainer : public GenericContainerArray { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MemoryUsage_8h.html b/dev/api/Files/MemoryUsage_8h.html index 5d553c7a82..311fb4a4c8 100644 --- a/dev/api/Files/MemoryUsage_8h.html +++ b/dev/api/Files/MemoryUsage_8h.html @@ -2455,7 +2455,7 @@

    Source code

    void process_mem_usage(double& vm_usage, double& resident_set);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MemoryUsage_8h.md b/dev/api/Files/MemoryUsage_8h.md index 9ba14c4a2d..2e117a6c24 100644 --- a/dev/api/Files/MemoryUsage_8h.md +++ b/dev/api/Files/MemoryUsage_8h.md @@ -43,4 +43,4 @@ void process_mem_usage(double& vm_usage, double& resident_set); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshCache_8h.html b/dev/api/Files/MeshCache_8h.html index c0a1ee32b2..8afcf6160d 100644 --- a/dev/api/Files/MeshCache_8h.html +++ b/dev/api/Files/MeshCache_8h.html @@ -2501,7 +2501,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshCache_8h.md b/dev/api/Files/MeshCache_8h.md index 0593eb06c8..96609b1a8f 100644 --- a/dev/api/Files/MeshCache_8h.md +++ b/dev/api/Files/MeshCache_8h.md @@ -90,4 +90,4 @@ class MeshCache { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshComputeThickness_8h.html b/dev/api/Files/MeshComputeThickness_8h.html index bae5d2bb18..b699ac9268 100644 --- a/dev/api/Files/MeshComputeThickness_8h.html +++ b/dev/api/Files/MeshComputeThickness_8h.html @@ -2433,7 +2433,7 @@

    Source code

    } // namespace shapeworks::mesh
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshComputeThickness_8h.md b/dev/api/Files/MeshComputeThickness_8h.md index 1c2a86bd9e..e55d4f7f03 100644 --- a/dev/api/Files/MeshComputeThickness_8h.md +++ b/dev/api/Files/MeshComputeThickness_8h.md @@ -36,4 +36,4 @@ void compute_thickness(Mesh &mesh, Image &image, Image *dt, double max_dist, dou ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshDomain_8h.html b/dev/api/Files/MeshDomain_8h.html index 1f617541cb..a0037cbb9f 100644 --- a/dev/api/Files/MeshDomain_8h.html +++ b/dev/api/Files/MeshDomain_8h.html @@ -2563,7 +2563,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshDomain_8h.md b/dev/api/Files/MeshDomain_8h.md index c396be6d96..8ffbd8d6d0 100644 --- a/dev/api/Files/MeshDomain_8h.md +++ b/dev/api/Files/MeshDomain_8h.md @@ -152,4 +152,4 @@ class MeshDomain : public ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshGenerator_8h.html b/dev/api/Files/MeshGenerator_8h.html index 08b8fbf02c..f56ea217bd 100644 --- a/dev/api/Files/MeshGenerator_8h.html +++ b/dev/api/Files/MeshGenerator_8h.html @@ -2508,7 +2508,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshGenerator_8h.md b/dev/api/Files/MeshGenerator_8h.md index 69e76eb088..7b89bbcb60 100644 --- a/dev/api/Files/MeshGenerator_8h.md +++ b/dev/api/Files/MeshGenerator_8h.md @@ -90,4 +90,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshGeoEntry_8h.html b/dev/api/Files/MeshGeoEntry_8h.html index 5b7f1cf8a9..aba46abe0f 100644 --- a/dev/api/Files/MeshGeoEntry_8h.html +++ b/dev/api/Files/MeshGeoEntry_8h.html @@ -2493,7 +2493,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshGeoEntry_8h.md b/dev/api/Files/MeshGeoEntry_8h.md index 7c1dfa1c19..c4c4c226b0 100644 --- a/dev/api/Files/MeshGeoEntry_8h.md +++ b/dev/api/Files/MeshGeoEntry_8h.md @@ -82,4 +82,4 @@ struct MeshGeoEntry { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshGroup_8h.html b/dev/api/Files/MeshGroup_8h.html index c6244ad2b0..1e295ca853 100644 --- a/dev/api/Files/MeshGroup_8h.html +++ b/dev/api/Files/MeshGroup_8h.html @@ -2470,7 +2470,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshGroup_8h.md b/dev/api/Files/MeshGroup_8h.md index 564bb9ef5c..401bdd177d 100644 --- a/dev/api/Files/MeshGroup_8h.md +++ b/dev/api/Files/MeshGroup_8h.md @@ -59,4 +59,4 @@ class MeshGroup { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshManager_8h.html b/dev/api/Files/MeshManager_8h.html index 2aa831ad43..c9c33b94d0 100644 --- a/dev/api/Files/MeshManager_8h.html +++ b/dev/api/Files/MeshManager_8h.html @@ -2527,7 +2527,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshManager_8h.md b/dev/api/Files/MeshManager_8h.md index 8aae998eb4..c5b955c1cc 100644 --- a/dev/api/Files/MeshManager_8h.md +++ b/dev/api/Files/MeshManager_8h.md @@ -116,4 +116,4 @@ class MeshManager : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshSettings_8h.html b/dev/api/Files/MeshSettings_8h.html index 240e90a275..b8b91fb6bd 100644 --- a/dev/api/Files/MeshSettings_8h.html +++ b/dev/api/Files/MeshSettings_8h.html @@ -2492,7 +2492,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshSettings_8h.md b/dev/api/Files/MeshSettings_8h.md index a3b845e5c2..29bed402e7 100644 --- a/dev/api/Files/MeshSettings_8h.md +++ b/dev/api/Files/MeshSettings_8h.md @@ -64,4 +64,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshSlice_8h.html b/dev/api/Files/MeshSlice_8h.html index 09b5ad6e7c..cee7b0cde4 100644 --- a/dev/api/Files/MeshSlice_8h.html +++ b/dev/api/Files/MeshSlice_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshSlice_8h.md b/dev/api/Files/MeshSlice_8h.md index 90d9e0624b..adc280bf4a 100644 --- a/dev/api/Files/MeshSlice_8h.md +++ b/dev/api/Files/MeshSlice_8h.md @@ -67,4 +67,4 @@ class MeshSlice { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshUtils_8h.html b/dev/api/Files/MeshUtils_8h.html index d94172626c..70527540b3 100644 --- a/dev/api/Files/MeshUtils_8h.html +++ b/dev/api/Files/MeshUtils_8h.html @@ -2490,7 +2490,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshUtils_8h.md b/dev/api/Files/MeshUtils_8h.md index 91f48a8dcb..bf35555bd6 100644 --- a/dev/api/Files/MeshUtils_8h.md +++ b/dev/api/Files/MeshUtils_8h.md @@ -79,4 +79,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshWarper_8h.html b/dev/api/Files/MeshWarper_8h.html index 62e40c329a..185287712b 100644 --- a/dev/api/Files/MeshWarper_8h.html +++ b/dev/api/Files/MeshWarper_8h.html @@ -2538,7 +2538,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshWarper_8h.md b/dev/api/Files/MeshWarper_8h.md index a3fec56a1a..8860cf8d0c 100644 --- a/dev/api/Files/MeshWarper_8h.md +++ b/dev/api/Files/MeshWarper_8h.md @@ -123,4 +123,4 @@ class MeshWarper { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshWorkQueue_8h.html b/dev/api/Files/MeshWorkQueue_8h.html index b7ff5d0267..2048542931 100644 --- a/dev/api/Files/MeshWorkQueue_8h.html +++ b/dev/api/Files/MeshWorkQueue_8h.html @@ -2552,7 +2552,7 @@

    Source code

    Q_DECLARE_METATYPE(shapeworks::MeshWorkItem);
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshWorkQueue_8h.md b/dev/api/Files/MeshWorkQueue_8h.md index fa32cdc2c0..01d9dd2f12 100644 --- a/dev/api/Files/MeshWorkQueue_8h.md +++ b/dev/api/Files/MeshWorkQueue_8h.md @@ -107,4 +107,4 @@ Q_DECLARE_METATYPE(shapeworks::MeshWorkItem); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshWorker_8h.html b/dev/api/Files/MeshWorker_8h.html index 988eb7e432..e95021a32d 100644 --- a/dev/api/Files/MeshWorker_8h.html +++ b/dev/api/Files/MeshWorker_8h.html @@ -2533,7 +2533,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshWorker_8h.md b/dev/api/Files/MeshWorker_8h.md index 3a1d3de2ba..507964551f 100644 --- a/dev/api/Files/MeshWorker_8h.md +++ b/dev/api/Files/MeshWorker_8h.md @@ -87,4 +87,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MeshWrapper_8h.html b/dev/api/Files/MeshWrapper_8h.html index d00ff1ab3f..275644c4dc 100644 --- a/dev/api/Files/MeshWrapper_8h.html +++ b/dev/api/Files/MeshWrapper_8h.html @@ -2492,7 +2492,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MeshWrapper_8h.md b/dev/api/Files/MeshWrapper_8h.md index bf96ac7e66..7d9bd7fbf4 100644 --- a/dev/api/Files/MeshWrapper_8h.md +++ b/dev/api/Files/MeshWrapper_8h.md @@ -81,4 +81,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Mesh_8h.html b/dev/api/Files/Mesh_8h.html index afb6aae7c5..46921c8b16 100644 --- a/dev/api/Files/Mesh_8h.html +++ b/dev/api/Files/Mesh_8h.html @@ -2687,7 +2687,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Mesh_8h.md b/dev/api/Files/Mesh_8h.md index 16296b37e0..8868a23d07 100644 --- a/dev/api/Files/Mesh_8h.md +++ b/dev/api/Files/Mesh_8h.md @@ -273,4 +273,4 @@ class MeshReader { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/MixedEffectsShapeMatrix_8h.html b/dev/api/Files/MixedEffectsShapeMatrix_8h.html index 6c4f289b94..b2b256ed2a 100644 --- a/dev/api/Files/MixedEffectsShapeMatrix_8h.html +++ b/dev/api/Files/MixedEffectsShapeMatrix_8h.html @@ -2810,7 +2810,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/MixedEffectsShapeMatrix_8h.md b/dev/api/Files/MixedEffectsShapeMatrix_8h.md index 309d2e39e9..0fc7c7761e 100644 --- a/dev/api/Files/MixedEffectsShapeMatrix_8h.md +++ b/dev/api/Files/MixedEffectsShapeMatrix_8h.md @@ -399,4 +399,4 @@ class MixedEffectsShapeMatrix : public LegacyShapeMatrix { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Module_8dox.html b/dev/api/Files/Module_8dox.html index 5941f10aea..9d5bd54005 100644 --- a/dev/api/Files/Module_8dox.html +++ b/dev/api/Files/Module_8dox.html @@ -2382,7 +2382,7 @@

    Module.dox


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Module_8dox.md b/dev/api/Files/Module_8dox.md index 9b1374a572..f9e7a23290 100644 --- a/dev/api/Files/Module_8dox.md +++ b/dev/api/Files/Module_8dox.md @@ -14,4 +14,4 @@ title: Module.dox ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/NetworkAnalysisJob_8h.html b/dev/api/Files/NetworkAnalysisJob_8h.html index c980abf92b..cf62ae14a1 100644 --- a/dev/api/Files/NetworkAnalysisJob_8h.html +++ b/dev/api/Files/NetworkAnalysisJob_8h.html @@ -2476,7 +2476,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/NetworkAnalysisJob_8h.md b/dev/api/Files/NetworkAnalysisJob_8h.md index bf6e198d6c..c6b8f65745 100644 --- a/dev/api/Files/NetworkAnalysisJob_8h.md +++ b/dev/api/Files/NetworkAnalysisJob_8h.md @@ -65,4 +65,4 @@ class NetworkAnalysisJob : public Job { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ObjectReader_8h.html b/dev/api/Files/ObjectReader_8h.html index d54165ab48..3a8f8b16cb 100644 --- a/dev/api/Files/ObjectReader_8h.html +++ b/dev/api/Files/ObjectReader_8h.html @@ -2474,7 +2474,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ObjectReader_8h.md b/dev/api/Files/ObjectReader_8h.md index 1e08c06e8b..6ffed938b7 100644 --- a/dev/api/Files/ObjectReader_8h.md +++ b/dev/api/Files/ObjectReader_8h.md @@ -77,4 +77,4 @@ class ObjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ObjectWriter_8h.html b/dev/api/Files/ObjectWriter_8h.html index 0f4f2d1cfa..fdeb714f7b 100644 --- a/dev/api/Files/ObjectWriter_8h.html +++ b/dev/api/Files/ObjectWriter_8h.html @@ -2476,7 +2476,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ObjectWriter_8h.md b/dev/api/Files/ObjectWriter_8h.md index bf138d1410..18ff9e90ef 100644 --- a/dev/api/Files/ObjectWriter_8h.md +++ b/dev/api/Files/ObjectWriter_8h.md @@ -79,4 +79,4 @@ class ObjectWriter { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Observer_8h.html b/dev/api/Files/Observer_8h.html index 3df1855fa6..30e40de851 100644 --- a/dev/api/Files/Observer_8h.html +++ b/dev/api/Files/Observer_8h.html @@ -2505,7 +2505,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Observer_8h.md b/dev/api/Files/Observer_8h.md index a3045547ab..8b06b08aad 100644 --- a/dev/api/Files/Observer_8h.md +++ b/dev/api/Files/Observer_8h.md @@ -91,4 +91,4 @@ class Observer : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/OptimizationVisualizer_8h.html b/dev/api/Files/OptimizationVisualizer_8h.html index d76b5edaff..f5cea9a0f9 100644 --- a/dev/api/Files/OptimizationVisualizer_8h.html +++ b/dev/api/Files/OptimizationVisualizer_8h.html @@ -2505,7 +2505,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/OptimizationVisualizer_8h.md b/dev/api/Files/OptimizationVisualizer_8h.md index 7fa133bfdd..2f85d8c469 100644 --- a/dev/api/Files/OptimizationVisualizer_8h.md +++ b/dev/api/Files/OptimizationVisualizer_8h.md @@ -94,4 +94,4 @@ class OptimizationVisualizer { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/OptimizeParameterFile_8h.html b/dev/api/Files/OptimizeParameterFile_8h.html index e78d237e73..68b52461c5 100644 --- a/dev/api/Files/OptimizeParameterFile_8h.html +++ b/dev/api/Files/OptimizeParameterFile_8h.html @@ -2499,7 +2499,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/OptimizeParameterFile_8h.md b/dev/api/Files/OptimizeParameterFile_8h.md index 253dd605a0..a2484167cf 100644 --- a/dev/api/Files/OptimizeParameterFile_8h.md +++ b/dev/api/Files/OptimizeParameterFile_8h.md @@ -88,4 +88,4 @@ class OptimizeParameterFile { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/OptimizeParameters_8h.html b/dev/api/Files/OptimizeParameters_8h.html index a7099d247a..f298d0fb78 100644 --- a/dev/api/Files/OptimizeParameters_8h.html +++ b/dev/api/Files/OptimizeParameters_8h.html @@ -2581,7 +2581,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/OptimizeParameters_8h.md b/dev/api/Files/OptimizeParameters_8h.md index edaf69b463..37d8fa720c 100644 --- a/dev/api/Files/OptimizeParameters_8h.md +++ b/dev/api/Files/OptimizeParameters_8h.md @@ -170,4 +170,4 @@ class OptimizeParameters { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/OptimizeTool_8h.html b/dev/api/Files/OptimizeTool_8h.html index 21cceb83fc..09fe52dd3f 100644 --- a/dev/api/Files/OptimizeTool_8h.html +++ b/dev/api/Files/OptimizeTool_8h.html @@ -2531,7 +2531,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/OptimizeTool_8h.md b/dev/api/Files/OptimizeTool_8h.md index c61efccd2d..1e02eaf170 100644 --- a/dev/api/Files/OptimizeTool_8h.md +++ b/dev/api/Files/OptimizeTool_8h.md @@ -120,4 +120,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Optimize_8h.html b/dev/api/Files/Optimize_8h.html index a2dcde171b..dc68e7eb6f 100644 --- a/dev/api/Files/Optimize_8h.html +++ b/dev/api/Files/Optimize_8h.html @@ -2812,7 +2812,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Optimize_8h.md b/dev/api/Files/Optimize_8h.md index d0d14ae759..426da1212e 100644 --- a/dev/api/Files/Optimize_8h.md +++ b/dev/api/Files/Optimize_8h.md @@ -398,4 +398,4 @@ class Optimize { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/PaintWidget_8h.html b/dev/api/Files/PaintWidget_8h.html index 94279969e3..4972d8fa16 100644 --- a/dev/api/Files/PaintWidget_8h.html +++ b/dev/api/Files/PaintWidget_8h.html @@ -2552,7 +2552,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/PaintWidget_8h.md b/dev/api/Files/PaintWidget_8h.md index fcaae6eabb..a37e71753e 100644 --- a/dev/api/Files/PaintWidget_8h.md +++ b/dev/api/Files/PaintWidget_8h.md @@ -141,4 +141,4 @@ class PaintWidget : public vtkAbstractWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Parameters_8h.html b/dev/api/Files/Parameters_8h.html index 5bf9acda1e..adc45c0b57 100644 --- a/dev/api/Files/Parameters_8h.html +++ b/dev/api/Files/Parameters_8h.html @@ -2485,7 +2485,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Parameters_8h.md b/dev/api/Files/Parameters_8h.md index 659c9709d6..33a4a467fd 100644 --- a/dev/api/Files/Parameters_8h.md +++ b/dev/api/Files/Parameters_8h.md @@ -74,4 +74,4 @@ class Parameters { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleAreaJob_8h.html b/dev/api/Files/ParticleAreaJob_8h.html index 2b26bc3897..11d5571f5f 100644 --- a/dev/api/Files/ParticleAreaJob_8h.html +++ b/dev/api/Files/ParticleAreaJob_8h.html @@ -2471,7 +2471,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleAreaJob_8h.md b/dev/api/Files/ParticleAreaJob_8h.md index f8534d2a22..50a6be7b3b 100644 --- a/dev/api/Files/ParticleAreaJob_8h.md +++ b/dev/api/Files/ParticleAreaJob_8h.md @@ -60,4 +60,4 @@ class ParticleAreaJob : public Job { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleAreaPanel_8h.html b/dev/api/Files/ParticleAreaPanel_8h.html index 63dd47b19d..64a8b37aa0 100644 --- a/dev/api/Files/ParticleAreaPanel_8h.html +++ b/dev/api/Files/ParticleAreaPanel_8h.html @@ -2509,7 +2509,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleAreaPanel_8h.md b/dev/api/Files/ParticleAreaPanel_8h.md index 849d3ba427..404673d0cf 100644 --- a/dev/api/Files/ParticleAreaPanel_8h.md +++ b/dev/api/Files/ParticleAreaPanel_8h.md @@ -98,4 +98,4 @@ class ParticleAreaPanel : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleArea_8h.html b/dev/api/Files/ParticleArea_8h.html index 116a214ae1..779d797828 100644 --- a/dev/api/Files/ParticleArea_8h.html +++ b/dev/api/Files/ParticleArea_8h.html @@ -2468,7 +2468,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleArea_8h.md b/dev/api/Files/ParticleArea_8h.md index 560b157d98..4e7035c23f 100644 --- a/dev/api/Files/ParticleArea_8h.md +++ b/dev/api/Files/ParticleArea_8h.md @@ -57,4 +57,4 @@ class ParticleArea { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleColors_8h.html b/dev/api/Files/ParticleColors_8h.html index 0d980c508c..fd5b821c1e 100644 --- a/dev/api/Files/ParticleColors_8h.html +++ b/dev/api/Files/ParticleColors_8h.html @@ -2461,7 +2461,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleColors_8h.md b/dev/api/Files/ParticleColors_8h.md index cfe2fb9832..9343014c73 100644 --- a/dev/api/Files/ParticleColors_8h.md +++ b/dev/api/Files/ParticleColors_8h.md @@ -50,4 +50,4 @@ class ParticleColors : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleDomain_8h.html b/dev/api/Files/ParticleDomain_8h.html index 156edac982..1b3eac68ee 100644 --- a/dev/api/Files/ParticleDomain_8h.html +++ b/dev/api/Files/ParticleDomain_8h.html @@ -2550,7 +2550,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleDomain_8h.md b/dev/api/Files/ParticleDomain_8h.md index ba498e01fc..1f2ed19e1a 100644 --- a/dev/api/Files/ParticleDomain_8h.md +++ b/dev/api/Files/ParticleDomain_8h.md @@ -139,4 +139,4 @@ class ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleEvents_8h.html b/dev/api/Files/ParticleEvents_8h.html index 4499ab3dbc..f9809fd8d4 100644 --- a/dev/api/Files/ParticleEvents_8h.html +++ b/dev/api/Files/ParticleEvents_8h.html @@ -2491,7 +2491,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleEvents_8h.md b/dev/api/Files/ParticleEvents_8h.md index 99ea61cdac..2b3a1a9c30 100644 --- a/dev/api/Files/ParticleEvents_8h.md +++ b/dev/api/Files/ParticleEvents_8h.md @@ -80,4 +80,4 @@ itkEventMacro(ParticlePositionRemoveEvent, ParticleEvent); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleFile_8h.html b/dev/api/Files/ParticleFile_8h.html index 8faffe3abc..4920e3b362 100644 --- a/dev/api/Files/ParticleFile_8h.html +++ b/dev/api/Files/ParticleFile_8h.html @@ -2447,7 +2447,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleFile_8h.md b/dev/api/Files/ParticleFile_8h.md index fb2d44a0c1..f9b6aa0702 100644 --- a/dev/api/Files/ParticleFile_8h.md +++ b/dev/api/Files/ParticleFile_8h.md @@ -50,4 +50,4 @@ void write_particles_from_vector(std::string filename, std::vectorSource code #include "ParticleGaussianModeWriter.txx"
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleGaussianModeWriter_8h.md b/dev/api/Files/ParticleGaussianModeWriter_8h.md index bb37cc6d1a..b2af2aa7ae 100644 --- a/dev/api/Files/ParticleGaussianModeWriter_8h.md +++ b/dev/api/Files/ParticleGaussianModeWriter_8h.md @@ -88,4 +88,4 @@ class ParticleGaussianModeWriter : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleGoodBadAssessment_8h.html b/dev/api/Files/ParticleGoodBadAssessment_8h.html index 781ff113e7..e4c16c41bc 100644 --- a/dev/api/Files/ParticleGoodBadAssessment_8h.html +++ b/dev/api/Files/ParticleGoodBadAssessment_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleGoodBadAssessment_8h.md b/dev/api/Files/ParticleGoodBadAssessment_8h.md index f99f49c080..0469db96ad 100644 --- a/dev/api/Files/ParticleGoodBadAssessment_8h.md +++ b/dev/api/Files/ParticleGoodBadAssessment_8h.md @@ -55,4 +55,4 @@ class ParticleGoodBadAssessment { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleNeighborhood_8h.html b/dev/api/Files/ParticleNeighborhood_8h.html index 0fc2ff8984..72c0cdf486 100644 --- a/dev/api/Files/ParticleNeighborhood_8h.html +++ b/dev/api/Files/ParticleNeighborhood_8h.html @@ -2520,7 +2520,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleNeighborhood_8h.md b/dev/api/Files/ParticleNeighborhood_8h.md index 872d00419a..ebc1da304a 100644 --- a/dev/api/Files/ParticleNeighborhood_8h.md +++ b/dev/api/Files/ParticleNeighborhood_8h.md @@ -109,4 +109,4 @@ class ParticleNeighborhood : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleNormalEvaluationJob_8h.html b/dev/api/Files/ParticleNormalEvaluationJob_8h.html index cf29d71de3..e274f9a110 100644 --- a/dev/api/Files/ParticleNormalEvaluationJob_8h.html +++ b/dev/api/Files/ParticleNormalEvaluationJob_8h.html @@ -2470,7 +2470,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleNormalEvaluationJob_8h.md b/dev/api/Files/ParticleNormalEvaluationJob_8h.md index c33bcc6351..3ef6858ed3 100644 --- a/dev/api/Files/ParticleNormalEvaluationJob_8h.md +++ b/dev/api/Files/ParticleNormalEvaluationJob_8h.md @@ -59,4 +59,4 @@ Q_SIGNALS: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleNormalEvaluation_8h.html b/dev/api/Files/ParticleNormalEvaluation_8h.html index 3936f34845..6239f1ee8c 100644 --- a/dev/api/Files/ParticleNormalEvaluation_8h.html +++ b/dev/api/Files/ParticleNormalEvaluation_8h.html @@ -2465,7 +2465,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleNormalEvaluation_8h.md b/dev/api/Files/ParticleNormalEvaluation_8h.md index 675e40027e..b046a767ae 100644 --- a/dev/api/Files/ParticleNormalEvaluation_8h.md +++ b/dev/api/Files/ParticleNormalEvaluation_8h.md @@ -54,4 +54,4 @@ class ParticleNormalEvaluation { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticlePointIndexPair_8h.html b/dev/api/Files/ParticlePointIndexPair_8h.html index fd7d6f61ca..9406ddf96c 100644 --- a/dev/api/Files/ParticlePointIndexPair_8h.html +++ b/dev/api/Files/ParticlePointIndexPair_8h.html @@ -2463,7 +2463,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticlePointIndexPair_8h.md b/dev/api/Files/ParticlePointIndexPair_8h.md index 2630d82111..3dae835083 100644 --- a/dev/api/Files/ParticlePointIndexPair_8h.md +++ b/dev/api/Files/ParticlePointIndexPair_8h.md @@ -52,4 +52,4 @@ struct ParticlePointIndexPair { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleRegionDomain_8h.html b/dev/api/Files/ParticleRegionDomain_8h.html index 4b81424efd..931f782549 100644 --- a/dev/api/Files/ParticleRegionDomain_8h.html +++ b/dev/api/Files/ParticleRegionDomain_8h.html @@ -2500,7 +2500,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleRegionDomain_8h.md b/dev/api/Files/ParticleRegionDomain_8h.md index 7a4a8c6913..9235205074 100644 --- a/dev/api/Files/ParticleRegionDomain_8h.md +++ b/dev/api/Files/ParticleRegionDomain_8h.md @@ -89,4 +89,4 @@ class ParticleRegionDomain : public ParticleDomain { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleRegionNeighborhood_8h.html b/dev/api/Files/ParticleRegionNeighborhood_8h.html index 9943edb8b4..a2988e92d5 100644 --- a/dev/api/Files/ParticleRegionNeighborhood_8h.html +++ b/dev/api/Files/ParticleRegionNeighborhood_8h.html @@ -2531,7 +2531,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleRegionNeighborhood_8h.md b/dev/api/Files/ParticleRegionNeighborhood_8h.md index 2e386b04d0..43c4d943b8 100644 --- a/dev/api/Files/ParticleRegionNeighborhood_8h.md +++ b/dev/api/Files/ParticleRegionNeighborhood_8h.md @@ -120,4 +120,4 @@ class ParticleRegionNeighborhood : public ParticleNeighborhood { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleShapeStatistics_8h.html b/dev/api/Files/ParticleShapeStatistics_8h.html index a499ab3963..65e4e7b420 100644 --- a/dev/api/Files/ParticleShapeStatistics_8h.html +++ b/dev/api/Files/ParticleShapeStatistics_8h.html @@ -2605,7 +2605,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleShapeStatistics_8h.md b/dev/api/Files/ParticleShapeStatistics_8h.md index 73b6a14694..338e4be688 100644 --- a/dev/api/Files/ParticleShapeStatistics_8h.md +++ b/dev/api/Files/ParticleShapeStatistics_8h.md @@ -194,4 +194,4 @@ class ParticleShapeStatistics { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleSurfaceNeighborhood_8h.html b/dev/api/Files/ParticleSurfaceNeighborhood_8h.html index ce58db246f..1ece6c492d 100644 --- a/dev/api/Files/ParticleSurfaceNeighborhood_8h.html +++ b/dev/api/Files/ParticleSurfaceNeighborhood_8h.html @@ -2502,7 +2502,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleSurfaceNeighborhood_8h.md b/dev/api/Files/ParticleSurfaceNeighborhood_8h.md index d6291e942e..80618d89ff 100644 --- a/dev/api/Files/ParticleSurfaceNeighborhood_8h.md +++ b/dev/api/Files/ParticleSurfaceNeighborhood_8h.md @@ -91,4 +91,4 @@ class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleSystemEvaluation_8h.html b/dev/api/Files/ParticleSystemEvaluation_8h.html index 672df20f1d..b8020303fd 100644 --- a/dev/api/Files/ParticleSystemEvaluation_8h.html +++ b/dev/api/Files/ParticleSystemEvaluation_8h.html @@ -2479,7 +2479,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleSystemEvaluation_8h.md b/dev/api/Files/ParticleSystemEvaluation_8h.md index d157f23f6d..020ca61052 100644 --- a/dev/api/Files/ParticleSystemEvaluation_8h.md +++ b/dev/api/Files/ParticleSystemEvaluation_8h.md @@ -68,4 +68,4 @@ class ParticleSystemEvaluation { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ParticleSystem_8h.html b/dev/api/Files/ParticleSystem_8h.html index d4a1916ea5..d45b268c0f 100644 --- a/dev/api/Files/ParticleSystem_8h.html +++ b/dev/api/Files/ParticleSystem_8h.html @@ -2734,7 +2734,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ParticleSystem_8h.md b/dev/api/Files/ParticleSystem_8h.md index 040bc8e991..3b120d9239 100644 --- a/dev/api/Files/ParticleSystem_8h.md +++ b/dev/api/Files/ParticleSystem_8h.md @@ -323,4 +323,4 @@ class ParticleSystem : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Particles_8h.html b/dev/api/Files/Particles_8h.html index ac6e29f4b8..abf9b63d56 100644 --- a/dev/api/Files/Particles_8h.html +++ b/dev/api/Files/Particles_8h.html @@ -2510,7 +2510,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Particles_8h.md b/dev/api/Files/Particles_8h.md index 3bb7e7a484..a760d474ff 100644 --- a/dev/api/Files/Particles_8h.md +++ b/dev/api/Files/Particles_8h.md @@ -99,4 +99,4 @@ class Particles { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/PlaneConstraint_8h.html b/dev/api/Files/PlaneConstraint_8h.html index e5c45bd61a..13820734c2 100644 --- a/dev/api/Files/PlaneConstraint_8h.html +++ b/dev/api/Files/PlaneConstraint_8h.html @@ -2488,7 +2488,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/PlaneConstraint_8h.md b/dev/api/Files/PlaneConstraint_8h.md index f2b816cc13..5fd33eff96 100644 --- a/dev/api/Files/PlaneConstraint_8h.md +++ b/dev/api/Files/PlaneConstraint_8h.md @@ -77,4 +77,4 @@ class PlaneConstraint : public Constraint { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/PlaneWidget_8h.html b/dev/api/Files/PlaneWidget_8h.html index 8f2c573c97..260657a2d3 100644 --- a/dev/api/Files/PlaneWidget_8h.html +++ b/dev/api/Files/PlaneWidget_8h.html @@ -2516,7 +2516,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/PlaneWidget_8h.md b/dev/api/Files/PlaneWidget_8h.md index 82b9328885..3fc2b22047 100644 --- a/dev/api/Files/PlaneWidget_8h.md +++ b/dev/api/Files/PlaneWidget_8h.md @@ -106,4 +106,4 @@ class PlaneWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/PowerOfTwoPointTree_8h.html b/dev/api/Files/PowerOfTwoPointTree_8h.html index a1fac8313d..7a142cf033 100644 --- a/dev/api/Files/PowerOfTwoPointTree_8h.html +++ b/dev/api/Files/PowerOfTwoPointTree_8h.html @@ -2627,7 +2627,7 @@

    Source code

    } // end namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/PowerOfTwoPointTree_8h.md b/dev/api/Files/PowerOfTwoPointTree_8h.md index 78aad0f77a..5cd0864799 100644 --- a/dev/api/Files/PowerOfTwoPointTree_8h.md +++ b/dev/api/Files/PowerOfTwoPointTree_8h.md @@ -207,4 +207,4 @@ class PowerOfTwoPointTree : public itk::DataObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/PreferencesWindow_8h.html b/dev/api/Files/PreferencesWindow_8h.html index e6613d974d..1dbad4164f 100644 --- a/dev/api/Files/PreferencesWindow_8h.html +++ b/dev/api/Files/PreferencesWindow_8h.html @@ -2492,7 +2492,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/PreferencesWindow_8h.md b/dev/api/Files/PreferencesWindow_8h.md index a899842d43..8c4c3a9f89 100644 --- a/dev/api/Files/PreferencesWindow_8h.md +++ b/dev/api/Files/PreferencesWindow_8h.md @@ -81,4 +81,4 @@ class PreferencesWindow : public QDialog { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Preferences_8h.html b/dev/api/Files/Preferences_8h.html index c048f975a4..392700c811 100644 --- a/dev/api/Files/Preferences_8h.html +++ b/dev/api/Files/Preferences_8h.html @@ -2567,7 +2567,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Preferences_8h.md b/dev/api/Files/Preferences_8h.md index 9ba66f5406..10818b8516 100644 --- a/dev/api/Files/Preferences_8h.md +++ b/dev/api/Files/Preferences_8h.md @@ -170,4 +170,4 @@ class Preferences : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Procrustes3D_8h.html b/dev/api/Files/Procrustes3D_8h.html index 7219828a08..4e894bdc4a 100644 --- a/dev/api/Files/Procrustes3D_8h.html +++ b/dev/api/Files/Procrustes3D_8h.html @@ -2512,7 +2512,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Procrustes3D_8h.md b/dev/api/Files/Procrustes3D_8h.md index f145061a97..3546c67919 100644 --- a/dev/api/Files/Procrustes3D_8h.md +++ b/dev/api/Files/Procrustes3D_8h.md @@ -112,4 +112,4 @@ class Procrustes3D { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ProcrustesRegistration_8h.html b/dev/api/Files/ProcrustesRegistration_8h.html index c384a4c609..fa6908f381 100644 --- a/dev/api/Files/ProcrustesRegistration_8h.html +++ b/dev/api/Files/ProcrustesRegistration_8h.html @@ -2479,7 +2479,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ProcrustesRegistration_8h.md b/dev/api/Files/ProcrustesRegistration_8h.md index 09ff9729f2..2d8110d11b 100644 --- a/dev/api/Files/ProcrustesRegistration_8h.md +++ b/dev/api/Files/ProcrustesRegistration_8h.md @@ -68,4 +68,4 @@ class ProcrustesRegistration { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ProjectReader_8h.html b/dev/api/Files/ProjectReader_8h.html index 239a63aa8d..f8a373a819 100644 --- a/dev/api/Files/ProjectReader_8h.html +++ b/dev/api/Files/ProjectReader_8h.html @@ -2482,7 +2482,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ProjectReader_8h.md b/dev/api/Files/ProjectReader_8h.md index b71b1bb375..e324895aaa 100644 --- a/dev/api/Files/ProjectReader_8h.md +++ b/dev/api/Files/ProjectReader_8h.md @@ -71,4 +71,4 @@ class ProjectReader { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ProjectUtils_8h.html b/dev/api/Files/ProjectUtils_8h.html index 2fe267eb5f..68c37141d5 100644 --- a/dev/api/Files/ProjectUtils_8h.html +++ b/dev/api/Files/ProjectUtils_8h.html @@ -2546,7 +2546,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ProjectUtils_8h.md b/dev/api/Files/ProjectUtils_8h.md index b15da30cb9..da68a30dcf 100644 --- a/dev/api/Files/ProjectUtils_8h.md +++ b/dev/api/Files/ProjectUtils_8h.md @@ -129,4 +129,4 @@ class ProjectUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Project_8h.html b/dev/api/Files/Project_8h.html index cf7868f008..b7d3bfb379 100644 --- a/dev/api/Files/Project_8h.html +++ b/dev/api/Files/Project_8h.html @@ -2598,7 +2598,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Project_8h.md b/dev/api/Files/Project_8h.md index 5c87fa97bf..ccd0ff1c31 100644 --- a/dev/api/Files/Project_8h.md +++ b/dev/api/Files/Project_8h.md @@ -184,4 +184,4 @@ class Project { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/PythonAnalyze_8h.html b/dev/api/Files/PythonAnalyze_8h.html index 80b0513956..011f16619e 100644 --- a/dev/api/Files/PythonAnalyze_8h.html +++ b/dev/api/Files/PythonAnalyze_8h.html @@ -2452,7 +2452,7 @@

    Source code

    void define_python_analyze(pybind11::module_ m);
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/PythonAnalyze_8h.md b/dev/api/Files/PythonAnalyze_8h.md index 9de03843bc..fadb7bcd32 100644 --- a/dev/api/Files/PythonAnalyze_8h.md +++ b/dev/api/Files/PythonAnalyze_8h.md @@ -40,4 +40,4 @@ void define_python_analyze(pybind11::module_ m); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/PythonWorker_8h.html b/dev/api/Files/PythonWorker_8h.html index e949839b0b..d1a704a652 100644 --- a/dev/api/Files/PythonWorker_8h.html +++ b/dev/api/Files/PythonWorker_8h.html @@ -2503,7 +2503,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/PythonWorker_8h.md b/dev/api/Files/PythonWorker_8h.md index e1d5fd92c6..9d2f8b0b99 100644 --- a/dev/api/Files/PythonWorker_8h.md +++ b/dev/api/Files/PythonWorker_8h.md @@ -92,4 +92,4 @@ class PythonWorker : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/QMeshWarper_8h.html b/dev/api/Files/QMeshWarper_8h.html index ca0bb6ac84..1b95e761ba 100644 --- a/dev/api/Files/QMeshWarper_8h.html +++ b/dev/api/Files/QMeshWarper_8h.html @@ -2470,7 +2470,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/QMeshWarper_8h.md b/dev/api/Files/QMeshWarper_8h.md index 311deca9ec..f0a08b46bf 100644 --- a/dev/api/Files/QMeshWarper_8h.md +++ b/dev/api/Files/QMeshWarper_8h.md @@ -59,4 +59,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/QOptimize_8h.html b/dev/api/Files/QOptimize_8h.html index e8309bdf47..ab5f1bd589 100644 --- a/dev/api/Files/QOptimize_8h.html +++ b/dev/api/Files/QOptimize_8h.html @@ -2486,7 +2486,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/QOptimize_8h.md b/dev/api/Files/QOptimize_8h.md index 49ea65ee31..1da189e1c3 100644 --- a/dev/api/Files/QOptimize_8h.md +++ b/dev/api/Files/QOptimize_8h.md @@ -75,4 +75,4 @@ class QOptimize : public QObject, public Optimize { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ReconstructSurface_8h.html b/dev/api/Files/ReconstructSurface_8h.html index 7f795701ad..9b747c573b 100644 --- a/dev/api/Files/ReconstructSurface_8h.html +++ b/dev/api/Files/ReconstructSurface_8h.html @@ -2566,7 +2566,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ReconstructSurface_8h.md b/dev/api/Files/ReconstructSurface_8h.md index 2fc2865374..1b80622614 100644 --- a/dev/api/Files/ReconstructSurface_8h.md +++ b/dev/api/Files/ReconstructSurface_8h.md @@ -155,4 +155,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Reconstruction_8h.html b/dev/api/Files/Reconstruction_8h.html index c6a07c69fa..68aef9eea1 100644 --- a/dev/api/Files/Reconstruction_8h.html +++ b/dev/api/Files/Reconstruction_8h.html @@ -2655,7 +2655,7 @@

    Source code

    #endif // !__RECONSTRUCTION_H__
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Reconstruction_8h.md b/dev/api/Files/Reconstruction_8h.md index e0319ff5cf..b99c429a25 100644 --- a/dev/api/Files/Reconstruction_8h.md +++ b/dev/api/Files/Reconstruction_8h.md @@ -241,4 +241,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Region_8h.html b/dev/api/Files/Region_8h.html index 1d6c94aef0..04a11c8caa 100644 --- a/dev/api/Files/Region_8h.html +++ b/dev/api/Files/Region_8h.html @@ -2545,7 +2545,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Region_8h.md b/dev/api/Files/Region_8h.md index 1f65c9f9eb..f3e5ee867a 100644 --- a/dev/api/Files/Region_8h.md +++ b/dev/api/Files/Region_8h.md @@ -131,4 +131,4 @@ std::ostream &operator<<(std::ostream &os, const PhysicalRegion ®ion); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Sampler_8h.html b/dev/api/Files/Sampler_8h.html index 27a9fb53df..c9036c8aa7 100644 --- a/dev/api/Files/Sampler_8h.html +++ b/dev/api/Files/Sampler_8h.html @@ -2795,7 +2795,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Sampler_8h.md b/dev/api/Files/Sampler_8h.md index 22c852f086..7a0474548b 100644 --- a/dev/api/Files/Sampler_8h.md +++ b/dev/api/Files/Sampler_8h.md @@ -378,4 +378,4 @@ class Sampler { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/SamplingFunction_8h.html b/dev/api/Files/SamplingFunction_8h.html index 4cc6afa47b..878e92beea 100644 --- a/dev/api/Files/SamplingFunction_8h.html +++ b/dev/api/Files/SamplingFunction_8h.html @@ -2548,7 +2548,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/SamplingFunction_8h.md b/dev/api/Files/SamplingFunction_8h.md index 713bc8418d..63f2ddda98 100644 --- a/dev/api/Files/SamplingFunction_8h.md +++ b/dev/api/Files/SamplingFunction_8h.md @@ -137,4 +137,4 @@ class SamplingFunction : public VectorFunction { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Session_8h.html b/dev/api/Files/Session_8h.html index 1e9f21ab56..f1cc9093b9 100644 --- a/dev/api/Files/Session_8h.html +++ b/dev/api/Files/Session_8h.html @@ -2751,7 +2751,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Session_8h.md b/dev/api/Files/Session_8h.md index b9d2e64d0d..724222ee29 100644 --- a/dev/api/Files/Session_8h.md +++ b/dev/api/Files/Session_8h.md @@ -337,4 +337,4 @@ class Session : public QObject, public QEnableSharedFromThis { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ShapeEvaluationJob_8h.html b/dev/api/Files/ShapeEvaluationJob_8h.html index a73c7b411c..8e6c1d198d 100644 --- a/dev/api/Files/ShapeEvaluationJob_8h.html +++ b/dev/api/Files/ShapeEvaluationJob_8h.html @@ -2545,7 +2545,7 @@

    Source code

    Q_DECLARE_METATYPE(shapeworks::ShapeEvaluationJob::JobType);
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ShapeEvaluationJob_8h.md b/dev/api/Files/ShapeEvaluationJob_8h.md index 44b28344c1..d2d5f2632f 100644 --- a/dev/api/Files/ShapeEvaluationJob_8h.md +++ b/dev/api/Files/ShapeEvaluationJob_8h.md @@ -97,4 +97,4 @@ Q_DECLARE_METATYPE(shapeworks::ShapeEvaluationJob::JobType); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ShapeEvaluation_8h.html b/dev/api/Files/ShapeEvaluation_8h.html index d4c6605e06..80283b8bc3 100644 --- a/dev/api/Files/ShapeEvaluation_8h.html +++ b/dev/api/Files/ShapeEvaluation_8h.html @@ -2475,7 +2475,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ShapeEvaluation_8h.md b/dev/api/Files/ShapeEvaluation_8h.md index 788e71fae1..9b9e705074 100644 --- a/dev/api/Files/ShapeEvaluation_8h.md +++ b/dev/api/Files/ShapeEvaluation_8h.md @@ -64,4 +64,4 @@ class ShapeEvaluation { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ShapeGradientMatrix_8h.html b/dev/api/Files/ShapeGradientMatrix_8h.html index 99ca89e5b1..746137ca26 100644 --- a/dev/api/Files/ShapeGradientMatrix_8h.html +++ b/dev/api/Files/ShapeGradientMatrix_8h.html @@ -2584,7 +2584,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ShapeGradientMatrix_8h.md b/dev/api/Files/ShapeGradientMatrix_8h.md index 45db6ab090..e49730a180 100644 --- a/dev/api/Files/ShapeGradientMatrix_8h.md +++ b/dev/api/Files/ShapeGradientMatrix_8h.md @@ -173,4 +173,4 @@ class ShapeGradientMatrix : public vnl_matrix, public Observer { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ShapeMatrix_8h.html b/dev/api/Files/ShapeMatrix_8h.html index cb0a245d4d..6f4f6b20d3 100644 --- a/dev/api/Files/ShapeMatrix_8h.html +++ b/dev/api/Files/ShapeMatrix_8h.html @@ -2667,7 +2667,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ShapeMatrix_8h.md b/dev/api/Files/ShapeMatrix_8h.md index 81f31adfea..60a332ad8f 100644 --- a/dev/api/Files/ShapeMatrix_8h.md +++ b/dev/api/Files/ShapeMatrix_8h.md @@ -256,4 +256,4 @@ class ShapeMatrix : public vnl_matrix, public Observer { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ShapeWorksStudioApp_8h.html b/dev/api/Files/ShapeWorksStudioApp_8h.html index 3279c28b3a..97d5a0b81f 100644 --- a/dev/api/Files/ShapeWorksStudioApp_8h.html +++ b/dev/api/Files/ShapeWorksStudioApp_8h.html @@ -2711,7 +2711,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ShapeWorksStudioApp_8h.md b/dev/api/Files/ShapeWorksStudioApp_8h.md index 927328f711..f2f7320ecd 100644 --- a/dev/api/Files/ShapeWorksStudioApp_8h.md +++ b/dev/api/Files/ShapeWorksStudioApp_8h.md @@ -300,4 +300,4 @@ class ShapeWorksStudioApp : public QMainWindow { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ShapeWorksWorker_8h.html b/dev/api/Files/ShapeWorksWorker_8h.html index 1649ad271a..18a7c8cbdb 100644 --- a/dev/api/Files/ShapeWorksWorker_8h.html +++ b/dev/api/Files/ShapeWorksWorker_8h.html @@ -2490,7 +2490,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ShapeWorksWorker_8h.md b/dev/api/Files/ShapeWorksWorker_8h.md index 47a7016f72..3f559262f7 100644 --- a/dev/api/Files/ShapeWorksWorker_8h.md +++ b/dev/api/Files/ShapeWorksWorker_8h.md @@ -79,4 +79,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Shape_8h.html b/dev/api/Files/Shape_8h.html index da6ba84ec0..82690a5fcc 100644 --- a/dev/api/Files/Shape_8h.html +++ b/dev/api/Files/Shape_8h.html @@ -2640,7 +2640,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Shape_8h.md b/dev/api/Files/Shape_8h.md index 30fde0560f..a649adee4b 100644 --- a/dev/api/Files/Shape_8h.md +++ b/dev/api/Files/Shape_8h.md @@ -226,4 +226,4 @@ class Shape { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/ShapeworksUtils_8h.html b/dev/api/Files/ShapeworksUtils_8h.html index faf93f42f7..abd613d00a 100644 --- a/dev/api/Files/ShapeworksUtils_8h.html +++ b/dev/api/Files/ShapeworksUtils_8h.html @@ -2485,7 +2485,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/ShapeworksUtils_8h.md b/dev/api/Files/ShapeworksUtils_8h.md index 57181a5bb6..86339f9937 100644 --- a/dev/api/Files/ShapeworksUtils_8h.md +++ b/dev/api/Files/ShapeworksUtils_8h.md @@ -74,4 +74,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Shapeworks_8h.html b/dev/api/Files/Shapeworks_8h.html index 1dc01ed23d..9df0e107cf 100644 --- a/dev/api/Files/Shapeworks_8h.html +++ b/dev/api/Files/Shapeworks_8h.html @@ -2693,7 +2693,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Shapeworks_8h.md b/dev/api/Files/Shapeworks_8h.md index fa32906a59..a79add3c5e 100644 --- a/dev/api/Files/Shapeworks_8h.md +++ b/dev/api/Files/Shapeworks_8h.md @@ -298,4 +298,4 @@ T clamp(T value, T min, T max) { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/SharedCommandData_8h.html b/dev/api/Files/SharedCommandData_8h.html index dbc3a4d09d..e006c0df00 100644 --- a/dev/api/Files/SharedCommandData_8h.html +++ b/dev/api/Files/SharedCommandData_8h.html @@ -2467,7 +2467,7 @@

    Source code

    } // shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/SharedCommandData_8h.md b/dev/api/Files/SharedCommandData_8h.md index 81c18c8ddd..44809c0404 100644 --- a/dev/api/Files/SharedCommandData_8h.md +++ b/dev/api/Files/SharedCommandData_8h.md @@ -56,4 +56,4 @@ struct SharedCommandData ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/SliceView_8h.html b/dev/api/Files/SliceView_8h.html index f04140dcf2..fd13d8eb5c 100644 --- a/dev/api/Files/SliceView_8h.html +++ b/dev/api/Files/SliceView_8h.html @@ -2529,7 +2529,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/SliceView_8h.md b/dev/api/Files/SliceView_8h.md index e7a447dec3..f013428cf7 100644 --- a/dev/api/Files/SliceView_8h.md +++ b/dev/api/Files/SliceView_8h.md @@ -118,4 +118,4 @@ class SliceView { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/SplashScreen_8h.html b/dev/api/Files/SplashScreen_8h.html index 764f76905a..1e52d1d11b 100644 --- a/dev/api/Files/SplashScreen_8h.html +++ b/dev/api/Files/SplashScreen_8h.html @@ -2491,7 +2491,7 @@

    Source code

    } // end namespace
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/SplashScreen_8h.md b/dev/api/Files/SplashScreen_8h.md index 70cfc37a0b..805ebe3498 100644 --- a/dev/api/Files/SplashScreen_8h.md +++ b/dev/api/Files/SplashScreen_8h.md @@ -80,4 +80,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StackWalker_8h.html b/dev/api/Files/StackWalker_8h.html index ffd636b52a..7f7fd002e5 100644 --- a/dev/api/Files/StackWalker_8h.html +++ b/dev/api/Files/StackWalker_8h.html @@ -2617,7 +2617,7 @@

    Source code

    #endif // win32
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StackWalker_8h.md b/dev/api/Files/StackWalker_8h.md index 67685af566..fa6585212d 100644 --- a/dev/api/Files/StackWalker_8h.md +++ b/dev/api/Files/StackWalker_8h.md @@ -237,4 +237,4 @@ protected: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StatsGroupLDAJob_8h.html b/dev/api/Files/StatsGroupLDAJob_8h.html index 83044ecbf7..44805467fd 100644 --- a/dev/api/Files/StatsGroupLDAJob_8h.html +++ b/dev/api/Files/StatsGroupLDAJob_8h.html @@ -2469,7 +2469,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StatsGroupLDAJob_8h.md b/dev/api/Files/StatsGroupLDAJob_8h.md index 6353bda746..94cd2fa7c4 100644 --- a/dev/api/Files/StatsGroupLDAJob_8h.md +++ b/dev/api/Files/StatsGroupLDAJob_8h.md @@ -58,4 +58,4 @@ class StatsGroupLDAJob : public Job { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StatusBarWidget_8h.html b/dev/api/Files/StatusBarWidget_8h.html index f23006eddb..c0882cd35b 100644 --- a/dev/api/Files/StatusBarWidget_8h.html +++ b/dev/api/Files/StatusBarWidget_8h.html @@ -2480,7 +2480,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StatusBarWidget_8h.md b/dev/api/Files/StatusBarWidget_8h.md index 6907ebc220..9cacbf980d 100644 --- a/dev/api/Files/StatusBarWidget_8h.md +++ b/dev/api/Files/StatusBarWidget_8h.md @@ -69,4 +69,4 @@ class StatusBarWidget : public QWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StringUtils_8h.html b/dev/api/Files/StringUtils_8h.html index 6d71b4b594..680b35e2c9 100644 --- a/dev/api/Files/StringUtils_8h.html +++ b/dev/api/Files/StringUtils_8h.html @@ -2467,7 +2467,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StringUtils_8h.md b/dev/api/Files/StringUtils_8h.md index d33227f3a4..e44d7e94b5 100644 --- a/dev/api/Files/StringUtils_8h.md +++ b/dev/api/Files/StringUtils_8h.md @@ -56,4 +56,4 @@ class StringUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioEnums_8h.html b/dev/api/Files/StudioEnums_8h.html index c49889c29c..303e037adb 100644 --- a/dev/api/Files/StudioEnums_8h.html +++ b/dev/api/Files/StudioEnums_8h.html @@ -2435,7 +2435,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioEnums_8h.md b/dev/api/Files/StudioEnums_8h.md index 6704eca4a2..e03c7a787c 100644 --- a/dev/api/Files/StudioEnums_8h.md +++ b/dev/api/Files/StudioEnums_8h.md @@ -40,4 +40,4 @@ DisplayMode string_to_display_mode(std::string str); ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioHandleWidget_8h.html b/dev/api/Files/StudioHandleWidget_8h.html index 07477c16cd..8214856d5e 100644 --- a/dev/api/Files/StudioHandleWidget_8h.html +++ b/dev/api/Files/StudioHandleWidget_8h.html @@ -2474,7 +2474,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioHandleWidget_8h.md b/dev/api/Files/StudioHandleWidget_8h.md index 5becd4fd64..898928d125 100644 --- a/dev/api/Files/StudioHandleWidget_8h.md +++ b/dev/api/Files/StudioHandleWidget_8h.md @@ -63,4 +63,4 @@ class StudioHandleWidget : public vtkHandleWidget { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioInteractorStyle_8h.html b/dev/api/Files/StudioInteractorStyle_8h.html index c63f40fe1a..cc296468cd 100644 --- a/dev/api/Files/StudioInteractorStyle_8h.html +++ b/dev/api/Files/StudioInteractorStyle_8h.html @@ -2487,7 +2487,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioInteractorStyle_8h.md b/dev/api/Files/StudioInteractorStyle_8h.md index 70e159330c..8d95cfe1dd 100644 --- a/dev/api/Files/StudioInteractorStyle_8h.md +++ b/dev/api/Files/StudioInteractorStyle_8h.md @@ -76,4 +76,4 @@ class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioLogger_8h.html b/dev/api/Files/StudioLogger_8h.html index 0fe5c8d0bc..7ec3e785fd 100644 --- a/dev/api/Files/StudioLogger_8h.html +++ b/dev/api/Files/StudioLogger_8h.html @@ -2450,7 +2450,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioLogger_8h.md b/dev/api/Files/StudioLogger_8h.md index 0b28a0d213..1944a2337a 100644 --- a/dev/api/Files/StudioLogger_8h.md +++ b/dev/api/Files/StudioLogger_8h.md @@ -53,4 +53,4 @@ class StudioLogger : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioMesh_8h.html b/dev/api/Files/StudioMesh_8h.html index 3e4cef99c3..99ea12bee9 100644 --- a/dev/api/Files/StudioMesh_8h.html +++ b/dev/api/Files/StudioMesh_8h.html @@ -2563,7 +2563,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioMesh_8h.md b/dev/api/Files/StudioMesh_8h.md index fc5c681c31..d491039244 100644 --- a/dev/api/Files/StudioMesh_8h.md +++ b/dev/api/Files/StudioMesh_8h.md @@ -115,4 +115,4 @@ class StudioMesh { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioSliceInteractorStyle_8h.html b/dev/api/Files/StudioSliceInteractorStyle_8h.html index d482279524..c0f2916cb9 100644 --- a/dev/api/Files/StudioSliceInteractorStyle_8h.html +++ b/dev/api/Files/StudioSliceInteractorStyle_8h.html @@ -2488,7 +2488,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioSliceInteractorStyle_8h.md b/dev/api/Files/StudioSliceInteractorStyle_8h.md index 6ebe25ee62..100655a5af 100644 --- a/dev/api/Files/StudioSliceInteractorStyle_8h.md +++ b/dev/api/Files/StudioSliceInteractorStyle_8h.md @@ -77,4 +77,4 @@ class StudioSliceInteractorStyle : public vtkInteractorStyleImage { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioUtils_8h.html b/dev/api/Files/StudioUtils_8h.html index d8dffba403..6413138104 100644 --- a/dev/api/Files/StudioUtils_8h.html +++ b/dev/api/Files/StudioUtils_8h.html @@ -2474,7 +2474,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioUtils_8h.md b/dev/api/Files/StudioUtils_8h.md index 7110bb4b84..cc499362c5 100644 --- a/dev/api/Files/StudioUtils_8h.md +++ b/dev/api/Files/StudioUtils_8h.md @@ -63,4 +63,4 @@ class StudioUtils { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/StudioVtkOutputWindow_8h.html b/dev/api/Files/StudioVtkOutputWindow_8h.html index 2ebd4f302d..1911d734c2 100644 --- a/dev/api/Files/StudioVtkOutputWindow_8h.html +++ b/dev/api/Files/StudioVtkOutputWindow_8h.html @@ -2466,7 +2466,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/StudioVtkOutputWindow_8h.md b/dev/api/Files/StudioVtkOutputWindow_8h.md index 5f6ada0fee..d268679b45 100644 --- a/dev/api/Files/StudioVtkOutputWindow_8h.md +++ b/dev/api/Files/StudioVtkOutputWindow_8h.md @@ -55,4 +55,4 @@ class StudioVtkOutputWindow : public QObject, public vtkOutputWindow { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Style_8h.html b/dev/api/Files/Style_8h.html index 2926a81f24..2953776a0f 100644 --- a/dev/api/Files/Style_8h.html +++ b/dev/api/Files/Style_8h.html @@ -2458,7 +2458,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Style_8h.md b/dev/api/Files/Style_8h.md index 0a073a4f56..ef1650b423 100644 --- a/dev/api/Files/Style_8h.md +++ b/dev/api/Files/Style_8h.md @@ -47,4 +47,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Subject_8h.html b/dev/api/Files/Subject_8h.html index ed07b7872b..b6f2d19823 100644 --- a/dev/api/Files/Subject_8h.html +++ b/dev/api/Files/Subject_8h.html @@ -2530,7 +2530,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Subject_8h.md b/dev/api/Files/Subject_8h.md index 485c5ac761..4f4bb53c85 100644 --- a/dev/api/Files/Subject_8h.md +++ b/dev/api/Files/Subject_8h.md @@ -119,4 +119,4 @@ class Subject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/SurfaceReconstructor_8h.html b/dev/api/Files/SurfaceReconstructor_8h.html index 1d315537d3..69c5d82166 100644 --- a/dev/api/Files/SurfaceReconstructor_8h.html +++ b/dev/api/Files/SurfaceReconstructor_8h.html @@ -2489,7 +2489,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/SurfaceReconstructor_8h.md b/dev/api/Files/SurfaceReconstructor_8h.md index e8771d226e..796115bbca 100644 --- a/dev/api/Files/SurfaceReconstructor_8h.md +++ b/dev/api/Files/SurfaceReconstructor_8h.md @@ -88,4 +88,4 @@ class SurfaceReconstructor { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Telemetry_8h.html b/dev/api/Files/Telemetry_8h.html index f8d85ef145..a6c225c714 100644 --- a/dev/api/Files/Telemetry_8h.html +++ b/dev/api/Files/Telemetry_8h.html @@ -2478,7 +2478,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Telemetry_8h.md b/dev/api/Files/Telemetry_8h.md index 429e23a0fe..84c6182bd4 100644 --- a/dev/api/Files/Telemetry_8h.md +++ b/dev/api/Files/Telemetry_8h.md @@ -67,4 +67,4 @@ class Telemetry : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/UpdateChecker_8h.html b/dev/api/Files/UpdateChecker_8h.html index 30cd15806f..14487056c6 100644 --- a/dev/api/Files/UpdateChecker_8h.html +++ b/dev/api/Files/UpdateChecker_8h.html @@ -2483,7 +2483,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/UpdateChecker_8h.md b/dev/api/Files/UpdateChecker_8h.md index edcba6aa23..4bc35fbdda 100644 --- a/dev/api/Files/UpdateChecker_8h.md +++ b/dev/api/Files/UpdateChecker_8h.md @@ -70,4 +70,4 @@ class UpdateChecker : public QDialog { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Utils_8h.html b/dev/api/Files/Utils_8h.html index 2febcfd69e..ead3ddeae6 100644 --- a/dev/api/Files/Utils_8h.html +++ b/dev/api/Files/Utils_8h.html @@ -2683,7 +2683,7 @@

    Source code

    #endif // UTILS_H
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Utils_8h.md b/dev/api/Files/Utils_8h.md index 5aad5bd440..88ab441e4a 100644 --- a/dev/api/Files/Utils_8h.md +++ b/dev/api/Files/Utils_8h.md @@ -217,4 +217,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Variant_8h.html b/dev/api/Files/Variant_8h.html index 2692b1dc54..9b1ef594f8 100644 --- a/dev/api/Files/Variant_8h.html +++ b/dev/api/Files/Variant_8h.html @@ -2502,7 +2502,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Variant_8h.md b/dev/api/Files/Variant_8h.md index 6c8eba2f99..e0fcea4cf2 100644 --- a/dev/api/Files/Variant_8h.md +++ b/dev/api/Files/Variant_8h.md @@ -91,4 +91,4 @@ class Variant { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/VectorFunction_8h.html b/dev/api/Files/VectorFunction_8h.html index b3cf6a1a04..5f1cc5ad3b 100644 --- a/dev/api/Files/VectorFunction_8h.html +++ b/dev/api/Files/VectorFunction_8h.html @@ -2504,7 +2504,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/VectorFunction_8h.md b/dev/api/Files/VectorFunction_8h.md index c3a3afe303..64fb4beb7b 100644 --- a/dev/api/Files/VectorFunction_8h.md +++ b/dev/api/Files/VectorFunction_8h.md @@ -93,4 +93,4 @@ class VectorFunction : public itk::LightObject { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/VectorImage_8h.html b/dev/api/Files/VectorImage_8h.html index 4c05e80cc7..fb1a959159 100644 --- a/dev/api/Files/VectorImage_8h.html +++ b/dev/api/Files/VectorImage_8h.html @@ -2470,7 +2470,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/VectorImage_8h.md b/dev/api/Files/VectorImage_8h.md index 5f6bbdcecc..7de69a0e99 100644 --- a/dev/api/Files/VectorImage_8h.md +++ b/dev/api/Files/VectorImage_8h.md @@ -59,4 +59,4 @@ class VectorImage { ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Viewer_8h.html b/dev/api/Files/Viewer_8h.html index e2bcd28403..d12dcedf07 100644 --- a/dev/api/Files/Viewer_8h.html +++ b/dev/api/Files/Viewer_8h.html @@ -2695,7 +2695,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Viewer_8h.md b/dev/api/Files/Viewer_8h.md index 553c08b8df..6337940cb2 100644 --- a/dev/api/Files/Viewer_8h.md +++ b/dev/api/Files/Viewer_8h.md @@ -281,4 +281,4 @@ class Viewer { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Visualizer_8h.html b/dev/api/Files/Visualizer_8h.html index cd9b4e78c0..0ee3a42d6b 100644 --- a/dev/api/Files/Visualizer_8h.html +++ b/dev/api/Files/Visualizer_8h.html @@ -2605,7 +2605,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Visualizer_8h.md b/dev/api/Files/Visualizer_8h.md index 93d5443339..612634fc51 100644 --- a/dev/api/Files/Visualizer_8h.md +++ b/dev/api/Files/Visualizer_8h.md @@ -194,4 +194,4 @@ class Visualizer : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/VtkMeshWrapper_8h.html b/dev/api/Files/VtkMeshWrapper_8h.html index 596f0208a8..8d908c603b 100644 --- a/dev/api/Files/VtkMeshWrapper_8h.html +++ b/dev/api/Files/VtkMeshWrapper_8h.html @@ -2626,7 +2626,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/VtkMeshWrapper_8h.md b/dev/api/Files/VtkMeshWrapper_8h.md index 44c4393d7f..b39efdcbf5 100644 --- a/dev/api/Files/VtkMeshWrapper_8h.md +++ b/dev/api/Files/VtkMeshWrapper_8h.md @@ -215,4 +215,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/WheelEventForwarder_8h.html b/dev/api/Files/WheelEventForwarder_8h.html index d359cfaa58..5a6d2610fb 100644 --- a/dev/api/Files/WheelEventForwarder_8h.html +++ b/dev/api/Files/WheelEventForwarder_8h.html @@ -2462,7 +2462,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/WheelEventForwarder_8h.md b/dev/api/Files/WheelEventForwarder_8h.md index 6bce3e5a7b..7a0a019721 100644 --- a/dev/api/Files/WheelEventForwarder_8h.md +++ b/dev/api/Files/WheelEventForwarder_8h.md @@ -51,4 +51,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/WindowsCrashHandler_8h.html b/dev/api/Files/WindowsCrashHandler_8h.html index be58254264..ef36926525 100644 --- a/dev/api/Files/WindowsCrashHandler_8h.html +++ b/dev/api/Files/WindowsCrashHandler_8h.html @@ -2446,7 +2446,7 @@

    Source code

    int init_crash_handler();
     

    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/WindowsCrashHandler_8h.md b/dev/api/Files/WindowsCrashHandler_8h.md index 42d83aee3e..f6a762175d 100644 --- a/dev/api/Files/WindowsCrashHandler_8h.md +++ b/dev/api/Files/WindowsCrashHandler_8h.md @@ -34,4 +34,4 @@ int init_crash_handler(); ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/Worker_8h.html b/dev/api/Files/Worker_8h.html index 3a25d11c29..1ad3cda8ba 100644 --- a/dev/api/Files/Worker_8h.html +++ b/dev/api/Files/Worker_8h.html @@ -2475,7 +2475,7 @@

    Source code

    } // namespace shapeworks
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/Worker_8h.md b/dev/api/Files/Worker_8h.md index a3f5c6cb7d..b03017a78c 100644 --- a/dev/api/Files/Worker_8h.md +++ b/dev/api/Files/Worker_8h.md @@ -64,4 +64,4 @@ class Worker : public QObject { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html b/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html index 2673d66944..ea70fc00bd 100644 --- a/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html +++ b/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html @@ -2428,7 +2428,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md b/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md index 7d954a0576..713a33ba19 100644 --- a/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md +++ b/dev/api/Files/dir_0e4564af99249380ef1f30404400c0a3.md @@ -26,4 +26,4 @@ title: Libs/Optimize/Function ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html b/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html index b15981294c..82fdd1fcf0 100644 --- a/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html +++ b/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md b/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md index 0172e6a3d8..cca23c0792 100644 --- a/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md +++ b/dev/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.md @@ -24,4 +24,4 @@ title: Libs/Optimize/Matrix ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_2efd803177123288b92908ec296fe578.html b/dev/api/Files/dir_2efd803177123288b92908ec296fe578.html index 75dfc58cac..2d50dbb9ef 100644 --- a/dev/api/Files/dir_2efd803177123288b92908ec296fe578.html +++ b/dev/api/Files/dir_2efd803177123288b92908ec296fe578.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_2efd803177123288b92908ec296fe578.md b/dev/api/Files/dir_2efd803177123288b92908ec296fe578.md index 5c4d8293fd..4834c5b86c 100644 --- a/dev/api/Files/dir_2efd803177123288b92908ec296fe578.md +++ b/dev/api/Files/dir_2efd803177123288b92908ec296fe578.md @@ -22,4 +22,4 @@ title: Studio/Analysis ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html b/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html index 24ceecdc3e..56bb93d2ac 100644 --- a/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html +++ b/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html @@ -2445,7 +2445,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md b/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md index bf072dc367..4f2d1b630b 100644 --- a/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md +++ b/dev/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.md @@ -31,4 +31,4 @@ title: Libs/Mesh ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html b/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html index 3f2d02ec49..5d2b2cdba1 100644 --- a/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html +++ b/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md b/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md index eb9de52cf8..9c73f107d5 100644 --- a/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md +++ b/dev/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.md @@ -24,4 +24,4 @@ title: Libs/Optimize/Neighborhood ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html b/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html index 3c1a89deed..8c279ab0d9 100644 --- a/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html +++ b/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md b/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md index 503a859fd4..9ebd1206d5 100644 --- a/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md +++ b/dev/api/Files/dir_3c387d8f52af5a1c9b80596228515621.md @@ -24,4 +24,4 @@ title: Libs/Alignment/Transforms ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html b/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html index 2f55070724..e7a6e79cde 100644 --- a/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html +++ b/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html @@ -2458,7 +2458,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md b/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md index 2bfac31be8..bc33a66b44 100644 --- a/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md +++ b/dev/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.md @@ -36,4 +36,4 @@ title: Libs/Mesh/PreviewMeshQC ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html b/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html index 025cc3cf12..a9a9112db6 100644 --- a/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html +++ b/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html @@ -2410,7 +2410,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md b/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md index e8edf3f7d0..66ffe09ad8 100644 --- a/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md +++ b/dev/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.md @@ -20,4 +20,4 @@ title: Studio/Groom ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html b/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html index 9537f7144a..7ea846eff9 100644 --- a/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html +++ b/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html @@ -2410,7 +2410,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md b/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md index b71ef93dc3..1717a027fa 100644 --- a/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md +++ b/dev/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.md @@ -20,4 +20,4 @@ title: Studio/Python ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html b/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html index d5734d8b8a..945645123f 100644 --- a/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html +++ b/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html @@ -2419,7 +2419,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md b/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md index 51fee228f3..5a5404e46f 100644 --- a/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md +++ b/dev/api/Files/dir_486a45e6ebc11931a27093b877e14af3.md @@ -23,4 +23,4 @@ title: Applications/shapeworks ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html b/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html index 9322aa16b3..6c5f845909 100644 --- a/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html +++ b/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html @@ -2437,7 +2437,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md b/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md index ab93c1b22a..b1f8e09de8 100644 --- a/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md +++ b/dev/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.md @@ -29,4 +29,4 @@ title: Libs/Project ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.html b/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.html index dc5f760e81..4b859a03be 100644 --- a/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.html +++ b/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.md b/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.md index 2ae4076bc8..8cf8e857a9 100644 --- a/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.md +++ b/dev/api/Files/dir_645c19d7da098e01621cdebb663b8767.md @@ -24,4 +24,4 @@ title: Studio/Utils ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html b/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html index 75432ab47a..010dffbd6a 100644 --- a/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html +++ b/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html @@ -2413,7 +2413,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md b/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md index e9707e3431..3dde7f942f 100644 --- a/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md +++ b/dev/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.md @@ -21,4 +21,4 @@ title: Libs/Python ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html b/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html index 6d686e0a73..a6dd2afd8c 100644 --- a/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html +++ b/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html @@ -2440,7 +2440,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md b/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md index 56aae86055..9934e01a86 100644 --- a/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md +++ b/dev/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.md @@ -30,4 +30,4 @@ title: Libs ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html b/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html index eabc8506f2..14a4a192c0 100644 --- a/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html +++ b/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md b/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md index c5d34cbf73..c42d9838b6 100644 --- a/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md +++ b/dev/api/Files/dir_73a09fceee206218e6d903b3c5deb969.md @@ -22,4 +22,4 @@ title: Libs/Utils ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html b/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html index d7edfc5ee1..a29da2c03a 100644 --- a/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html +++ b/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html @@ -2425,7 +2425,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md b/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md index 0ccfd50070..79ba92cf8f 100644 --- a/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md +++ b/dev/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.md @@ -25,4 +25,4 @@ title: Studio/Job ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html b/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html index 8ca0ef282a..0ce2e97bdd 100644 --- a/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html +++ b/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html @@ -2425,7 +2425,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md b/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md index 19be1b35f9..1e2bc85372 100644 --- a/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md +++ b/dev/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.md @@ -25,4 +25,4 @@ title: Libs/Optimize/Utils ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html b/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html index 883731b767..e2a00a2b68 100644 --- a/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html +++ b/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md b/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md index 0d15565665..5e022d990f 100644 --- a/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md +++ b/dev/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.md @@ -22,4 +22,4 @@ title: Libs/Optimize/Container ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html b/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html index 403158a8c1..38a6b558ae 100644 --- a/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html +++ b/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html @@ -2410,7 +2410,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md b/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md index 8a7b01bcbc..802aa0e270 100644 --- a/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md +++ b/dev/api/Files/dir_8c1195e4829fa17630c4278c41da729a.md @@ -20,4 +20,4 @@ title: Applications ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html b/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html index 0ebd3a9be3..8639766d7d 100644 --- a/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html +++ b/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html @@ -2419,7 +2419,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md b/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md index df9cca690c..fcd5cedb27 100644 --- a/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md +++ b/dev/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.md @@ -23,4 +23,4 @@ title: Libs/Image ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html b/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html index 0cb440a05a..2301030854 100644 --- a/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html +++ b/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html @@ -2413,7 +2413,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md b/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md index 373b973b08..45e118df15 100644 --- a/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md +++ b/dev/api/Files/dir_9e99c41d3802fada2a0119d079df0956.md @@ -21,4 +21,4 @@ title: Studio/Optimize ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html b/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html index 2d9f7b60e5..58becb2019 100644 --- a/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html +++ b/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html @@ -2410,7 +2410,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md b/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md index 28ce215976..dee33af430 100644 --- a/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md +++ b/dev/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.md @@ -20,4 +20,4 @@ title: Studio/Resources ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html b/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html index 8b74bbfa3d..4e0aea304f 100644 --- a/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html +++ b/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md b/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md index 4d53908e55..6b4278193b 100644 --- a/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md +++ b/dev/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.md @@ -24,4 +24,4 @@ title: Libs/Optimize/Constraints ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html b/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html index be683231b0..af385dc51c 100644 --- a/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html +++ b/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html @@ -2440,7 +2440,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md b/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md index f63346c4b0..cf6175bc88 100644 --- a/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md +++ b/dev/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.md @@ -30,4 +30,4 @@ title: Studio/Data ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html b/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html index 330e408dab..0510e70289 100644 --- a/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html +++ b/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html @@ -2382,7 +2382,7 @@

    Documentation/Doxygen


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md b/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md index c06a7f1a1e..582ee22950 100644 --- a/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md +++ b/dev/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.md @@ -14,4 +14,4 @@ title: Documentation/Doxygen ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html b/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html index a11768d289..727aa32575 100644 --- a/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html +++ b/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html @@ -2452,7 +2452,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md b/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md index e61e1422c0..76db87e007 100644 --- a/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md +++ b/dev/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.md @@ -34,4 +34,4 @@ title: Studio/Visualization ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html b/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html index f826371031..9abc746274 100644 --- a/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html +++ b/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html @@ -2446,7 +2446,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md b/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md index 0a172c00cc..67b76b564c 100644 --- a/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md +++ b/dev/api/Files/dir_b92c77c85671879e4c48e03051777b7e.md @@ -32,4 +32,4 @@ title: Libs/Optimize/Domain ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html b/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html index c56593b41f..9e7528f93a 100644 --- a/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html +++ b/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html @@ -2440,7 +2440,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md b/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md index cfac37dad3..cdffdbe457 100644 --- a/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md +++ b/dev/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.md @@ -30,4 +30,4 @@ title: Studio ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html b/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html index 57676264df..26982ebda7 100644 --- a/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html +++ b/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html @@ -2422,7 +2422,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md b/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md index f56a922c62..7e0907dd49 100644 --- a/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md +++ b/dev/api/Files/dir_c13ed27a749775eeb2d59234813cae48.md @@ -24,4 +24,4 @@ title: Libs/Common ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html b/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html index ebac985176..0dc1a753ab 100644 --- a/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html +++ b/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html @@ -2430,7 +2430,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md b/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md index 954694cdeb..b4d11ed718 100644 --- a/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md +++ b/dev/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.md @@ -26,4 +26,4 @@ title: Libs/Alignment ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html b/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html index 8eb74c8152..5076f9d4fd 100644 --- a/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html +++ b/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html @@ -2413,7 +2413,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md b/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md index f139e58364..cef9f97464 100644 --- a/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md +++ b/dev/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.md @@ -21,4 +21,4 @@ title: Libs/Groom ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.html b/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.html index 49a6645447..84b15e3f36 100644 --- a/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.html +++ b/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.html @@ -2410,7 +2410,7 @@

    Directories


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.md b/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.md index e23d145b81..145522a53b 100644 --- a/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.md +++ b/dev/api/Files/dir_cb8980ab440f994989990a6313097edf.md @@ -20,4 +20,4 @@ title: Documentation ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html b/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html index 46c4ea725c..bb87c31004 100644 --- a/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html +++ b/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html @@ -2464,7 +2464,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md b/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md index d7e88a426c..71d62b392a 100644 --- a/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md +++ b/dev/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.md @@ -38,4 +38,4 @@ title: Libs/Analyze ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html b/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html index ca9992733d..a1155626e0 100644 --- a/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html +++ b/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html @@ -2416,7 +2416,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md b/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md index e6425e2113..dbaf779c0e 100644 --- a/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md +++ b/dev/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.md @@ -22,4 +22,4 @@ title: Studio/DeepSSM ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html b/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html index 13aa327cb5..a85a643f54 100644 --- a/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html +++ b/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html @@ -2475,7 +2475,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md b/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md index b23a3d6e9d..a649720726 100644 --- a/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md +++ b/dev/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.md @@ -41,4 +41,4 @@ title: Libs/Optimize ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html b/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html index 052ea12537..cfde51eedc 100644 --- a/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html +++ b/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html @@ -2443,7 +2443,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md b/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md index e77754d699..5d855876f9 100644 --- a/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md +++ b/dev/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.md @@ -31,4 +31,4 @@ title: Studio/Interface ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html b/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html index 22db6e28c6..52334e75e1 100644 --- a/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html +++ b/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html @@ -2428,7 +2428,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md b/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md index dceffa6c66..3429aa83e5 100644 --- a/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md +++ b/dev/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.md @@ -26,4 +26,4 @@ title: Libs/Particles ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/index_files.html b/dev/api/Files/index_files.html index fd74d7b568..7726e8f630 100644 --- a/dev/api/Files/index_files.html +++ b/dev/api/Files/index_files.html @@ -2705,7 +2705,7 @@

    Files


    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/index_files.md b/dev/api/Files/index_files.md index f5018689bb..db07b6275b 100644 --- a/dev/api/Files/index_files.md +++ b/dev/api/Files/index_files.md @@ -250,4 +250,4 @@ title: Files ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/itkAdvancedTransform_8h.html b/dev/api/Files/itkAdvancedTransform_8h.html index 283e6bb834..bfbdee8522 100644 --- a/dev/api/Files/itkAdvancedTransform_8h.html +++ b/dev/api/Files/itkAdvancedTransform_8h.html @@ -2628,7 +2628,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/itkAdvancedTransform_8h.md b/dev/api/Files/itkAdvancedTransform_8h.md index 0d61428090..55480dc223 100644 --- a/dev/api/Files/itkAdvancedTransform_8h.md +++ b/dev/api/Files/itkAdvancedTransform_8h.md @@ -217,4 +217,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html b/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html index 1d2dbc660d..fbbf5bd067 100644 --- a/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html +++ b/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html @@ -2528,7 +2528,7 @@

    Source code

    #endif // __itkCompactlySupportedRBFSparseKernelTransform_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md b/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md index dcaba85079..768f712bff 100644 --- a/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md +++ b/dev/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.md @@ -117,4 +117,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/itkKernelTransform2_8h.html b/dev/api/Files/itkKernelTransform2_8h.html index 906d700e34..36678a7a25 100644 --- a/dev/api/Files/itkKernelTransform2_8h.html +++ b/dev/api/Files/itkKernelTransform2_8h.html @@ -2804,7 +2804,7 @@

    Source code

    #endif // __itkKernelTransform2_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/itkKernelTransform2_8h.md b/dev/api/Files/itkKernelTransform2_8h.md index cb88bfe974..3c645905df 100644 --- a/dev/api/Files/itkKernelTransform2_8h.md +++ b/dev/api/Files/itkKernelTransform2_8h.md @@ -393,4 +393,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/itkMultiplyByConstantImageFilter_8h.html b/dev/api/Files/itkMultiplyByConstantImageFilter_8h.html index e446b698f7..cd17e2eae6 100644 --- a/dev/api/Files/itkMultiplyByConstantImageFilter_8h.html +++ b/dev/api/Files/itkMultiplyByConstantImageFilter_8h.html @@ -2572,7 +2572,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/itkMultiplyByConstantImageFilter_8h.md b/dev/api/Files/itkMultiplyByConstantImageFilter_8h.md index 6127c51154..8d0d7ac08c 100644 --- a/dev/api/Files/itkMultiplyByConstantImageFilter_8h.md +++ b/dev/api/Files/itkMultiplyByConstantImageFilter_8h.md @@ -156,4 +156,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/itkSparseKernelTransform_8h.html b/dev/api/Files/itkSparseKernelTransform_8h.html index 9dcc2b5eb7..7481c8524c 100644 --- a/dev/api/Files/itkSparseKernelTransform_8h.html +++ b/dev/api/Files/itkSparseKernelTransform_8h.html @@ -2683,7 +2683,7 @@

    Source code

    #endif // __itkSparseKernelTransform_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/itkSparseKernelTransform_8h.md b/dev/api/Files/itkSparseKernelTransform_8h.md index 3d8698baa0..df07035fbc 100644 --- a/dev/api/Files/itkSparseKernelTransform_8h.md +++ b/dev/api/Files/itkSparseKernelTransform_8h.md @@ -272,4 +272,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/itkTPGACLevelSetImageFilter_8h.html b/dev/api/Files/itkTPGACLevelSetImageFilter_8h.html index 67c2ae5998..70662da777 100644 --- a/dev/api/Files/itkTPGACLevelSetImageFilter_8h.html +++ b/dev/api/Files/itkTPGACLevelSetImageFilter_8h.html @@ -2880,7 +2880,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/itkTPGACLevelSetImageFilter_8h.md b/dev/api/Files/itkTPGACLevelSetImageFilter_8h.md index a9c7da6148..a8de43d4ce 100644 --- a/dev/api/Files/itkTPGACLevelSetImageFilter_8h.md +++ b/dev/api/Files/itkTPGACLevelSetImageFilter_8h.md @@ -438,4 +438,4 @@ TPGACLevelSetImageFilter ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.html b/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.html index 9ce5db810c..36a9aee002 100644 --- a/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.html +++ b/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.html @@ -2545,7 +2545,7 @@

    Source code

    #endif // __itkThinPlateSplineKernelTransform2_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.md b/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.md index 76d6ba86a4..da66f86600 100644 --- a/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.md +++ b/dev/api/Files/itkThinPlateSplineKernelTransform2_8h.md @@ -134,4 +134,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/math3d_8h.html b/dev/api/Files/math3d_8h.html index 3cad73e3dc..56c13fe326 100644 --- a/dev/api/Files/math3d_8h.html +++ b/dev/api/Files/math3d_8h.html @@ -3091,7 +3091,7 @@

    Source code

    };
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/math3d_8h.md b/dev/api/Files/math3d_8h.md index ff94e41f84..31d52a3e31 100644 --- a/dev/api/Files/math3d_8h.md +++ b/dev/api/Files/math3d_8h.md @@ -614,4 +614,4 @@ public: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/meshFIM_8h.html b/dev/api/Files/meshFIM_8h.html index c608500dd0..aeef51b8c6 100644 --- a/dev/api/Files/meshFIM_8h.html +++ b/dev/api/Files/meshFIM_8h.html @@ -2740,7 +2740,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/meshFIM_8h.md b/dev/api/Files/meshFIM_8h.md index 6a145274e5..9261ff5d61 100644 --- a/dev/api/Files/meshFIM_8h.md +++ b/dev/api/Files/meshFIM_8h.md @@ -294,4 +294,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/pybind__utils_8h.html b/dev/api/Files/pybind__utils_8h.html index 346be4fb20..0c3b2c4c87 100644 --- a/dev/api/Files/pybind__utils_8h.html +++ b/dev/api/Files/pybind__utils_8h.html @@ -2685,7 +2685,7 @@

    Source code

    }
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/pybind__utils_8h.md b/dev/api/Files/pybind__utils_8h.md index 80f18db5c8..7ec00779bc 100644 --- a/dev/api/Files/pybind__utils_8h.md +++ b/dev/api/Files/pybind__utils_8h.md @@ -290,4 +290,4 @@ py::array arrToPy(Array& array, ArrayTransferOptions xfer = COPY_ARRAY) { ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/resource_8h.html b/dev/api/Files/resource_8h.html index 33cf144db5..6447776382 100644 --- a/dev/api/Files/resource_8h.html +++ b/dev/api/Files/resource_8h.html @@ -2461,7 +2461,7 @@

    Source code

    #endif
    -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/resource_8h.md b/dev/api/Files/resource_8h.md index 559d7b3f9d..977dadca49 100644 --- a/dev/api/Files/resource_8h.md +++ b/dev/api/Files/resource_8h.md @@ -49,4 +49,4 @@ title: Studio/Resources/resource.h ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/stdafx_8h.html b/dev/api/Files/stdafx_8h.html index fe00f4c9d2..d44456576e 100644 --- a/dev/api/Files/stdafx_8h.html +++ b/dev/api/Files/stdafx_8h.html @@ -2410,7 +2410,7 @@

    Source code

    // TODO: reference additional headers your program requires here
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/stdafx_8h.md b/dev/api/Files/stdafx_8h.md index f049d431f5..8531af755e 100644 --- a/dev/api/Files/stdafx_8h.md +++ b/dev/api/Files/stdafx_8h.md @@ -29,4 +29,4 @@ title: Libs/Mesh/PreviewMeshQC/stdafx.h ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Files/vtkPolyDataToImageData_8h.html b/dev/api/Files/vtkPolyDataToImageData_8h.html index d70407242a..738689766d 100644 --- a/dev/api/Files/vtkPolyDataToImageData_8h.html +++ b/dev/api/Files/vtkPolyDataToImageData_8h.html @@ -2509,7 +2509,7 @@

    Source code

    #endif // ifndef __vtkPolyDataToImageData_h
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Files/vtkPolyDataToImageData_8h.md b/dev/api/Files/vtkPolyDataToImageData_8h.md index 2ae933cc61..6e08fbbf97 100644 --- a/dev/api/Files/vtkPolyDataToImageData_8h.md +++ b/dev/api/Files/vtkPolyDataToImageData_8h.md @@ -112,4 +112,4 @@ private: ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Modules/group__Group-Common.html b/dev/api/Modules/group__Group-Common.html index b24380da71..bdeeaad1a5 100644 --- a/dev/api/Modules/group__Group-Common.html +++ b/dev/api/Modules/group__Group-Common.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Modules/group__Group-Common.md b/dev/api/Modules/group__Group-Common.md index 95f8b317d8..283c1a7ef9 100644 --- a/dev/api/Modules/group__Group-Common.md +++ b/dev/api/Modules/group__Group-Common.md @@ -20,4 +20,4 @@ title: Common Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Modules/group__Group-Constraint.html b/dev/api/Modules/group__Group-Constraint.html index 79f40ead1e..d063d9970f 100644 --- a/dev/api/Modules/group__Group-Constraint.html +++ b/dev/api/Modules/group__Group-Constraint.html @@ -2382,7 +2382,7 @@

    Constraint Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Modules/group__Group-Constraint.md b/dev/api/Modules/group__Group-Constraint.md index ff292cc7ae..037a268a39 100644 --- a/dev/api/Modules/group__Group-Constraint.md +++ b/dev/api/Modules/group__Group-Constraint.md @@ -14,4 +14,4 @@ title: Constraint Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Modules/group__Group-Image.html b/dev/api/Modules/group__Group-Image.html index c87b8c0eb3..b91121aa65 100644 --- a/dev/api/Modules/group__Group-Image.html +++ b/dev/api/Modules/group__Group-Image.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Modules/group__Group-Image.md b/dev/api/Modules/group__Group-Image.md index f49ccff726..7750a4f7da 100644 --- a/dev/api/Modules/group__Group-Image.md +++ b/dev/api/Modules/group__Group-Image.md @@ -20,4 +20,4 @@ title: Image Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Modules/group__Group-Mesh.html b/dev/api/Modules/group__Group-Mesh.html index e1207b21a9..d916fc7bd4 100644 --- a/dev/api/Modules/group__Group-Mesh.html +++ b/dev/api/Modules/group__Group-Mesh.html @@ -2420,7 +2420,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Modules/group__Group-Mesh.md b/dev/api/Modules/group__Group-Mesh.md index f546d2bb6b..d107dfa78c 100644 --- a/dev/api/Modules/group__Group-Mesh.md +++ b/dev/api/Modules/group__Group-Mesh.md @@ -22,4 +22,4 @@ title: Mesh Classes ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:28 +0000 \ No newline at end of file diff --git a/dev/api/Modules/index_groups.html b/dev/api/Modules/index_groups.html index 8f723ec155..a5f3949f55 100644 --- a/dev/api/Modules/index_groups.html +++ b/dev/api/Modules/index_groups.html @@ -2400,7 +2400,7 @@

    Modules

  • group Mesh Classes

  • -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Modules/index_groups.md b/dev/api/Modules/index_groups.md index d940aa07ab..c831a84696 100644 --- a/dev/api/Modules/index_groups.md +++ b/dev/api/Modules/index_groups.md @@ -17,4 +17,4 @@ title: Modules ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Namespaces/index_namespaces.html b/dev/api/Namespaces/index_namespaces.html index 64a294d3d3..00c2bd75fd 100644 --- a/dev/api/Namespaces/index_namespaces.html +++ b/dev/api/Namespaces/index_namespaces.html @@ -2414,7 +2414,7 @@

    Namespaces

  • namespace utils

  • -

    Updated on 2023-10-24 at 22:16:03 +0000

    +

    Updated on 2023-10-25 at 15:40:28 +0000

    diff --git a/dev/api/Namespaces/index_namespaces.md b/dev/api/Namespaces/index_namespaces.md index 8f52ee565f..d3c194d689 100644 --- a/dev/api/Namespaces/index_namespaces.md +++ b/dev/api/Namespaces/index_namespaces.md @@ -25,4 +25,4 @@ title: Namespaces ------------------------------- -Updated on 2023-10-24 at 22:16:03 +0000 +Updated on 2023-10-25 at 15:40:28 +0000 diff --git a/dev/api/Namespaces/namespaceUi.html b/dev/api/Namespaces/namespaceUi.html index 9e9965f2c1..1ca250328c 100644 --- a/dev/api/Namespaces/namespaceUi.html +++ b/dev/api/Namespaces/namespaceUi.html @@ -2382,7 +2382,7 @@

    Ui


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespaceUi.md b/dev/api/Namespaces/namespaceUi.md index 4f07f43017..515e140e48 100644 --- a/dev/api/Namespaces/namespaceUi.md +++ b/dev/api/Namespaces/namespaceUi.md @@ -14,4 +14,4 @@ title: Ui ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespacefmt.html b/dev/api/Namespaces/namespacefmt.html index 3b103e910b..1c035477f4 100644 --- a/dev/api/Namespaces/namespacefmt.html +++ b/dev/api/Namespaces/namespacefmt.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Namespaces/namespacefmt.md b/dev/api/Namespaces/namespacefmt.md index 708588dd10..9bf9a222e9 100644 --- a/dev/api/Namespaces/namespacefmt.md +++ b/dev/api/Namespaces/namespacefmt.md @@ -20,4 +20,4 @@ title: fmt ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceitk.html b/dev/api/Namespaces/namespaceitk.html index 827f54e785..fe05429cbd 100644 --- a/dev/api/Namespaces/namespaceitk.html +++ b/dev/api/Namespaces/namespaceitk.html @@ -2691,7 +2691,7 @@

    variable nbh26Table

    };
    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Namespaces/namespaceitk.md b/dev/api/Namespaces/namespaceitk.md index 35956cc1a5..07a3c190da 100644 --- a/dev/api/Namespaces/namespaceitk.md +++ b/dev/api/Namespaces/namespaceitk.md @@ -184,4 +184,4 @@ static int nbh26Table = { ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceitk_1_1Functor.html b/dev/api/Namespaces/namespaceitk_1_1Functor.html index 9f05475629..4ee4b4f0a2 100644 --- a/dev/api/Namespaces/namespaceitk_1_1Functor.html +++ b/dev/api/Namespaces/namespaceitk_1_1Functor.html @@ -2412,7 +2412,7 @@

    Classes


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Namespaces/namespaceitk_1_1Functor.md b/dev/api/Namespaces/namespaceitk_1_1Functor.md index a346af84ed..971229d780 100644 --- a/dev/api/Namespaces/namespaceitk_1_1Functor.md +++ b/dev/api/Namespaces/namespaceitk_1_1Functor.md @@ -20,4 +20,4 @@ title: itk::Functor ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceshapeworks.html b/dev/api/Namespaces/namespaceshapeworks.html index 780ae16ac9..b23f8f47e5 100644 --- a/dev/api/Namespaces/namespaceshapeworks.html +++ b/dev/api/Namespaces/namespaceshapeworks.html @@ -7114,7 +7114,7 @@

    variable Pi

    pi that doesn't depend on deprecated or non-std lib defines


    -

    Updated on 2023-10-24 at 22:16:01 +0000

    +

    Updated on 2023-10-25 at 15:40:26 +0000

    diff --git a/dev/api/Namespaces/namespaceshapeworks.md b/dev/api/Namespaces/namespaceshapeworks.md index 89daf00e30..edbf1c69bb 100644 --- a/dev/api/Namespaces/namespaceshapeworks.md +++ b/dev/api/Namespaces/namespaceshapeworks.md @@ -2594,4 +2594,4 @@ pi that doesn't depend on deprecated or non-std lib defines ------------------------------- -Updated on 2023-10-24 at 22:16:01 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:26 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1mesh.html b/dev/api/Namespaces/namespaceshapeworks_1_1mesh.html index 89bc65f339..d321155b4f 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1mesh.html +++ b/dev/api/Namespaces/namespaceshapeworks_1_1mesh.html @@ -2444,7 +2444,7 @@

    function compute_thickness

    Compute the cortical thickness of a mesh and image (e.g. CT)


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1mesh.md b/dev/api/Namespaces/namespaceshapeworks_1_1mesh.md index 53e8e0fb67..78eae5efe4 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1mesh.md +++ b/dev/api/Namespaces/namespaceshapeworks_1_1mesh.md @@ -37,4 +37,4 @@ Compute the cortical thickness of a mesh and image (e.g. CT) ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1particles.html b/dev/api/Namespaces/namespaceshapeworks_1_1particles.html index 924e971b59..b28935605f 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1particles.html +++ b/dev/api/Namespaces/namespaceshapeworks_1_1particles.html @@ -2488,7 +2488,7 @@

    function write_particles_from_vect )
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1particles.md b/dev/api/Namespaces/namespaceshapeworks_1_1particles.md index 7637462267..c3ba6d121e 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1particles.md +++ b/dev/api/Namespaces/namespaceshapeworks_1_1particles.md @@ -63,4 +63,4 @@ void write_particles_from_vector( ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1project.html b/dev/api/Namespaces/namespaceshapeworks_1_1project.html index 2a45ffeb95..7c0cf37d66 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1project.html +++ b/dev/api/Namespaces/namespaceshapeworks_1_1project.html @@ -2413,7 +2413,7 @@

    Namespaces


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1project.md b/dev/api/Namespaces/namespaceshapeworks_1_1project.md index 1866f69fe5..931297189a 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1project.md +++ b/dev/api/Namespaces/namespaceshapeworks_1_1project.md @@ -21,4 +21,4 @@ title: shapeworks::project ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html index 63764f2a2c..4a7b57ff4e 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html +++ b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html @@ -2660,7 +2660,7 @@

    variable WORLD_PARTICLES_PREFIX

    static constexpr const char * WORLD_PARTICLES_PREFIX = "world_particles_";
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md index cd36faace9..47b985313f 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md +++ b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.md @@ -157,4 +157,4 @@ static constexpr const char * WORLD_PARTICLES_PREFIX = "world_particles_"; ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html index a8fe72317a..282184137e 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html +++ b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html @@ -2478,7 +2478,7 @@

    using StringMultiMap

    using shapeworks::project::types::StringMultiMap = typedef std::map<std::string, StringMap>;
     

    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md index 8864c238b8..c3bd2ac60a 100644 --- a/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md +++ b/dev/api/Namespaces/namespaceshapeworks_1_1project_1_1types.md @@ -53,4 +53,4 @@ using shapeworks::project::types::StringMultiMap = typedef std::mapstd
    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespacestd.md b/dev/api/Namespaces/namespacestd.md index 06dafe50e6..3ee28e287a 100644 --- a/dev/api/Namespaces/namespacestd.md +++ b/dev/api/Namespaces/namespacestd.md @@ -14,4 +14,4 @@ title: std ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/api/Namespaces/namespaceutils.html b/dev/api/Namespaces/namespaceutils.html index e9c59ede0a..2b103e911b 100644 --- a/dev/api/Namespaces/namespaceutils.html +++ b/dev/api/Namespaces/namespaceutils.html @@ -2382,7 +2382,7 @@

    utils


    -

    Updated on 2023-10-24 at 22:16:02 +0000

    +

    Updated on 2023-10-25 at 15:40:27 +0000

    diff --git a/dev/api/Namespaces/namespaceutils.md b/dev/api/Namespaces/namespaceutils.md index f186ff5bea..866dd477a8 100644 --- a/dev/api/Namespaces/namespaceutils.md +++ b/dev/api/Namespaces/namespaceutils.md @@ -14,4 +14,4 @@ title: utils ------------------------------- -Updated on 2023-10-24 at 22:16:02 +0000 \ No newline at end of file +Updated on 2023-10-25 at 15:40:27 +0000 \ No newline at end of file diff --git a/dev/python/python-api.html b/dev/python/python-api.html index 2f2b7e1314..410e779aa8 100644 --- a/dev/python/python-api.html +++ b/dev/python/python-api.html @@ -16161,7 +16161,7 @@

    -

    seed(seed: int = 1698185790239257) -> None

    +

    seed(seed: int = 1698248459365377) -> None

    sets the seed for random number generation (internal use)

    diff --git a/dev/search/search_index.json b/dev/search/search_index.json index 5a83c9de07..7ee5ccd27c 100644 --- a/dev/search/search_index.json +++ b/dev/search/search_index.json @@ -1 +1 @@ -{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"Welcome to ShapeWorks! What is ShapeWorks? ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results. Latest & Greatest Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements. Why use ShapeWorks? ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages ShapeWorks Get-Togethers Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu . ShapeWorks Workshops & Webinars ShapeWorks @SB3C 2021 Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia ShapeWorks in Action! The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"Home"},{"location":"index.html#welcome-to-shapeworks","text":"","title":"Welcome to ShapeWorks!"},{"location":"index.html#what-is-shapeworks","text":"ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results.","title":"What is ShapeWorks?"},{"location":"index.html#latest-greatest","text":"Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements.","title":"Latest & Greatest"},{"location":"index.html#why-use-shapeworks","text":"ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages","title":"Why use ShapeWorks?"},{"location":"index.html#shapeworks-get-togethers","text":"Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu .","title":"ShapeWorks Get-Togethers"},{"location":"index.html#shapeworks-workshops-webinars","text":"","title":"ShapeWorks Workshops & Webinars"},{"location":"index.html#shapeworks-sb3c-2021","text":"Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia","title":"ShapeWorks @SB3C 2021"},{"location":"index.html#shapeworks-in-action","text":"The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"ShapeWorks in Action!"},{"location":"todo.html","text":"Documentation ToDo List To add/edit for docs index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal. To investigate for docs How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics? For ShapeWorks repo Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case Misc Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Documentation ToDo List"},{"location":"todo.html#documentation-todo-list","text":"","title":"Documentation ToDo List"},{"location":"todo.html#to-addedit-for-docs","text":"index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal.","title":"To add/edit for docs"},{"location":"todo.html#to-investigate-for-docs","text":"How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics?","title":"To investigate for docs"},{"location":"todo.html#for-shapeworks-repo","text":"Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case","title":"For ShapeWorks repo"},{"location":"todo.html#misc","text":"Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Misc"},{"location":"about/contact.html","text":"Contact Us Users Forum Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Users Mailing List Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu. Developers Mailing List You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Contact Us"},{"location":"about/contact.html#contact-us","text":"","title":"Contact Us"},{"location":"about/contact.html#users-forum","text":"Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community.","title":"Users Forum"},{"location":"about/contact.html#users-mailing-list","text":"Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu.","title":"Users Mailing List"},{"location":"about/contact.html#developers-mailing-list","text":"You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Developers Mailing List"},{"location":"about/license.html","text":"ShapeWorks License ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"about/license.html#shapeworks-license","text":"ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"ShapeWorks License"},{"location":"about/release-notes.html","text":"Release Notes ShapeWorks 6.4.2 - 2023-07-05 Fixes Fix python module versions preventing python import from working (#2104) ShapeWorks 6.4.1 - 2023-05-10 Fixes Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079) ShapeWorks 6.4.0 - 2023-05-05 What is new? ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944) ShapeWorks 6.3.2 - 2022-10-04 Fixes Fix install_shapeworks.sh on Linux (#1883) ShapeWorks 6.3.1 - 2022-07-22 Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) ShapeWorks 6.3.0 - 2022-06-09 What is new? ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation. Fixes Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank ShapeWorks 6.2.1 - 2022-01-07 What is new? ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint. Fixes Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes ShapeWorks 6.2 - 2021-11-16 What is new? ShapeWorks Back-end New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details. ShapeWorks Front-end Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details. User's Support Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details. Deep Learning DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details. Improvements ShapeWorks Back-end Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary. User's Support Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details. Fixes ShapeWorks Back-end Memory leak: Fixed memory leak issues in FEMesh operations ShapeWorks Front-end Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools. ShapeWorks 6.1 - 2021-06-28 What is new? ShapeWorks Back-end Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings. ShapeWorks Front-end Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example. User's Support Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively. Improvements ShapeWorks Back-end Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality. ShapeWorks Front-end Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers. Deep Learning & Shape Modeling Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU. User's Support Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import. Fixes ShapeWorks Back-end Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image. ShapeWorks Front-end Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved. Deep Learning & Shape Modeling DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command. ShapeWorks 6.0 - 2021-03-30 What's New User's Support New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort. ShapeWorks Back-end Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests. All-in-one Studio Front-end Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step. Deep Learning & Shape Modeling DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually. Improvements User's Support Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools. ShapeWorks Back-end Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups. All-in-one Studio Front-end Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems. Deep Learning & Shape Modeling More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding. Fixes ShapeWorks Back-end Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks. All-in-one Studio Front-end Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation. ShapeWorks 5.5.0 - 2020-10-15 What's New User's Support Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models. ShapeWorks Back-end ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details. All-in-one Studio Front-end Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet. Deep Learning & Shape Modeling New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details. Improvements User's Support Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming. ShapeWorks Back-end Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases. All-in-one Studio Front-end Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects. Fixes ShapeWorks Back-end Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints. ShapeWorks 5.4.1 - 2020-06-15 Fixes ShapeWorks Studio: Fixed crash when importing data on a new/blank project. ShapeWorks 5.4.0 - 2020-06-10 What's New New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases. Improvements Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models. Fixes Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare ShapeWorks 5.3.0 - 2020-02-20 What's New Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md) Improvements Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart ShapeWorks 5.2.2 - 2020-01-09 Fixes Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes ShapeWorks 5.2.1 - 2019-11-09 Fixes Fix examples, binaries ShapeWorks 5.2.0 - 2019-11-07 What's New Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically Improvements Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun Fixes Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Release Notes"},{"location":"about/release-notes.html#release-notes","text":"","title":"Release Notes"},{"location":"about/release-notes.html#shapeworks-642-2023-07-05","text":"","title":"ShapeWorks 6.4.2 - 2023-07-05"},{"location":"about/release-notes.html#fixes","text":"Fix python module versions preventing python import from working (#2104)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-641-2023-05-10","text":"","title":"ShapeWorks 6.4.1 - 2023-05-10"},{"location":"about/release-notes.html#fixes_1","text":"Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-640-2023-05-05","text":"","title":"ShapeWorks 6.4.0 - 2023-05-05"},{"location":"about/release-notes.html#what-is-new","text":"ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site","title":"What is new?"},{"location":"about/release-notes.html#fixes_2","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-632-2022-10-04","text":"","title":"ShapeWorks 6.3.2 - 2022-10-04"},{"location":"about/release-notes.html#fixes_3","text":"Fix install_shapeworks.sh on Linux (#1883)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-631-2022-07-22","text":"","title":"ShapeWorks 6.3.1 - 2022-07-22"},{"location":"about/release-notes.html#fixes_4","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-630-2022-06-09","text":"","title":"ShapeWorks 6.3.0 - 2022-06-09"},{"location":"about/release-notes.html#what-is-new_1","text":"ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation.","title":"What is new?"},{"location":"about/release-notes.html#fixes_5","text":"Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-621-2022-01-07","text":"","title":"ShapeWorks 6.2.1 - 2022-01-07"},{"location":"about/release-notes.html#what-is-new_2","text":"ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint.","title":"What is new?"},{"location":"about/release-notes.html#fixes_6","text":"Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-62-2021-11-16","text":"","title":"ShapeWorks 6.2 - 2021-11-16"},{"location":"about/release-notes.html#what-is-new_3","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end","text":"New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end","text":"Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support","text":"Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details.","title":"User's Support"},{"location":"about/release-notes.html#deep-learning","text":"DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details.","title":"Deep Learning"},{"location":"about/release-notes.html#improvements","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_1","text":"Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#users-support_1","text":"Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details.","title":"User's Support"},{"location":"about/release-notes.html#fixes_7","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_2","text":"Memory leak: Fixed memory leak issues in FEMesh operations","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_1","text":"Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#shapeworks-61-2021-06-28","text":"","title":"ShapeWorks 6.1 - 2021-06-28"},{"location":"about/release-notes.html#what-is-new_4","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end_3","text":"Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_2","text":"Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support_2","text":"Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively.","title":"User's Support"},{"location":"about/release-notes.html#improvements_1","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_4","text":"Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_3","text":"Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling","text":"Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#users-support_3","text":"Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import.","title":"User's Support"},{"location":"about/release-notes.html#fixes_8","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_5","text":"Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_4","text":"Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_1","text":"DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#shapeworks-60-2021-03-30","text":"","title":"ShapeWorks 6.0 - 2021-03-30"},{"location":"about/release-notes.html#whats-new","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_4","text":"New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_6","text":"Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end","text":"Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_2","text":"DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_2","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_5","text":"Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_7","text":"Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_1","text":"Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_3","text":"More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#fixes_9","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_8","text":"Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_2","text":"Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#shapeworks-550-2020-10-15","text":"","title":"ShapeWorks 5.5.0 - 2020-10-15"},{"location":"about/release-notes.html#whats-new_1","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_6","text":"Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_9","text":"ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_3","text":"Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_4","text":"New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_3","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_7","text":"Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_10","text":"Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_4","text":"Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#fixes_10","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_11","text":"Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-541-2020-06-15","text":"","title":"ShapeWorks 5.4.1 - 2020-06-15"},{"location":"about/release-notes.html#fixes_11","text":"ShapeWorks Studio: Fixed crash when importing data on a new/blank project.","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-540-2020-06-10","text":"","title":"ShapeWorks 5.4.0 - 2020-06-10"},{"location":"about/release-notes.html#whats-new_2","text":"New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases.","title":"What's New"},{"location":"about/release-notes.html#improvements_4","text":"Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models.","title":"Improvements"},{"location":"about/release-notes.html#fixes_12","text":"Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-530-2020-02-20","text":"","title":"ShapeWorks 5.3.0 - 2020-02-20"},{"location":"about/release-notes.html#whats-new_3","text":"Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md)","title":"What's New"},{"location":"about/release-notes.html#improvements_5","text":"Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-522-2020-01-09","text":"","title":"ShapeWorks 5.2.2 - 2020-01-09"},{"location":"about/release-notes.html#fixes_13","text":"Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-521-2019-11-09","text":"","title":"ShapeWorks 5.2.1 - 2019-11-09"},{"location":"about/release-notes.html#fixes_14","text":"Fix examples, binaries","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-520-2019-11-07","text":"","title":"ShapeWorks 5.2.0 - 2019-11-07"},{"location":"about/release-notes.html#whats-new_4","text":"Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically","title":"What's New"},{"location":"about/release-notes.html#improvements_6","text":"Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun","title":"Improvements"},{"location":"about/release-notes.html#fixes_15","text":"Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Fixes"},{"location":"about/team.html","text":"Meet ShapeWorkers! Principal Investigators Shireen Elhabian Ross Whitaker Software Developers Alan Morris Cameron Christensen Archanasri Subramanian Researchers Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria Past Contributors Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Meet ShapeWorkers!"},{"location":"about/team.html#meet-shapeworkers","text":"","title":"Meet ShapeWorkers!"},{"location":"about/team.html#principal-investigators","text":"Shireen Elhabian Ross Whitaker","title":"Principal Investigators"},{"location":"about/team.html#software-developers","text":"Alan Morris Cameron Christensen Archanasri Subramanian","title":"Software Developers"},{"location":"about/team.html#researchers","text":"Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria","title":"Researchers"},{"location":"about/team.html#past-contributors","text":"Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Past Contributors"},{"location":"api/Classes/classColorScheme.html","text":"ColorScheme Public Classes Name struct rgb Public Functions Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme () Public Attributes Name rgb foreground rgb background rgb alt Public Functions Documentation function background_qcolor inline QColor background_qcolor ( int alpha ) function foreground_qcolor inline QColor foreground_qcolor () function get_text_color inline QColor get_text_color () function get_text_intensity inline double get_text_intensity () function ColorScheme inline ColorScheme () function ~ColorScheme inline ~ ColorScheme () Public Attributes Documentation variable foreground rgb foreground ; variable background rgb background ; variable alt rgb alt ; Updated on 2023-10-24 at 22:16:02 +0000","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#colorscheme","text":"","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-classes","text":"Name struct rgb","title":"Public Classes"},{"location":"api/Classes/classColorScheme.html#public-functions","text":"Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme ()","title":"Public Functions"},{"location":"api/Classes/classColorScheme.html#public-attributes","text":"Name rgb foreground rgb background rgb alt","title":"Public Attributes"},{"location":"api/Classes/classColorScheme.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorScheme.html#function-background_qcolor","text":"inline QColor background_qcolor ( int alpha )","title":"function background_qcolor"},{"location":"api/Classes/classColorScheme.html#function-foreground_qcolor","text":"inline QColor foreground_qcolor ()","title":"function foreground_qcolor"},{"location":"api/Classes/classColorScheme.html#function-get_text_color","text":"inline QColor get_text_color ()","title":"function get_text_color"},{"location":"api/Classes/classColorScheme.html#function-get_text_intensity","text":"inline double get_text_intensity ()","title":"function get_text_intensity"},{"location":"api/Classes/classColorScheme.html#function-colorscheme","text":"inline ColorScheme ()","title":"function ColorScheme"},{"location":"api/Classes/classColorScheme.html#function-colorscheme_1","text":"inline ~ ColorScheme ()","title":"function ~ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classColorScheme.html#variable-foreground","text":"rgb foreground ;","title":"variable foreground"},{"location":"api/Classes/classColorScheme.html#variable-background","text":"rgb background ;","title":"variable background"},{"location":"api/Classes/classColorScheme.html#variable-alt","text":"rgb alt ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable alt"},{"location":"api/Classes/classColorSchemes.html","text":"ColorSchemes Inherits from std::vector< ColorScheme > Public Functions Name ColorSchemes () ~ColorSchemes () Public Functions Documentation function ColorSchemes inline ColorSchemes () function ~ColorSchemes inline ~ ColorSchemes () Updated on 2023-10-24 at 22:16:02 +0000","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#colorschemes","text":"Inherits from std::vector< ColorScheme >","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#public-functions","text":"Name ColorSchemes () ~ColorSchemes ()","title":"Public Functions"},{"location":"api/Classes/classColorSchemes.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes","text":"inline ColorSchemes ()","title":"function ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes_1","text":"inline ~ ColorSchemes () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ColorSchemes"},{"location":"api/Classes/classCustomSlider.html","text":"CustomSlider Inherits from QSlider Public Functions Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr) Protected Functions Name virtual void paintEvent (QPaintEvent * ev) Public Functions Documentation function CustomSlider inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) function CustomSlider explicit CustomSlider ( QWidget * parent = nullptr ) Protected Functions Documentation function paintEvent virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-24 at 22:16:02 +0000","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#customslider","text":"Inherits from QSlider","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#public-functions","text":"Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr)","title":"Public Functions"},{"location":"api/Classes/classCustomSlider.html#protected-functions","text":"Name virtual void paintEvent (QPaintEvent * ev)","title":"Protected Functions"},{"location":"api/Classes/classCustomSlider.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-customslider","text":"inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#function-customslider_1","text":"explicit CustomSlider ( QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-paintevent","text":"virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function paintEvent"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html","text":"CustomSurfaceReconstructionFilter Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New () Protected Functions Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * ) Protected Attributes Name int NeighborhoodSize double SampleSpacing Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkGetMacro vtkGetMacro ( NeighborhoodSize , int ) function vtkSetMacro vtkSetMacro ( NeighborhoodSize , int ) function vtkGetMacro vtkGetMacro ( SampleSpacing , double ) function vtkSetMacro vtkSetMacro ( SampleSpacing , double ) function New static CustomSurfaceReconstructionFilter * New () Protected Functions Documentation function CustomSurfaceReconstructionFilter CustomSurfaceReconstructionFilter () function ~CustomSurfaceReconstructionFilter inline ~ CustomSurfaceReconstructionFilter () function RequestInformation virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function RequestData virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function FillInputPortInformation virtual int FillInputPortInformation ( int , vtkInformation * ) Protected Attributes Documentation variable NeighborhoodSize int NeighborhoodSize ; variable SampleSpacing double SampleSpacing ; Updated on 2023-10-24 at 22:16:02 +0000","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#customsurfacereconstructionfilter","text":"Inherits from vtkImageAlgorithm","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions","text":"Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New ()","title":"Public Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions","text":"Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * )","title":"Protected Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes","text":"Name int NeighborhoodSize double SampleSpacing","title":"Protected Attributes"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtktypemacro","text":"vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro","text":"vtkGetMacro ( NeighborhoodSize , int )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro","text":"vtkSetMacro ( NeighborhoodSize , int )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro_1","text":"vtkGetMacro ( SampleSpacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro_1","text":"vtkSetMacro ( SampleSpacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-new","text":"static CustomSurfaceReconstructionFilter * New ()","title":"function New"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter","text":"CustomSurfaceReconstructionFilter ()","title":"function CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter_1","text":"inline ~ CustomSurfaceReconstructionFilter ()","title":"function ~CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestData"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int , vtkInformation * )","title":"function FillInputPortInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-neighborhoodsize","text":"int NeighborhoodSize ;","title":"variable NeighborhoodSize"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-samplespacing","text":"double SampleSpacing ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable SampleSpacing"},{"location":"api/Classes/classFEAreaCoverage.html","text":"FEAreaCoverage Public Functions Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const Protected Functions Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q) Protected Attributes Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius Public Functions Documentation function FEAreaCoverage FEAreaCoverage () function SetSelection1 inline void SetSelection1 ( vector < int > & s ) function SetSelection2 inline void SetSelection2 ( vector < int > & s ) function Apply vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ) function AllowBackIntersection void AllowBackIntersection ( bool b ) function AllowBackIntersection bool AllowBackIntersection () const function SetAngleThreshold void SetAngleThreshold ( double w ) function GetAngleThreshold double GetAngleThreshold () const function SetBackSearchRadius void SetBackSearchRadius ( double R ) function GetBackSearchRadius double GetBackSearchRadius () const Protected Functions Documentation function UpdateSurface void UpdateSurface ( FEAreaCoverage :: Surface & s ) function intersect bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ) function faceIntersect bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ) Protected Attributes Documentation variable m_surf1 Surface m_surf1 ; variable m_surf2 Surface m_surf2 ; variable m_ballowBackIntersections bool m_ballowBackIntersections ; variable m_angleThreshold double m_angleThreshold ; variable m_backSearchRadius double m_backSearchRadius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#feareacoverage","text":"","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions","text":"Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions","text":"Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q)","title":"Protected Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes","text":"Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius","title":"Protected Attributes"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-feareacoverage","text":"FEAreaCoverage ()","title":"function FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection1","text":"inline void SetSelection1 ( vector < int > & s )","title":"function SetSelection1"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection2","text":"inline void SetSelection2 ( vector < int > & s )","title":"function SetSelection2"},{"location":"api/Classes/classFEAreaCoverage.html#function-apply","text":"vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 )","title":"function Apply"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection","text":"void AllowBackIntersection ( bool b )","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection_1","text":"bool AllowBackIntersection () const","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-setanglethreshold","text":"void SetAngleThreshold ( double w )","title":"function SetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-getanglethreshold","text":"double GetAngleThreshold () const","title":"function GetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-setbacksearchradius","text":"void SetBackSearchRadius ( double R )","title":"function SetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#function-getbacksearchradius","text":"double GetBackSearchRadius () const","title":"function GetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-updatesurface","text":"void UpdateSurface ( FEAreaCoverage :: Surface & s )","title":"function UpdateSurface"},{"location":"api/Classes/classFEAreaCoverage.html#function-intersect","text":"bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q )","title":"function intersect"},{"location":"api/Classes/classFEAreaCoverage.html#function-faceintersect","text":"bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q )","title":"function faceIntersect"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf1","text":"Surface m_surf1 ;","title":"variable m_surf1"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf2","text":"Surface m_surf2 ;","title":"variable m_surf2"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_ballowbackintersections","text":"bool m_ballowBackIntersections ;","title":"variable m_ballowBackIntersections"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_anglethreshold","text":"double m_angleThreshold ;","title":"variable m_angleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_backsearchradius","text":"double m_backSearchRadius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_backSearchRadius"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html","text":"FEAreaCoverage::Surface Public Functions Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes () Public Attributes Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT Public Functions Documentation function Surface inline Surface () function Faces inline int Faces () function Create void Create ( std :: shared_ptr < FEMesh > m ) function Nodes inline int Nodes () Public Attributes Documentation variable m_mesh std :: shared_ptr < FEMesh > m_mesh ; variable m_face vector < int > m_face ; variable m_node vector < int > m_node ; variable m_pos vector < vec3d > m_pos ; variable m_lnode vector < int > m_lnode ; variable m_norm vector < vec3d > m_norm ; variable m_fnorm vector < vec3d > m_fnorm ; variable m_NLT vector < vector < int > > m_NLT ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#feareacoveragesurface","text":"","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions","text":"Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes ()","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes","text":"Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT","title":"Public Attributes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-surface","text":"inline Surface ()","title":"function Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-faces","text":"inline int Faces ()","title":"function Faces"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-create","text":"void Create ( std :: shared_ptr < FEMesh > m )","title":"function Create"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_mesh","text":"std :: shared_ptr < FEMesh > m_mesh ;","title":"variable m_mesh"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_face","text":"vector < int > m_face ;","title":"variable m_face"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_pos","text":"vector < vec3d > m_pos ;","title":"variable m_pos"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_lnode","text":"vector < int > m_lnode ;","title":"variable m_lnode"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_norm","text":"vector < vec3d > m_norm ;","title":"variable m_norm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_fnorm","text":"vector < vec3d > m_fnorm ;","title":"variable m_fnorm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_nlt","text":"vector < vector < int > > m_NLT ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_NLT"},{"location":"api/Classes/classFEAutoMesher.html","text":"FEAutoMesher Public Functions Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle () Protected Functions Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m) Protected Attributes Name FEMesh * m_pm double m_wsmooth Public Functions Documentation function FEAutoMesher FEAutoMesher () function BuildMesh void BuildMesh ( FEMesh * pm ) function AutoPartitionSurface void AutoPartitionSurface ( FEMesh & m ) function AutoPartitionEdges void AutoPartitionEdges ( FEMesh & m ) function AutoPartitionNodes void AutoPartitionNodes ( FEMesh & m ) function Repartition void Repartition ( FEMesh & m ) function SetSmoothingAngle inline void SetSmoothingAngle ( double w ) function GetSmoothingAngle inline double GetSmoothingAngle () Protected Functions Documentation function BuildFaces void BuildFaces ( FEMesh & m ) function BuildEdges void BuildEdges ( FEMesh & m ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_wsmooth double m_wsmooth ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#feautomesher","text":"","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#public-functions","text":"Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle ()","title":"Public Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions","text":"Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m)","title":"Protected Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes","text":"Name FEMesh * m_pm double m_wsmooth","title":"Protected Attributes"},{"location":"api/Classes/classFEAutoMesher.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-feautomesher","text":"FEAutoMesher ()","title":"function FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#function-buildmesh","text":"void BuildMesh ( FEMesh * pm )","title":"function BuildMesh"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionsurface","text":"void AutoPartitionSurface ( FEMesh & m )","title":"function AutoPartitionSurface"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionedges","text":"void AutoPartitionEdges ( FEMesh & m )","title":"function AutoPartitionEdges"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionnodes","text":"void AutoPartitionNodes ( FEMesh & m )","title":"function AutoPartitionNodes"},{"location":"api/Classes/classFEAutoMesher.html#function-repartition","text":"void Repartition ( FEMesh & m )","title":"function Repartition"},{"location":"api/Classes/classFEAutoMesher.html#function-setsmoothingangle","text":"inline void SetSmoothingAngle ( double w )","title":"function SetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#function-getsmoothingangle","text":"inline double GetSmoothingAngle ()","title":"function GetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-buildfaces","text":"void BuildFaces ( FEMesh & m )","title":"function BuildFaces"},{"location":"api/Classes/classFEAutoMesher.html#function-buildedges","text":"void BuildEdges ( FEMesh & m )","title":"function BuildEdges"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_wsmooth","text":"double m_wsmooth ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_wsmooth"},{"location":"api/Classes/classFECVDDecimationModifier.html","text":"FECVDDecimationModifier More... #include Public Functions Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier. Public Attributes Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient Detailed Description class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FECVDDecimationModifier FECVDDecimationModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier. Public Attributes Documentation variable m_pct double m_pct ; percentage of target number of clusters/vertices variable m_bcvd bool m_bcvd ; variable m_sel_pct double m_sel_pct ; variable m_gradient double m_gradient ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#fecvddecimationmodifier","text":"More... #include ","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions","text":"Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier.","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes","text":"Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier.html#detailed-description","text":"class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-fecvddecimationmodifier","text":"FECVDDecimationModifier () Constructor.","title":"function FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier.","title":"function Apply"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_pct","text":"double m_pct ; percentage of target number of clusters/vertices","title":"variable m_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_bcvd","text":"bool m_bcvd ;","title":"variable m_bcvd"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_sel_pct","text":"double m_sel_pct ;","title":"variable m_sel_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_gradient","text":"double m_gradient ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_gradient"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html","text":"FECVDDecimationModifier::Cluster Public Functions Name Cluster () int faces () const Public Attributes Name vec3d m_sgamma double m_srho vector< int > m_fid Public Functions Documentation function Cluster inline Cluster () function faces inline int faces () const Public Attributes Documentation variable m_sgamma vec3d m_sgamma ; variable m_srho double m_srho ; variable m_fid vector < int > m_fid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#fecvddecimationmodifiercluster","text":"","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions","text":"Name Cluster () int faces () const","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes","text":"Name vec3d m_sgamma double m_srho vector< int > m_fid","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-cluster","text":"inline Cluster ()","title":"function Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-faces","text":"inline int faces () const","title":"function faces"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_sgamma","text":"vec3d m_sgamma ;","title":"variable m_sgamma"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_srho","text":"double m_srho ;","title":"variable m_srho"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_fid","text":"vector < int > m_fid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_fid"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html","text":"FECVDDecimationModifier::NODE Public Types Name enum @0 Public Functions Name NODE () bool AttachToCluster (int n) Public Attributes Name int c int nc Public Types Documentation enum @0 Enumerator Value Description MAX_CLUSTERS =23 Public Functions Documentation function NODE inline NODE () function AttachToCluster bool AttachToCluster ( int n ) Public Attributes Documentation variable c int c ; variable nc int nc ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#fecvddecimationmodifiernode","text":"","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types","text":"Name enum @0","title":"Public Types"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions","text":"Name NODE () bool AttachToCluster (int n)","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes","text":"Name int c int nc","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#enum-0","text":"Enumerator Value Description MAX_CLUSTERS =23","title":"enum @0"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-node","text":"inline NODE ()","title":"function NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-attachtocluster","text":"bool AttachToCluster ( int n )","title":"function AttachToCluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-c","text":"int c ;","title":"variable c"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-nc","text":"int nc ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable nc"},{"location":"api/Classes/classFECoreMesh.html","text":"FECoreMesh More... #include Inherited by FEMesh Public Functions Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Detailed Description class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data. Public Functions Documentation function FECoreMesh FECoreMesh () constructor function ~FECoreMesh virtual ~ FECoreMesh () destructor function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create function IsType bool IsType ( int ntype ) check the type of the mesh function Elements virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements function ElementRef virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef function ElementPtr virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr function Nodes inline int Nodes () const function Edges inline int Edges () const function Faces inline int Faces () const function Node inline FENode & Node ( int n ) function Edge inline FEEdge & Edge ( int n ) function Face inline FEFace & Face ( int n ) function NodePtr inline FENode * NodePtr ( int n = 0 ) function EdgePtr inline FEEdge * EdgePtr ( int n = 0 ) function FacePtr inline FEFace * FacePtr ( int n = 0 ) Protected Attributes Documentation variable m_Node std :: vector < FENode > m_Node ; FE nodes. variable m_Edge std :: vector < FEEdge > m_Edge ; FE edges. variable m_Face std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-24 at 22:16:02 +0000","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#fecoremesh","text":"More... #include Inherited by FEMesh","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#public-functions","text":"Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0)","title":"Public Functions"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes","text":"Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Protected Attributes"},{"location":"api/Classes/classFECoreMesh.html#detailed-description","text":"class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data.","title":"Detailed Description"},{"location":"api/Classes/classFECoreMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh","text":"FECoreMesh () constructor","title":"function FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh_1","text":"virtual ~ FECoreMesh () destructor","title":"function ~FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create","title":"function Create"},{"location":"api/Classes/classFECoreMesh.html#function-istype","text":"bool IsType ( int ntype ) check the type of the mesh","title":"function IsType"},{"location":"api/Classes/classFECoreMesh.html#function-elements","text":"virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFECoreMesh.html#function-elementref","text":"virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFECoreMesh.html#function-elementptr","text":"virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFECoreMesh.html#function-nodes","text":"inline int Nodes () const","title":"function Nodes"},{"location":"api/Classes/classFECoreMesh.html#function-edges","text":"inline int Edges () const","title":"function Edges"},{"location":"api/Classes/classFECoreMesh.html#function-faces","text":"inline int Faces () const","title":"function Faces"},{"location":"api/Classes/classFECoreMesh.html#function-node","text":"inline FENode & Node ( int n )","title":"function Node"},{"location":"api/Classes/classFECoreMesh.html#function-edge","text":"inline FEEdge & Edge ( int n )","title":"function Edge"},{"location":"api/Classes/classFECoreMesh.html#function-face","text":"inline FEFace & Face ( int n )","title":"function Face"},{"location":"api/Classes/classFECoreMesh.html#function-nodeptr","text":"inline FENode * NodePtr ( int n = 0 )","title":"function NodePtr"},{"location":"api/Classes/classFECoreMesh.html#function-edgeptr","text":"inline FEEdge * EdgePtr ( int n = 0 )","title":"function EdgePtr"},{"location":"api/Classes/classFECoreMesh.html#function-faceptr","text":"inline FEFace * FacePtr ( int n = 0 )","title":"function FacePtr"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFECoreMesh.html#variable-m_node","text":"std :: vector < FENode > m_Node ; FE nodes.","title":"variable m_Node"},{"location":"api/Classes/classFECoreMesh.html#variable-m_edge","text":"std :: vector < FEEdge > m_Edge ; FE edges.","title":"variable m_Edge"},{"location":"api/Classes/classFECoreMesh.html#variable-m_face","text":"std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_Face"},{"location":"api/Classes/classFEEdge.html","text":"FEEdge Inherits from FEItem Public Types Name enum @1 Public Functions Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node Public Attributes Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @1 Enumerator Value Description MAX_NODES 3 Public Functions Documentation function FEEdge FEEdge () constructor function operator== bool operator == ( const FEEdge & e ) edge comparison function Nodes inline int Nodes () return number of nodes function FindNode int FindNode ( int node ) find a node Public Attributes Documentation variable n int n ; edge nodes variable m_elem int m_elem ; the element to which this edge belongs (used only by beams) variable m_nbr int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#feedge","text":"Inherits from FEItem","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#public-types","text":"Name enum @1","title":"Public Types"},{"location":"api/Classes/classFEEdge.html#public-functions","text":"Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node","title":"Public Functions"},{"location":"api/Classes/classFEEdge.html#public-attributes","text":"Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1)","title":"Public Attributes"},{"location":"api/Classes/classFEEdge.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEEdge.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEEdge.html#enum-1","text":"Enumerator Value Description MAX_NODES 3","title":"enum @1"},{"location":"api/Classes/classFEEdge.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEEdge.html#function-feedge","text":"FEEdge () constructor","title":"function FEEdge"},{"location":"api/Classes/classFEEdge.html#function-operator","text":"bool operator == ( const FEEdge & e ) edge comparison","title":"function operator=="},{"location":"api/Classes/classFEEdge.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEEdge.html#function-findnode","text":"int FindNode ( int node ) find a node","title":"function FindNode"},{"location":"api/Classes/classFEEdge.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEEdge.html#variable-n","text":"int n ; edge nodes","title":"variable n"},{"location":"api/Classes/classFEEdge.html#variable-m_elem","text":"int m_elem ; the element to which this edge belongs (used only by beams)","title":"variable m_elem"},{"location":"api/Classes/classFEEdge.html#variable-m_nbr","text":"int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_nbr"},{"location":"api/Classes/classFEElement.html","text":"FEElement Inherits from FEElement_ , FEItem Public Types Name enum @3 Public Functions Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type. Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @3 Enumerator Value Description MAX_NODES 27 Public Functions Documentation function FEElement FEElement () constructor function FEElement FEElement ( const FEElement & el ) copy constructor function operator= FEElement & operator = ( const FEElement & el ) assignment operator function SetType void SetType ( int ntype ) Set the element type. Updated on 2023-10-24 at 22:16:02 +0000","title":"FEElement"},{"location":"api/Classes/classFEElement.html#feelement","text":"Inherits from FEElement_ , FEItem","title":"FEElement"},{"location":"api/Classes/classFEElement.html#public-types","text":"Name enum @3","title":"Public Types"},{"location":"api/Classes/classFEElement.html#public-functions","text":"Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type.","title":"Public Functions"},{"location":"api/Classes/classFEElement.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEElement.html#enum-3","text":"Enumerator Value Description MAX_NODES 27","title":"enum @3"},{"location":"api/Classes/classFEElement.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement.html#function-feelement","text":"FEElement () constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-feelement_1","text":"FEElement ( const FEElement & el ) copy constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-operator","text":"FEElement & operator = ( const FEElement & el ) assignment operator","title":"function operator="},{"location":"api/Classes/classFEElement.html#function-settype","text":"void SetType ( int ntype ) Set the element type. Updated on 2023-10-24 at 22:16:02 +0000","title":"function SetType"},{"location":"api/Classes/classFEElementData.html","text":"FEElementData Public Functions Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax) Public Functions Documentation function FEElementData FEElementData () function FEElementData FEElementData ( const FEElementData & d ) function operator= FEElementData & operator = ( const FEElementData & d ) function Create void Create ( FEMesh * pm , double v = 0.0 ) function Size inline int Size () function get inline double get ( int i ) function set inline void set ( int i , double v ) function operator[] inline double & operator []( int i ) function SetName void SetName ( const char * sz ) function GetName inline const char * GetName () function FillRandomBox void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#feelementdata","text":"","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#public-functions","text":"Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax)","title":"Public Functions"},{"location":"api/Classes/classFEElementData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElementData.html#function-feelementdata","text":"FEElementData ()","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-feelementdata_1","text":"FEElementData ( const FEElementData & d )","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-operator","text":"FEElementData & operator = ( const FEElementData & d )","title":"function operator="},{"location":"api/Classes/classFEElementData.html#function-create","text":"void Create ( FEMesh * pm , double v = 0.0 )","title":"function Create"},{"location":"api/Classes/classFEElementData.html#function-size","text":"inline int Size ()","title":"function Size"},{"location":"api/Classes/classFEElementData.html#function-get","text":"inline double get ( int i )","title":"function get"},{"location":"api/Classes/classFEElementData.html#function-set","text":"inline void set ( int i , double v )","title":"function set"},{"location":"api/Classes/classFEElementData.html#function-operator_1","text":"inline double & operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEElementData.html#function-setname","text":"void SetName ( const char * sz )","title":"function SetName"},{"location":"api/Classes/classFEElementData.html#function-getname","text":"inline const char * GetName ()","title":"function GetName"},{"location":"api/Classes/classFEElementData.html#function-fillrandombox","text":"void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function FillRandomBox"},{"location":"api/Classes/classFEElement__.html","text":"FEElement_ Inherits from FEItem Inherited by FEElement , FETri3 Public Functions Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions Name void copy (const FEElement_ & el) Public Attributes Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEElement_ FEElement_ () constructor function is_equal bool is_equal ( FEElement_ & e ) function GetType inline int GetType () const return the element type function IsType inline bool IsType ( int ntype ) const Is the element of this type. function Nodes inline int Nodes () const number of nodes function Faces inline int Faces () const Number of faces (shells have no faces) function Edges inline int Edges () const Number of edges (solids have no edges) function GetFace int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces) function GetFace FEFace GetFace ( int i ) Get the face i (only solids have faces) function GetShellFace FEFace GetShellFace () Get the face of a shell. function GetEdge FEEdge GetEdge ( int i ) Get the edge. function IsExterior bool IsExterior () Is this an exterior element. function IsSolid inline bool IsSolid () function IsShell inline bool IsShell () function IsBeam inline bool IsBeam () Protected Functions Documentation function copy void copy ( const FEElement_ & el ) Public Attributes Documentation variable m_node int * m_node ; pointer to node data variable m_nbr int * m_nbr ; neighbour elements variable m_face int * m_face ; faces (-1 for interior faces) variable m_h double * m_h ; element thickness (only used by shells) variable m_fiber vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section variable m_Q mat3d m_Q ; local material orientation variable m_Qactive bool m_Qactive ; active local material orientation variable m_a0 double m_a0 ; cross-sectional area (only used by truss elements) Protected Attributes Documentation variable m_ntype int m_ntype ; type of element variable m_nodes int m_nodes ; nr of nodes variable m_nfaces int m_nfaces ; nr of faces ( 0 for shells) variable m_nedges int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#feelement_","text":"Inherits from FEItem Inherited by FEElement , FETri3","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#public-functions","text":"Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam ()","title":"Public Functions"},{"location":"api/Classes/classFEElement__.html#protected-functions","text":"Name void copy (const FEElement_ & el)","title":"Protected Functions"},{"location":"api/Classes/classFEElement__.html#public-attributes","text":"Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements)","title":"Public Attributes"},{"location":"api/Classes/classFEElement__.html#protected-attributes","text":"Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids)","title":"Protected Attributes"},{"location":"api/Classes/classFEElement__.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement__.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-feelement_","text":"FEElement_ () constructor","title":"function FEElement_"},{"location":"api/Classes/classFEElement__.html#function-is_equal","text":"bool is_equal ( FEElement_ & e )","title":"function is_equal"},{"location":"api/Classes/classFEElement__.html#function-gettype","text":"inline int GetType () const return the element type","title":"function GetType"},{"location":"api/Classes/classFEElement__.html#function-istype","text":"inline bool IsType ( int ntype ) const Is the element of this type.","title":"function IsType"},{"location":"api/Classes/classFEElement__.html#function-nodes","text":"inline int Nodes () const number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEElement__.html#function-faces","text":"inline int Faces () const Number of faces (shells have no faces)","title":"function Faces"},{"location":"api/Classes/classFEElement__.html#function-edges","text":"inline int Edges () const Number of edges (solids have no edges)","title":"function Edges"},{"location":"api/Classes/classFEElement__.html#function-getface","text":"int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getface_1","text":"FEFace GetFace ( int i ) Get the face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getshellface","text":"FEFace GetShellFace () Get the face of a shell.","title":"function GetShellFace"},{"location":"api/Classes/classFEElement__.html#function-getedge","text":"FEEdge GetEdge ( int i ) Get the edge.","title":"function GetEdge"},{"location":"api/Classes/classFEElement__.html#function-isexterior","text":"bool IsExterior () Is this an exterior element.","title":"function IsExterior"},{"location":"api/Classes/classFEElement__.html#function-issolid","text":"inline bool IsSolid ()","title":"function IsSolid"},{"location":"api/Classes/classFEElement__.html#function-isshell","text":"inline bool IsShell ()","title":"function IsShell"},{"location":"api/Classes/classFEElement__.html#function-isbeam","text":"inline bool IsBeam ()","title":"function IsBeam"},{"location":"api/Classes/classFEElement__.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-copy","text":"void copy ( const FEElement_ & el )","title":"function copy"},{"location":"api/Classes/classFEElement__.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_node","text":"int * m_node ; pointer to node data","title":"variable m_node"},{"location":"api/Classes/classFEElement__.html#variable-m_nbr","text":"int * m_nbr ; neighbour elements","title":"variable m_nbr"},{"location":"api/Classes/classFEElement__.html#variable-m_face","text":"int * m_face ; faces (-1 for interior faces)","title":"variable m_face"},{"location":"api/Classes/classFEElement__.html#variable-m_h","text":"double * m_h ; element thickness (only used by shells)","title":"variable m_h"},{"location":"api/Classes/classFEElement__.html#variable-m_fiber","text":"vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section","title":"variable m_fiber"},{"location":"api/Classes/classFEElement__.html#variable-m_q","text":"mat3d m_Q ; local material orientation","title":"variable m_Q"},{"location":"api/Classes/classFEElement__.html#variable-m_qactive","text":"bool m_Qactive ; active local material orientation","title":"variable m_Qactive"},{"location":"api/Classes/classFEElement__.html#variable-m_a0","text":"double m_a0 ; cross-sectional area (only used by truss elements)","title":"variable m_a0"},{"location":"api/Classes/classFEElement__.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_ntype","text":"int m_ntype ; type of element","title":"variable m_ntype"},{"location":"api/Classes/classFEElement__.html#variable-m_nodes","text":"int m_nodes ; nr of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEElement__.html#variable-m_nfaces","text":"int m_nfaces ; nr of faces ( 0 for shells)","title":"variable m_nfaces"},{"location":"api/Classes/classFEElement__.html#variable-m_nedges","text":"int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_nedges"},{"location":"api/Classes/classFEFace.html","text":"FEFace Inherits from FEItem Public Types Name enum @2 Public Functions Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external. Public Attributes Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @2 Enumerator Value Description MAX_NODES 9 Public Functions Documentation function FEFace FEFace () constructor function operator== bool operator == ( const FEFace & f ) comparison operator function Nodes inline int Nodes () return number of nodes function Edges int Edges () return number of edges function GetEdgeNodes void GetEdgeNodes ( int i , int * n ) get the edge node numbers function HasEdge bool HasEdge ( int n1 , int n2 ) See if this face has an edge. function HasNode bool HasNode ( int i ) See if this face has node with ID i. function FindNode int FindNode ( int i ) Fine the array index of node with ID i. function IsExternal inline bool IsExternal () Is this face internal or external. Public Attributes Documentation variable n int n ; nodal ID's variable m_nodes int m_nodes ; number of nodes variable m_nbr int m_nbr ; neighbour faces variable m_fn vec3d m_fn ; face normal variable m_nn vec3d m_nn ; node normals variable m_sid int m_sid ; smoothing ID variable m_elem int m_elem ; the elements to which this face belongs Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFace"},{"location":"api/Classes/classFEFace.html#feface","text":"Inherits from FEItem","title":"FEFace"},{"location":"api/Classes/classFEFace.html#public-types","text":"Name enum @2","title":"Public Types"},{"location":"api/Classes/classFEFace.html#public-functions","text":"Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external.","title":"Public Functions"},{"location":"api/Classes/classFEFace.html#public-attributes","text":"Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs","title":"Public Attributes"},{"location":"api/Classes/classFEFace.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEFace.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEFace.html#enum-2","text":"Enumerator Value Description MAX_NODES 9","title":"enum @2"},{"location":"api/Classes/classFEFace.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFace.html#function-feface","text":"FEFace () constructor","title":"function FEFace"},{"location":"api/Classes/classFEFace.html#function-operator","text":"bool operator == ( const FEFace & f ) comparison operator","title":"function operator=="},{"location":"api/Classes/classFEFace.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEFace.html#function-edges","text":"int Edges () return number of edges","title":"function Edges"},{"location":"api/Classes/classFEFace.html#function-getedgenodes","text":"void GetEdgeNodes ( int i , int * n ) get the edge node numbers","title":"function GetEdgeNodes"},{"location":"api/Classes/classFEFace.html#function-hasedge","text":"bool HasEdge ( int n1 , int n2 ) See if this face has an edge.","title":"function HasEdge"},{"location":"api/Classes/classFEFace.html#function-hasnode","text":"bool HasNode ( int i ) See if this face has node with ID i.","title":"function HasNode"},{"location":"api/Classes/classFEFace.html#function-findnode","text":"int FindNode ( int i ) Fine the array index of node with ID i.","title":"function FindNode"},{"location":"api/Classes/classFEFace.html#function-isexternal","text":"inline bool IsExternal () Is this face internal or external.","title":"function IsExternal"},{"location":"api/Classes/classFEFace.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFace.html#variable-n","text":"int n ; nodal ID's","title":"variable n"},{"location":"api/Classes/classFEFace.html#variable-m_nodes","text":"int m_nodes ; number of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEFace.html#variable-m_nbr","text":"int m_nbr ; neighbour faces","title":"variable m_nbr"},{"location":"api/Classes/classFEFace.html#variable-m_fn","text":"vec3d m_fn ; face normal","title":"variable m_fn"},{"location":"api/Classes/classFEFace.html#variable-m_nn","text":"vec3d m_nn ; node normals","title":"variable m_nn"},{"location":"api/Classes/classFEFace.html#variable-m_sid","text":"int m_sid ; smoothing ID","title":"variable m_sid"},{"location":"api/Classes/classFEFace.html#variable-m_elem","text":"int m_elem ; the elements to which this face belongs Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_elem"},{"location":"api/Classes/classFEFillHole.html","text":"FEFillHole Public Classes Name class EdgeRing struct FACE Public Functions Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm) Public Attributes Name bool optimize bool insertNodes Public Functions Documentation function FEFillHole inline FEFillHole () function Apply FEMesh * Apply ( FEMesh * pm ) function AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list ) function newNode vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ) function DivideRing bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list ) function DivideRing1 bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list ) function FillAllHoles void FillAllHoles ( FEMesh * pm ) Public Attributes Documentation variable optimize bool optimize ; variable insertNodes bool insertNodes ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#fefillhole","text":"","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#public-classes","text":"Name class EdgeRing struct FACE","title":"Public Classes"},{"location":"api/Classes/classFEFillHole.html#public-functions","text":"Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole.html#public-attributes","text":"Name bool optimize bool insertNodes","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole.html#function-fefillhole","text":"inline FEFillHole ()","title":"function FEFillHole"},{"location":"api/Classes/classFEFillHole.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFillHole.html#function-afm","text":"bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list )","title":"function AFM"},{"location":"api/Classes/classFEFillHole.html#function-newnode","text":"vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave )","title":"function newNode"},{"location":"api/Classes/classFEFillHole.html#function-dividering","text":"bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing"},{"location":"api/Classes/classFEFillHole.html#function-dividering1","text":"bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing1"},{"location":"api/Classes/classFEFillHole.html#function-fillallholes","text":"void FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFillHole.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole.html#variable-optimize","text":"bool optimize ;","title":"variable optimize"},{"location":"api/Classes/classFEFillHole.html#variable-insertnodes","text":"bool insertNodes ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable insertNodes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html","text":"FEFillHole::EdgeRing Public Functions Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear) Public Attributes Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal Public Functions Documentation function EdgeRing inline EdgeRing () function EdgeRing inline EdgeRing ( const EdgeRing & ring ) function operator= inline void operator = ( const EdgeRing & ring ) function empty inline bool empty () function add inline void add ( int n , const vec3d & r , const vec3d & nn ) function clear inline void clear () function size inline int size () function operator[] inline int operator []( int i ) function GetLeftEar void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ) function GetRightEar void GetRightEar ( int n0 , int n1 , EdgeRing & ear ) Public Attributes Documentation variable m_r vector < vec3d > m_r ; variable m_node vector < int > m_node ; variable m_winding int m_winding ; variable m_normal vector < vec3d > m_normal ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#fefillholeedgering","text":"","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions","text":"Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes","text":"Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering","text":"inline EdgeRing ()","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering_1","text":"inline EdgeRing ( const EdgeRing & ring )","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator","text":"inline void operator = ( const EdgeRing & ring )","title":"function operator="},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-empty","text":"inline bool empty ()","title":"function empty"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-add","text":"inline void add ( int n , const vec3d & r , const vec3d & nn )","title":"function add"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-size","text":"inline int size ()","title":"function size"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator_1","text":"inline int operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getleftear","text":"void GetLeftEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetLeftEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getrightear","text":"void GetRightEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetRightEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_r","text":"vector < vec3d > m_r ;","title":"variable m_r"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_winding","text":"int m_winding ;","title":"variable m_winding"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_normal","text":"vector < vec3d > m_normal ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_normal"},{"location":"api/Classes/classFEFixMesh.html","text":"FEFixMesh Public Functions Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm) Public Functions Documentation function FEFixMesh inline FEFixMesh () function Apply FEMesh * Apply ( FEMesh * pm ) function SetTask void SetTask ( int n ) function SetThickness void SetThickness ( double m ) function RemoveDuplicateElements FEMesh * RemoveDuplicateElements ( FEMesh * pm ) function RemoveNonManifoldElements FEMesh * RemoveNonManifoldElements ( FEMesh * pm ) function FixElementWinding FEMesh * FixElementWinding ( FEMesh * pm ) function FillAllHoles FEMesh * FillAllHoles ( FEMesh * pm ) function FixinvertedElements FEMesh * FixinvertedElements ( FEMesh * pm ) function FixReferenceSurface FEMesh * FixReferenceSurface ( FEMesh * pm ) function InterpolateShellThickness FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#fefixmesh","text":"","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#public-functions","text":"Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFixMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFixMesh.html#function-fefixmesh","text":"inline FEFixMesh ()","title":"function FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFixMesh.html#function-settask","text":"void SetTask ( int n )","title":"function SetTask"},{"location":"api/Classes/classFEFixMesh.html#function-setthickness","text":"void SetThickness ( double m )","title":"function SetThickness"},{"location":"api/Classes/classFEFixMesh.html#function-removeduplicateelements","text":"FEMesh * RemoveDuplicateElements ( FEMesh * pm )","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEFixMesh.html#function-removenonmanifoldelements","text":"FEMesh * RemoveNonManifoldElements ( FEMesh * pm )","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixelementwinding","text":"FEMesh * FixElementWinding ( FEMesh * pm )","title":"function FixElementWinding"},{"location":"api/Classes/classFEFixMesh.html#function-fillallholes","text":"FEMesh * FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFixMesh.html#function-fixinvertedelements","text":"FEMesh * FixinvertedElements ( FEMesh * pm )","title":"function FixinvertedElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixreferencesurface","text":"FEMesh * FixReferenceSurface ( FEMesh * pm )","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEFixMesh.html#function-interpolateshellthickness","text":"FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEItem.html","text":"FEItem Inherited by FEEdge , FEElement_ , FEFace , FENode Public Functions Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEItem inline FEItem () function IsVisible inline bool IsVisible () const function IsSelected inline bool IsSelected () const function Select inline void Select () function UnSelect inline void UnSelect () function Show inline void Show () function Hide inline void Hide () function GetFEState inline unsigned int GetFEState () const function SetFEState inline void SetFEState ( unsigned int state ) Public Attributes Documentation variable m_ntag int m_ntag ; variable m_gid int m_gid ; variable m_nid int m_nid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEItem"},{"location":"api/Classes/classFEItem.html#feitem","text":"Inherited by FEEdge , FEElement_ , FEFace , FENode","title":"FEItem"},{"location":"api/Classes/classFEItem.html#public-functions","text":"Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state)","title":"Public Functions"},{"location":"api/Classes/classFEItem.html#public-attributes","text":"Name int m_ntag int m_gid int m_nid","title":"Public Attributes"},{"location":"api/Classes/classFEItem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEItem.html#function-feitem","text":"inline FEItem ()","title":"function FEItem"},{"location":"api/Classes/classFEItem.html#function-isvisible","text":"inline bool IsVisible () const","title":"function IsVisible"},{"location":"api/Classes/classFEItem.html#function-isselected","text":"inline bool IsSelected () const","title":"function IsSelected"},{"location":"api/Classes/classFEItem.html#function-select","text":"inline void Select ()","title":"function Select"},{"location":"api/Classes/classFEItem.html#function-unselect","text":"inline void UnSelect ()","title":"function UnSelect"},{"location":"api/Classes/classFEItem.html#function-show","text":"inline void Show ()","title":"function Show"},{"location":"api/Classes/classFEItem.html#function-hide","text":"inline void Hide ()","title":"function Hide"},{"location":"api/Classes/classFEItem.html#function-getfestate","text":"inline unsigned int GetFEState () const","title":"function GetFEState"},{"location":"api/Classes/classFEItem.html#function-setfestate","text":"inline void SetFEState ( unsigned int state )","title":"function SetFEState"},{"location":"api/Classes/classFEItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEItem.html#variable-m_ntag","text":"int m_ntag ;","title":"variable m_ntag"},{"location":"api/Classes/classFEItem.html#variable-m_gid","text":"int m_gid ;","title":"variable m_gid"},{"location":"api/Classes/classFEItem.html#variable-m_nid","text":"int m_nid ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_nid"},{"location":"api/Classes/classFEMesh.html","text":"FEMesh Inherits from FECoreMesh Public Functions Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET) Protected Functions Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) Protected Attributes Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map Additional inherited members Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Public Functions Documentation function FEMesh FEMesh () function FEMesh FEMesh ( FEMesh & m ) function ~FEMesh virtual ~ FEMesh () function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create function ShallowCopy void ShallowCopy ( FEMesh * pm ) function Clear void Clear () \u2014 C L E A N U P \u2014 function DeleteEdges inline void DeleteEdges () function Elements inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements function Element inline FEElement & Element ( int n ) return element function ElementRef inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef function ElementPtr inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr function FindFace int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ) function FindNodesFromPart void FindNodesFromPart ( int gid , vector < int > & node ) function NodeArray inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array function FaceArray inline std :: vector < FEFace > & FaceArray () function ElementArray inline std :: vector < FEElement > & ElementArray () function GetElementValue inline double GetElementValue ( int n ) function SetElementValue inline void SetElementValue ( int n , double v ) function UpdateValueRange void UpdateValueRange () function GetValueRange void GetValueRange ( double & vmin , double & vmax ) function ProjectToSurface vec3d ProjectToSurface ( vec3d r , vec3d t ) function ProjectToFace vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ) function ProjectToEdge vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ) function FindIntersection bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ) function Update void Update () function UpdateElementNeighbors void UpdateElementNeighbors () function UpdateFaces void UpdateFaces () function UpdateEdges void UpdateEdges () function UpdateNodes void UpdateNodes () function AutoSmooth void AutoSmooth ( double w ) function UpdateNormals void UpdateNormals () function PartitionSelection void PartitionSelection () function RemoveIsolatedNodes void RemoveIsolatedNodes () function AddNode inline void AddNode ( FENode & n ) function DetachSelectedMesh FEMesh * DetachSelectedMesh () function DetachSelectedPart void DetachSelectedPart () function ExtractSelectedFaces FEMesh * ExtractSelectedFaces () function DeleteTaggedElements void DeleteTaggedElements ( int tag ) function DeleteTaggedFaces void DeleteTaggedFaces ( int tag ) function DeleteTaggedEdges void DeleteTaggedEdges ( int tag ) function FindDuplicateFaces void FindDuplicateFaces ( vector < int > & l ) function FindDuplicateEdges void FindDuplicateEdges ( vector < int > & l ) function DeleteSelectedElements void DeleteSelectedElements () function DeleteSelectedFaces void DeleteSelectedFaces () function DeleteSelectedNodes void DeleteSelectedNodes () function InvertTaggedElements void InvertTaggedElements ( int ntag ) function InvertSelectedElements void InvertSelectedElements () function ShellJacobian double ShellJacobian ( FEElement & el ) function RemoveDuplicateElements void RemoveDuplicateElements () function FixinvertedElements void FixinvertedElements () function FixReferenceSurface void FixReferenceSurface () function InterpolateShellThickness void InterpolateShellThickness ( double ) function RemoveNonManifoldElements void RemoveNonManifoldElements () function FixElementWinding void FixElementWinding () function FixElementWinding2 void FixElementWinding2 () function TagAllElements void TagAllElements ( int ntag ) function DataFields inline int DataFields () function AddDataField FEElementData * AddDataField ( const char * szname , double v = 0.0 ) function GetDataField inline FEElementData & GetDataField ( int i ) function ShortestEdge double ShortestEdge () function BuildNodeElementTable void BuildNodeElementTable ( vector < vector < int > > & NET ) function BuildNodeFaceTable void BuildNodeFaceTable ( vector < vector < int > > & NFT ) function BuildNodeEdgeTable void BuildNodeEdgeTable ( vector < vector < int > > & NET ) function BuildEdgeTable void BuildEdgeTable ( vector < pair < int , int > > & ET ) function BuildNodeNodeTable void BuildNodeNodeTable ( vector < set < int > > & NNT ) function BuildSurfaceNodeNodeTable void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT ) function BuildElementEdgeTable void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET ) function BuildFaceTable void BuildFaceTable ( vector < FEFace > & FT ) function BuildElementFaceTable void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT ) function BuildFaceEdgeTable void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET ) function BuildFaceFaceTable void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT ) function BuildEdgeEdgeTable void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET ) Protected Functions Documentation function IntersectTri bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) function IntersectQuad bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) Protected Attributes Documentation variable m_Elem std :: vector < FEElement > m_Elem ; FE elements. variable m_data std :: vector < double > m_data ; element values variable m_min double m_min ; variable m_max double m_max ; value range of element data variable m_map vector < FEElementData > m_map ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#femesh","text":"Inherits from FECoreMesh","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#public-functions","text":"Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET)","title":"Public Functions"},{"location":"api/Classes/classFEMesh.html#protected-functions","text":"Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g)","title":"Protected Functions"},{"location":"api/Classes/classFEMesh.html#protected-attributes","text":"Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map","title":"Protected Attributes"},{"location":"api/Classes/classFEMesh.html#additional-inherited-members","text":"Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Additional inherited members"},{"location":"api/Classes/classFEMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-femesh","text":"FEMesh ()","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_1","text":"FEMesh ( FEMesh & m )","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_2","text":"virtual ~ FEMesh ()","title":"function ~FEMesh"},{"location":"api/Classes/classFEMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create","title":"function Create"},{"location":"api/Classes/classFEMesh.html#function-shallowcopy","text":"void ShallowCopy ( FEMesh * pm )","title":"function ShallowCopy"},{"location":"api/Classes/classFEMesh.html#function-clear","text":"void Clear () \u2014 C L E A N U P \u2014","title":"function Clear"},{"location":"api/Classes/classFEMesh.html#function-deleteedges","text":"inline void DeleteEdges ()","title":"function DeleteEdges"},{"location":"api/Classes/classFEMesh.html#function-elements","text":"inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFEMesh.html#function-element","text":"inline FEElement & Element ( int n ) return element","title":"function Element"},{"location":"api/Classes/classFEMesh.html#function-elementref","text":"inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFEMesh.html#function-elementptr","text":"inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFEMesh.html#function-findface","text":"int FindFace ( FEElement * pe , FEFace & f , FEFace & fe )","title":"function FindFace"},{"location":"api/Classes/classFEMesh.html#function-findnodesfrompart","text":"void FindNodesFromPart ( int gid , vector < int > & node )","title":"function FindNodesFromPart"},{"location":"api/Classes/classFEMesh.html#function-nodearray","text":"inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array","title":"function NodeArray"},{"location":"api/Classes/classFEMesh.html#function-facearray","text":"inline std :: vector < FEFace > & FaceArray ()","title":"function FaceArray"},{"location":"api/Classes/classFEMesh.html#function-elementarray","text":"inline std :: vector < FEElement > & ElementArray ()","title":"function ElementArray"},{"location":"api/Classes/classFEMesh.html#function-getelementvalue","text":"inline double GetElementValue ( int n )","title":"function GetElementValue"},{"location":"api/Classes/classFEMesh.html#function-setelementvalue","text":"inline void SetElementValue ( int n , double v )","title":"function SetElementValue"},{"location":"api/Classes/classFEMesh.html#function-updatevaluerange","text":"void UpdateValueRange ()","title":"function UpdateValueRange"},{"location":"api/Classes/classFEMesh.html#function-getvaluerange","text":"void GetValueRange ( double & vmin , double & vmax )","title":"function GetValueRange"},{"location":"api/Classes/classFEMesh.html#function-projecttosurface","text":"vec3d ProjectToSurface ( vec3d r , vec3d t )","title":"function ProjectToSurface"},{"location":"api/Classes/classFEMesh.html#function-projecttoface","text":"vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s )","title":"function ProjectToFace"},{"location":"api/Classes/classFEMesh.html#function-projecttoedge","text":"vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r )","title":"function ProjectToEdge"},{"location":"api/Classes/classFEMesh.html#function-findintersection","text":"bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g )","title":"function FindIntersection"},{"location":"api/Classes/classFEMesh.html#function-update","text":"void Update ()","title":"function Update"},{"location":"api/Classes/classFEMesh.html#function-updateelementneighbors","text":"void UpdateElementNeighbors ()","title":"function UpdateElementNeighbors"},{"location":"api/Classes/classFEMesh.html#function-updatefaces","text":"void UpdateFaces ()","title":"function UpdateFaces"},{"location":"api/Classes/classFEMesh.html#function-updateedges","text":"void UpdateEdges ()","title":"function UpdateEdges"},{"location":"api/Classes/classFEMesh.html#function-updatenodes","text":"void UpdateNodes ()","title":"function UpdateNodes"},{"location":"api/Classes/classFEMesh.html#function-autosmooth","text":"void AutoSmooth ( double w )","title":"function AutoSmooth"},{"location":"api/Classes/classFEMesh.html#function-updatenormals","text":"void UpdateNormals ()","title":"function UpdateNormals"},{"location":"api/Classes/classFEMesh.html#function-partitionselection","text":"void PartitionSelection ()","title":"function PartitionSelection"},{"location":"api/Classes/classFEMesh.html#function-removeisolatednodes","text":"void RemoveIsolatedNodes ()","title":"function RemoveIsolatedNodes"},{"location":"api/Classes/classFEMesh.html#function-addnode","text":"inline void AddNode ( FENode & n )","title":"function AddNode"},{"location":"api/Classes/classFEMesh.html#function-detachselectedmesh","text":"FEMesh * DetachSelectedMesh ()","title":"function DetachSelectedMesh"},{"location":"api/Classes/classFEMesh.html#function-detachselectedpart","text":"void DetachSelectedPart ()","title":"function DetachSelectedPart"},{"location":"api/Classes/classFEMesh.html#function-extractselectedfaces","text":"FEMesh * ExtractSelectedFaces ()","title":"function ExtractSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedelements","text":"void DeleteTaggedElements ( int tag )","title":"function DeleteTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedfaces","text":"void DeleteTaggedFaces ( int tag )","title":"function DeleteTaggedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggededges","text":"void DeleteTaggedEdges ( int tag )","title":"function DeleteTaggedEdges"},{"location":"api/Classes/classFEMesh.html#function-findduplicatefaces","text":"void FindDuplicateFaces ( vector < int > & l )","title":"function FindDuplicateFaces"},{"location":"api/Classes/classFEMesh.html#function-findduplicateedges","text":"void FindDuplicateEdges ( vector < int > & l )","title":"function FindDuplicateEdges"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedelements","text":"void DeleteSelectedElements ()","title":"function DeleteSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedfaces","text":"void DeleteSelectedFaces ()","title":"function DeleteSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deleteselectednodes","text":"void DeleteSelectedNodes ()","title":"function DeleteSelectedNodes"},{"location":"api/Classes/classFEMesh.html#function-inverttaggedelements","text":"void InvertTaggedElements ( int ntag )","title":"function InvertTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-invertselectedelements","text":"void InvertSelectedElements ()","title":"function InvertSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-shelljacobian","text":"double ShellJacobian ( FEElement & el )","title":"function ShellJacobian"},{"location":"api/Classes/classFEMesh.html#function-removeduplicateelements","text":"void RemoveDuplicateElements ()","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEMesh.html#function-fixinvertedelements","text":"void FixinvertedElements ()","title":"function FixinvertedElements"},{"location":"api/Classes/classFEMesh.html#function-fixreferencesurface","text":"void FixReferenceSurface ()","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEMesh.html#function-interpolateshellthickness","text":"void InterpolateShellThickness ( double )","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEMesh.html#function-removenonmanifoldelements","text":"void RemoveNonManifoldElements ()","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding","text":"void FixElementWinding ()","title":"function FixElementWinding"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding2","text":"void FixElementWinding2 ()","title":"function FixElementWinding2"},{"location":"api/Classes/classFEMesh.html#function-tagallelements","text":"void TagAllElements ( int ntag )","title":"function TagAllElements"},{"location":"api/Classes/classFEMesh.html#function-datafields","text":"inline int DataFields ()","title":"function DataFields"},{"location":"api/Classes/classFEMesh.html#function-adddatafield","text":"FEElementData * AddDataField ( const char * szname , double v = 0.0 )","title":"function AddDataField"},{"location":"api/Classes/classFEMesh.html#function-getdatafield","text":"inline FEElementData & GetDataField ( int i )","title":"function GetDataField"},{"location":"api/Classes/classFEMesh.html#function-shortestedge","text":"double ShortestEdge ()","title":"function ShortestEdge"},{"location":"api/Classes/classFEMesh.html#function-buildnodeelementtable","text":"void BuildNodeElementTable ( vector < vector < int > > & NET )","title":"function BuildNodeElementTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodefacetable","text":"void BuildNodeFaceTable ( vector < vector < int > > & NFT )","title":"function BuildNodeFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodeedgetable","text":"void BuildNodeEdgeTable ( vector < vector < int > > & NET )","title":"function BuildNodeEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgetable","text":"void BuildEdgeTable ( vector < pair < int , int > > & ET )","title":"function BuildEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodenodetable","text":"void BuildNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildsurfacenodenodetable","text":"void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildSurfaceNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementedgetable","text":"void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET )","title":"function BuildElementEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacetable","text":"void BuildFaceTable ( vector < FEFace > & FT )","title":"function BuildFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementfacetable","text":"void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT )","title":"function BuildElementFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildfaceedgetable","text":"void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET )","title":"function BuildFaceEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacefacetable","text":"void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT )","title":"function BuildFaceFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgeedgetable","text":"void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET )","title":"function BuildEdgeEdgeTable"},{"location":"api/Classes/classFEMesh.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-intersecttri","text":"bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectTri"},{"location":"api/Classes/classFEMesh.html#function-intersectquad","text":"bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectQuad"},{"location":"api/Classes/classFEMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEMesh.html#variable-m_elem","text":"std :: vector < FEElement > m_Elem ; FE elements.","title":"variable m_Elem"},{"location":"api/Classes/classFEMesh.html#variable-m_data","text":"std :: vector < double > m_data ; element values","title":"variable m_data"},{"location":"api/Classes/classFEMesh.html#variable-m_min","text":"double m_min ;","title":"variable m_min"},{"location":"api/Classes/classFEMesh.html#variable-m_max","text":"double m_max ; value range of element data","title":"variable m_max"},{"location":"api/Classes/classFEMesh.html#variable-m_map","text":"vector < FEElementData > m_map ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_map"},{"location":"api/Classes/classFEMeshSmoothingModifier.html","text":"FEMeshSmoothingModifier More... #include Public Functions Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier. Protected Functions Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap) Public Attributes Name double m_threshold1 double m_threshold2 double m_iteration int m_method Detailed Description class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FEMeshSmoothingModifier FEMeshSmoothingModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier. Protected Functions Documentation function area_triangle double area_triangle ( vec3d r [ 3 ] ) function distance double distance ( vec3d x , vec3d y ) function random double random () function Laplacian_Smoothing void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Laplacian_Smoothing2 void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ) function Taubin_Smoothing void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Crease_Enhancing_Diffusion void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ) function Add_Noise void Add_Noise ( FEMesh * pm , vector < int > hashmap ) Public Attributes Documentation variable m_threshold1 double m_threshold1 ; variable m_threshold2 double m_threshold2 ; variable m_iteration double m_iteration ; variable m_method int m_method ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#femeshsmoothingmodifier","text":"More... #include ","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions","text":"Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier.","title":"Public Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions","text":"Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap)","title":"Protected Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes","text":"Name double m_threshold1 double m_threshold2 double m_iteration int m_method","title":"Public Attributes"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#detailed-description","text":"class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-femeshsmoothingmodifier","text":"FEMeshSmoothingModifier () Constructor.","title":"function FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier.","title":"function Apply"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-distance","text":"double distance ( vec3d x , vec3d y )","title":"function distance"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-random","text":"double random ()","title":"function random"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing","text":"void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing2","text":"void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-taubin_smoothing","text":"void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Taubin_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-crease_enhancing_diffusion","text":"void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap )","title":"function Crease_Enhancing_Diffusion"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-add_noise","text":"void Add_Noise ( FEMesh * pm , vector < int > hashmap )","title":"function Add_Noise"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold1","text":"double m_threshold1 ;","title":"variable m_threshold1"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold2","text":"double m_threshold2 ;","title":"variable m_threshold2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_iteration","text":"double m_iteration ;","title":"variable m_iteration"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_method","text":"int m_method ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_method"},{"location":"api/Classes/classFENode.html","text":"FENode Inherits from FEItem Public Functions Name FENode () Public Attributes Name vec3d r bool m_bext double m_ndata Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FENode inline FENode () Public Attributes Documentation variable r vec3d r ; variable m_bext bool m_bext ; variable m_ndata double m_ndata ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENode"},{"location":"api/Classes/classFENode.html#fenode","text":"Inherits from FEItem","title":"FENode"},{"location":"api/Classes/classFENode.html#public-functions","text":"Name FENode ()","title":"Public Functions"},{"location":"api/Classes/classFENode.html#public-attributes","text":"Name vec3d r bool m_bext double m_ndata","title":"Public Attributes"},{"location":"api/Classes/classFENode.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFENode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENode.html#function-fenode","text":"inline FENode ()","title":"function FENode"},{"location":"api/Classes/classFENode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFENode.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/classFENode.html#variable-m_bext","text":"bool m_bext ;","title":"variable m_bext"},{"location":"api/Classes/classFENode.html#variable-m_ndata","text":"double m_ndata ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_ndata"},{"location":"api/Classes/classFENodeElementList.html","text":"FENodeElementList Public Functions Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem Public Functions Documentation function FENodeElementList FENodeElementList ( FEMesh * pm ) function ~FENodeElementList ~ FENodeElementList () function Build void Build () function Valence inline int Valence ( int n ) function Element inline FEElement * Element ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_pelem vector < FEElement * > m_pelem ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#fenodeelementlist","text":"","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#public-functions","text":"Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem","title":"Protected Attributes"},{"location":"api/Classes/classFENodeElementList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist","text":"FENodeElementList ( FEMesh * pm )","title":"function FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist_1","text":"~ FENodeElementList ()","title":"function ~FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeElementList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeElementList.html#function-element","text":"inline FEElement * Element ( int n , int j )","title":"function Element"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeElementList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeElementList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pelem","text":"vector < FEElement * > m_pelem ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_pelem"},{"location":"api/Classes/classFENodeFaceList.html","text":"FENodeFaceList Public Functions Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf) Protected Functions Name void Sort (int node) Protected Attributes Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off Public Functions Documentation function FENodeFaceList FENodeFaceList ( FEMesh * pm ) function ~FENodeFaceList ~ FENodeFaceList ( void ) function Build void Build () function BuildSorted void BuildSorted () function Nodes inline int Nodes () function Node inline FENode & Node ( int i ) function Valence inline int Valence ( int i ) function Face inline FEFace * Face ( int n , int i ) function HasFace bool HasFace ( int n , FEFace * pf ) Protected Functions Documentation function Sort void Sort ( int node ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_node vector < int > m_node ; variable m_val vector < int > m_val ; variable m_pface vector < FEFace * > m_pface ; variable m_off vector < int > m_off ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#fenodefacelist","text":"","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#public-functions","text":"Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf)","title":"Public Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions","text":"Name void Sort (int node)","title":"Protected Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off","title":"Protected Attributes"},{"location":"api/Classes/classFENodeFaceList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist","text":"FENodeFaceList ( FEMesh * pm )","title":"function FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist_1","text":"~ FENodeFaceList ( void )","title":"function ~FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeFaceList.html#function-buildsorted","text":"void BuildSorted ()","title":"function BuildSorted"},{"location":"api/Classes/classFENodeFaceList.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFENodeFaceList.html#function-node","text":"inline FENode & Node ( int i )","title":"function Node"},{"location":"api/Classes/classFENodeFaceList.html#function-valence","text":"inline int Valence ( int i )","title":"function Valence"},{"location":"api/Classes/classFENodeFaceList.html#function-face","text":"inline FEFace * Face ( int n , int i )","title":"function Face"},{"location":"api/Classes/classFENodeFaceList.html#function-hasface","text":"bool HasFace ( int n , FEFace * pf )","title":"function HasFace"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-sort","text":"void Sort ( int node )","title":"function Sort"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pface","text":"vector < FEFace * > m_pface ;","title":"variable m_pface"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_off","text":"vector < int > m_off ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html","text":"FENodeNodeList Public Functions Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node Public Functions Documentation function FENodeNodeList FENodeNodeList ( FEMesh * pm ) function ~FENodeNodeList ~ FENodeNodeList () function Build void Build () function Valence inline int Valence ( int n ) function Node inline int Node ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_node vector < int > m_node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#fenodenodelist","text":"","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#public-functions","text":"Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node","title":"Protected Attributes"},{"location":"api/Classes/classFENodeNodeList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist","text":"FENodeNodeList ( FEMesh * pm )","title":"function FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist_1","text":"~ FENodeNodeList ()","title":"function ~FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeNodeList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeNodeList.html#function-node","text":"inline int Node ( int n , int j )","title":"function Node"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_node","text":"vector < int > m_node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_node"},{"location":"api/Classes/classFETri3.html","text":"FETri3 Inherits from FEElement_ , FEItem Public Functions Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FETri3 FETri3 () Constructor. function FETri3 FETri3 ( FETri3 & el ) copy constructor function operator= FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-24 at 22:16:02 +0000","title":"FETri3"},{"location":"api/Classes/classFETri3.html#fetri3","text":"Inherits from FEElement_ , FEItem","title":"FETri3"},{"location":"api/Classes/classFETri3.html#public-functions","text":"Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator","title":"Public Functions"},{"location":"api/Classes/classFETri3.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFETri3.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFETri3.html#function-fetri3","text":"FETri3 () Constructor.","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-fetri3_1","text":"FETri3 ( FETri3 & el ) copy constructor","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-operator","text":"FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-24 at 22:16:02 +0000","title":"function operator="},{"location":"api/Classes/classFEVTKExport.html","text":"FEVTKExport Public Functions Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh) Public Functions Documentation function FEVTKExport FEVTKExport () function ~FEVTKExport ~ FEVTKExport () = default function Export bool Export ( FEMesh & mesh , const char * szfile ) function ExportToString std :: string ExportToString ( FEMesh & mesh ) function ExportToStream bool ExportToStream ( FEMesh & mesh , std :: ostream & out ) function SetOptions inline void SetOptions ( VTKEXPORT o ) function ExportToVTK vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-24 at 22:16:02 +0000","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#fevtkexport","text":"","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#public-functions","text":"Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh)","title":"Public Functions"},{"location":"api/Classes/classFEVTKExport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport","text":"FEVTKExport ()","title":"function FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport_1","text":"~ FEVTKExport () = default","title":"function ~FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-export","text":"bool Export ( FEMesh & mesh , const char * szfile )","title":"function Export"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostring","text":"std :: string ExportToString ( FEMesh & mesh )","title":"function ExportToString"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostream","text":"bool ExportToStream ( FEMesh & mesh , std :: ostream & out )","title":"function ExportToStream"},{"location":"api/Classes/classFEVTKExport.html#function-setoptions","text":"inline void SetOptions ( VTKEXPORT o )","title":"function SetOptions"},{"location":"api/Classes/classFEVTKExport.html#function-exporttovtk","text":"vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function ExportToVTK"},{"location":"api/Classes/classFEVTKimport.html","text":"FEVTKimport Public Functions Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata) Protected Functions Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close () Public Functions Documentation function FEVTKimport FEVTKimport () function ~FEVTKimport ~ FEVTKimport ( void ) function Load FEMesh * Load ( const char * szfile ) function Load FEMesh * Load ( istream & stream ) function Load FEMesh * Load ( vtkPolyData * polydata ) Protected Functions Documentation function BuildMesh bool BuildMesh () function errf FEMesh * errf ( const char * sz , ... ) function Close void Close () Updated on 2023-10-24 at 22:16:02 +0000","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#fevtkimport","text":"","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#public-functions","text":"Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata)","title":"Public Functions"},{"location":"api/Classes/classFEVTKimport.html#protected-functions","text":"Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close ()","title":"Protected Functions"},{"location":"api/Classes/classFEVTKimport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport","text":"FEVTKimport ()","title":"function FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport_1","text":"~ FEVTKimport ( void )","title":"function ~FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-load","text":"FEMesh * Load ( const char * szfile )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_1","text":"FEMesh * Load ( istream & stream )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_2","text":"FEMesh * Load ( vtkPolyData * polydata )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-buildmesh","text":"bool BuildMesh ()","title":"function BuildMesh"},{"location":"api/Classes/classFEVTKimport.html#function-errf","text":"FEMesh * errf ( const char * sz , ... )","title":"function errf"},{"location":"api/Classes/classFEVTKimport.html#function-close","text":"void Close () Updated on 2023-10-24 at 22:16:02 +0000","title":"function Close"},{"location":"api/Classes/classGLCOLOR.html","text":"GLCOLOR Public Functions Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c) Public Attributes Name uchar a uchar b uchar g uchar r Public Functions Documentation function GLCOLOR inline GLCOLOR () function GLCOLOR inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) function operator* inline GLCOLOR operator * ( double f ) function operator+ inline GLCOLOR operator + ( GLCOLOR & c ) Public Attributes Documentation variable a uchar a ; variable b uchar b ; variable g uchar g ; variable r uchar r ; Updated on 2023-10-24 at 22:16:02 +0000","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#glcolor","text":"","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#public-functions","text":"Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c)","title":"Public Functions"},{"location":"api/Classes/classGLCOLOR.html#public-attributes","text":"Name uchar a uchar b uchar g uchar r","title":"Public Attributes"},{"location":"api/Classes/classGLCOLOR.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor","text":"inline GLCOLOR ()","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor_1","text":"inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 )","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-operator","text":"inline GLCOLOR operator * ( double f )","title":"function operator*"},{"location":"api/Classes/classGLCOLOR.html#function-operator_1","text":"inline GLCOLOR operator + ( GLCOLOR & c )","title":"function operator+"},{"location":"api/Classes/classGLCOLOR.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classGLCOLOR.html#variable-a","text":"uchar a ;","title":"variable a"},{"location":"api/Classes/classGLCOLOR.html#variable-b","text":"uchar b ;","title":"variable b"},{"location":"api/Classes/classGLCOLOR.html#variable-g","text":"uchar g ;","title":"variable g"},{"location":"api/Classes/classGLCOLOR.html#variable-r","text":"uchar r ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable r"},{"location":"api/Classes/classLegacyMeshGenerator.html","text":"LegacyMeshGenerator Public Functions Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape) Public Functions Documentation function LegacyMeshGenerator LegacyMeshGenerator () function ~LegacyMeshGenerator ~ LegacyMeshGenerator () function setNeighborhoodSize void setNeighborhoodSize ( int size ) function setSampleSpacing void setSampleSpacing ( double spacing ) function setUsePowerCrust void setUsePowerCrust ( bool enabled ) function setSmoothingAmount void setSmoothingAmount ( float amount ) function buildMesh vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#legacymeshgenerator","text":"","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions","text":"Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator","text":"LegacyMeshGenerator ()","title":"function LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator_1","text":"~ LegacyMeshGenerator ()","title":"function ~LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setneighborhoodsize","text":"void setNeighborhoodSize ( int size )","title":"function setNeighborhoodSize"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsamplespacing","text":"void setSampleSpacing ( double spacing )","title":"function setSampleSpacing"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setusepowercrust","text":"void setUsePowerCrust ( bool enabled )","title":"function setUsePowerCrust"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsmoothingamount","text":"void setSmoothingAmount ( float amount )","title":"function setSmoothingAmount"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-buildmesh","text":"vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function buildMesh"},{"location":"api/Classes/classMeshSettings.html","text":"MeshSettings Settings for creating a mesh. More... #include Public Functions Name MeshSettings () Constructor. ~MeshSettings () Destructor. Detailed Description class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh. Public Functions Documentation function MeshSettings MeshSettings () Constructor. function ~MeshSettings ~ MeshSettings () Destructor. Updated on 2023-10-24 at 22:16:02 +0000","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#meshsettings","text":"Settings for creating a mesh. More... #include ","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#public-functions","text":"Name MeshSettings () Constructor. ~MeshSettings () Destructor.","title":"Public Functions"},{"location":"api/Classes/classMeshSettings.html#detailed-description","text":"class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh.","title":"Detailed Description"},{"location":"api/Classes/classMeshSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings","text":"MeshSettings () Constructor.","title":"function MeshSettings"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings_1","text":"~ MeshSettings () Destructor. Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~MeshSettings"},{"location":"api/Classes/classObjectReader.html","text":"ObjectReader More... Public Types Name typedef ObjectReader Self typedef T ObjectType Public Functions Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader () Detailed Description template < class T > class ObjectReader ; Public Types Documentation typedef Self typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectReader < T >:: ObjectType ; Public Functions Documentation function GetOutput inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType. function GetOutput inline std :: vector < ObjectType > & GetOutput () function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Read inline void Read () Read the file. function Update inline void Update () function ObjectReader inline ObjectReader () function ~ObjectReader inline virtual ~ ObjectReader () Updated on 2023-10-24 at 22:16:02 +0000","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#objectreader","text":"More...","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#public-types","text":"Name typedef ObjectReader Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectReader.html#public-functions","text":"Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader ()","title":"Public Functions"},{"location":"api/Classes/classObjectReader.html#detailed-description","text":"template < class T > class ObjectReader ;","title":"Detailed Description"},{"location":"api/Classes/classObjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectReader.html#typedef-self","text":"typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectReader.html#typedef-objecttype","text":"typedef T ObjectReader < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectReader.html#function-getoutput","text":"inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType.","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-getoutput_1","text":"inline std :: vector < ObjectType > & GetOutput ()","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectReader.html#function-read","text":"inline void Read () Read the file.","title":"function Read"},{"location":"api/Classes/classObjectReader.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectReader.html#function-objectreader","text":"inline ObjectReader ()","title":"function ObjectReader"},{"location":"api/Classes/classObjectReader.html#function-objectreader_1","text":"inline virtual ~ ObjectReader () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ObjectReader"},{"location":"api/Classes/classObjectWriter.html","text":"ObjectWriter More... Public Types Name typedef ObjectWriter Self typedef T ObjectType Public Functions Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter () Detailed Description template < class T > class ObjectWriter ; Public Types Documentation typedef Self typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectWriter < T >:: ObjectType ; Public Functions Documentation function SetInput inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType. function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Write inline void Write () Write the file. function Update inline void Update () function ObjectWriter inline ObjectWriter () function ~ObjectWriter inline virtual ~ ObjectWriter () Updated on 2023-10-24 at 22:16:02 +0000","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#objectwriter","text":"More...","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#public-types","text":"Name typedef ObjectWriter Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectWriter.html#public-functions","text":"Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter ()","title":"Public Functions"},{"location":"api/Classes/classObjectWriter.html#detailed-description","text":"template < class T > class ObjectWriter ;","title":"Detailed Description"},{"location":"api/Classes/classObjectWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectWriter.html#typedef-self","text":"typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectWriter.html#typedef-objecttype","text":"typedef T ObjectWriter < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectWriter.html#function-setinput","text":"inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType.","title":"function SetInput"},{"location":"api/Classes/classObjectWriter.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectWriter.html#function-write","text":"inline void Write () Write the file.","title":"function Write"},{"location":"api/Classes/classObjectWriter.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter","text":"inline ObjectWriter ()","title":"function ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter_1","text":"inline virtual ~ ObjectWriter () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ObjectWriter"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html","text":"title: ParticleEvent:: Parent ParticleEvent:: Parent More... Detailed Description class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-24 at 22:16:02 +0000","title":"classParticleEvent 1 1 01Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#particleevent-parent","text":"More...","title":"ParticleEvent:: Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#detailed-description","text":"class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html","text":"ParticleGradientDescentPositionOptimizer More... #include Detailed Description class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#particlegradientdescentpositionoptimizer","text":"More... #include ","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#detailed-description","text":"class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomain.html","text":"ParticleImageDomain More... #include Detailed Description class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#particleimagedomain","text":"More... #include ","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#detailed-description","text":"class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html","text":"ParticleImageDomainWithCurvature More... #include Detailed Description class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#particleimagedomainwithcurvature","text":"More... #include ","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#detailed-description","text":"class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradN.html","text":"ParticleImageDomainWithGradN More... #include Detailed Description class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#particleimagedomainwithgradn","text":"More... #include ","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#detailed-description","text":"class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradients.html","text":"ParticleImageDomainWithGradients More... #include Detailed Description class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#particleimagedomainwithgradients","text":"More... #include ","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#detailed-description","text":"class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html","text":"ParticleImplicitSurfaceDomain More... #include Detailed Description class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#particleimplicitsurfacedomain","text":"More... #include ","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#detailed-description","text":"class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html","text":"ParticleMeanCurvatureAttribute Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html#particlemeancurvatureattribute","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleProcrustesRegistration.html","text":"ParticleProcrustesRegistration Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleProcrustesRegistration.html#particleprocrustesregistration","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html","text":"ParticleShapeLinearRegressionMatrixAttribute Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html#particleshapelinearregressionmatrixattribute","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html","text":"ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Detailed Description class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#particleshapematrixattribute","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include ","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#detailed-description","text":"class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html","text":"ParticleShapeMixedEffectsMatrixAttribute Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html#particleshapemixedeffectsmatrixattribute","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classPreferences.html","text":"Preferences Application preferences. More... #include Inherits from QObject Public Types Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4 Public Signals Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal () Public Functions Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events) Detailed Description class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class. Public Types Documentation enum OrientationMarkerType Enumerator Value Description medical 0 triad 1 none 2 enum OrientationMarkerCorner Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3 enum @4 Enumerator Value Description MAX_RECENT_FILES 64 Public Signals Documentation signal color_scheme_changed void color_scheme_changed ( int newIndex ) signal glyph_properties_changed void glyph_properties_changed () signal threading_changed_signal void threading_changed_signal () signal sliders_changed_signal void sliders_changed_signal () Public Functions Documentation function Preferences Preferences () function restore_defaults void restore_defaults () function add_recent_file void add_recent_file ( QString file , QString path ) function get_recent_files QStringList get_recent_files () function get_recent_paths QStringList get_recent_paths () function not_saved bool not_saved () function set_saved void set_saved ( bool saved = true ) function get_window_geometry QByteArray get_window_geometry () function set_window_geometry void set_window_geometry ( QByteArray geometry ) function get_window_state QByteArray get_window_state () function set_window_state void set_window_state ( QByteArray state ) function get_last_directory QString get_last_directory () function set_last_directory void set_last_directory ( QString value ) function get_cache_enabled bool get_cache_enabled () function set_cache_enabled void set_cache_enabled ( bool value ) function get_parallel_enabled bool get_parallel_enabled () function set_parallel_enabled void set_parallel_enabled ( bool value ) function get_memory_cache_percent int get_memory_cache_percent () function set_memory_cache_percent void set_memory_cache_percent ( int value ) function get_num_threads int get_num_threads () function set_num_threads void set_num_threads ( int num_threads ) function get_glyph_size float get_glyph_size () function set_glyph_size void set_glyph_size ( float value ) function get_glyph_quality float get_glyph_quality () function set_glyph_quality void set_glyph_quality ( float value ) function get_glyph_auto_size bool get_glyph_auto_size () function set_glyph_auto_size void set_glyph_auto_size ( bool value ) function get_glyph_scale_arrows bool get_glyph_scale_arrows () function set_glyph_scale_arrows void set_glyph_scale_arrows ( bool value ) function get_pca_range float get_pca_range () function set_pca_range void set_pca_range ( float value ) function get_pca_steps int get_pca_steps () function set_pca_steps void set_pca_steps ( int value ) function set_color_scheme void set_color_scheme ( int value ) function get_color_scheme int get_color_scheme () function set_particle_colors void set_particle_colors ( int value ) function get_particle_colors int get_particle_colors () function set_color_map void set_color_map ( int value ) function get_color_map int get_color_map () function set_discrete_color_mode void set_discrete_color_mode ( bool value ) function get_discrete_color_mode bool get_discrete_color_mode () function set_reverse_color_map void set_reverse_color_map ( bool value ) function get_reverse_color_map bool get_reverse_color_map () function get_center_checked bool get_center_checked () function set_center_checked void set_center_checked ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_orientation_marker_type OrientationMarkerType get_orientation_marker_type () function set_orientation_marker_type void set_orientation_marker_type ( OrientationMarkerType type ) function get_orientation_marker_corner OrientationMarkerCorner get_orientation_marker_corner () function set_orientation_marker_corner void set_orientation_marker_corner ( OrientationMarkerCorner corner ) function get_groom_file_template QString get_groom_file_template () function set_groom_file_template void set_groom_file_template ( QString groom_file_template ) function get_optimize_file_template QString get_optimize_file_template () function set_optimize_file_template void set_optimize_file_template ( QString optimize_file_template ) function get_export_override_size QSize get_export_override_size () function set_export_override_size void set_export_override_size ( QSize size ) function get_export_override_size_enabled bool get_export_override_size_enabled () function set_export_override_size_enabled void set_export_override_size_enabled ( bool enabled ) function get_export_show_orientation_marker bool get_export_show_orientation_marker () function set_export_show_orientation_marker void set_export_show_orientation_marker ( bool value ) function get_export_show_color_scale bool get_export_show_color_scale () function set_export_show_color_scale void set_export_show_color_scale ( bool value ) function get_export_num_pca_images int get_export_num_pca_images () function set_export_num_pca_images void set_export_num_pca_images ( int number ) function get_export_pca_range double get_export_pca_range () function set_export_pca_range void set_export_pca_range ( double range ) function set_export_pca_modes void set_export_pca_modes ( QString string ) function get_export_pca_modes QString get_export_pca_modes () function get_auto_update_check bool get_auto_update_check () function set_auto_update_check void set_auto_update_check ( bool enabled ) function get_update_snooze_until QDateTime get_update_snooze_until () function set_update_snooze_until void set_update_snooze_until ( QDateTime date ) function get_device_id QString get_device_id () function get_telemetry_enabled bool get_telemetry_enabled () function set_telemetry_enabled void set_telemetry_enabled ( bool enabled ) function get_telemetry_asked bool get_telemetry_asked () function set_telemetry_asked void set_telemetry_asked ( bool asked ) function get_pending_telemetry_events QStringList get_pending_telemetry_events () function set_pending_telemetry_events void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-24 at 22:16:02 +0000","title":"Preferences"},{"location":"api/Classes/classPreferences.html#preferences","text":"Application preferences. More... #include Inherits from QObject","title":"Preferences"},{"location":"api/Classes/classPreferences.html#public-types","text":"Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4","title":"Public Types"},{"location":"api/Classes/classPreferences.html#public-signals","text":"Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal ()","title":"Public Signals"},{"location":"api/Classes/classPreferences.html#public-functions","text":"Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events)","title":"Public Functions"},{"location":"api/Classes/classPreferences.html#detailed-description","text":"class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class.","title":"Detailed Description"},{"location":"api/Classes/classPreferences.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkertype","text":"Enumerator Value Description medical 0 triad 1 none 2","title":"enum OrientationMarkerType"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkercorner","text":"Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3","title":"enum OrientationMarkerCorner"},{"location":"api/Classes/classPreferences.html#enum-4","text":"Enumerator Value Description MAX_RECENT_FILES 64","title":"enum @4"},{"location":"api/Classes/classPreferences.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classPreferences.html#signal-color_scheme_changed","text":"void color_scheme_changed ( int newIndex )","title":"signal color_scheme_changed"},{"location":"api/Classes/classPreferences.html#signal-glyph_properties_changed","text":"void glyph_properties_changed ()","title":"signal glyph_properties_changed"},{"location":"api/Classes/classPreferences.html#signal-threading_changed_signal","text":"void threading_changed_signal ()","title":"signal threading_changed_signal"},{"location":"api/Classes/classPreferences.html#signal-sliders_changed_signal","text":"void sliders_changed_signal ()","title":"signal sliders_changed_signal"},{"location":"api/Classes/classPreferences.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classPreferences.html#function-preferences","text":"Preferences ()","title":"function Preferences"},{"location":"api/Classes/classPreferences.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classPreferences.html#function-add_recent_file","text":"void add_recent_file ( QString file , QString path )","title":"function add_recent_file"},{"location":"api/Classes/classPreferences.html#function-get_recent_files","text":"QStringList get_recent_files ()","title":"function get_recent_files"},{"location":"api/Classes/classPreferences.html#function-get_recent_paths","text":"QStringList get_recent_paths ()","title":"function get_recent_paths"},{"location":"api/Classes/classPreferences.html#function-not_saved","text":"bool not_saved ()","title":"function not_saved"},{"location":"api/Classes/classPreferences.html#function-set_saved","text":"void set_saved ( bool saved = true )","title":"function set_saved"},{"location":"api/Classes/classPreferences.html#function-get_window_geometry","text":"QByteArray get_window_geometry ()","title":"function get_window_geometry"},{"location":"api/Classes/classPreferences.html#function-set_window_geometry","text":"void set_window_geometry ( QByteArray geometry )","title":"function set_window_geometry"},{"location":"api/Classes/classPreferences.html#function-get_window_state","text":"QByteArray get_window_state ()","title":"function get_window_state"},{"location":"api/Classes/classPreferences.html#function-set_window_state","text":"void set_window_state ( QByteArray state )","title":"function set_window_state"},{"location":"api/Classes/classPreferences.html#function-get_last_directory","text":"QString get_last_directory ()","title":"function get_last_directory"},{"location":"api/Classes/classPreferences.html#function-set_last_directory","text":"void set_last_directory ( QString value )","title":"function set_last_directory"},{"location":"api/Classes/classPreferences.html#function-get_cache_enabled","text":"bool get_cache_enabled ()","title":"function get_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool value )","title":"function set_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-get_parallel_enabled","text":"bool get_parallel_enabled ()","title":"function get_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-set_parallel_enabled","text":"void set_parallel_enabled ( bool value )","title":"function set_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-get_memory_cache_percent","text":"int get_memory_cache_percent ()","title":"function get_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-set_memory_cache_percent","text":"void set_memory_cache_percent ( int value )","title":"function set_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-get_num_threads","text":"int get_num_threads ()","title":"function get_num_threads"},{"location":"api/Classes/classPreferences.html#function-set_num_threads","text":"void set_num_threads ( int num_threads )","title":"function set_num_threads"},{"location":"api/Classes/classPreferences.html#function-get_glyph_size","text":"float get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_size","text":"void set_glyph_size ( float value )","title":"function set_glyph_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_quality","text":"float get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-set_glyph_quality","text":"void set_glyph_quality ( float value )","title":"function set_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-get_glyph_auto_size","text":"bool get_glyph_auto_size ()","title":"function get_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_auto_size","text":"void set_glyph_auto_size ( bool value )","title":"function set_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_scale_arrows","text":"bool get_glyph_scale_arrows ()","title":"function get_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-set_glyph_scale_arrows","text":"void set_glyph_scale_arrows ( bool value )","title":"function set_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-get_pca_range","text":"float get_pca_range ()","title":"function get_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_pca_range","text":"void set_pca_range ( float value )","title":"function set_pca_range"},{"location":"api/Classes/classPreferences.html#function-get_pca_steps","text":"int get_pca_steps ()","title":"function get_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_pca_steps","text":"void set_pca_steps ( int value )","title":"function set_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_color_scheme","text":"void set_color_scheme ( int value )","title":"function set_color_scheme"},{"location":"api/Classes/classPreferences.html#function-get_color_scheme","text":"int get_color_scheme ()","title":"function get_color_scheme"},{"location":"api/Classes/classPreferences.html#function-set_particle_colors","text":"void set_particle_colors ( int value )","title":"function set_particle_colors"},{"location":"api/Classes/classPreferences.html#function-get_particle_colors","text":"int get_particle_colors ()","title":"function get_particle_colors"},{"location":"api/Classes/classPreferences.html#function-set_color_map","text":"void set_color_map ( int value )","title":"function set_color_map"},{"location":"api/Classes/classPreferences.html#function-get_color_map","text":"int get_color_map ()","title":"function get_color_map"},{"location":"api/Classes/classPreferences.html#function-set_discrete_color_mode","text":"void set_discrete_color_mode ( bool value )","title":"function set_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-get_discrete_color_mode","text":"bool get_discrete_color_mode ()","title":"function get_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-set_reverse_color_map","text":"void set_reverse_color_map ( bool value )","title":"function set_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_reverse_color_map","text":"bool get_reverse_color_map ()","title":"function get_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_center_checked","text":"bool get_center_checked ()","title":"function get_center_checked"},{"location":"api/Classes/classPreferences.html#function-set_center_checked","text":"void set_center_checked ( bool value )","title":"function set_center_checked"},{"location":"api/Classes/classPreferences.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_type","text":"OrientationMarkerType get_orientation_marker_type ()","title":"function get_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_type","text":"void set_orientation_marker_type ( OrientationMarkerType type )","title":"function set_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_corner","text":"OrientationMarkerCorner get_orientation_marker_corner ()","title":"function get_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_corner","text":"void set_orientation_marker_corner ( OrientationMarkerCorner corner )","title":"function set_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-get_groom_file_template","text":"QString get_groom_file_template ()","title":"function get_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-set_groom_file_template","text":"void set_groom_file_template ( QString groom_file_template )","title":"function set_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-get_optimize_file_template","text":"QString get_optimize_file_template ()","title":"function get_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-set_optimize_file_template","text":"void set_optimize_file_template ( QString optimize_file_template )","title":"function set_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size","text":"QSize get_export_override_size ()","title":"function get_export_override_size"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size","text":"void set_export_override_size ( QSize size )","title":"function set_export_override_size"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size_enabled","text":"bool get_export_override_size_enabled ()","title":"function get_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size_enabled","text":"void set_export_override_size_enabled ( bool enabled )","title":"function set_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-get_export_show_orientation_marker","text":"bool get_export_show_orientation_marker ()","title":"function get_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-set_export_show_orientation_marker","text":"void set_export_show_orientation_marker ( bool value )","title":"function set_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-get_export_show_color_scale","text":"bool get_export_show_color_scale ()","title":"function get_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-set_export_show_color_scale","text":"void set_export_show_color_scale ( bool value )","title":"function set_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-get_export_num_pca_images","text":"int get_export_num_pca_images ()","title":"function get_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-set_export_num_pca_images","text":"void set_export_num_pca_images ( int number )","title":"function set_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_range","text":"double get_export_pca_range ()","title":"function get_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_range","text":"void set_export_pca_range ( double range )","title":"function set_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_modes","text":"void set_export_pca_modes ( QString string )","title":"function set_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_modes","text":"QString get_export_pca_modes ()","title":"function get_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_auto_update_check","text":"bool get_auto_update_check ()","title":"function get_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-set_auto_update_check","text":"void set_auto_update_check ( bool enabled )","title":"function set_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-get_update_snooze_until","text":"QDateTime get_update_snooze_until ()","title":"function get_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-set_update_snooze_until","text":"void set_update_snooze_until ( QDateTime date )","title":"function set_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-get_device_id","text":"QString get_device_id ()","title":"function get_device_id"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_enabled","text":"bool get_telemetry_enabled ()","title":"function get_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_enabled","text":"void set_telemetry_enabled ( bool enabled )","title":"function set_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_asked","text":"bool get_telemetry_asked ()","title":"function get_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_asked","text":"void set_telemetry_asked ( bool asked )","title":"function set_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-get_pending_telemetry_events","text":"QStringList get_pending_telemetry_events ()","title":"function get_pending_telemetry_events"},{"location":"api/Classes/classPreferences.html#function-set_pending_telemetry_events","text":"void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_pending_telemetry_events"},{"location":"api/Classes/classProcrustes3D.html","text":"Procrustes3D Public Types Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType Public Functions Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes) Public Types Documentation typedef RealType typedef double Procrustes3D :: RealType ; typedef PointType typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ; typedef ShapeType typedef std :: vector < PointType > Procrustes3D :: ShapeType ; typedef ShapeIteratorType typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ; typedef ShapeListType typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ; typedef ShapeListIteratorType typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ; typedef SimilarityTransformListType typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ; typedef SimilarityTransformListIteratorType typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ; typedef TransformMatrixType typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ; typedef TransformMatrixListType typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ; typedef TransformMatrixIteratorType typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ; Public Functions Documentation function Procrustes3D inline Procrustes3D () function Procrustes3D inline Procrustes3D ( bool do_scaling , bool do_rotation_translation ) function GetScaling inline bool GetScaling () const function ScalingOn inline void ScalingOn () function ScalingOff inline void ScalingOff () function GetRotationTranslation inline bool GetRotationTranslation () const function RotationTranslationOn inline void RotationTranslationOn () function RotationTranslationOff inline void RotationTranslationOff () function AlignShapes void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function RemoveTranslation void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function ConstructTransformMatrices void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ) function ConstructTransformMatrix void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ) function ComputeMeanShape void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ) function ComputeCenterOfMass void ComputeCenterOfMass ( ShapeType & shape , PointType & center ) function CenterShape void CenterShape ( ShapeType & shape ) function ComputeCommonCenter void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ) function AlignSourceToTarget void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ) function ComputeMedianShape int ComputeMedianShape ( ShapeListType & shapeList ) function TransformShape static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ) function TransformShapes static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ) function ComputeSumOfSquares static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-24 at 22:16:02 +0000","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#procrustes3d","text":"","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#public-types","text":"Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType","title":"Public Types"},{"location":"api/Classes/classProcrustes3D.html#public-functions","text":"Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes)","title":"Public Functions"},{"location":"api/Classes/classProcrustes3D.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classProcrustes3D.html#typedef-realtype","text":"typedef double Procrustes3D :: RealType ;","title":"typedef RealType"},{"location":"api/Classes/classProcrustes3D.html#typedef-pointtype","text":"typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapetype","text":"typedef std :: vector < PointType > Procrustes3D :: ShapeType ;","title":"typedef ShapeType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapeiteratortype","text":"typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ;","title":"typedef ShapeIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelisttype","text":"typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ;","title":"typedef ShapeListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelistiteratortype","text":"typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ;","title":"typedef ShapeListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlisttype","text":"typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ;","title":"typedef SimilarityTransformListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlistiteratortype","text":"typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ;","title":"typedef SimilarityTransformListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixtype","text":"typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ;","title":"typedef TransformMatrixType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixlisttype","text":"typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ;","title":"typedef TransformMatrixListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixiteratortype","text":"typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ;","title":"typedef TransformMatrixIteratorType"},{"location":"api/Classes/classProcrustes3D.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d","text":"inline Procrustes3D ()","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d_1","text":"inline Procrustes3D ( bool do_scaling , bool do_rotation_translation )","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classProcrustes3D.html#function-scalingon","text":"inline void ScalingOn ()","title":"function ScalingOn"},{"location":"api/Classes/classProcrustes3D.html#function-scalingoff","text":"inline void ScalingOff ()","title":"function ScalingOff"},{"location":"api/Classes/classProcrustes3D.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationon","text":"inline void RotationTranslationOn ()","title":"function RotationTranslationOn"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationoff","text":"inline void RotationTranslationOff ()","title":"function RotationTranslationOff"},{"location":"api/Classes/classProcrustes3D.html#function-alignshapes","text":"void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function AlignShapes"},{"location":"api/Classes/classProcrustes3D.html#function-removetranslation","text":"void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function RemoveTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrices","text":"void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices )","title":"function ConstructTransformMatrices"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrix","text":"void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix )","title":"function ConstructTransformMatrix"},{"location":"api/Classes/classProcrustes3D.html#function-computemeanshape","text":"void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList )","title":"function ComputeMeanShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecenterofmass","text":"void ComputeCenterOfMass ( ShapeType & shape , PointType & center )","title":"function ComputeCenterOfMass"},{"location":"api/Classes/classProcrustes3D.html#function-centershape","text":"void CenterShape ( ShapeType & shape )","title":"function CenterShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecommoncenter","text":"void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center )","title":"function ComputeCommonCenter"},{"location":"api/Classes/classProcrustes3D.html#function-alignsourcetotarget","text":"void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source )","title":"function AlignSourceToTarget"},{"location":"api/Classes/classProcrustes3D.html#function-computemedianshape","text":"int ComputeMedianShape ( ShapeListType & shapeList )","title":"function ComputeMedianShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshape","text":"static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform )","title":"function TransformShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshapes","text":"static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms )","title":"function TransformShapes"},{"location":"api/Classes/classProcrustes3D.html#function-computesumofsquares","text":"static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function ComputeSumOfSquares"},{"location":"api/Classes/classReconstruction.html","text":"Reconstruction More... Public Types Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType Public Functions Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad () Detailed Description template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ; Public Types Documentation typedef GradientFilterType typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ; typedef GradientMagnitudeFilterType typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ; typedef GradientImageType typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ; typedef GradientImageIteratorType typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ; typedef ImageIteratorType typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ; typedef WriterType typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ; typedef ITK2VTKConnectorType typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ; typedef AddImageFilterType typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ; typedef ResampleFilterType typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ; typedef InterpolatorType typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ; typedef MultiplyByConstantImageFilterType typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ; typedef DuplicatorType typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ; typedef TransformType typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ; typedef PointType typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ; typedef PointArrayType typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ; typedef PointSetType typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ; typedef PointIdType typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ; Public Functions Documentation function Reconstruction Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ) function ~Reconstruction ~ Reconstruction () function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ) function reset void reset () function setDecimation void setDecimation ( float dec ) function setNumClusters void setNumClusters ( int num ) function setMaxAngle void setMaxAngle ( double angleDegrees ) function setFixWinding void setFixWinding ( bool fixWinding ) function setLaplacianSmoothingBeforeDecimation void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ) function setLaplacianSmoothingAfterDecimation void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ) function setSmoothingLambda void setSmoothingLambda ( float smoothingLambda ) function setSmoothingIterations void setSmoothingIterations ( int smoothingIterations ) function setOutputEnabled void setOutputEnabled ( bool enabled ) function setMeanBeforeWarpEnabled void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins function getMesh vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function sparseDone bool sparseDone () function denseDone bool denseDone () function writeMeanInfo void writeMeanInfo ( std :: string nameBase ) function SparseMean inline vtkSmartPointer < vtkPoints > SparseMean () function DenseMean inline vtkSmartPointer < vtkPolyData > DenseMean () function GoodPoints inline std :: vector < bool > GoodPoints () function OutPrefix inline std :: string OutPrefix () function setOutPrefix inline void setOutPrefix ( std :: string out_prefix ) function computeSparseMean std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ) function setOrigin inline void setOrigin ( typename ImageType :: PointType origin ) function EnablePairwiseNormalsDifferencesForGoodBad inline void EnablePairwiseNormalsDifferencesForGoodBad () function DisablePairwiseNormalsDifferencesForGoodBad inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-24 at 22:16:02 +0000","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#reconstruction","text":"More...","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#public-types","text":"Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classReconstruction.html#public-functions","text":"Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad ()","title":"Public Functions"},{"location":"api/Classes/classReconstruction.html#detailed-description","text":"template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ;","title":"Detailed Description"},{"location":"api/Classes/classReconstruction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classReconstruction.html#typedef-gradientfiltertype","text":"typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ;","title":"typedef GradientFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientmagnitudefiltertype","text":"typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ;","title":"typedef GradientMagnitudeFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimagetype","text":"typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ;","title":"typedef GradientImageType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimageiteratortype","text":"typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ;","title":"typedef GradientImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-imageiteratortype","text":"typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ;","title":"typedef ImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-writertype","text":"typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ;","title":"typedef WriterType"},{"location":"api/Classes/classReconstruction.html#typedef-itk2vtkconnectortype","text":"typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ;","title":"typedef ITK2VTKConnectorType"},{"location":"api/Classes/classReconstruction.html#typedef-addimagefiltertype","text":"typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ;","title":"typedef AddImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-resamplefiltertype","text":"typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ;","title":"typedef ResampleFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-interpolatortype","text":"typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ;","title":"typedef InterpolatorType"},{"location":"api/Classes/classReconstruction.html#typedef-multiplybyconstantimagefiltertype","text":"typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ;","title":"typedef MultiplyByConstantImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-duplicatortype","text":"typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ;","title":"typedef DuplicatorType"},{"location":"api/Classes/classReconstruction.html#typedef-transformtype","text":"typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ;","title":"typedef TransformType"},{"location":"api/Classes/classReconstruction.html#typedef-pointtype","text":"typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classReconstruction.html#typedef-pointarraytype","text":"typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ;","title":"typedef PointArrayType"},{"location":"api/Classes/classReconstruction.html#typedef-pointsettype","text":"typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classReconstruction.html#typedef-pointidtype","text":"typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ;","title":"typedef PointIdType"},{"location":"api/Classes/classReconstruction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classReconstruction.html#function-reconstruction","text":"Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false )","title":"function Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-reconstruction_1","text":"~ Reconstruction ()","title":"function ~Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () )","title":"function getDenseMean"},{"location":"api/Classes/classReconstruction.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classReconstruction.html#function-setdecimation","text":"void setDecimation ( float dec )","title":"function setDecimation"},{"location":"api/Classes/classReconstruction.html#function-setnumclusters","text":"void setNumClusters ( int num )","title":"function setNumClusters"},{"location":"api/Classes/classReconstruction.html#function-setmaxangle","text":"void setMaxAngle ( double angleDegrees )","title":"function setMaxAngle"},{"location":"api/Classes/classReconstruction.html#function-setfixwinding","text":"void setFixWinding ( bool fixWinding )","title":"function setFixWinding"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingbeforedecimation","text":"void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation )","title":"function setLaplacianSmoothingBeforeDecimation"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingafterdecimation","text":"void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation )","title":"function setLaplacianSmoothingAfterDecimation"},{"location":"api/Classes/classReconstruction.html#function-setsmoothinglambda","text":"void setSmoothingLambda ( float smoothingLambda )","title":"function setSmoothingLambda"},{"location":"api/Classes/classReconstruction.html#function-setsmoothingiterations","text":"void setSmoothingIterations ( int smoothingIterations )","title":"function setSmoothingIterations"},{"location":"api/Classes/classReconstruction.html#function-setoutputenabled","text":"void setOutputEnabled ( bool enabled )","title":"function setOutputEnabled"},{"location":"api/Classes/classReconstruction.html#function-setmeanbeforewarpenabled","text":"void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins","title":"function setMeanBeforeWarpEnabled"},{"location":"api/Classes/classReconstruction.html#function-getmesh","text":"vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts )","title":"function getMesh"},{"location":"api/Classes/classReconstruction.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsedone","text":"bool sparseDone ()","title":"function sparseDone"},{"location":"api/Classes/classReconstruction.html#function-densedone","text":"bool denseDone ()","title":"function denseDone"},{"location":"api/Classes/classReconstruction.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string nameBase )","title":"function writeMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsemean","text":"inline vtkSmartPointer < vtkPoints > SparseMean ()","title":"function SparseMean"},{"location":"api/Classes/classReconstruction.html#function-densemean","text":"inline vtkSmartPointer < vtkPolyData > DenseMean ()","title":"function DenseMean"},{"location":"api/Classes/classReconstruction.html#function-goodpoints","text":"inline std :: vector < bool > GoodPoints ()","title":"function GoodPoints"},{"location":"api/Classes/classReconstruction.html#function-outprefix","text":"inline std :: string OutPrefix ()","title":"function OutPrefix"},{"location":"api/Classes/classReconstruction.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string out_prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classReconstruction.html#function-computesparsemean","text":"std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false )","title":"function computeSparseMean"},{"location":"api/Classes/classReconstruction.html#function-setorigin","text":"inline void setOrigin ( typename ImageType :: PointType origin )","title":"function setOrigin"},{"location":"api/Classes/classReconstruction.html#function-enablepairwisenormalsdifferencesforgoodbad","text":"inline void EnablePairwiseNormalsDifferencesForGoodBad ()","title":"function EnablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classReconstruction.html#function-disablepairwisenormalsdifferencesforgoodbad","text":"inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-24 at 22:16:02 +0000","title":"function DisablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classStudioLogger.html","text":"StudioLogger Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject Public Signals Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str) Public Functions Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str) Public Signals Documentation signal message void message ( std :: string str ) signal error void error ( std :: string str ) signal warning void warning ( std :: string str ) signal debug void debug ( std :: string str ) signal status void status ( std :: string str ) signal progress void progress ( int value , std :: string str ) Public Functions Documentation function StudioLogger inline StudioLogger () function ~StudioLogger inline virtual ~ StudioLogger () function register_callbacks void register_callbacks () function handle_message void handle_message ( std :: string str ) function handle_error void handle_error ( std :: string str ) function handle_warning void handle_warning ( std :: string str ) function handle_debug void handle_debug ( std :: string str ) function handle_status void handle_status ( std :: string str ) function handle_progress void handle_progress ( double value , std :: string str ) Updated on 2023-10-24 at 22:16:02 +0000","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#studiologger","text":"Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#public-signals","text":"Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str)","title":"Public Signals"},{"location":"api/Classes/classStudioLogger.html#public-functions","text":"Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str)","title":"Public Functions"},{"location":"api/Classes/classStudioLogger.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classStudioLogger.html#signal-message","text":"void message ( std :: string str )","title":"signal message"},{"location":"api/Classes/classStudioLogger.html#signal-error","text":"void error ( std :: string str )","title":"signal error"},{"location":"api/Classes/classStudioLogger.html#signal-warning","text":"void warning ( std :: string str )","title":"signal warning"},{"location":"api/Classes/classStudioLogger.html#signal-debug","text":"void debug ( std :: string str )","title":"signal debug"},{"location":"api/Classes/classStudioLogger.html#signal-status","text":"void status ( std :: string str )","title":"signal status"},{"location":"api/Classes/classStudioLogger.html#signal-progress","text":"void progress ( int value , std :: string str )","title":"signal progress"},{"location":"api/Classes/classStudioLogger.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classStudioLogger.html#function-studiologger","text":"inline StudioLogger ()","title":"function StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-studiologger_1","text":"inline virtual ~ StudioLogger ()","title":"function ~StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-register_callbacks","text":"void register_callbacks ()","title":"function register_callbacks"},{"location":"api/Classes/classStudioLogger.html#function-handle_message","text":"void handle_message ( std :: string str )","title":"function handle_message"},{"location":"api/Classes/classStudioLogger.html#function-handle_error","text":"void handle_error ( std :: string str )","title":"function handle_error"},{"location":"api/Classes/classStudioLogger.html#function-handle_warning","text":"void handle_warning ( std :: string str )","title":"function handle_warning"},{"location":"api/Classes/classStudioLogger.html#function-handle_debug","text":"void handle_debug ( std :: string str )","title":"function handle_debug"},{"location":"api/Classes/classStudioLogger.html#function-handle_status","text":"void handle_status ( std :: string str )","title":"function handle_status"},{"location":"api/Classes/classStudioLogger.html#function-handle_progress","text":"void handle_progress ( double value , std :: string str ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function handle_progress"},{"location":"api/Classes/classSurfaceReconstructor.html","text":"SurfaceReconstructor Public Functions Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape) Public Functions Documentation function SurfaceReconstructor SurfaceReconstructor () function ~SurfaceReconstructor ~ SurfaceReconstructor () function initializeReconstruction void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ) function hasDenseMean bool hasDenseMean () function setMean void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ) function writeMeanInfo void writeMeanInfo ( std :: string baseName ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function resetReconstruct void resetReconstruct () function set_number_of_clusters void set_number_of_clusters ( int num_clusters ) function set_normal_angle void set_normal_angle ( double angle ) function set_decimation_percent void set_decimation_percent ( double decimation ) function get_surface_reconstruction_available bool get_surface_reconstruction_available () function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#surfacereconstructor","text":"","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions","text":"Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor","text":"SurfaceReconstructor ()","title":"function SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor_1","text":"~ SurfaceReconstructor ()","title":"function ~SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-initializereconstruction","text":"void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters )","title":"function initializeReconstruction"},{"location":"api/Classes/classSurfaceReconstructor.html#function-hasdensemean","text":"bool hasDenseMean ()","title":"function hasDenseMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-setmean","text":"void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints )","title":"function setMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string baseName )","title":"function writeMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-resetreconstruct","text":"void resetReconstruct ()","title":"function resetReconstruct"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_number_of_clusters","text":"void set_number_of_clusters ( int num_clusters )","title":"function set_number_of_clusters"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_normal_angle","text":"void set_normal_angle ( double angle )","title":"function set_normal_angle"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_decimation_percent","text":"void set_decimation_percent ( double decimation )","title":"function set_decimation_percent"},{"location":"api/Classes/classSurfaceReconstructor.html#function-get_surface_reconstruction_available","text":"bool get_surface_reconstruction_available ()","title":"function get_surface_reconstruction_available"},{"location":"api/Classes/classSurfaceReconstructor.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function build_mesh"},{"location":"api/Classes/classUtils.html","text":"Utils Public Functions Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas) Public Functions Documentation function randperm static std :: vector < int > randperm ( int n ) function readSparseShape static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ) function readSparseShape static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ) function readParticleIds static std :: vector < int > readParticleIds ( char * filename ) function writeParticleIds static void writeParticleIds ( char * filename , std :: vector < int > ids ) function computeCenterOfMassForShapeEnsemble static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ) function computeCenterOfMassForShape static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ) function updateMin static void updateMin ( double curVal , double & minVal ) function updateMax static void updateMax ( double curVal , double & maxVal ) function getBoundingBoxForShapeEnsemble static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function getBoundingBoxForShape static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function spherical2cartesian static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function cartesian2spherical static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function convertToPhysicalCoordinates static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function convertToImageCoordinates static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function num2str static std :: string num2str ( float num ) function num2str static std :: string num2str ( int num ) function linspace static std :: vector < double > linspace ( double a , double b , size_t N ) function int2str static std :: string int2str ( int n , int number_of_zeros ) function multiply_into template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ) function averageThetaBruteForce static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle. APPROXIMATE CHORD SOLUTION This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x ) EXACT SOLUTION This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted. SUMMARY method runtime memory notes brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah function averageThetaChord static double averageThetaChord ( std :: vector < double > thetas ) function averageThetaArc static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-24 at 22:16:02 +0000","title":"Utils"},{"location":"api/Classes/classUtils.html#utils","text":"","title":"Utils"},{"location":"api/Classes/classUtils.html#public-functions","text":"Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas)","title":"Public Functions"},{"location":"api/Classes/classUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classUtils.html#function-randperm","text":"static std :: vector < int > randperm ( int n )","title":"function randperm"},{"location":"api/Classes/classUtils.html#function-readsparseshape","text":"static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape","text":"static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readsparseshape_1","text":"static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape_1","text":"static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readparticleids","text":"static std :: vector < int > readParticleIds ( char * filename )","title":"function readParticleIds"},{"location":"api/Classes/classUtils.html#function-writeparticleids","text":"static void writeParticleIds ( char * filename , std :: vector < int > ids )","title":"function writeParticleIds"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshapeensemble","text":"static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshape","text":"static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShape"},{"location":"api/Classes/classUtils.html#function-updatemin","text":"static void updateMin ( double curVal , double & minVal )","title":"function updateMin"},{"location":"api/Classes/classUtils.html#function-updatemax","text":"static void updateMax ( double curVal , double & maxVal )","title":"function updateMax"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshapeensemble","text":"static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshape","text":"static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShape"},{"location":"api/Classes/classUtils.html#function-spherical2cartesian","text":"static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function spherical2cartesian"},{"location":"api/Classes/classUtils.html#function-cartesian2spherical","text":"static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function cartesian2spherical"},{"location":"api/Classes/classUtils.html#function-converttophysicalcoordinates","text":"static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToPhysicalCoordinates"},{"location":"api/Classes/classUtils.html#function-converttoimagecoordinates","text":"static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classUtils.html#function-num2str","text":"static std :: string num2str ( float num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-num2str_1","text":"static std :: string num2str ( int num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-linspace","text":"static std :: vector < double > linspace ( double a , double b , size_t N )","title":"function linspace"},{"location":"api/Classes/classUtils.html#function-int2str","text":"static std :: string int2str ( int n , int number_of_zeros )","title":"function int2str"},{"location":"api/Classes/classUtils.html#function-multiply_into","text":"template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs )","title":"function multiply_into"},{"location":"api/Classes/classUtils.html#function-averagethetabruteforce","text":"static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle.","title":"function averageThetaBruteForce"},{"location":"api/Classes/classUtils.html#approximate-chord-solution","text":"This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x )","title":"APPROXIMATE CHORD SOLUTION"},{"location":"api/Classes/classUtils.html#exact-solution","text":"This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted.","title":"EXACT SOLUTION"},{"location":"api/Classes/classUtils.html#summary","text":"","title":"SUMMARY"},{"location":"api/Classes/classUtils.html#method-runtime-memory-notes","text":"brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah","title":"method runtime memory notes"},{"location":"api/Classes/classUtils.html#function-averagethetachord","text":"static double averageThetaChord ( std :: vector < double > thetas )","title":"function averageThetaChord"},{"location":"api/Classes/classUtils.html#function-averagethetaarc","text":"static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function averageThetaArc"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html","text":"itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 > Public Types Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() . Public Types Documentation typedef Self typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass. typedef ParametersType typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ; typedef ParametersValueType typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ; typedef DerivativeType typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ; typedef JacobianType typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ; typedef InputPointType typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ; typedef InverseTransformBaseType typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ; typedef InverseTransformBasePointer typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ; typedef TransformType typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass. typedef TransformTypePointer typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ; typedef TransformTypeConstPointer typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ; typedef NonZeroJacobianIndicesType typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType. typedef SpatialJacobianType typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ; typedef MovingImageGradientType typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical. typedef MovingImageGradientValueType typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space. function itkStaticConstMacro itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ) function GetNumberOfNonZeroJacobianIndices virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all. function itkGetConstMacro itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices. function itkGetConstMacro itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ) function GetJacobian virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function EvaluateJacobianWithImageGradientProduct virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned. function GetSpatialJacobian virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function ComputeJacobianWithRespectToParameters inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions. function ComputeJacobianWithRespectToPosition inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const function GetSpatialHessian virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function AdvancedTransform AdvancedTransform () function AdvancedTransform AdvancedTransform ( NumberOfParametersType numberOfParameters ) function ~AdvancedTransform inline virtual ~ AdvancedTransform () Protected Attributes Documentation variable m_HasNonZeroSpatialHessian bool m_HasNonZeroSpatialHessian ; variable m_HasNonZeroJacobianOfSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#itkadvancedtransform","text":"Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 >","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types","text":"Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType","title":"Public Types"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions","text":"Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0","title":"Public Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions","text":"Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform ()","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes","text":"Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() .","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-self","text":"typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parametersvaluetype","text":"typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ;","title":"typedef ParametersValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-derivativetype","text":"typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ;","title":"typedef DerivativeType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasetype","text":"typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ;","title":"typedef InverseTransformBaseType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasepointer","text":"typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ;","title":"typedef InverseTransformBasePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtype","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass.","title":"typedef TransformType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypepointer","text":"typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ;","title":"typedef TransformTypePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypeconstpointer","text":"typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ;","title":"typedef TransformTypeConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-nonzerojacobianindicestype","text":"typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialjacobiantype","text":"typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialjacobiantype","text":"typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialhessiantype","text":"typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialhessiantype","text":"typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-internalmatrixtype","text":"typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradienttype","text":"typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical.","title":"typedef MovingImageGradientType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradientvaluetype","text":"typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ;","title":"typedef MovingImageGradientValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itktypemacro","text":"itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions )","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getnumberofnonzerojacobianindices","text":"virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all.","title":"function GetNumberOfNonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro","text":"itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices.","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro_1","text":"itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool )","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-evaluatejacobianwithimagegradientproduct","text":"virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned.","title":"function EvaluateJacobianWithImageGradientProduct"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialjacobian","text":"virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoparameters","text":"inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions.","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoposition","text":"inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const","title":"function ComputeJacobianWithRespectToPosition"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialhessian","text":"virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian_1","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian_1","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform","text":"AdvancedTransform ()","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_1","text":"AdvancedTransform ( NumberOfParametersType numberOfParameters )","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_2","text":"inline virtual ~ AdvancedTransform ()","title":"function ~AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerospatialhessian","text":"bool m_HasNonZeroSpatialHessian ;","title":"variable m_HasNonZeroSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerojacobianofspatialhessian","text":"bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_HasNonZeroJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html","text":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double > Detailed Description template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#itkbsplineinterpolateimagefunctionwithdoublecoefficents","text":"More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double >","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#detailed-description","text":"template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-24 at 22:16:01 +0000","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html","text":"itk::CompactlySupportedRBFSparseKernelTransform More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const Protected Functions Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override Additional inherited members Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ; Public Types Documentation typedef Self typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited typedef OutputPointType typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters Protected Functions Documentation function CompactlySupportedRBFSparseKernelTransform inline CompactlySupportedRBFSparseKernelTransform () function ~CompactlySupportedRBFSparseKernelTransform inline virtual ~ CompactlySupportedRBFSparseKernelTransform () function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#itkcompactlysupportedrbfsparsekerneltransform","text":"More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions >","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types","text":"Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions","text":"Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#additional-inherited-members","text":"Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-self","text":"typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-superclass","text":"typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform","text":"inline CompactlySupportedRBFSparseKernelTransform ()","title":"function CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform_1","text":"inline virtual ~ CompactlySupportedRBFSparseKernelTransform ()","title":"function ~CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-24 at 22:16:01 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html","text":"itk::Functor::MultiplyByConstant More... Public Functions Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const Public Attributes Name TConstant m_Constant Detailed Description template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ; Public Functions Documentation function MultiplyByConstant inline MultiplyByConstant () function ~MultiplyByConstant inline ~ MultiplyByConstant () function operator!= inline bool operator != ( const MultiplyByConstant & other ) const function operator== inline bool operator == ( const MultiplyByConstant & other ) const function operator() inline TOutput operator ()( const TInput & A ) const function SetConstant inline void SetConstant ( TConstant ct ) function GetConstant inline const TConstant & GetConstant () const Public Attributes Documentation variable m_Constant TConstant m_Constant ; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#itkfunctormultiplybyconstant","text":"More...","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions","text":"Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes","text":"Name TConstant m_Constant","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#detailed-description","text":"template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant","text":"inline MultiplyByConstant ()","title":"function MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant_1","text":"inline ~ MultiplyByConstant ()","title":"function ~MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator","text":"inline bool operator != ( const MultiplyByConstant & other ) const","title":"function operator!="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_1","text":"inline bool operator == ( const MultiplyByConstant & other ) const","title":"function operator=="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_2","text":"inline TOutput operator ()( const TInput & A ) const","title":"function operator()"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-setconstant","text":"inline void SetConstant ( TConstant ct )","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#variable-m_constant","text":"TConstant m_Constant ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_Constant"},{"location":"api/Classes/classitk_1_1KernelTransform2.html","text":"itk::KernelTransform2 More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Additional inherited members Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms. Public Types Documentation typedef Self typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs. typedef ParametersType typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ; typedef JacobianType typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ; typedef InputPointType typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ; typedef NonZeroJacobianIndicesType typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs. typedef SpatialJacobianType typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef GMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Protected Types Documentation typedef SVDDecompositionType typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition. typedef QRDecompositionType typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer. function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function GetNumberOfParameters inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) Compute W matrix. function ComputeLInverse void ComputeLInverse ( void ) Compute L matrix inverse. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space function TransformVector inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform. function TransformVector inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const function TransformCovariantVector inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const function GetJacobian virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation. function SetIdentity virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform. function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks. function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks. function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) function SetAlpha inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetAlpha inline virtual TScalarType GetAlpha ( void ) const function itkSetMacro itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetPoissonRatio inline virtual const TScalarType GetPoissonRatio ( void ) const function itkSetMacro itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition. function itkGetConstReferenceMacro itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ) function GetSpatialJacobian inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided. function GetSpatialHessian inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function KernelTransform2 KernelTransform2 () function ~KernelTransform2 virtual ~ KernelTransform2 () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline. function ComputeReflexiveG virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. function ComputeK void ComputeK ( void ) Compute K matrix. function ComputeL void ComputeL ( void ) Compute L matrix. function ComputeP void ComputeP ( void ) Compute P matrix. function ComputeY void ComputeY ( void ) Compute Y matrix. function ComputeD void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter. variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function. variable m_AMatrix AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation. variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation. variable m_WMatrixComputed bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_LMatrixDecompositionComputed bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed? variable m_LMatrixDecompositionSVD SVDDecompositionType * m_LMatrixDecompositionSVD ; variable m_LMatrixDecompositionQR QRDecompositionType * m_LMatrixDecompositionQR ; variable m_I IMatrixType m_I ; Identity matrix. variable m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params) variable m_NonZeroJacobianIndicesTemp NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method: variable m_FastComputationPossible bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#itkkerneltransform2","text":"More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types","text":"Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types","text":"Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions","text":"Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions","text":"Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void )","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms.","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-self","text":"typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-superclass","text":"typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-nonzerojacobianindicestype","text":"typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialjacobiantype","text":"typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialjacobiantype","text":"typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialhessiantype","text":"typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialhessiantype","text":"typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-internalmatrixtype","text":"typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsettype","text":"typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-imatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-gmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-lmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-kmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-ymatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-wmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-dmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-amatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-bmatrixtype","text":"typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-rowmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-columnmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-svddecompositiontype","text":"typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition.","title":"typedef SVDDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-qrdecompositiontype","text":"typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ;","title":"typedef QRDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getnumberofparameters","text":"inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform.","title":"function GetNumberOfParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computelinverse","text":"void ComputeLInverse ( void ) Compute L matrix inverse.","title":"function ComputeLInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector","text":"inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform.","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector_1","text":"inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformcovariantvector","text":"inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const","title":"function TransformCovariantVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setidentity","text":"virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform.","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks.","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks.","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setalpha","text":"inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function SetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getalpha","text":"inline virtual TScalarType GetAlpha ( void ) const","title":"function GetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro","text":"itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getpoissonratio","text":"inline virtual const TScalarType GetPoissonRatio ( void ) const","title":"function GetPoissonRatio"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro_1","text":"itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetconstreferencemacro","text":"itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string )","title":"function itkGetConstReferenceMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialjacobian","text":"inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialhessian","text":"inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian_1","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian_1","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2","text":"KernelTransform2 ()","title":"function KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2_1","text":"virtual ~ KernelTransform2 ()","title":"function ~KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computereflexiveg","text":"virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space.","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computek","text":"void ComputeK ( void ) Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computel","text":"void ComputeL ( void ) Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computep","text":"void ComputeP ( void ) Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computey","text":"void ComputeY ( void ) Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computed","text":"void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-reorganizew","text":"void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter.","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function.","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation.","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation.","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositioncomputed","text":"bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed?","title":"variable m_LMatrixDecompositionComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionsvd","text":"SVDDecompositionType * m_LMatrixDecompositionSVD ;","title":"variable m_LMatrixDecompositionSVD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionqr","text":"QRDecompositionType * m_LMatrixDecompositionQR ;","title":"variable m_LMatrixDecompositionQR"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix.","title":"variable m_I"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindices","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params)","title":"variable m_NonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindicestemp","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method:","title":"variable m_NonZeroJacobianIndicesTemp"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_fastcomputationpossible","text":"bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_FastComputationPossible"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html","text":"itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > > Public Types Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const Protected Functions Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const Detailed Description template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510 Public Types Documentation typedef Self typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs. typedef Superclass typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods). function SetConstant inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels function GetConstant inline const TConstant & GetConstant () const Protected Functions Documentation function MultiplyByConstantImageFilter inline MultiplyByConstantImageFilter () function ~MultiplyByConstantImageFilter inline virtual ~ MultiplyByConstantImageFilter () function PrintSelf inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#itkmultiplybyconstantimagefilter","text":"Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > >","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types","text":"Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer","title":"Public Types"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions","text":"Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#detailed-description","text":"template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-self","text":"typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-superclass","text":"typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-setconstant","text":"inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter","text":"inline MultiplyByConstantImageFilter ()","title":"function MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter_1","text":"inline virtual ~ MultiplyByConstantImageFilter ()","title":"function ~MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html","text":"itk::SparseKernelTransform More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Public Types Documentation typedef Self typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type. typedef InputPointType typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class. typedef OutputPointType typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class. typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef TripletType typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices. typedef GMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Public Functions Documentation function itkTypeMacro itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) const Compute W matrix. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space function SetIdentity virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) Protected Functions Documentation function SparseKernelTransform SparseKernelTransform () function ~SparseKernelTransform virtual ~ SparseKernelTransform () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeReflexiveG virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space function ComputeK void ComputeK () const Compute K matrix. function ComputeL void ComputeL () const Compute L matrix. function ComputeP void ComputeP () const Compute P matrix. function ComputeY void ComputeY () const Compute Y matrix. function ComputeD void ComputeD () const Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function variable m_AMatrix AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation variable m_GMatrix GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time variable m_WMatrixComputed bool m_WMatrixComputed ; Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_I IMatrixType m_I ; Identity matrix. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#itksparsekerneltransform","text":"More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions >","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types","text":"Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions","text":"Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions","text":"Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\"","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-self","text":"typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type.","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class.","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsettype","text":"typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-imatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-triplettype","text":"typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices.","title":"typedef TripletType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-lmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-kmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-ymatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-wmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-dmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-amatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-bmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-rowmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-columnmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) const Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setidentity","text":"virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform","text":"SparseKernelTransform ()","title":"function SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform_1","text":"virtual ~ SparseKernelTransform ()","title":"function ~SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computereflexiveg","text":"virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computek","text":"void ComputeK () const Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computel","text":"void ComputeL () const Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computep","text":"void ComputeP () const Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computey","text":"void ComputeY () const Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computed","text":"void ComputeD () const Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-reorganizew","text":"void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_gmatrix","text":"GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time","title":"variable m_GMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix. Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_I"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html","text":"itk::TPGACLevelSetImageFilter More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float > Public Types Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Protected Functions Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change) Detailed Description template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ; Public Types Documentation typedef Self typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs typedef Superclass typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ; typedef ImageType typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ; typedef IndexType typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ; typedef TimeStepType typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ; typedef ValueType typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass. typedef OutputImageType typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ; typedef FeatureImageType typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory function itkTypeMacro itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods). Protected Functions Documentation function ~TPGACLevelSetImageFilter inline ~ TPGACLevelSetImageFilter () function TPGACLevelSetImageFilter TPGACLevelSetImageFilter () function PrintSelf virtual void PrintSelf ( std :: ostream & os , Indent indent ) const function TPGACLevelSetImageFilter TPGACLevelSetImageFilter ( const Self & ) function operator= void operator = ( const Self & ) function CalculateUpdateValue inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#itktpgaclevelsetimagefilter","text":"More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float >","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types","text":"Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType","title":"Public Types"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions","text":"Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change)","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#detailed-description","text":"template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-self","text":"typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-superclass","text":"typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-imagetype","text":"typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-indextype","text":"typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ;","title":"typedef IndexType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-timesteptype","text":"typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ;","title":"typedef TimeStepType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-valuetype","text":"typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass.","title":"typedef ValueType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-outputimagetype","text":"typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ;","title":"typedef OutputImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-featureimagetype","text":"typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ;","title":"typedef FeatureImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter","text":"inline ~ TPGACLevelSetImageFilter ()","title":"function ~TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_1","text":"TPGACLevelSetImageFilter ()","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-printself","text":"virtual void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_2","text":"TPGACLevelSetImageFilter ( const Self & )","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-operator","text":"void operator = ( const Self & )","title":"function operator="},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-calculateupdatevalue","text":"inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-24 at 22:16:01 +0000","title":"function CalculateUpdateValue"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html","text":"itk::ThinPlateSplineKernelTransform2 More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) Protected Functions Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const Additional inherited members Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997 Public Types Documentation typedef Self typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. typedef OutputPointType typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) Protected Functions Documentation function ThinPlateSplineKernelTransform2 inline ThinPlateSplineKernelTransform2 () function ~ThinPlateSplineKernelTransform2 inline virtual ~ ThinPlateSplineKernelTransform2 () function ComputeG virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#itkthinplatesplinekerneltransform2","text":"More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types","text":"Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma)","title":"Public Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions","text":"Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-self","text":"typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-superclass","text":"typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2","text":"inline ThinPlateSplineKernelTransform2 ()","title":"function ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2_1","text":"inline virtual ~ ThinPlateSplineKernelTransform2 ()","title":"function ~ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-24 at 22:16:01 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classmat3d.html","text":"mat3d Public Functions Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose () Protected Attributes Name double m_data Public Functions Documentation function mat3d inline mat3d () function mat3d mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ) function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function operator* inline mat3d operator * ( mat3d & m ) function operator*= inline mat3d & operator *= ( mat3d & m ) function operator+= inline mat3d & operator += ( mat3d & m ) function operator-= inline mat3d & operator -= ( mat3d & m ) function operator/= inline mat3d & operator /= ( const double f ) function operator* inline vec3d operator * ( vec3d b ) function det inline double det () const function Invert double Invert () function inverse mat3d inverse () const function zero inline void zero () function unit inline void unit () function transpose mat3d transpose () Protected Attributes Documentation variable m_data double m_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"mat3d"},{"location":"api/Classes/classmat3d.html#mat3d","text":"","title":"mat3d"},{"location":"api/Classes/classmat3d.html#public-functions","text":"Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose ()","title":"Public Functions"},{"location":"api/Classes/classmat3d.html#protected-attributes","text":"Name double m_data","title":"Protected Attributes"},{"location":"api/Classes/classmat3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmat3d.html#function-mat3d","text":"inline mat3d ()","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-mat3d_1","text":"mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 )","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmat3d.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmat3d.html#function-operator_2","text":"inline mat3d operator * ( mat3d & m )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-operator_3","text":"inline mat3d & operator *= ( mat3d & m )","title":"function operator*="},{"location":"api/Classes/classmat3d.html#function-operator_4","text":"inline mat3d & operator += ( mat3d & m )","title":"function operator+="},{"location":"api/Classes/classmat3d.html#function-operator-","text":"inline mat3d & operator -= ( mat3d & m )","title":"function operator-="},{"location":"api/Classes/classmat3d.html#function-operator_5","text":"inline mat3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classmat3d.html#function-operator_6","text":"inline vec3d operator * ( vec3d b )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-det","text":"inline double det () const","title":"function det"},{"location":"api/Classes/classmat3d.html#function-invert","text":"double Invert ()","title":"function Invert"},{"location":"api/Classes/classmat3d.html#function-inverse","text":"mat3d inverse () const","title":"function inverse"},{"location":"api/Classes/classmat3d.html#function-zero","text":"inline void zero ()","title":"function zero"},{"location":"api/Classes/classmat3d.html#function-unit","text":"inline void unit ()","title":"function unit"},{"location":"api/Classes/classmat3d.html#function-transpose","text":"mat3d transpose ()","title":"function transpose"},{"location":"api/Classes/classmat3d.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classmat3d.html#variable-m_data","text":"double m_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_data"},{"location":"api/Classes/classmatrix.html","text":"matrix Public Functions Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt) Public Functions Documentation function matrix matrix ( int r , int c ) function ~matrix inline ~ matrix () function zero void zero () function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function solve bool solve ( vector < double > & x , vector < double > & b ) function lsq_solve bool lsq_solve ( vector < double > & x , vector < double > & b ) function eigen_vectors bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values ) function Rows inline int Rows () function mult_transpose void mult_transpose ( vector < double > & x , vector < double > & y ) function mult_transpose_self void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-24 at 22:16:02 +0000","title":"matrix"},{"location":"api/Classes/classmatrix.html#matrix","text":"","title":"matrix"},{"location":"api/Classes/classmatrix.html#public-functions","text":"Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt)","title":"Public Functions"},{"location":"api/Classes/classmatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmatrix.html#function-matrix","text":"matrix ( int r , int c )","title":"function matrix"},{"location":"api/Classes/classmatrix.html#function-matrix_1","text":"inline ~ matrix ()","title":"function ~matrix"},{"location":"api/Classes/classmatrix.html#function-zero","text":"void zero ()","title":"function zero"},{"location":"api/Classes/classmatrix.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmatrix.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmatrix.html#function-solve","text":"bool solve ( vector < double > & x , vector < double > & b )","title":"function solve"},{"location":"api/Classes/classmatrix.html#function-lsq_solve","text":"bool lsq_solve ( vector < double > & x , vector < double > & b )","title":"function lsq_solve"},{"location":"api/Classes/classmatrix.html#function-eigen_vectors","text":"bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values )","title":"function eigen_vectors"},{"location":"api/Classes/classmatrix.html#function-rows","text":"inline int Rows ()","title":"function Rows"},{"location":"api/Classes/classmatrix.html#function-mult_transpose","text":"void mult_transpose ( vector < double > & x , vector < double > & y )","title":"function mult_transpose"},{"location":"api/Classes/classmatrix.html#function-mult_transpose_self","text":"void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function mult_transpose_self"},{"location":"api/Classes/classmeshFIM.html","text":"meshFIM Public Types Name enum LabelType typedef int VoxelIndexType typedef int index Public Functions Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM () Public Attributes Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors Public Types Documentation enum LabelType Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint typedef VoxelIndexType typedef int meshFIM :: VoxelIndexType ; typedef index typedef int meshFIM :: index ; Public Functions Documentation function ComputeDistanceToLandmarksGivenTriangleInfo void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ) function computeFIM void computeFIM ( TriMesh * mesh , const char * vertT_filename ) function GetFeatureValues void GetFeatureValues ( point x , std :: vector < float > & vals ) function ReadFaceIndexMap void ReadFaceIndexMap ( const char * infilename ) function ReadFeatureFromFile void ReadFeatureFromFile ( const char * infilename ) function ReadFeatureGradientFromFile void ReadFeatureGradientFromFile ( const char * infilename ) function GetFeatureDerivative point GetFeatureDerivative ( point p , int fIndex ) function need_abs_curvatures void need_abs_curvatures () function need_edge_lengths void need_edge_lengths () function need_speed void need_speed () function need_oneringfaces void need_oneringfaces () function need_kdtree void need_kdtree () function SetMesh void SetMesh ( TriMesh * mesh ) function SetStopDistance inline void SetStopDistance ( float d ) function setSpeedType inline void setSpeedType ( int st ) function meshFIM inline meshFIM () function ~meshFIM inline ~ meshFIM () Public Attributes Documentation variable m_meshPtr TriMesh * m_meshPtr ; variable NumComputation int NumComputation ; variable imageOrigin float imageOrigin ; variable imageSpacing float imageSpacing ; variable imageSize int imageSize ; variable imageIndex int imageIndex ; variable colors std :: vector < Color > colors ; Updated on 2023-10-24 at 22:16:02 +0000","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#meshfim","text":"","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-types","text":"Name enum LabelType typedef int VoxelIndexType typedef int index","title":"Public Types"},{"location":"api/Classes/classmeshFIM.html#public-functions","text":"Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM ()","title":"Public Functions"},{"location":"api/Classes/classmeshFIM.html#public-attributes","text":"Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors","title":"Public Attributes"},{"location":"api/Classes/classmeshFIM.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classmeshFIM.html#enum-labeltype","text":"Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint","title":"enum LabelType"},{"location":"api/Classes/classmeshFIM.html#typedef-voxelindextype","text":"typedef int meshFIM :: VoxelIndexType ;","title":"typedef VoxelIndexType"},{"location":"api/Classes/classmeshFIM.html#typedef-index","text":"typedef int meshFIM :: index ;","title":"typedef index"},{"location":"api/Classes/classmeshFIM.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmeshFIM.html#function-computedistancetolandmarksgiventriangleinfo","text":"void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename )","title":"function ComputeDistanceToLandmarksGivenTriangleInfo"},{"location":"api/Classes/classmeshFIM.html#function-computefim","text":"void computeFIM ( TriMesh * mesh , const char * vertT_filename )","title":"function computeFIM"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturevalues","text":"void GetFeatureValues ( point x , std :: vector < float > & vals )","title":"function GetFeatureValues"},{"location":"api/Classes/classmeshFIM.html#function-readfaceindexmap","text":"void ReadFaceIndexMap ( const char * infilename )","title":"function ReadFaceIndexMap"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturefromfile","text":"void ReadFeatureFromFile ( const char * infilename )","title":"function ReadFeatureFromFile"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturegradientfromfile","text":"void ReadFeatureGradientFromFile ( const char * infilename )","title":"function ReadFeatureGradientFromFile"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturederivative","text":"point GetFeatureDerivative ( point p , int fIndex )","title":"function GetFeatureDerivative"},{"location":"api/Classes/classmeshFIM.html#function-need_abs_curvatures","text":"void need_abs_curvatures ()","title":"function need_abs_curvatures"},{"location":"api/Classes/classmeshFIM.html#function-need_edge_lengths","text":"void need_edge_lengths ()","title":"function need_edge_lengths"},{"location":"api/Classes/classmeshFIM.html#function-need_speed","text":"void need_speed ()","title":"function need_speed"},{"location":"api/Classes/classmeshFIM.html#function-need_oneringfaces","text":"void need_oneringfaces ()","title":"function need_oneringfaces"},{"location":"api/Classes/classmeshFIM.html#function-need_kdtree","text":"void need_kdtree ()","title":"function need_kdtree"},{"location":"api/Classes/classmeshFIM.html#function-setmesh","text":"void SetMesh ( TriMesh * mesh )","title":"function SetMesh"},{"location":"api/Classes/classmeshFIM.html#function-setstopdistance","text":"inline void SetStopDistance ( float d )","title":"function SetStopDistance"},{"location":"api/Classes/classmeshFIM.html#function-setspeedtype","text":"inline void setSpeedType ( int st )","title":"function setSpeedType"},{"location":"api/Classes/classmeshFIM.html#function-meshfim","text":"inline meshFIM ()","title":"function meshFIM"},{"location":"api/Classes/classmeshFIM.html#function-meshfim_1","text":"inline ~ meshFIM ()","title":"function ~meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classmeshFIM.html#variable-m_meshptr","text":"TriMesh * m_meshPtr ;","title":"variable m_meshPtr"},{"location":"api/Classes/classmeshFIM.html#variable-numcomputation","text":"int NumComputation ;","title":"variable NumComputation"},{"location":"api/Classes/classmeshFIM.html#variable-imageorigin","text":"float imageOrigin ;","title":"variable imageOrigin"},{"location":"api/Classes/classmeshFIM.html#variable-imagespacing","text":"float imageSpacing ;","title":"variable imageSpacing"},{"location":"api/Classes/classmeshFIM.html#variable-imagesize","text":"int imageSize ;","title":"variable imageSize"},{"location":"api/Classes/classmeshFIM.html#variable-imageindex","text":"int imageIndex ;","title":"variable imageIndex"},{"location":"api/Classes/classmeshFIM.html#variable-colors","text":"std :: vector < Color > colors ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable colors"},{"location":"api/Classes/classobject__reader.html","text":"object_reader More... #include Detailed Description class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-24 at 22:16:02 +0000","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#object_reader","text":"More... #include ","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#detailed-description","text":"class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-24 at 22:16:02 +0000","title":"Detailed Description"},{"location":"api/Classes/classobject__writer.html","text":"object_writer Updated on 2023-10-24 at 22:16:02 +0000","title":"object_writer"},{"location":"api/Classes/classobject__writer.html#object_writer","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"object_writer"},{"location":"api/Classes/classquatd.html","text":"quatd Public Functions Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t) Public Attributes Name double x double y double z double w Public Functions Documentation function quatd inline quatd () function quatd inline quatd ( const double angle , vec3d v ) function quatd inline quatd ( vec3d v1 , vec3d v2 ) function quatd inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) function operator!= inline bool operator != ( const quatd & q ) function operator- inline quatd operator - () function operator+ inline quatd operator + ( const quatd & q ) const function operator- inline quatd operator - ( const quatd & q ) const function operator+= inline quatd & operator += ( const quatd & q ) function operator-= inline quatd & operator -= ( const quatd & q ) function operator* inline quatd operator * ( const quatd & q ) const function operator*= inline quatd & operator *= ( const quatd & q ) function operator* inline quatd operator * ( const double a ) const function operator/ inline quatd operator / ( const double a ) const function operator/= inline quatd & operator /= ( const double a ) function Conjugate inline quatd Conjugate () const function Norm inline double Norm () const function MakeUnit inline void MakeUnit () function Inverse inline quatd Inverse () const function DotProduct inline double DotProduct ( const quatd & q ) const function GetVector inline vec3d GetVector () const function GetAngle inline double GetAngle () const function RotateVector inline void RotateVector ( vec3d & v ) const function operator* inline vec3d operator * ( const vec3d & r ) function operator* inline mat3d operator * ( mat3d m ) function RotateVectorP inline void RotateVectorP ( double * v , double * r ) const function dot static inline double dot ( quatd & q1 , quatd & q2 ) function lerp static inline quatd lerp ( quatd & q1 , quatd & q2 , double t ) function slerp static quatd slerp ( quatd & q1 , quatd & q2 , double t ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable w double w ; Updated on 2023-10-24 at 22:16:02 +0000","title":"quatd"},{"location":"api/Classes/classquatd.html#quatd","text":"","title":"quatd"},{"location":"api/Classes/classquatd.html#public-functions","text":"Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t)","title":"Public Functions"},{"location":"api/Classes/classquatd.html#public-attributes","text":"Name double x double y double z double w","title":"Public Attributes"},{"location":"api/Classes/classquatd.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classquatd.html#function-quatd","text":"inline quatd ()","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_1","text":"inline quatd ( const double angle , vec3d v )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_2","text":"inline quatd ( vec3d v1 , vec3d v2 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_3","text":"inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-operator","text":"inline bool operator != ( const quatd & q )","title":"function operator!="},{"location":"api/Classes/classquatd.html#function-operator-","text":"inline quatd operator - ()","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_1","text":"inline quatd operator + ( const quatd & q ) const","title":"function operator+"},{"location":"api/Classes/classquatd.html#function-operator-_1","text":"inline quatd operator - ( const quatd & q ) const","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_2","text":"inline quatd & operator += ( const quatd & q )","title":"function operator+="},{"location":"api/Classes/classquatd.html#function-operator-_2","text":"inline quatd & operator -= ( const quatd & q )","title":"function operator-="},{"location":"api/Classes/classquatd.html#function-operator_3","text":"inline quatd operator * ( const quatd & q ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_4","text":"inline quatd & operator *= ( const quatd & q )","title":"function operator*="},{"location":"api/Classes/classquatd.html#function-operator_5","text":"inline quatd operator * ( const double a ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_6","text":"inline quatd operator / ( const double a ) const","title":"function operator/"},{"location":"api/Classes/classquatd.html#function-operator_7","text":"inline quatd & operator /= ( const double a )","title":"function operator/="},{"location":"api/Classes/classquatd.html#function-conjugate","text":"inline quatd Conjugate () const","title":"function Conjugate"},{"location":"api/Classes/classquatd.html#function-norm","text":"inline double Norm () const","title":"function Norm"},{"location":"api/Classes/classquatd.html#function-makeunit","text":"inline void MakeUnit ()","title":"function MakeUnit"},{"location":"api/Classes/classquatd.html#function-inverse","text":"inline quatd Inverse () const","title":"function Inverse"},{"location":"api/Classes/classquatd.html#function-dotproduct","text":"inline double DotProduct ( const quatd & q ) const","title":"function DotProduct"},{"location":"api/Classes/classquatd.html#function-getvector","text":"inline vec3d GetVector () const","title":"function GetVector"},{"location":"api/Classes/classquatd.html#function-getangle","text":"inline double GetAngle () const","title":"function GetAngle"},{"location":"api/Classes/classquatd.html#function-rotatevector","text":"inline void RotateVector ( vec3d & v ) const","title":"function RotateVector"},{"location":"api/Classes/classquatd.html#function-operator_8","text":"inline vec3d operator * ( const vec3d & r )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_9","text":"inline mat3d operator * ( mat3d m )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-rotatevectorp","text":"inline void RotateVectorP ( double * v , double * r ) const","title":"function RotateVectorP"},{"location":"api/Classes/classquatd.html#function-dot","text":"static inline double dot ( quatd & q1 , quatd & q2 )","title":"function dot"},{"location":"api/Classes/classquatd.html#function-lerp","text":"static inline quatd lerp ( quatd & q1 , quatd & q2 , double t )","title":"function lerp"},{"location":"api/Classes/classquatd.html#function-slerp","text":"static quatd slerp ( quatd & q1 , quatd & q2 , double t )","title":"function slerp"},{"location":"api/Classes/classquatd.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classquatd.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classquatd.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classquatd.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classquatd.html#variable-w","text":"double w ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable w"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html","text":"shapeworks::AnalysisTool Inherits from QWidget Public Types Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType Public Slots Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed () Public Signals Name void update_view () void pca_update () void progress (int ) void reconstruction_complete () Public Functions Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type () Public Attributes Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C Public Types Documentation enum GroupAnalysisType Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3 enum McaMode Enumerator Value Description Vanilla Within Between using AlignmentType using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ; using PointType using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ; Public Slots Documentation slot on_tabWidget_currentChanged void on_tabWidget_currentChanged () slot handle_analysis_options void handle_analysis_options () slot handle_median void handle_median () slot on_mean_button_clicked void on_mean_button_clicked () slot on_group1_button_clicked void on_group1_button_clicked () slot on_group2_button_clicked void on_group2_button_clicked () slot on_difference_button_clicked void on_difference_button_clicked () slot on_pcaSlider_valueChanged void on_pcaSlider_valueChanged () slot on_group_slider_valueChanged void on_group_slider_valueChanged () slot on_pcaModeSpinBox_valueChanged void on_pcaModeSpinBox_valueChanged ( int i ) slot handle_pca_animate_state_changed void handle_pca_animate_state_changed () slot handle_pca_timer void handle_pca_timer () slot handle_group_animate_state_changed void handle_group_animate_state_changed () slot handle_group_timer void handle_group_timer () slot handle_reconstruction_complete void handle_reconstruction_complete () slot on_reconstructionButton_clicked void on_reconstructionButton_clicked () slot set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. slot get_display_feature_map std :: string get_display_feature_map () slot group_changed void group_changed () slot groups_active bool groups_active () slot on_view_open_button_toggled void on_view_open_button_toggled () slot on_surface_open_button_toggled void on_surface_open_button_toggled () slot on_metrics_open_button_toggled void on_metrics_open_button_toggled () slot is_group_active bool is_group_active ( int shape_index ) slot reconstruction_method_changed void reconstruction_method_changed () slot initialize_mesh_warper void initialize_mesh_warper () slot group_p_values_clicked void group_p_values_clicked () slot network_analysis_clicked void network_analysis_clicked () slot handle_eval_thread_complete void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) slot handle_eval_thread_progress void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ) slot handle_eval_particle_normals_progress void handle_eval_particle_normals_progress ( float progress ) slot handle_eval_particle_normals_complete void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ) slot handle_group_pvalues_complete void handle_group_pvalues_complete () slot handle_alignment_changed void handle_alignment_changed ( int new_alignment ) slot run_good_bad_particles void run_good_bad_particles () slot handle_lda_progress void handle_lda_progress ( double progress ) slot handle_lda_complete void handle_lda_complete () slot handle_network_analysis_progress void handle_network_analysis_progress ( int progress ) slot handle_network_analysis_complete void handle_network_analysis_complete () slot show_difference_to_mean_clicked void show_difference_to_mean_clicked () slot group_analysis_combo_changed void group_analysis_combo_changed () Public Signals Documentation signal update_view void update_view () signal pca_update void pca_update () signal progress void progress ( int ) signal reconstruction_complete void reconstruction_complete () Public Functions Documentation function AnalysisTool AnalysisTool ( Preferences & prefs ) function ~AnalysisTool ~ AnalysisTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function get_session QSharedPointer < Session > get_session () Return the session. function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function get_app inline ShapeWorksStudioApp * get_app () function set_active void set_active ( bool active ) Set if this tool is active. function get_active bool get_active () Return if this tool is active. function get_group_difference_mode bool get_group_difference_mode () function get_group_difference_vectors std :: vector < Shape :: Point > get_group_difference_vectors () function get_analysis_mode std :: string get_analysis_mode () function set_analysis_mode void set_analysis_mode ( std :: string mode ) function set_labels void set_labels ( QString which , QString value ) function get_pca_mode int get_pca_mode () function get_group_ratio double get_group_ratio () function get_pca_value double get_pca_value () function pca_animate bool pca_animate () function get_mca_level McaMode get_mca_level () const function get_sample_number int get_sample_number () function compute_stats bool compute_stats () function update_slider void update_slider () function reset_stats void reset_stats () function enable_actions void enable_actions ( bool newly_enabled = false ) function get_mean_shape_points Particles get_mean_shape_points () function get_mean_shape ShapeHandle get_mean_shape () function get_shape_points Particles get_shape_points ( int mode , double value ) function get_multi_level_shape_points Particles get_multi_level_shape_points ( int mode , double value , McaMode level ) function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) function get_mca_mode_shape ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ) function get_current_shape ShapeHandle get_current_shape () function get_stats ParticleShapeStatistics get_stats () function load_settings void load_settings () function store_settings void store_settings () function shutdown void shutdown () function export_variance_graph bool export_variance_graph ( QString filename ) function compute_shape_evaluations void compute_shape_evaluations () function get_group_analysis_type GroupAnalysisType get_group_analysis_type () Public Attributes Documentation variable MODE_ALL_SAMPLES_C static const std :: string MODE_ALL_SAMPLES_C ; variable MODE_MEAN_C static const std :: string MODE_MEAN_C ; variable MODE_PCA_C static const std :: string MODE_PCA_C ; variable MODE_SINGLE_SAMPLE_C static const std :: string MODE_SINGLE_SAMPLE_C ; variable MODE_REGRESSION_C static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#shapeworksanalysistool","text":"Inherits from QWidget","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types","text":"Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots","text":"Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals","text":"Name void update_view () void pca_update () void progress (int ) void reconstruction_complete ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions","text":"Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes","text":"Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-groupanalysistype","text":"Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3","title":"enum GroupAnalysisType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-mcamode","text":"Enumerator Value Description Vanilla Within Between","title":"enum McaMode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-alignmenttype","text":"using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ;","title":"using AlignmentType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-pointtype","text":"using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_tabwidget_currentchanged","text":"void on_tabWidget_currentChanged ()","title":"slot on_tabWidget_currentChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_analysis_options","text":"void handle_analysis_options ()","title":"slot handle_analysis_options"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_median","text":"void handle_median ()","title":"slot handle_median"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_mean_button_clicked","text":"void on_mean_button_clicked ()","title":"slot on_mean_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group1_button_clicked","text":"void on_group1_button_clicked ()","title":"slot on_group1_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group2_button_clicked","text":"void on_group2_button_clicked ()","title":"slot on_group2_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_difference_button_clicked","text":"void on_difference_button_clicked ()","title":"slot on_difference_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcaslider_valuechanged","text":"void on_pcaSlider_valueChanged ()","title":"slot on_pcaSlider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group_slider_valuechanged","text":"void on_group_slider_valueChanged ()","title":"slot on_group_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcamodespinbox_valuechanged","text":"void on_pcaModeSpinBox_valueChanged ( int i )","title":"slot on_pcaModeSpinBox_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_animate_state_changed","text":"void handle_pca_animate_state_changed ()","title":"slot handle_pca_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_timer","text":"void handle_pca_timer ()","title":"slot handle_pca_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_animate_state_changed","text":"void handle_group_animate_state_changed ()","title":"slot handle_group_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_timer","text":"void handle_group_timer ()","title":"slot handle_group_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_reconstructionbutton_clicked","text":"void on_reconstructionButton_clicked ()","title":"slot on_reconstructionButton_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"slot set_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-get_display_feature_map","text":"std :: string get_display_feature_map ()","title":"slot get_display_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_changed","text":"void group_changed ()","title":"slot group_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-groups_active","text":"bool groups_active ()","title":"slot groups_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_view_open_button_toggled","text":"void on_view_open_button_toggled ()","title":"slot on_view_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_surface_open_button_toggled","text":"void on_surface_open_button_toggled ()","title":"slot on_surface_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_metrics_open_button_toggled","text":"void on_metrics_open_button_toggled ()","title":"slot on_metrics_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-is_group_active","text":"bool is_group_active ( int shape_index )","title":"slot is_group_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-reconstruction_method_changed","text":"void reconstruction_method_changed ()","title":"slot reconstruction_method_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-initialize_mesh_warper","text":"void initialize_mesh_warper ()","title":"slot initialize_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_p_values_clicked","text":"void group_p_values_clicked ()","title":"slot group_p_values_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-network_analysis_clicked","text":"void network_analysis_clicked ()","title":"slot network_analysis_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_complete","text":"void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"slot handle_eval_thread_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_progress","text":"void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress )","title":"slot handle_eval_thread_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_progress","text":"void handle_eval_particle_normals_progress ( float progress )","title":"slot handle_eval_particle_normals_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_complete","text":"void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad )","title":"slot handle_eval_particle_normals_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_pvalues_complete","text":"void handle_group_pvalues_complete ()","title":"slot handle_group_pvalues_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ( int new_alignment )","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-run_good_bad_particles","text":"void run_good_bad_particles ()","title":"slot run_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_progress","text":"void handle_lda_progress ( double progress )","title":"slot handle_lda_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_complete","text":"void handle_lda_complete ()","title":"slot handle_lda_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_progress","text":"void handle_network_analysis_progress ( int progress )","title":"slot handle_network_analysis_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_complete","text":"void handle_network_analysis_complete ()","title":"slot handle_network_analysis_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-show_difference_to_mean_clicked","text":"void show_difference_to_mean_clicked ()","title":"slot show_difference_to_mean_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_analysis_combo_changed","text":"void group_analysis_combo_changed ()","title":"slot group_analysis_combo_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-pca_update","text":"void pca_update ()","title":"signal pca_update"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-reconstruction_complete","text":"void reconstruction_complete ()","title":"signal reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool","text":"AnalysisTool ( Preferences & prefs )","title":"function AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool_1","text":"~ AnalysisTool ()","title":"function ~AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_session","text":"QSharedPointer < Session > get_session () Return the session.","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_app","text":"inline ShapeWorksStudioApp * get_app ()","title":"function get_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_active","text":"void set_active ( bool active ) Set if this tool is active.","title":"function set_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_active","text":"bool get_active () Return if this tool is active.","title":"function get_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_mode","text":"bool get_group_difference_mode ()","title":"function get_group_difference_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_vectors","text":"std :: vector < Shape :: Point > get_group_difference_vectors ()","title":"function get_group_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_analysis_mode","text":"std :: string get_analysis_mode ()","title":"function get_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_analysis_mode","text":"void set_analysis_mode ( std :: string mode )","title":"function set_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_labels","text":"void set_labels ( QString which , QString value )","title":"function set_labels"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_mode","text":"int get_pca_mode ()","title":"function get_pca_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_ratio","text":"double get_group_ratio ()","title":"function get_group_ratio"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_value","text":"double get_pca_value ()","title":"function get_pca_value"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-pca_animate","text":"bool pca_animate ()","title":"function pca_animate"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_level","text":"McaMode get_mca_level () const","title":"function get_mca_level"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_sample_number","text":"int get_sample_number ()","title":"function get_sample_number"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_stats","text":"bool compute_stats ()","title":"function compute_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-update_slider","text":"void update_slider ()","title":"function update_slider"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-reset_stats","text":"void reset_stats ()","title":"function reset_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-enable_actions","text":"void enable_actions ( bool newly_enabled = false )","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points ()","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value )","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_multi_level_shape_points","text":"Particles get_multi_level_shape_points ( int mode , double value , McaMode level )","title":"function get_multi_level_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value )","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_mode_shape","text":"ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level )","title":"function get_mca_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_current_shape","text":"ShapeHandle get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_stats","text":"ParticleShapeStatistics get_stats ()","title":"function get_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-load_settings","text":"void load_settings ()","title":"function load_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-store_settings","text":"void store_settings ()","title":"function store_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-export_variance_graph","text":"bool export_variance_graph ( QString filename )","title":"function export_variance_graph"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_shape_evaluations","text":"void compute_shape_evaluations ()","title":"function compute_shape_evaluations"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_analysis_type","text":"GroupAnalysisType get_group_analysis_type ()","title":"function get_group_analysis_type"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_all_samples_c","text":"static const std :: string MODE_ALL_SAMPLES_C ;","title":"variable MODE_ALL_SAMPLES_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_mean_c","text":"static const std :: string MODE_MEAN_C ;","title":"variable MODE_MEAN_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_pca_c","text":"static const std :: string MODE_PCA_C ;","title":"variable MODE_PCA_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_single_sample_c","text":"static const std :: string MODE_SINGLE_SAMPLE_C ;","title":"variable MODE_SINGLE_SAMPLE_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_regression_c","text":"static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable MODE_REGRESSION_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html","text":"shapeworks::AnalysisUtils Public Functions Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain) Public Functions Documentation function get_local_particle_system static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#shapeworksanalysisutils","text":"","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions","text":"Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#function-get_local_particle_system","text":"static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Analyze.html","text":"shapeworks::Analyze High level analyze API. More... #include Public Types Name enum AlignmentType Public Functions Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain) Detailed Description class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project . Public Types Documentation enum AlignmentType Enumerator Value Description Global -2 Local -1 Public Functions Documentation function Analyze Analyze ( ProjectHandle project ) function run_offline_analysis void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile. function get_shapes ShapeList get_shapes () Return the list of shapes. function get_num_subjects int get_num_subjects () Return the number of subjects. function get_num_modes int get_num_modes () Return the number of modes. function get_num_particles int get_num_particles () Return the number of particles. function get_mean_shape_points Particles get_mean_shape_points () Return the mean shape. function get_mean_shape ShapeHandle get_mean_shape () Return the mean shape. function get_group_shape_particles Particles get_group_shape_particles ( double ratio ) function get_group_shape ShapeHandle get_group_shape ( double ratio ) function get_shape_points Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value. function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value. function groups_active inline bool groups_active () function create_shape_from_points ShapeHandle create_shape_from_points ( Particles points ) function get_subject_features Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ) function set_group_selection void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ) function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#shapeworksanalyze","text":"High level analyze API. More... #include ","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types","text":"Name enum AlignmentType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions","text":"Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#detailed-description","text":"class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project .","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#enum-alignmenttype","text":"Enumerator Value Description Global -2 Local -1","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-analyze","text":"Analyze ( ProjectHandle project )","title":"function Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-run_offline_analysis","text":"void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile.","title":"function run_offline_analysis"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shapes","text":"ShapeList get_shapes () Return the list of shapes.","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_subjects","text":"int get_num_subjects () Return the number of subjects.","title":"function get_num_subjects"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_modes","text":"int get_num_modes () Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_particles","text":"int get_num_particles () Return the number of particles.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points () Return the mean shape.","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape () Return the mean shape.","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape_particles","text":"Particles get_group_shape_particles ( double ratio )","title":"function get_group_shape_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape","text":"ShapeHandle get_group_shape ( double ratio )","title":"function get_group_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value.","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value.","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-groups_active","text":"inline bool groups_active ()","title":"function groups_active"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-create_shape_from_points","text":"ShapeHandle create_shape_from_points ( Particles points )","title":"function create_shape_from_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_subject_features","text":"Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name )","title":"function get_subject_features"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-set_group_selection","text":"void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 )","title":"function set_group_selection"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html","text":"shapeworks::AnalyzeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#shapeworksanalyzecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html","text":"shapeworks::ColorMap Public Functions Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color) Public Attributes Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_ Public Functions Documentation function construct_lookup_table void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ) function set_discrete_mode inline void set_discrete_mode ( bool discrete_mode ) function set_reverse_mode inline void set_reverse_mode ( bool reverse_mode ) function convert static vtkColor3ub convert ( QColor color ) Public Attributes Documentation variable name_ QString name_ ; variable color_series_ vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#shapeworkscolormap","text":"","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions","text":"Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes","text":"Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-construct_lookup_table","text":"void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut )","title":"function construct_lookup_table"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_discrete_mode","text":"inline void set_discrete_mode ( bool discrete_mode )","title":"function set_discrete_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_reverse_mode","text":"inline void set_reverse_mode ( bool reverse_mode )","title":"function set_reverse_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-convert","text":"static vtkColor3ub convert ( QColor color )","title":"function convert"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-name_","text":"QString name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-color_series_","text":"vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable color_series_"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html","text":"shapeworks::ColorMaps Inherits from std::vector< ColorMap > Public Functions Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index) Public Functions Documentation function ColorMaps ColorMaps () function get_color_series inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) function get_color_map inline ColorMap get_color_map ( int index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#shapeworkscolormaps","text":"Inherits from std::vector< ColorMap >","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions","text":"Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-colormaps","text":"ColorMaps ()","title":"function ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_series","text":"inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index )","title":"function get_color_series"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_map","text":"inline ColorMap get_color_map ( int index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_color_map"},{"location":"api/Classes/classshapeworks_1_1Command.html","text":"shapeworks::Command Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand Public Functions Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions Name virtual void buildParser () Protected Attributes Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type function name inline const std :: string name () const function usage inline const std :: string usage () const function desc inline const std :: string desc () const function parse_args std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers function run int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value Protected Functions Documentation function buildParser virtual void buildParser () Protected Attributes Documentation variable parser optparse :: OptionParser parser ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#shapeworkscommand","text":"Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions","text":"Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions","text":"Name virtual void buildParser ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes","text":"Name optparse::OptionParser parser","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-type","text":"inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type","title":"function type"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-name","text":"inline const std :: string name () const","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-usage","text":"inline const std :: string usage () const","title":"function usage"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-desc","text":"inline const std :: string desc () const","title":"function desc"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-parse_args","text":"std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers","title":"function parse_args"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-run","text":"int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-buildparser","text":"virtual void buildParser ()","title":"function buildParser"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#variable-parser","text":"optparse :: OptionParser parser ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable parser"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html","text":"shapeworks::CompareSettings Public Functions Name DisplayMode get_display_mode () bool get_mean_shape_checked () Public Attributes Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_ Public Functions Documentation function get_display_mode inline DisplayMode get_display_mode () function get_mean_shape_checked inline bool get_mean_shape_checked () Public Attributes Documentation variable compare_enabled_ bool compare_enabled_ = false ; variable surface_distance_mode_ bool surface_distance_mode_ = false ; variable original_checked_ bool original_checked_ = false ; variable groomed_checked_ bool groomed_checked_ = false ; variable reconstructed_checked_ bool reconstructed_checked_ = false ; variable mean_shape_checked_ bool mean_shape_checked_ = false ; variable opacity_ float opacity_ = 1.0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#shapeworkscomparesettings","text":"","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions","text":"Name DisplayMode get_display_mode () bool get_mean_shape_checked ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes","text":"Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_display_mode","text":"inline DisplayMode get_display_mode ()","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_mean_shape_checked","text":"inline bool get_mean_shape_checked ()","title":"function get_mean_shape_checked"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-compare_enabled_","text":"bool compare_enabled_ = false ;","title":"variable compare_enabled_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-surface_distance_mode_","text":"bool surface_distance_mode_ = false ;","title":"variable surface_distance_mode_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-original_checked_","text":"bool original_checked_ = false ;","title":"variable original_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-groomed_checked_","text":"bool groomed_checked_ = false ;","title":"variable groomed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-reconstructed_checked_","text":"bool reconstructed_checked_ = false ;","title":"variable reconstructed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-mean_shape_checked_","text":"bool mean_shape_checked_ = false ;","title":"variable mean_shape_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-opacity_","text":"float opacity_ = 1.0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable opacity_"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html","text":"shapeworks::CompareWidget Inherits from QWidget Public Signals Name void settings_changed () Public Functions Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available () Public Signals Documentation signal settings_changed void settings_changed () Public Functions Documentation function CompareWidget explicit CompareWidget ( QWidget * parent = nullptr ) function ~CompareWidget ~ CompareWidget () function get_settings CompareSettings get_settings () function set_available void set_available ( DisplayMode mode , bool available ) function set_mean_shape_available void set_mean_shape_available ( bool available ) function check_any_available bool check_any_available () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#shapeworkscomparewidget","text":"Inherits from QWidget","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals","text":"Name void settings_changed ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions","text":"Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#signal-settings_changed","text":"void settings_changed ()","title":"signal settings_changed"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget","text":"explicit CompareWidget ( QWidget * parent = nullptr )","title":"function CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget_1","text":"~ CompareWidget ()","title":"function ~CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-get_settings","text":"CompareSettings get_settings ()","title":"function get_settings"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_available","text":"void set_available ( DisplayMode mode , bool available )","title":"function set_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_mean_shape_available","text":"void set_mean_shape_available ( bool available )","title":"function set_mean_shape_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-check_any_available","text":"bool check_any_available () Updated on 2023-10-24 at 22:16:01 +0000","title":"function check_any_available"},{"location":"api/Classes/classshapeworks_1_1Constraint.html","text":"shapeworks::Constraint More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint Public Functions Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Name int sgn (double val) Returns the sign of the double. Protected Attributes Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better. Public Functions Documentation function isViolated inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated function print virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print function setMus inline void setMus ( std :: vector < double > inmu ) Initializes mu. function getMus inline std :: vector < double > getMus () Gets mu. function constraintGradient virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval function updateMu void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update. function lagragianGradient Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Documentation function sgn inline int sgn ( double val ) Returns the sign of the double. Protected Attributes Documentation variable mus_ std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#shapeworksconstraint","text":"More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions","text":"Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions","text":"Name int sgn (double val) Returns the sign of the double.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes","text":"Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#detailed-description","text":"class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated","text":"inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint.","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated_1","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-print","text":"virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-setmus","text":"inline void setMus ( std :: vector < double > inmu ) Initializes mu.","title":"function setMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-getmus","text":"inline std :: vector < double > getMus () Gets mu.","title":"function getMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constraintgradient","text":"virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-updatemu","text":"void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update.","title":"function updateMu"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-lagragiangradient","text":"Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"function lagragianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-sgn","text":"inline int sgn ( double val ) Returns the sign of the double.","title":"function sgn"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#variable-mus_","text":"std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-24 at 22:16:01 +0000","title":"variable mus_"},{"location":"api/Classes/classshapeworks_1_1Constraints.html","text":"shapeworks::Constraints More... #include Public Types Name using itk::Point< double, 3 > Point3 Public Functions Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object. Detailed Description class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap Public Types Documentation using Point3 using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ; Public Functions Documentation function Constraints inline Constraints () Constraints are inactive when initialized. function ~Constraints inline ~ Constraints () function addPlane void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. function addFreeFormConstraint void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. function transformConstraints bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs) function transformPlanes bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints. function getPlaneConstraints inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. function getFreeformConstraint FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. function isAnyViolated bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos. function printAll void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. function violationReport std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. function violationReportData std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. function constraintsLagrangianGradient vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. function InitializeLagrangianParameters void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus. function UpdateMus void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian. function GetActive inline bool GetActive () Gets the variable active, which determines whether constraints are being used. function SetActive inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used. function read void read ( std :: string filename ) Reads in a constraint json file named filename. function write void write ( std :: string filename ) Writes out a constraint json file named filename. function hasConstraints bool hasConstraints () function clipMesh void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#shapeworksconstraints","text":"More... #include ","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types","text":"Name using itk::Point< double, 3 > Point3","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions","text":"Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#detailed-description","text":"class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#using-point3","text":"using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints","text":"inline Constraints () Constraints are inactive when initialized.","title":"function Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints_1","text":"inline ~ Constraints ()","title":"function ~Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addplane","text":"void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addPlane"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addfreeformconstraint","text":"void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformconstraints","text":"bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs)","title":"function transformConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformplanes","text":"bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints.","title":"function transformPlanes"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getplaneconstraints","text":"inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info.","title":"function getPlaneConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getfreeformconstraint","text":"FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info.","title":"function getFreeformConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-isanyviolated","text":"bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos.","title":"function isAnyViolated"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-printall","text":"void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output.","title":"function printAll"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreport","text":"std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index.","title":"function violationReport"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreportdata","text":"std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC.","title":"function violationReportData"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraintslagrangiangradient","text":"vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle.","title":"function constraintsLagrangianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-initializelagrangianparameters","text":"void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus.","title":"function InitializeLagrangianParameters"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-updatemus","text":"void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian.","title":"function UpdateMus"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getactive","text":"inline bool GetActive () Gets the variable active, which determines whether constraints are being used.","title":"function GetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-setactive","text":"inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used.","title":"function SetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-read","text":"void read ( std :: string filename ) Reads in a constraint json file named filename.","title":"function read"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-write","text":"void write ( std :: string filename ) Writes out a constraint json file named filename.","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-hasconstraints","text":"bool hasConstraints ()","title":"function hasConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-clipmesh","text":"void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-24 at 22:16:01 +0000","title":"function clipMesh"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html","text":"shapeworks::ContourDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< ContourDomain > Pointer Public Functions Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ; Public Functions Documentation function ContourDomain inline explicit ContourDomain () function ~ContourDomain inline virtual ~ ContourDomain () function SetPolyLine void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ) function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleNormalAtPoint inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradientAtPoint inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function Distance virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetPositionAfterSplit virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#shapeworkscontourdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types","text":"Name using std::shared_ptr< ContourDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions","text":"Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#using-pointer","text":"using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain","text":"inline explicit ContourDomain ()","title":"function ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain_1","text":"inline virtual ~ ContourDomain ()","title":"function ~ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-setpolyline","text":"void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function SetPolyLine"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplenormalatpoint","text":"inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradientatpoint","text":"inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-distance","text":"virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-squareddistance","text":"virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getpositionaftersplit","text":"virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html","text":"shapeworks::CorrespondenceFunction Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone () Protected Functions Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c) Public Attributes Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension Protected Attributes Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ; typedef DataType typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function SetShapeData inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix. function GetShapeData inline ShapeDataType * GetShapeData () function GetShapeData inline const ShapeDataType * GetShapeData () const function SetShapeGradient inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix. function GetShapeGradient inline ShapeGradientType * GetShapeGradient () function GetShapeGradient inline const ShapeGradientType * GetShapeGradient () const function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function CheckForNans inline bool CheckForNans ( vnl_matrix_type mat ) function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function CorrespondenceFunction inline CorrespondenceFunction () function ~CorrespondenceFunction inline virtual ~ CorrespondenceFunction () function operator= void operator = ( const CorrespondenceFunction & ) function CorrespondenceFunction CorrespondenceFunction ( const CorrespondenceFunction & ) function ComputeUpdates virtual void ComputeUpdates ( const ParticleSystem * c ) Public Attributes Documentation variable ShapeGradientType itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeData ShapeDataType :: Pointer m_ShapeData ; variable m_ShapeGradient ShapeGradientType :: Pointer m_ShapeGradient ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_Counter int m_Counter ; variable m_AttributeScales std :: vector < double > m_AttributeScales ; variable m_DomainsPerShape int m_DomainsPerShape ; variable m_AttributesPerDomain std :: vector < int > m_AttributesPerDomain ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_UseXYZ std :: vector < bool > m_UseXYZ ; variable m_UseNormals std :: vector < bool > m_UseNormals ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; variable num_dims int num_dims ; variable num_samples int num_samples ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#shapeworkscorrespondencefunction","text":"Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types","text":"Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions","text":"Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions","text":"Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes","text":"Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes","text":"Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-self","text":"typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapedata","text":"inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix.","title":"function SetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata","text":"inline ShapeDataType * GetShapeData ()","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata_1","text":"inline const ShapeDataType * GetShapeData () const","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapegradient","text":"inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix.","title":"function SetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient","text":"inline ShapeGradientType * GetShapeGradient ()","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient_1","text":"inline const ShapeGradientType * GetShapeGradient () const","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-checkfornans","text":"inline bool CheckForNans ( vnl_matrix_type mat )","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction","text":"inline CorrespondenceFunction ()","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_1","text":"inline virtual ~ CorrespondenceFunction ()","title":"function ~CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-operator","text":"void operator = ( const CorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_2","text":"CorrespondenceFunction ( const CorrespondenceFunction & )","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-computeupdates","text":"virtual void ComputeUpdates ( const ParticleSystem * c )","title":"function ComputeUpdates"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-shapegradienttype","text":"itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ;","title":"variable ShapeGradientType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapedata","text":"ShapeDataType :: Pointer m_ShapeData ;","title":"variable m_ShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapegradient","text":"ShapeGradientType :: Pointer m_ShapeGradient ;","title":"variable m_ShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributescales","text":"std :: vector < double > m_AttributeScales ;","title":"variable m_AttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_domainspershape","text":"int m_DomainsPerShape ;","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributesperdomain","text":"std :: vector < int > m_AttributesPerDomain ;","title":"variable m_AttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usexyz","text":"std :: vector < bool > m_UseXYZ ;","title":"variable m_UseXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usenormals","text":"std :: vector < bool > m_UseNormals ;","title":"variable m_UseNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ;","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_dims","text":"int num_dims ;","title":"variable num_dims"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_samples","text":"int num_samples ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable num_samples"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html","text":"title: shapeworks::CurvatureSamplingFunction summary: Please note: This is the sampling function currently being used. shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject Protected Classes Name struct CrossDomainNeighborhood Public Types Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType Public Functions Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone () Protected Functions Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system) Public Attributes Name constexpr static int VDimension Protected Attributes Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor Additional inherited members Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature. Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ; typedef Self typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ; typedef Superclass typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ; typedef GradientNumericType typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs. typedef VectorType typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ; typedef GradientVectorType typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ; typedef MeanCurvatureCacheType typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ; typedef VnlMatrixType typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate function BeforeEvaluate virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy function ComputeKappa inline double ComputeKappa ( double mc , unsigned int d ) const function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function SetMeanCurvatureCache inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function GetMeanCurvatureCache inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const function SetRho inline void SetRho ( double g ) function GetRho inline double GetRho () const function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double w ) function GetSharedBoundaryWeight inline double GetSharedBoundaryWeight () const function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function GetSharedBoundaryEnabled inline bool GetSharedBoundaryEnabled () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone Protected Functions Documentation function CurvatureSamplingFunction inline CurvatureSamplingFunction () function ~CurvatureSamplingFunction inline virtual ~ CurvatureSamplingFunction () function operator= void operator = ( const CurvatureSamplingFunction & ) function CurvatureSamplingFunction CurvatureSamplingFunction ( const CurvatureSamplingFunction & ) function UpdateNeighborhood void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MeanCurvatureCache MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; variable m_Counter unsigned int m_Counter ; variable m_Rho double m_Rho ; variable m_avgKappa double m_avgKappa ; variable m_IsSharedBoundaryEnabled bool m_IsSharedBoundaryEnabled { false }; variable m_SharedBoundaryWeight double m_SharedBoundaryWeight { 1.0 }; variable m_CurrentSigma double m_CurrentSigma ; variable m_CurrentNeighborhood std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; variable m_MaxMoveFactor float m_MaxMoveFactor = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"classshapeworks 1 1CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#shapeworkscurvaturesamplingfunction","text":"Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-classes","text":"Name struct CrossDomainNeighborhood","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions","text":"Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions","text":"Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes","text":"Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#additional-inherited-members","text":"Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#detailed-description","text":"class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-self","text":"typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-superclass","text":"typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientnumerictype","text":"typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientvectortype","text":"typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-meancurvaturecachetype","text":"typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ;","title":"typedef MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vnlmatrixtype","text":"typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeevaluate","text":"virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-computekappa","text":"inline double ComputeKappa ( double mc , unsigned int d ) const","title":"function ComputeKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setmeancurvaturecache","text":"inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s )","title":"function SetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache_1","text":"inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setrho","text":"inline void SetRho ( double g )","title":"function SetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getrho","text":"inline double GetRho () const","title":"function GetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double w )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryweight","text":"inline double GetSharedBoundaryWeight () const","title":"function GetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryenabled","text":"inline bool GetSharedBoundaryEnabled () const","title":"function GetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction","text":"inline CurvatureSamplingFunction ()","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_1","text":"inline virtual ~ CurvatureSamplingFunction ()","title":"function ~CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-operator","text":"void operator = ( const CurvatureSamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_2","text":"CurvatureSamplingFunction ( const CurvatureSamplingFunction & )","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-updateneighborhood","text":"void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system )","title":"function UpdateNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_meancurvaturecache","text":"MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ;","title":"variable m_MeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_counter","text":"unsigned int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_rho","text":"double m_Rho ;","title":"variable m_Rho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_avgkappa","text":"double m_avgKappa ;","title":"variable m_avgKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_issharedboundaryenabled","text":"bool m_IsSharedBoundaryEnabled { false };","title":"variable m_IsSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_sharedboundaryweight","text":"double m_SharedBoundaryWeight { 1.0 };","title":"variable m_SharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentsigma","text":"double m_CurrentSigma ;","title":"variable m_CurrentSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentneighborhood","text":"std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ;","title":"variable m_CurrentNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_maxmovefactor","text":"float m_MaxMoveFactor = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_MaxMoveFactor"},{"location":"api/Classes/classshapeworks_1_1DataTool.html","text":"shapeworks::DataTool Inherits from QWidget Public Slots Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked () Public Signals Name void import_button_clicked () Public Functions Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data () Public Slots Documentation slot delete_button_clicked void delete_button_clicked () slot delete_landmarks_clicked void delete_landmarks_clicked () slot set_placing_button_clicked void set_placing_button_clicked ( int id ) slot handle_landmark_mode_changed void handle_landmark_mode_changed () slot handle_constraints_mode_changed void handle_constraints_mode_changed () slot constraints_table_right_click void constraints_table_right_click ( const QPoint & point ) slot copy_ffc_clicked void copy_ffc_clicked () Public Signals Documentation signal import_button_clicked void import_button_clicked () Public Functions Documentation function DataTool DataTool ( Preferences & prefs ) function ~DataTool ~ DataTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function disable_actions void disable_actions () function enable_actions void enable_actions () function update_table void update_table () function update_landmark_table void update_landmark_table () function landmark_domain_changed void landmark_domain_changed () function constraints_domain_changed void constraints_domain_changed () function delete_planes_clicked void delete_planes_clicked () function delete_ffc_clicked void delete_ffc_clicked () function update_notes void update_notes () function get_notes std :: string get_notes () function store_data void store_data () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#shapeworksdatatool","text":"Inherits from QWidget","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots","text":"Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals","text":"Name void import_button_clicked ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions","text":"Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_button_clicked","text":"void delete_button_clicked ()","title":"slot delete_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_landmarks_clicked","text":"void delete_landmarks_clicked ()","title":"slot delete_landmarks_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-set_placing_button_clicked","text":"void set_placing_button_clicked ( int id )","title":"slot set_placing_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_landmark_mode_changed","text":"void handle_landmark_mode_changed ()","title":"slot handle_landmark_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_constraints_mode_changed","text":"void handle_constraints_mode_changed ()","title":"slot handle_constraints_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-constraints_table_right_click","text":"void constraints_table_right_click ( const QPoint & point )","title":"slot constraints_table_right_click"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-copy_ffc_clicked","text":"void copy_ffc_clicked ()","title":"slot copy_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#signal-import_button_clicked","text":"void import_button_clicked ()","title":"signal import_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool","text":"DataTool ( Preferences & prefs )","title":"function DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool_1","text":"~ DataTool ()","title":"function ~DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-disable_actions","text":"void disable_actions ()","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-enable_actions","text":"void enable_actions ()","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_table","text":"void update_table ()","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_landmark_table","text":"void update_landmark_table ()","title":"function update_landmark_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-landmark_domain_changed","text":"void landmark_domain_changed ()","title":"function landmark_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-constraints_domain_changed","text":"void constraints_domain_changed ()","title":"function constraints_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_planes_clicked","text":"void delete_planes_clicked ()","title":"function delete_planes_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_ffc_clicked","text":"void delete_ffc_clicked ()","title":"function delete_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_notes","text":"void update_notes ()","title":"function update_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-get_notes","text":"std :: string get_notes ()","title":"function get_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-store_data","text":"void store_data () Updated on 2023-10-24 at 22:16:01 +0000","title":"function store_data"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html","text":"shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject Public Types Name enum class FileType enum class SplitType Public Functions Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Detailed Description class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object Public Types Documentation enum FileType Enumerator Value Description ID IMAGE PARTICLES enum SplitType Enumerator Value Description TRAIN TEST Public Functions Documentation function DeepSSMJob DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ) function ~DeepSSMJob ~ DeepSSMJob () function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function run_augmentation void run_augmentation () function run_training void run_training () function run_testing void run_testing () function python_message void python_message ( std :: string str ) function get_list std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#shapeworksdeepssmjob","text":"Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types","text":"Name enum class FileType enum class SplitType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions","text":"Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#detailed-description","text":"class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-filetype","text":"Enumerator Value Description ID IMAGE PARTICLES","title":"enum FileType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-splittype","text":"Enumerator Value Description TRAIN TEST","title":"enum SplitType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob","text":"DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode )","title":"function DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob_1","text":"~ DeepSSMJob ()","title":"function ~DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_augmentation","text":"void run_augmentation ()","title":"function run_augmentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_training","text":"void run_training ()","title":"function run_training"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_testing","text":"void run_testing ()","title":"function run_testing"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-python_message","text":"void python_message ( std :: string str )","title":"function python_message"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-get_list","text":"std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_list"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html","text":"shapeworks::DeepSSMParameters Public Functions Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults () Public Attributes Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C Public Functions Documentation function DeepSSMParameters explicit DeepSSMParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_aug_num_samples int get_aug_num_samples () function set_aug_num_samples void set_aug_num_samples ( int num_samples ) function get_aug_num_dims int get_aug_num_dims () function set_aug_num_dims void set_aug_num_dims ( int num_dims ) function get_training_num_dims int get_training_num_dims () function set_training_num_dims void set_training_num_dims ( int num_dims ) function get_aug_percent_variability double get_aug_percent_variability () function set_aug_percent_variability void set_aug_percent_variability ( double percent_variability ) function get_aug_sampler_type std :: string get_aug_sampler_type () function set_aug_sampler_type void set_aug_sampler_type ( std :: string sampler_type ) function get_training_epochs int get_training_epochs () function set_training_epochs void set_training_epochs ( int epochs ) function get_training_learning_rate double get_training_learning_rate () function set_training_learning_rate void set_training_learning_rate ( double rate ) function get_training_decay_learning_rate bool get_training_decay_learning_rate () function set_training_decay_learning_rate void set_training_decay_learning_rate ( bool decay ) function get_training_fine_tuning bool get_training_fine_tuning () function set_training_fine_tuning void set_training_fine_tuning ( bool fine_tuning ) function get_training_fine_tuning_epochs int get_training_fine_tuning_epochs () function set_training_fine_tuning_epochs void set_training_fine_tuning_epochs ( int epochs ) function get_training_fine_tuning_learning_rate double get_training_fine_tuning_learning_rate () function set_training_fine_tuning_learning_rate void set_training_fine_tuning_learning_rate ( double rate ) function get_training_batch_size int get_training_batch_size () function set_training_batch_size void set_training_batch_size ( int batch_size ) function get_training_split double get_training_split () function set_training_split void set_training_split ( double value ) function get_validation_split double get_validation_split () function set_validation_split void set_validation_split ( double value ) function get_testing_split double get_testing_split () function set_testing_split void set_testing_split ( double value ) function restore_split_defaults void restore_split_defaults () function restore_augmentation_defaults void restore_augmentation_defaults () function restore_training_defaults void restore_training_defaults () function restore_defaults void restore_defaults () Public Attributes Documentation variable DEEPSSM_SAMPLER_GAUSSIAN_C static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; variable DEEPSSM_SAMPLER_MIXTURE_C static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ; variable DEEPSSM_SAMPLER_KDE_C static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#shapeworksdeepssmparameters","text":"","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions","text":"Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes","text":"Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-deepssmparameters","text":"explicit DeepSSMParameters ( ProjectHandle project )","title":"function DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_samples","text":"int get_aug_num_samples ()","title":"function get_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_samples","text":"void set_aug_num_samples ( int num_samples )","title":"function set_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_dims","text":"int get_aug_num_dims ()","title":"function get_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_dims","text":"void set_aug_num_dims ( int num_dims )","title":"function set_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_num_dims","text":"int get_training_num_dims ()","title":"function get_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_num_dims","text":"void set_training_num_dims ( int num_dims )","title":"function set_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_percent_variability","text":"double get_aug_percent_variability ()","title":"function get_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_percent_variability","text":"void set_aug_percent_variability ( double percent_variability )","title":"function set_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_sampler_type","text":"std :: string get_aug_sampler_type ()","title":"function get_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_sampler_type","text":"void set_aug_sampler_type ( std :: string sampler_type )","title":"function set_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_epochs","text":"int get_training_epochs ()","title":"function get_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_epochs","text":"void set_training_epochs ( int epochs )","title":"function set_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_learning_rate","text":"double get_training_learning_rate ()","title":"function get_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_learning_rate","text":"void set_training_learning_rate ( double rate )","title":"function set_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_decay_learning_rate","text":"bool get_training_decay_learning_rate ()","title":"function get_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_decay_learning_rate","text":"void set_training_decay_learning_rate ( bool decay )","title":"function set_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning","text":"bool get_training_fine_tuning ()","title":"function get_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning","text":"void set_training_fine_tuning ( bool fine_tuning )","title":"function set_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_epochs","text":"int get_training_fine_tuning_epochs ()","title":"function get_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_epochs","text":"void set_training_fine_tuning_epochs ( int epochs )","title":"function set_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_learning_rate","text":"double get_training_fine_tuning_learning_rate ()","title":"function get_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_learning_rate","text":"void set_training_fine_tuning_learning_rate ( double rate )","title":"function set_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_batch_size","text":"int get_training_batch_size ()","title":"function get_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_batch_size","text":"void set_training_batch_size ( int batch_size )","title":"function set_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_split","text":"double get_training_split ()","title":"function get_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_split","text":"void set_training_split ( double value )","title":"function set_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_validation_split","text":"double get_validation_split ()","title":"function get_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_validation_split","text":"void set_validation_split ( double value )","title":"function set_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_testing_split","text":"double get_testing_split ()","title":"function get_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_testing_split","text":"void set_testing_split ( double value )","title":"function set_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_split_defaults","text":"void restore_split_defaults ()","title":"function restore_split_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_augmentation_defaults","text":"void restore_augmentation_defaults ()","title":"function restore_augmentation_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_training_defaults","text":"void restore_training_defaults ()","title":"function restore_training_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_gaussian_c","text":"static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ;","title":"variable DEEPSSM_SAMPLER_GAUSSIAN_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_mixture_c","text":"static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ;","title":"variable DEEPSSM_SAMPLER_MIXTURE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_kde_c","text":"static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable DEEPSSM_SAMPLER_KDE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html","text":"shapeworks::DeepSSMTool Inherits from QWidget Public Types Name enum class ToolMode Public Slots Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed () Public Signals Name void update_view () void progress (int ) Public Functions Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature () Public Types Documentation enum ToolMode Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType Public Slots Documentation slot run_clicked void run_clicked () slot restore_defaults void restore_defaults () slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) slot tab_changed void tab_changed ( int tab ) slot update_panels void update_panels () slot update_split void update_split ( QLineEdit * source ) slot handle_new_mesh void handle_new_mesh () slot training_fine_tuning_changed void training_fine_tuning_changed () Public Signals Documentation signal update_view void update_view () signal progress void progress ( int ) Public Functions Documentation function DeepSSMTool DeepSSMTool ( Preferences & prefs ) function ~DeepSSMTool ~ DeepSSMTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function is_active bool is_active () Return if this tool is active. function load_params void load_params () function store_params void store_params () function shutdown void shutdown () function get_shapes ShapeList get_shapes () function resizeEvent void resizeEvent ( QResizeEvent * event ) override function get_display_feature std :: string get_display_feature () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#shapeworksdeepssmtool","text":"Inherits from QWidget","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types","text":"Name enum class ToolMode","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots","text":"Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals","text":"Name void update_view () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions","text":"Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#enum-toolmode","text":"Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType","title":"enum ToolMode"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-tab_changed","text":"void tab_changed ( int tab )","title":"slot tab_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_panels","text":"void update_panels ()","title":"slot update_panels"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_split","text":"void update_split ( QLineEdit * source )","title":"slot update_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-training_fine_tuning_changed","text":"void training_fine_tuning_changed ()","title":"slot training_fine_tuning_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool","text":"DeepSSMTool ( Preferences & prefs )","title":"function DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool_1","text":"~ DeepSSMTool ()","title":"function ~DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-is_active","text":"bool is_active () Return if this tool is active.","title":"function is_active"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-load_params","text":"void load_params ()","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-store_params","text":"void store_params ()","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_display_feature","text":"std :: string get_display_feature () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_display_feature"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html","text":"shapeworks::DisentangledCorrespondenceFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type Public Functions Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM. Public Types Documentation typedef Self typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ; typedef shared_vnl_matrix_array_type typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DisentangledCorrespondenceFunction inline DisentangledCorrespondenceFunction () function ~DisentangledCorrespondenceFunction inline virtual ~ DisentangledCorrespondenceFunction () function operator= void operator = ( const DisentangledCorrespondenceFunction & ) function DisentangledCorrespondenceFunction DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ) function ComputeCovarianceMatrices virtual void ComputeCovarianceMatrices () function Initialize inline void Initialize () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_MinimumEigenValue_time_cohort std :: vector < double > m_MinimumEigenValue_time_cohort ; variable m_MinimumEigenValue_shape_cohort std :: vector < double > m_MinimumEigenValue_shape_cohort ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_InverseCovMatrices_time_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ; variable m_InverseCovMatrices_shape_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ; variable m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; variable m_points_mean_shape_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort ; variable m_Time_PointsUpdate shared_vnl_matrix_array_type m_Time_PointsUpdate ; variable m_Shape_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#shapeworksdisentangledcorrespondencefunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types","text":"Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions","text":"Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#detailed-description","text":"class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-self","text":"typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shared_vnl_matrix_array_type","text":"typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ;","title":"typedef shared_vnl_matrix_array_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction","text":"inline DisentangledCorrespondenceFunction ()","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_1","text":"inline virtual ~ DisentangledCorrespondenceFunction ()","title":"function ~DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-operator","text":"void operator = ( const DisentangledCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_2","text":"DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & )","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-computecovariancematrices","text":"virtual void ComputeCovarianceMatrices ()","title":"function ComputeCovarianceMatrices"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_time_cohort","text":"std :: vector < double > m_MinimumEigenValue_time_cohort ;","title":"variable m_MinimumEigenValue_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_shape_cohort","text":"std :: vector < double > m_MinimumEigenValue_shape_cohort ;","title":"variable m_MinimumEigenValue_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_time_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ;","title":"variable m_InverseCovMatrices_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_shape_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ;","title":"variable m_InverseCovMatrices_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_time_cohort","text":"shared_vnl_matrix_array_type m_points_mean_time_cohort ;","title":"variable m_points_mean_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_shape_cohort","text":"shared_vnl_matrix_array_type m_points_mean_shape_cohort ;","title":"variable m_points_mean_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_time_pointsupdate","text":"shared_vnl_matrix_array_type m_Time_PointsUpdate ;","title":"variable m_Time_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shape_pointsupdate","text":"shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_Shape_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html","text":"shapeworks::DualVectorFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType Public Functions Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone () Protected Functions Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff(). Public Types Documentation typedef Self typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type. Public Functions Documentation function itkTypeMacro itkTypeMacro ( DualVectorFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function EnergyA inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function EnergyB inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function Energy inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber function SetFunctionA inline void SetFunctionA ( VectorFunction * o ) function GetFunctionA inline VectorFunction * GetFunctionA () function GetFunctionB inline VectorFunction * GetFunctionB () function SetFunctionB inline void SetFunctionB ( VectorFunction * o ) function SetAOn inline void SetAOn () Turn each term on and off. function SetAOff inline void SetAOff () function SetAOn inline void SetAOn ( bool s ) function GetAOn inline bool GetAOn () const function SetBOn inline void SetBOn () function SetBOff inline void SetBOff () function SetBOn inline void SetBOn ( bool s ) function GetBOn inline bool GetBOn () const function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0. function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling function SetRelativeGradientScaling inline void SetRelativeGradientScaling ( double r ) function GetRelativeGradientScaling inline double GetRelativeGradientScaling () const function GetAverageGradMagA inline double GetAverageGradMagA () const function GetAverageGradMagB inline double GetAverageGradMagB () const function GetAverageEnergyA inline double GetAverageEnergyA () const function GetAverageEnergyB inline double GetAverageEnergyB () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DualVectorFunction inline DualVectorFunction () function ~DualVectorFunction inline virtual ~ DualVectorFunction () function operator= void operator = ( const DualVectorFunction & ) function DualVectorFunction DualVectorFunction ( const DualVectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_AOn bool m_AOn ; variable m_BOn bool m_BOn ; variable m_RelativeGradientScaling double m_RelativeGradientScaling ; variable m_RelativeEnergyScaling double m_RelativeEnergyScaling ; variable m_AverageGradMagA double m_AverageGradMagA ; variable m_AverageGradMagB double m_AverageGradMagB ; variable m_AverageEnergyA double m_AverageEnergyA ; variable m_AverageEnergyB double m_AverageEnergyB ; variable m_Counter double m_Counter ; variable m_FunctionA VectorFunction :: Pointer m_FunctionA ; variable m_FunctionB VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#shapeworksdualvectorfunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types","text":"Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions","text":"Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions","text":"Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes","text":"Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#detailed-description","text":"class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff().","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-self","text":"typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( DualVectorFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energya","text":"inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energyb","text":"inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctiona","text":"inline void SetFunctionA ( VectorFunction * o )","title":"function SetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctiona","text":"inline VectorFunction * GetFunctionA ()","title":"function GetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctionb","text":"inline VectorFunction * GetFunctionB ()","title":"function GetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctionb","text":"inline void SetFunctionB ( VectorFunction * o )","title":"function SetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon","text":"inline void SetAOn () Turn each term on and off.","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaoff","text":"inline void SetAOff ()","title":"function SetAOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon_1","text":"inline void SetAOn ( bool s )","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaon","text":"inline bool GetAOn () const","title":"function GetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon","text":"inline void SetBOn ()","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setboff","text":"inline void SetBOff ()","title":"function SetBOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon_1","text":"inline void SetBOn ( bool s )","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getbon","text":"inline bool GetBOn () const","title":"function GetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0.","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativegradientscaling","text":"inline void SetRelativeGradientScaling ( double r )","title":"function SetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativegradientscaling","text":"inline double GetRelativeGradientScaling () const","title":"function GetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmaga","text":"inline double GetAverageGradMagA () const","title":"function GetAverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmagb","text":"inline double GetAverageGradMagB () const","title":"function GetAverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergya","text":"inline double GetAverageEnergyA () const","title":"function GetAverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergyb","text":"inline double GetAverageEnergyB () const","title":"function GetAverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction","text":"inline DualVectorFunction ()","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_1","text":"inline virtual ~ DualVectorFunction ()","title":"function ~DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-operator","text":"void operator = ( const DualVectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_2","text":"DualVectorFunction ( const DualVectorFunction & )","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_aon","text":"bool m_AOn ;","title":"variable m_AOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_bon","text":"bool m_BOn ;","title":"variable m_BOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativegradientscaling","text":"double m_RelativeGradientScaling ;","title":"variable m_RelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativeenergyscaling","text":"double m_RelativeEnergyScaling ;","title":"variable m_RelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmaga","text":"double m_AverageGradMagA ;","title":"variable m_AverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmagb","text":"double m_AverageGradMagB ;","title":"variable m_AverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergya","text":"double m_AverageEnergyA ;","title":"variable m_AverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergyb","text":"double m_AverageEnergyB ;","title":"variable m_AverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_counter","text":"double m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functiona","text":"VectorFunction :: Pointer m_FunctionA ;","title":"variable m_FunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functionb","text":"VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_FunctionB"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html","text":"shapeworks::EigenUtils Public Functions Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index) Public Functions Documentation function compute_mean_and_stddev static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#shapeworkseigenutils","text":"","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions","text":"Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#function-compute_mean_and_stddev","text":"static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function compute_mean_and_stddev"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html","text":"shapeworks::ExcelProjectReader Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format Public Functions Documentation function ExcelProjectReader ExcelProjectReader ( Project & project ) function ~ExcelProjectReader ~ ExcelProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#shapeworksexcelprojectreader","text":"Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions","text":"Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#detailed-description","text":"class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader","text":"ExcelProjectReader ( Project & project )","title":"function ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader_1","text":"~ ExcelProjectReader ()","title":"function ~ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html","text":"shapeworks::ExcelProjectWriter Excel file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, const std::string & filename) Detailed Description class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format Public Functions Documentation function write_project static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#shapeworksexcelprojectwriter","text":"Excel file format writer for Project . More... #include ","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, const std::string & filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#detailed-description","text":"class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1Executable.html","text":"shapeworks::Executable Public Functions Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv) Public Functions Documentation function Executable Executable () function addCommand void addCommand ( Command & command ) function run int run ( int argc , char const * const * argv ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#shapeworksexecutable","text":"","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions","text":"Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-executable","text":"Executable ()","title":"function Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-addcommand","text":"void addCommand ( Command & command )","title":"function addCommand"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-run","text":"int run ( int argc , char const * const * argv ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html","text":"shapeworks::ExportImageDialog More... #include Inherits from QDialog Public Functions Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode) Detailed Description class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images Public Functions Documentation function ExportImageDialog ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#shapeworksexportimagedialog","text":"More... #include Inherits from QDialog","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions","text":"Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#detailed-description","text":"class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#function-exportimagedialog","text":"ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html","text":"shapeworks::ExportUtils Export utilities for Studio. #include Public Functions Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename) Public Functions Documentation function get_save_filename static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ) function export_all_subjects_particle_scalars static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ) function write_scalars static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ) function write_particle_scalars static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#shapeworksexportutils","text":"Export utilities for Studio. #include ","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions","text":"Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-get_save_filename","text":"static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext )","title":"function get_save_filename"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-export_all_subjects_particle_scalars","text":"static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session )","title":"function export_all_subjects_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_scalars","text":"static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename )","title":"function write_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_particle_scalars","text":"static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function write_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html","text":"shapeworks::FreeFormConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function FreeFormConstraint inline FreeFormConstraint () function setMesh inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC. function getMesh inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC. function readyForOptimize bool readyForOptimize () const Prepares for optimize. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function constraintEval inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function setDefinition void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists. function getDefinition inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. function applyToPolyData void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata. function boundaries std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries function getQueryPoint inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point function setQueryPoint inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point function computeBoundaries void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars function setInoutPolyData inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata. function getInoutPolyData inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata. function createInoutPolyData void createInoutPolyData () Create the in/out poly data from the definition poly data. function isSet bool isSet () Return if this FFC is set or not. function setPainted void setPainted ( bool painted ) Set if this FFC has paint on it or not. function reset void reset () Reset to initial state. function computeGradientFields void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh. function convertLegacyFFC void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#shapeworksfreeformconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions","text":"Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#detailed-description","text":"class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-freeformconstraint","text":"inline FreeFormConstraint ()","title":"function FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setmesh","text":"inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC.","title":"function setMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getmesh","text":"inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC.","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-readyforoptimize","text":"bool readyForOptimize () const Prepares for optimize.","title":"function readyForOptimize"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-print","text":"inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constrainteval","text":"inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setdefinition","text":"void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists.","title":"function setDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getdefinition","text":"inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists.","title":"function getDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-applytopolydata","text":"void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata.","title":"function applyToPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-boundaries","text":"std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries","title":"function boundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getquerypoint","text":"inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point","title":"function getQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setquerypoint","text":"inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point","title":"function setQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computeboundaries","text":"void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars","title":"function computeBoundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setinoutpolydata","text":"inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata.","title":"function setInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getinoutpolydata","text":"inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata.","title":"function getInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-createinoutpolydata","text":"void createInoutPolyData () Create the in/out poly data from the definition poly data.","title":"function createInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isset","text":"bool isSet () Return if this FFC is set or not.","title":"function isSet"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setpainted","text":"void setPainted ( bool painted ) Set if this FFC has paint on it or not.","title":"function setPainted"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-reset","text":"void reset () Reset to initial state.","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computegradientfields","text":"void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh.","title":"function computeGradientFields"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-convertlegacyffc","text":"void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-24 at 22:16:01 +0000","title":"function convertLegacyFFC"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html","text":"shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject Public Types Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const Protected Functions Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer () Detailed Description template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ; typedef Superclass typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods). function operator[] inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k. function Get inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator function GetSize inline unsigned long int GetSize () const Number of objects in the container. Protected Functions Documentation function GenericContainer inline GenericContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GenericContainer inline virtual ~ GenericContainer () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#shapeworksgenericcontainer","text":"This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types","text":"Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions","text":"Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-self","text":"typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-superclass","text":"typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-operator","text":"inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k.","title":"function operator[]"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-get","text":"inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator","title":"function Get"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-getsize","text":"inline unsigned long int GetSize () const Number of objects in the container.","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer","text":"inline GenericContainer ()","title":"function GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer_1","text":"inline virtual ~ GenericContainer () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html","text":"shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ; typedef Superclass typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function ZeroAllValues inline void ZeroAllValues () Protected Functions Documentation function GenericContainerArray inline GenericContainerArray () function ~GenericContainerArray inline virtual ~ GenericContainerArray () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#shapeworksgenericcontainerarray","text":"This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types","text":"Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions","text":"Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-self","text":"typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-superclass","text":"typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-zeroallvalues","text":"inline void ZeroAllValues ()","title":"function ZeroAllValues"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray","text":"inline GenericContainerArray ()","title":"function GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray_1","text":"inline virtual ~ GenericContainerArray ()","title":"function ~GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html","text":"shapeworks::GradientDescentOptimizer Inherits from itk::Object Public Types Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization. Protected Functions Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer () Public Attributes Name constexpr static unsigned int VDimension Public Types Documentation using TGradientNumericType using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ; typedef Self typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs typedef Superclass typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ; typedef DomainType typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain. typedef ParticleSystemType typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality. typedef GradientFunctionType typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function. typedef VectorType typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function StartOptimization inline void StartOptimization () Start the optimization. function StartAdaptiveGaussSeidelOptimization void StartAdaptiveGaussSeidelOptimization () function AugmentedLagrangianConstraints void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ) function StopOptimization inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration. function AbortProcessing inline void AbortProcessing () function itkGetMacro itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver. function itkSetMacro itkSetMacro ( NumberOfIterations , unsigned int ) function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function itkGetMacro itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value. function itkSetMacro itkSetMacro ( TimeStep , double ) function itkGetMacro itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use. function itkSetMacro itkSetMacro ( MaximumNumberOfIterations , unsigned int ) function itkGetMacro itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution. function itkSetMacro itkSetMacro ( Tolerance , double ) function itkGetObjectMacro itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) function itkGetObjectMacro itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( GradientFunction , GradientFunctionType ) function SetInitializationMode inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false) function SetCheckIterations inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence. function SetInitializationStartScalingFactor inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization. Protected Functions Documentation function GradientDescentOptimizer GradientDescentOptimizer () function GradientDescentOptimizer GradientDescentOptimizer ( const GradientDescentOptimizer & ) function operator= const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GradientDescentOptimizer inline virtual ~ GradientDescentOptimizer () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#shapeworksgradientdescentoptimizer","text":"Inherits from itk::Object","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types","text":"Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions","text":"Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#using-tgradientnumerictype","text":"using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ;","title":"using TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-self","text":"typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-superclass","text":"typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-domaintype","text":"typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain.","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-gradientfunctiontype","text":"typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function.","title":"typedef GradientFunctionType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-vectortype","text":"typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startoptimization","text":"inline void StartOptimization () Start the optimization.","title":"function StartOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startadaptivegaussseideloptimization","text":"void StartAdaptiveGaussSeidelOptimization ()","title":"function StartAdaptiveGaussSeidelOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-augmentedlagrangianconstraints","text":"void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index )","title":"function AugmentedLagrangianConstraints"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-stopoptimization","text":"inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration.","title":"function StopOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-abortprocessing","text":"inline void AbortProcessing ()","title":"function AbortProcessing"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro","text":"itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro","text":"itkSetMacro ( NumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_1","text":"itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_1","text":"itkSetMacro ( TimeStep , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_2","text":"itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_2","text":"itkSetMacro ( MaximumNumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_3","text":"itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_3","text":"itkSetMacro ( Tolerance , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( ParticleSystem , ParticleSystemType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro_1","text":"itkSetObjectMacro ( GradientFunction , GradientFunctionType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationmode","text":"inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false)","title":"function SetInitializationMode"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setcheckiterations","text":"inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence.","title":"function SetCheckIterations"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationstartscalingfactor","text":"inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization.","title":"function SetInitializationStartScalingFactor"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer","text":"GradientDescentOptimizer ()","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_1","text":"GradientDescentOptimizer ( const GradientDescentOptimizer & )","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-operator","text":"const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_2","text":"inline virtual ~ GradientDescentOptimizer ()","title":"function ~GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1Groom.html","text":"shapeworks::Groom High level groom API. More... #include Public Functions Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform. Protected Attributes Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_ Detailed Description class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations. Public Functions Documentation function Groom Groom ( ProjectHandle project ) function run bool run () Run the grooming. function abort void abort () Set abort as soon as possible. function get_aborted bool get_aborted () Return if grooming was aborted. function compute_landmark_distance static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks. function compute_landmark_transform static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform. Protected Attributes Documentation variable progress_ std :: atomic < float > progress_ = 0 ; variable total_ops_ std :: atomic < int > total_ops_ = 0 ; variable progress_counter_ std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#shapeworksgroom","text":"High level groom API. More... #include ","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions","text":"Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes","text":"Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Groom.html#detailed-description","text":"class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-groom","text":"Groom ( ProjectHandle project )","title":"function Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-run","text":"bool run () Run the grooming.","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-abort","text":"void abort () Set abort as soon as possible.","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-get_aborted","text":"bool get_aborted () Return if grooming was aborted.","title":"function get_aborted"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_distance","text":"static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks.","title":"function compute_landmark_distance"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_transform","text":"static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform.","title":"function compute_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_","text":"std :: atomic < float > progress_ = 0 ;","title":"variable progress_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-total_ops_","text":"std :: atomic < int > total_ops_ = 0 ;","title":"variable total_ops_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_counter_","text":"std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable progress_counter_"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html","text":"shapeworks::GroomCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#shapeworksgroomcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html","text":"shapeworks::GroomParameters More... #include Public Functions Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults () Public Attributes Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C Detailed Description class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters Public Functions Documentation function GroomParameters explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ) function set_domain_name void set_domain_name ( std :: string domain_name ) function save_to_project void save_to_project () function get_groom_output_prefix std :: string get_groom_output_prefix () function set_groom_output_prefix void set_groom_output_prefix ( std :: string prefix ) function get_groom_all_domains_the_same bool get_groom_all_domains_the_same () function set_groom_all_domains_the_same void set_groom_all_domains_the_same ( bool value ) function get_alignment_enabled bool get_alignment_enabled () function set_alignment_enabled void set_alignment_enabled ( bool value ) function get_alignment_method std :: string get_alignment_method () function set_alignment_method void set_alignment_method ( std :: string method ) function get_isolate_tool bool get_isolate_tool () function set_isolate_tool void set_isolate_tool ( bool value ) function get_fill_holes_tool bool get_fill_holes_tool () function set_fill_holes_tool void set_fill_holes_tool ( bool value ) function get_fill_mesh_holes_tool bool get_fill_mesh_holes_tool () function set_fill_mesh_holes_tool void set_fill_mesh_holes_tool ( bool value ) function get_auto_pad_tool bool get_auto_pad_tool () function set_auto_pad_tool void set_auto_pad_tool ( bool value ) function get_padding_amount int get_padding_amount () function set_padding_amount void set_padding_amount ( int padding_amount ) function get_antialias_tool bool get_antialias_tool () function set_antialias_tool void set_antialias_tool ( bool value ) function get_antialias_iterations int get_antialias_iterations () function set_antialias_iterations void set_antialias_iterations ( int iterations ) function get_blur_tool bool get_blur_tool () function set_blur_tool void set_blur_tool ( bool value ) function get_blur_amount double get_blur_amount () function set_blur_amount void set_blur_amount ( double blur_amount ) function get_fast_marching bool get_fast_marching () function set_fast_marching void set_fast_marching ( bool value ) function get_mesh_smooth bool get_mesh_smooth () function set_mesh_smooth void set_mesh_smooth ( bool value ) function get_mesh_smoothing_method std :: string get_mesh_smoothing_method () function set_mesh_smoothing_method void set_mesh_smoothing_method ( std :: string method ) function get_mesh_vtk_laplacian_iterations int get_mesh_vtk_laplacian_iterations () function set_mesh_vtk_laplacian_iterations void set_mesh_vtk_laplacian_iterations ( int iterations ) function get_mesh_vtk_laplacian_relaxation double get_mesh_vtk_laplacian_relaxation () function set_mesh_vtk_laplacian_relaxation void set_mesh_vtk_laplacian_relaxation ( double relaxation ) function get_mesh_vtk_windowed_sinc_iterations int get_mesh_vtk_windowed_sinc_iterations () function set_mesh_vtk_windowed_sinc_iterations void set_mesh_vtk_windowed_sinc_iterations ( int iterations ) function get_mesh_vtk_windowed_sinc_passband double get_mesh_vtk_windowed_sinc_passband () function set_mesh_vtk_windowed_sinc_passband void set_mesh_vtk_windowed_sinc_passband ( double passband ) function get_use_icp bool get_use_icp () function get_use_center bool get_use_center () function get_use_landmarks bool get_use_landmarks () function get_crop bool get_crop () function set_crop void set_crop ( bool crop ) function get_convert_to_mesh bool get_convert_to_mesh () function set_convert_to_mesh void set_convert_to_mesh ( bool value ) function get_reflect bool get_reflect () function set_reflect void set_reflect ( bool reflect ) function get_reflect_column std :: string get_reflect_column () function set_reflect_column void set_reflect_column ( std :: string column ) function get_reflect_choice std :: string get_reflect_choice () function set_reflect_choice void set_reflect_choice ( std :: string choice ) function get_reflect_axis std :: string get_reflect_axis () function set_reflect_axis void set_reflect_axis ( std :: string axies ) function get_resample bool get_resample () function set_resample void set_resample ( bool resample ) function get_isotropic bool get_isotropic () function set_isotropic void set_isotropic ( bool isotropic ) function get_iso_spacing double get_iso_spacing () function set_iso_spacing void set_iso_spacing ( double spacing ) function get_spacing std :: vector < double > get_spacing () function set_spacing void set_spacing ( std :: vector < double > spacing ) function get_remesh bool get_remesh () function set_remesh void set_remesh ( bool remesh ) function get_remesh_percent_mode bool get_remesh_percent_mode () function set_remesh_percent_mode void set_remesh_percent_mode ( bool mode ) function get_remesh_percent double get_remesh_percent () function set_remesh_percent void set_remesh_percent ( double percent ) function get_remesh_num_vertices int get_remesh_num_vertices () function set_remesh_num_vertices void set_remesh_num_vertices ( int num_vertices ) function get_remesh_gradation double get_remesh_gradation () function set_remesh_gradation void set_remesh_gradation ( double gradation ) function get_skip_grooming bool get_skip_grooming () function set_skip_grooming void set_skip_grooming ( bool skip ) function restore_defaults void restore_defaults () Public Attributes Documentation variable GROOM_SMOOTH_VTK_LAPLACIAN_C static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; variable GROOM_ALIGNMENT_CENTER_C static const std :: string GROOM_ALIGNMENT_CENTER_C ; variable GROOM_ALIGNMENT_ICP_C static const std :: string GROOM_ALIGNMENT_ICP_C ; variable GROOM_ALIGNMENT_LANDMARK_C static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#shapeworksgroomparameters","text":"More... #include ","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions","text":"Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes","text":"Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#detailed-description","text":"class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-groomparameters","text":"explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" )","title":"function GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_domain_name","text":"void set_domain_name ( std :: string domain_name )","title":"function set_domain_name"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_output_prefix","text":"std :: string get_groom_output_prefix ()","title":"function get_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_output_prefix","text":"void set_groom_output_prefix ( std :: string prefix )","title":"function set_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_all_domains_the_same","text":"bool get_groom_all_domains_the_same ()","title":"function get_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_all_domains_the_same","text":"void set_groom_all_domains_the_same ( bool value )","title":"function set_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_enabled","text":"bool get_alignment_enabled ()","title":"function get_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_enabled","text":"void set_alignment_enabled ( bool value )","title":"function set_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_method","text":"std :: string get_alignment_method ()","title":"function get_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_method","text":"void set_alignment_method ( std :: string method )","title":"function set_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isolate_tool","text":"bool get_isolate_tool ()","title":"function get_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isolate_tool","text":"void set_isolate_tool ( bool value )","title":"function set_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_holes_tool","text":"bool get_fill_holes_tool ()","title":"function get_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_holes_tool","text":"void set_fill_holes_tool ( bool value )","title":"function set_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_mesh_holes_tool","text":"bool get_fill_mesh_holes_tool ()","title":"function get_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_mesh_holes_tool","text":"void set_fill_mesh_holes_tool ( bool value )","title":"function set_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_auto_pad_tool","text":"bool get_auto_pad_tool ()","title":"function get_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_auto_pad_tool","text":"void set_auto_pad_tool ( bool value )","title":"function set_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_padding_amount","text":"int get_padding_amount ()","title":"function get_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_padding_amount","text":"void set_padding_amount ( int padding_amount )","title":"function set_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_tool","text":"bool get_antialias_tool ()","title":"function get_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_tool","text":"void set_antialias_tool ( bool value )","title":"function set_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_iterations","text":"int get_antialias_iterations ()","title":"function get_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_iterations","text":"void set_antialias_iterations ( int iterations )","title":"function set_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_tool","text":"bool get_blur_tool ()","title":"function get_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_tool","text":"void set_blur_tool ( bool value )","title":"function set_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_amount","text":"double get_blur_amount ()","title":"function get_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_amount","text":"void set_blur_amount ( double blur_amount )","title":"function set_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fast_marching","text":"bool get_fast_marching ()","title":"function get_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fast_marching","text":"void set_fast_marching ( bool value )","title":"function set_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smooth","text":"bool get_mesh_smooth ()","title":"function get_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smooth","text":"void set_mesh_smooth ( bool value )","title":"function set_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smoothing_method","text":"std :: string get_mesh_smoothing_method ()","title":"function get_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smoothing_method","text":"void set_mesh_smoothing_method ( std :: string method )","title":"function set_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_iterations","text":"int get_mesh_vtk_laplacian_iterations ()","title":"function get_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_iterations","text":"void set_mesh_vtk_laplacian_iterations ( int iterations )","title":"function set_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_relaxation","text":"double get_mesh_vtk_laplacian_relaxation ()","title":"function get_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_relaxation","text":"void set_mesh_vtk_laplacian_relaxation ( double relaxation )","title":"function set_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_iterations","text":"int get_mesh_vtk_windowed_sinc_iterations ()","title":"function get_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_iterations","text":"void set_mesh_vtk_windowed_sinc_iterations ( int iterations )","title":"function set_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_passband","text":"double get_mesh_vtk_windowed_sinc_passband ()","title":"function get_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_passband","text":"void set_mesh_vtk_windowed_sinc_passband ( double passband )","title":"function set_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_icp","text":"bool get_use_icp ()","title":"function get_use_icp"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_center","text":"bool get_use_center ()","title":"function get_use_center"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_crop","text":"bool get_crop ()","title":"function get_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_crop","text":"void set_crop ( bool crop )","title":"function set_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_convert_to_mesh","text":"bool get_convert_to_mesh ()","title":"function get_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_convert_to_mesh","text":"void set_convert_to_mesh ( bool value )","title":"function set_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect","text":"bool get_reflect ()","title":"function get_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect","text":"void set_reflect ( bool reflect )","title":"function set_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_column","text":"std :: string get_reflect_column ()","title":"function get_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_column","text":"void set_reflect_column ( std :: string column )","title":"function set_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_choice","text":"std :: string get_reflect_choice ()","title":"function get_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_choice","text":"void set_reflect_choice ( std :: string choice )","title":"function set_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_axis","text":"std :: string get_reflect_axis ()","title":"function get_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_axis","text":"void set_reflect_axis ( std :: string axies )","title":"function set_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_resample","text":"bool get_resample ()","title":"function get_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_resample","text":"void set_resample ( bool resample )","title":"function set_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isotropic","text":"bool get_isotropic ()","title":"function get_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isotropic","text":"void set_isotropic ( bool isotropic )","title":"function set_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_iso_spacing","text":"double get_iso_spacing ()","title":"function get_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_iso_spacing","text":"void set_iso_spacing ( double spacing )","title":"function set_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_spacing","text":"std :: vector < double > get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_spacing","text":"void set_spacing ( std :: vector < double > spacing )","title":"function set_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh","text":"bool get_remesh ()","title":"function get_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh","text":"void set_remesh ( bool remesh )","title":"function set_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent_mode","text":"bool get_remesh_percent_mode ()","title":"function get_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent_mode","text":"void set_remesh_percent_mode ( bool mode )","title":"function set_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent","text":"double get_remesh_percent ()","title":"function get_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent","text":"void set_remesh_percent ( double percent )","title":"function set_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_num_vertices","text":"int get_remesh_num_vertices ()","title":"function get_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_num_vertices","text":"void set_remesh_num_vertices ( int num_vertices )","title":"function set_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_gradation","text":"double get_remesh_gradation ()","title":"function get_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_gradation","text":"void set_remesh_gradation ( double gradation )","title":"function set_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_skip_grooming","text":"bool get_skip_grooming ()","title":"function get_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_skip_grooming","text":"void set_skip_grooming ( bool skip )","title":"function set_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_laplacian_c","text":"static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ;","title":"variable GROOM_SMOOTH_VTK_LAPLACIAN_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_windowed_sinc_c","text":"static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ;","title":"variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_center_c","text":"static const std :: string GROOM_ALIGNMENT_CENTER_C ;","title":"variable GROOM_ALIGNMENT_CENTER_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_icp_c","text":"static const std :: string GROOM_ALIGNMENT_ICP_C ;","title":"variable GROOM_ALIGNMENT_ICP_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_landmark_c","text":"static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable GROOM_ALIGNMENT_LANDMARK_C"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html","text":"shapeworks::GroomTool Inherits from QWidget Public Slots Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) Public Signals Name void groom_start () void groom_complete () void progress (int ) Public Functions Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_antialias_checkbox_stateChanged void on_antialias_checkbox_stateChanged ( int state ) slot on_blur_checkbox_stateChanged void on_blur_checkbox_stateChanged ( int state ) slot on_autopad_checkbox_stateChanged void on_autopad_checkbox_stateChanged ( int state ) slot skip_grooming_toggled void skip_grooming_toggled () slot on_restore_defaults_clicked void on_restore_defaults_clicked () slot update_ui void update_ui () slot domain_changed void domain_changed () slot alignment_checkbox_changed void alignment_checkbox_changed ( int state ) slot alignment_option_changed void alignment_option_changed ( int index ) slot reflect_checkbox_changed void reflect_checkbox_changed ( int state ) slot reflect_column_changed void reflect_column_changed ( int index ) slot reflect_choice_changed void reflect_choice_changed ( int index ) slot reflect_axis_changed void reflect_axis_changed ( int index ) slot on_run_groom_button_clicked void on_run_groom_button_clicked () Run groom tool. slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) Public Signals Documentation signal groom_start void groom_start () signal groom_complete void groom_complete () signal progress void progress ( int ) Public Functions Documentation function GroomTool GroomTool ( Preferences & prefs , Telemetry & telemetry ) function ~GroomTool ~ GroomTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function disable_actions void disable_actions () Disable action buttons. function enable_actions void enable_actions () Enable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#shapeworksgroomtool","text":"Inherits from QWidget","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots","text":"Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals","text":"Name void groom_start () void groom_complete () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions","text":"Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_antialias_checkbox_statechanged","text":"void on_antialias_checkbox_stateChanged ( int state )","title":"slot on_antialias_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_blur_checkbox_statechanged","text":"void on_blur_checkbox_stateChanged ( int state )","title":"slot on_blur_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_autopad_checkbox_statechanged","text":"void on_autopad_checkbox_stateChanged ( int state )","title":"slot on_autopad_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-skip_grooming_toggled","text":"void skip_grooming_toggled ()","title":"slot skip_grooming_toggled"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_restore_defaults_clicked","text":"void on_restore_defaults_clicked ()","title":"slot on_restore_defaults_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-update_ui","text":"void update_ui ()","title":"slot update_ui"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-domain_changed","text":"void domain_changed ()","title":"slot domain_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_checkbox_changed","text":"void alignment_checkbox_changed ( int state )","title":"slot alignment_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_option_changed","text":"void alignment_option_changed ( int index )","title":"slot alignment_option_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_checkbox_changed","text":"void reflect_checkbox_changed ( int state )","title":"slot reflect_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_column_changed","text":"void reflect_column_changed ( int index )","title":"slot reflect_column_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_choice_changed","text":"void reflect_choice_changed ( int index )","title":"slot reflect_choice_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_axis_changed","text":"void reflect_axis_changed ( int index )","title":"slot reflect_axis_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_run_groom_button_clicked","text":"void on_run_groom_button_clicked () Run groom tool.","title":"slot on_run_groom_button_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_start","text":"void groom_start ()","title":"signal groom_start"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_complete","text":"void groom_complete ()","title":"signal groom_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool","text":"GroomTool ( Preferences & prefs , Telemetry & telemetry )","title":"function GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool_1","text":"~ GroomTool ()","title":"function ~GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html","text":"shapeworks::GroupPvalueJob Inherits from shapeworks::Job , QObject Public Functions Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function GroupPvalueJob GroupPvalueJob ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#shapeworksgrouppvaluejob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions","text":"Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-grouppvaluejob","text":"GroupPvalueJob ( ParticleShapeStatistics stats )","title":"function GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1Image.html","text":"shapeworks::Image Module: Image Classes More... #include Public Types Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType Public Functions Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images. Public Types Documentation enum InterpolationType Enumerator Value Description Linear NearestNeighbor using PixelType using shapeworks :: Image :: PixelType = float ; using ImageType using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; Public Functions Documentation function Image Image ( const Dims dims ) function Image inline Image ( const std :: string & pathname ) function Image inline Image ( ImageType :: Pointer imagePtr ) function Image Image ( const vtkSmartPointer < vtkImageData > vtkImage ) function Image inline Image ( Image && img ) function Image inline Image ( const Image & img ) function operator= Image & operator = ( const Image & img ) function operator= Image & operator = ( Image && img ) lvalue assignment operator function operator ImageType::Pointer inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image function getITKImage inline ImageType :: Pointer getITKImage () const function getVTKImage vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image function operator- Image & operator - () negation operator function operator+ Image operator + ( const Image & other ) const plus operator to add two images function operator+= Image & operator += ( const Image & other ) function operator- Image operator - ( const Image & other ) const minus operator to add two images function operator-= Image & operator -= ( const Image & other ) function operator* Image operator * ( const Image & other ) const multiply operator to multiply two images function operator* Image operator * ( const PixelType x ) const multiply operator to scale contents of an image function operator*= Image & operator *= ( const PixelType x ) function operator/ Image operator / ( const PixelType x ) const divide operator to scale contents of an image function operator/= Image & operator /= ( const PixelType x ) function operator+ Image operator + ( const PixelType x ) const plus operator to shift contents of an image function operator+= Image & operator += ( const PixelType x ) function operator- Image operator - ( const PixelType x ) const minus operator to shift contents of an image function operator-= Image & operator -= ( const PixelType x ) function antialias Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image function recenter Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image function resample Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator function resample Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing function resample Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing function resize Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same) function pad Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value function pad Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value function pad Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value function translate Image & translate ( const Vector3 & v ) helper to simply translate image function scale Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin) function rotate Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function rotate Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function createCenterOfMassTransform TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image function createRigidRegistrationTransform TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations function applyTransform Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter function applyTransform Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values function extractLabel Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image function closeHoles Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume function binarize Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user function computeDT Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue function applyCurvatureFilter Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter function applyGradientFilter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter function applySigmoidFilter Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter function applyTPLevelSetFilter Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter function topologyPreservingSmooth Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] function applyIntensityFilter Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter function gaussianBlur Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma function crop Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added function clip Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane function reflect Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane). function setOrigin Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value function setSpacing Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value function setCoordsys Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space function isolate Image & isolate () isolate the largest object in a binary segmentation function dims inline Dims dims () const logical dimensions of the image function size inline Point3 size () const physical dimensions of the image (dims * spacing) function spacing inline Vector spacing () const physical spacing of the image function origin inline Point3 origin () const physical coordinates of image origin function center inline Point3 center () const physical coordinates of center of this image function coordsys inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space function centerOfMass Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval] function min PixelType min () minimum of image function max PixelType max () maximum of image function mean PixelType mean () mean of image function std PixelType std () standard deviation of image function logicalBoundingBox IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space function physicalBoundingBox PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space function physicalBoundingBox PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space function logicalToPhysical PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates function physicalToLogical IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates function logicalToPhysical Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space function physicalToLogical Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate function isInside bool isInside ( const Point3 & p ) const checks if a given point is inside the image function iterator ImageIterator iterator () creates an image iterator and returns it function compare bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter function operator== inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter function write Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension function toMesh Mesh toMesh ( PixelType isovalue ) const converts image to mesh function evaluate Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#shapeworksimage","text":"Module: Image Classes More... #include ","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types","text":"Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions","text":"Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#detailed-description","text":"class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#enum-interpolationtype","text":"Enumerator Value Description Linear NearestNeighbor","title":"enum InterpolationType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-pixeltype","text":"using shapeworks :: Image :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imagetype","text":"using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-statsptr","text":"using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ;","title":"using StatsPtr"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imageiterator","text":"using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-interpolatortype","text":"using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ;","title":"using InterpolatorType"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image","text":"Image ( const Dims dims )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_1","text":"inline Image ( const std :: string & pathname )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_2","text":"inline Image ( ImageType :: Pointer imagePtr )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_3","text":"Image ( const vtkSmartPointer < vtkImageData > vtkImage )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_4","text":"inline Image ( Image && img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_5","text":"inline Image ( const Image & img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator","text":"Image & operator = ( const Image & img )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_1","text":"Image & operator = ( Image && img ) lvalue assignment operator","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-imagetypepointer","text":"inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image","title":"function operator ImageType::Pointer"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getitkimage","text":"inline ImageType :: Pointer getITKImage () const","title":"function getITKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getvtkimage","text":"vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image","title":"function getVTKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-","text":"Image & operator - () negation operator","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_2","text":"Image operator + ( const Image & other ) const plus operator to add two images","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_3","text":"Image & operator += ( const Image & other )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_1","text":"Image operator - ( const Image & other ) const minus operator to add two images","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_2","text":"Image & operator -= ( const Image & other )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_4","text":"Image operator * ( const Image & other ) const multiply operator to multiply two images","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_5","text":"Image operator * ( const PixelType x ) const multiply operator to scale contents of an image","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_6","text":"Image & operator *= ( const PixelType x )","title":"function operator*="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_7","text":"Image operator / ( const PixelType x ) const divide operator to scale contents of an image","title":"function operator/"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_8","text":"Image & operator /= ( const PixelType x )","title":"function operator/="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_9","text":"Image operator + ( const PixelType x ) const plus operator to shift contents of an image","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_10","text":"Image & operator += ( const PixelType x )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_3","text":"Image operator - ( const PixelType x ) const minus operator to shift contents of an image","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_4","text":"Image & operator -= ( const PixelType x )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-antialias","text":"Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image","title":"function antialias"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-recenter","text":"Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image","title":"function recenter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample","text":"Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_1","text":"Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_2","text":"Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resize","text":"Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same)","title":"function resize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad","text":"Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_1","text":"Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_2","text":"Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-translate","text":"Image & translate ( const Vector3 & v ) helper to simply translate image","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-scale","text":"Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin)","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate","text":"Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate_1","text":"Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createcenterofmasstransform","text":"TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image","title":"function createCenterOfMassTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createrigidregistrationtransform","text":"TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"function createRigidRegistrationTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform","text":"Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform_1","text":"Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-extractlabel","text":"Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image","title":"function extractLabel"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-closeholes","text":"Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume","title":"function closeHoles"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-binarize","text":"Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user","title":"function binarize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-computedt","text":"Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue","title":"function computeDT"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applycurvaturefilter","text":"Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter","title":"function applyCurvatureFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applygradientfilter","text":"Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter","title":"function applyGradientFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applysigmoidfilter","text":"Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter","title":"function applySigmoidFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytplevelsetfilter","text":"Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter","title":"function applyTPLevelSetFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-topologypreservingsmooth","text":"Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"function topologyPreservingSmooth"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applyintensityfilter","text":"Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter","title":"function applyIntensityFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-gaussianblur","text":"Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma","title":"function gaussianBlur"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-crop","text":"Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added","title":"function crop"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-clip","text":"Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-reflect","text":"Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane).","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setorigin","text":"Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value","title":"function setOrigin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setspacing","text":"Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value","title":"function setSpacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setcoordsys","text":"Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space","title":"function setCoordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isolate","text":"Image & isolate () isolate the largest object in a binary segmentation","title":"function isolate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-dims","text":"inline Dims dims () const logical dimensions of the image","title":"function dims"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-size","text":"inline Point3 size () const physical dimensions of the image (dims * spacing)","title":"function size"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-spacing","text":"inline Vector spacing () const physical spacing of the image","title":"function spacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-origin","text":"inline Point3 origin () const physical coordinates of image origin","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-center","text":"inline Point3 center () const physical coordinates of center of this image","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-coordsys","text":"inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space","title":"function coordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-centerofmass","text":"Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval]","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-min","text":"PixelType min () minimum of image","title":"function min"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-max","text":"PixelType max () maximum of image","title":"function max"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-mean","text":"PixelType mean () mean of image","title":"function mean"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-std","text":"PixelType std () standard deviation of image","title":"function std"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicalboundingbox","text":"IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space","title":"function logicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox","text":"PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox_1","text":"PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical","text":"PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological","text":"IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical_1","text":"Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological_1","text":"Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isinside","text":"bool isInside ( const Point3 & p ) const checks if a given point is inside the image","title":"function isInside"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-iterator","text":"ImageIterator iterator () creates an image iterator and returns it","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-compare","text":"bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_11","text":"inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-write","text":"Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-tomesh","text":"Mesh toMesh ( PixelType isovalue ) const converts image to mesh","title":"function toMesh"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-evaluate","text":"Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position.","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html","text":"shapeworks::ImageCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#shapeworksimagecommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html","text":"shapeworks::ImageDomain More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T > Public Types Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Additional inherited members Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomain ; Public Types Documentation using Pointer using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs using ImageType using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class. using PointType using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image). Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetOrigin inline PointType GetOrigin () const function GetSize inline ImageType :: SizeType GetSize () const function GetSpacing inline ImageType :: SpacingType GetSpacing () const function GetIndex inline ImageType :: RegionType :: IndexType GetIndex () const function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function Sample inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Protected Functions Documentation function GetVDBImage inline openvdb :: FloatGrid :: Ptr GetVDBImage () const function ImageDomain inline ImageDomain () function ~ImageDomain inline virtual ~ ImageDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function transform inline openvdb :: math :: Transform :: Ptr transform () const function ToVDBCoord inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#shapeworksimagedomain","text":"More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T >","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types","text":"Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions","text":"Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointer","text":"using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-imagetype","text":"using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class.","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointtype","text":"using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image).","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getorigin","text":"inline PointType GetOrigin () const","title":"function GetOrigin"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsize","text":"inline ImageType :: SizeType GetSize () const","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getspacing","text":"inline ImageType :: SpacingType GetSpacing () const","title":"function GetSpacing"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getindex","text":"inline ImageType :: RegionType :: IndexType GetIndex () const","title":"function GetIndex"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-sample","text":"inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking.","title":"function Sample"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvdbimage","text":"inline openvdb :: FloatGrid :: Ptr GetVDBImage () const","title":"function GetVDBImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain","text":"inline ImageDomain ()","title":"function ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain_1","text":"inline virtual ~ ImageDomain ()","title":"function ~ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-transform","text":"inline openvdb :: math :: Transform :: Ptr transform () const","title":"function transform"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-tovdbcoord","text":"inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function ToVDBCoord"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html","text":"shapeworks::ImageDomainWithCurvature More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T > Public Types Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithCurvature ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ; typedef VnlMatrixType typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute Protected Functions Documentation function ImageDomainWithCurvature inline ImageDomainWithCurvature () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImageDomainWithCurvature inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#shapeworksimagedomainwithcurvature","text":"More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T >","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types","text":"Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions","text":"Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithCurvature ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-superclass","text":"typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-vnlmatrixtype","text":"typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature","text":"inline ImageDomainWithCurvature ()","title":"function ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature_1","text":"inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html","text":"shapeworks::ImageDomainWithGradN More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T > Public Types Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradN ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs using Pointer using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ; typedef GradNType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ; typedef VnlMatrixType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension. function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradN inline ImageDomainWithGradN () function ~ImageDomainWithGradN inline virtual ~ ImageDomainWithGradN () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#shapeworksimagedomainwithgradn","text":"More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T >","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types","text":"Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions","text":"Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradN ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-superclass","text":"typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-gradntype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-vnlmatrixtype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension.","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn","text":"inline ImageDomainWithGradN ()","title":"function ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn_1","text":"inline virtual ~ ImageDomainWithGradN ()","title":"function ~ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html","text":"shapeworks::ImageDomainWithGradients More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T > Public Types Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient () Additional inherited members Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradients ; Public Types Documentation using Pointer using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ; typedef PointType typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ; typedef VectorType typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ; typedef VnlVectorType typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function ProjectVectorToSurfaceTangent inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradients inline ImageDomainWithGradients () function ~ImageDomainWithGradients inline virtual ~ ImageDomainWithGradients () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function GetVDBGradient inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#shapeworksimagedomainwithgradients","text":"More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T >","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types","text":"Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions","text":"Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradients ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-pointtype","text":"typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-imagetype","text":"typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vectortype","text":"typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-projectvectortosurfacetangent","text":"inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients","text":"inline ImageDomainWithGradients ()","title":"function ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients_1","text":"inline virtual ~ ImageDomainWithGradients ()","title":"function ~ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-getvdbgradient","text":"inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetVDBGradient"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html","text":"shapeworks::ImageLabel An extention of QLabel especially for scaled images. #include Inherits from QLabel Public Functions Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap) Protected Functions Name void resizeEvent (QResizeEvent * reisze_event) override Public Functions Documentation function ImageLabel inline ImageLabel ( QWidget * parent ) function setPixmap inline void setPixmap ( const QPixmap & pixmap ) Protected Functions Documentation function resizeEvent void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#shapeworksimagelabel","text":"An extention of QLabel especially for scaled images. #include Inherits from QLabel","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions","text":"Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions","text":"Name void resizeEvent (QResizeEvent * reisze_event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-imagelabel","text":"inline ImageLabel ( QWidget * parent )","title":"function ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-setpixmap","text":"inline void setPixmap ( const QPixmap & pixmap )","title":"function setPixmap"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html","text":"shapeworks::ImageUtils Helper functions for image. #include Public Types Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1) Public Types Documentation using TPSTransform using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Documentation function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue function createWarpTransform static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#shapeworksimageutils","text":"Helper functions for image. #include ","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types","text":"Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions","text":"Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#using-tpstransform","text":"using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"using TPSTransform"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-createwarptransform","text":"static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function createWarpTransform"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html","text":"shapeworks::ImplicitSurfaceDomain More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Public Types Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType Public Functions Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImplicitSurfaceDomain ; Public Types Documentation typedef Superclass typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs typedef Pointer typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ; typedef PointType typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ; Public Functions Documentation function SetTolerance inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance. function GetTolerance inline virtual T GetTolerance () function GetDomainType inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points. function UpdateParticlePosition inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function ImplicitSurfaceDomain inline ImplicitSurfaceDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImplicitSurfaceDomain inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#shapeworksimplicitsurfacedomain","text":"More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types","text":"Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions","text":"Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImplicitSurfaceDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-superclass","text":"typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-settolerance","text":"inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance.","title":"function SetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-gettolerance","text":"inline virtual T GetTolerance ()","title":"function GetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getdomaintype","text":"inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-updateparticleposition","text":"inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain","text":"inline ImplicitSurfaceDomain ()","title":"function ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain_1","text":"inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html","text":"shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include Public Functions Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Coord min Coord max Public Functions Documentation function IndexRegion IndexRegion () = default function IndexRegion IndexRegion ( const IndexRegion & ) = default function IndexRegion inline IndexRegion ( const Dims & dims ) function IndexRegion inline IndexRegion ( const Coord & _min , const Coord & _max ) function operator== inline bool operator == ( const IndexRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Coord origin () const function size inline Dims size () const function pad IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Coord min { 1000000000 , 1000000000 , 1000000000 }; variable max Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#shapeworksindexregion","text":"Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include ","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions","text":"Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes","text":"Name Coord min Coord max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion","text":"IndexRegion () = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_1","text":"IndexRegion ( const IndexRegion & ) = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_2","text":"inline IndexRegion ( const Dims & dims )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_3","text":"inline IndexRegion ( const Coord & _min , const Coord & _max )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-operator","text":"inline bool operator == ( const IndexRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-origin","text":"inline Coord origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-size","text":"inline Dims size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-pad","text":"IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-min","text":"Coord min { 1000000000 , 1000000000 , 1000000000 };","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-max","text":"Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1Job.html","text":"shapeworks::Job Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob Public Signals Name void progress (double ) void finished () Public Functions Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal progress void progress ( double ) signal finished void finished () Public Functions Documentation function Job Job () function ~Job virtual ~ Job () function run virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run function name virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name function get_completion_message virtual QString get_completion_message () get a message to display when the job is complete function get_abort_message virtual QString get_abort_message () get a message to display when the job is aborted function start_timer void start_timer () start the timer function timer_elapsed qint64 timer_elapsed () how much time has elapsed since the timer was started function set_complete inline void set_complete ( bool complete ) set the job as complete function is_complete inline bool is_complete () const is the job complete? function abort inline void abort () abort the job function is_aborted inline bool is_aborted () const was the job aborted? Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#shapeworksjob","text":"Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals","text":"Name void progress (double ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions","text":"Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-progress","text":"void progress ( double )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job","text":"Job ()","title":"function Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job_1","text":"virtual ~ Job ()","title":"function ~Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-run","text":"virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-name","text":"virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_completion_message","text":"virtual QString get_completion_message () get a message to display when the job is complete","title":"function get_completion_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_abort_message","text":"virtual QString get_abort_message () get a message to display when the job is aborted","title":"function get_abort_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-start_timer","text":"void start_timer () start the timer","title":"function start_timer"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-timer_elapsed","text":"qint64 timer_elapsed () how much time has elapsed since the timer was started","title":"function timer_elapsed"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-set_complete","text":"inline void set_complete ( bool complete ) set the job as complete","title":"function set_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_complete","text":"inline bool is_complete () const is the job complete?","title":"function is_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-abort","text":"inline void abort () abort the job","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_aborted","text":"inline bool is_aborted () const was the job aborted? Updated on 2023-10-24 at 22:16:01 +0000","title":"function is_aborted"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html","text":"shapeworks::JsonProjectReader JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format Public Functions Documentation function JsonProjectReader JsonProjectReader ( Project & project ) function ~JsonProjectReader ~ JsonProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#shapeworksjsonprojectreader","text":"JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions","text":"Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#detailed-description","text":"class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader","text":"JsonProjectReader ( Project & project )","title":"function JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader_1","text":"~ JsonProjectReader ()","title":"function ~JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html","text":"shapeworks::JsonProjectWriter JSON file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, std::string filename) Detailed Description class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format Public Functions Documentation function write_project static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#shapeworksjsonprojectwriter","text":"JSON file format writer for Project . More... #include ","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, std::string filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#detailed-description","text":"class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html","text":"shapeworks::KeyboardShortcuts More... #include Inherits from QDialog Public Functions Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor Detailed Description class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts Public Functions Documentation function KeyboardShortcuts KeyboardShortcuts ( QWidget * parent ) constructor function ~KeyboardShortcuts virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#shapeworkskeyboardshortcuts","text":"More... #include Inherits from QDialog","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions","text":"Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#detailed-description","text":"class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts","text":"KeyboardShortcuts ( QWidget * parent ) constructor","title":"function KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts_1","text":"virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html","text":"shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. #include Public Attributes Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_ Public Attributes Documentation variable domain_ std :: string domain_ ; variable domain_id_ int domain_id_ = -1 ; variable landmark_id int landmark_id = -1 ; variable name_ std :: string name_ ; variable visible_ bool visible_ = true ; variable color_ std :: string color_ ; variable comment_ std :: string comment_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#shapeworkslandmarkdefinition","text":"Landmark class containing properties of each landmark. #include ","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes","text":"Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_","text":"std :: string domain_ ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_id_","text":"int domain_id_ = -1 ;","title":"variable domain_id_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-landmark_id","text":"int landmark_id = -1 ;","title":"variable landmark_id"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-name_","text":"std :: string name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-visible_","text":"bool visible_ = true ;","title":"variable visible_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-color_","text":"std :: string color_ ;","title":"variable color_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-comment_","text":"std :: string comment_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable comment_"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html","text":"shapeworks::LandmarkItemDelegate Inherits from QStyledItemDelegate Public Signals Name void button_clicked (int row) Public Functions Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model) Public Signals Documentation signal button_clicked void button_clicked ( int row ) Public Functions Documentation function LandmarkItemDelegate LandmarkItemDelegate ( QObject * parent = 0 ) function paint void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function createEditor QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function setEditorData void setEditorData ( QWidget * editor , const QModelIndex & index ) const override function setModelData void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override function sizeHint QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override function updateEditorGeometry void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function set_button_text void set_button_text ( std :: string button_text ) function set_model void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#shapeworkslandmarkitemdelegate","text":"Inherits from QStyledItemDelegate","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals","text":"Name void button_clicked (int row)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions","text":"Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#signal-button_clicked","text":"void button_clicked ( int row )","title":"signal button_clicked"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-landmarkitemdelegate","text":"LandmarkItemDelegate ( QObject * parent = 0 )","title":"function LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-paint","text":"void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function paint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-createeditor","text":"QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function createEditor"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-seteditordata","text":"void setEditorData ( QWidget * editor , const QModelIndex & index ) const override","title":"function setEditorData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-setmodeldata","text":"void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override","title":"function setModelData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-sizehint","text":"QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function sizeHint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-updateeditorgeometry","text":"void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function updateEditorGeometry"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_button_text","text":"void set_button_text ( std :: string button_text )","title":"function set_button_text"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_model","text":"void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function set_model"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html","text":"shapeworks::LandmarkTableModel Inherits from QAbstractTableModel Public Slots Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click. Public Functions Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation. Public Slots Documentation slot new_landmark void new_landmark () create a new landmark slot handle_click void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked. slot handle_double_click void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked. slot handle_header_click void handle_header_click ( int index ) Handle header click. Public Functions Documentation function LandmarkTableModel LandmarkTableModel ( QObject * parent = 0 ) Constructor. function ~LandmarkTableModel virtual ~ LandmarkTableModel () Destructor. function set_session void set_session ( QSharedPointer < Session > session ) Attach to a session. function store_landmarks void store_landmarks () Store landmarks back to project. function set_active_domain void set_active_domain ( int domain ) Set the currently active domain. function update_table void update_table () Update the table of landmarks from the project. function update_cells void update_cells () Update table cells. function remove_rows void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices. function toggle_visible void toggle_visible () Toggle tri-state button for visibility in horizontal header. function set_placing_landmark void set_placing_landmark ( int row ) Set the currently placing landmark. function delete_landmarks void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks function rowCount int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation. function columnCount int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation. function data QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation. function setData bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation. function headerData QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation. function flags Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#shapeworkslandmarktablemodel","text":"Inherits from QAbstractTableModel","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots","text":"Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click.","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions","text":"Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-new_landmark","text":"void new_landmark () create a new landmark","title":"slot new_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_click","text":"void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked.","title":"slot handle_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_double_click","text":"void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked.","title":"slot handle_double_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_header_click","text":"void handle_header_click ( int index ) Handle header click.","title":"slot handle_header_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel","text":"LandmarkTableModel ( QObject * parent = 0 ) Constructor.","title":"function LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel_1","text":"virtual ~ LandmarkTableModel () Destructor.","title":"function ~LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Attach to a session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-store_landmarks","text":"void store_landmarks () Store landmarks back to project.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_active_domain","text":"void set_active_domain ( int domain ) Set the currently active domain.","title":"function set_active_domain"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_table","text":"void update_table () Update the table of landmarks from the project.","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_cells","text":"void update_cells () Update table cells.","title":"function update_cells"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-remove_rows","text":"void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices.","title":"function remove_rows"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-toggle_visible","text":"void toggle_visible () Toggle tri-state button for visibility in horizontal header.","title":"function toggle_visible"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_placing_landmark","text":"void set_placing_landmark ( int row ) Set the currently placing landmark.","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-delete_landmarks","text":"void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks","title":"function delete_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-rowcount","text":"int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation.","title":"function rowCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-columncount","text":"int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation.","title":"function columnCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-data","text":"QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation.","title":"function data"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-setdata","text":"bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation.","title":"function setData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-headerdata","text":"QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation.","title":"function headerData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-flags","text":"Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-24 at 22:16:01 +0000","title":"function flags"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html","text":"shapeworks::LandmarkWidget LandmarkWidget . More... #include Public Functions Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles () Detailed Description class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks Public Functions Documentation function LandmarkWidget LandmarkWidget ( Viewer * viewer ) function ~LandmarkWidget ~ LandmarkWidget () function update_landmarks void update_landmarks () function store_positions void store_positions () function update_glyph_properties void update_glyph_properties () function clear_landmark_handles void clear_landmark_handles () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#shapeworkslandmarkwidget","text":"LandmarkWidget . More... #include ","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions","text":"Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#detailed-description","text":"class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget","text":"LandmarkWidget ( Viewer * viewer )","title":"function LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget_1","text":"~ LandmarkWidget ()","title":"function ~LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-store_positions","text":"void store_positions ()","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-clear_landmark_handles","text":"void clear_landmark_handles () Updated on 2023-10-24 at 22:16:01 +0000","title":"function clear_landmark_handles"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html","text":"shapeworks::LegacyCorrespondenceFunction Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function LegacyCorrespondenceFunction inline LegacyCorrespondenceFunction () function ~LegacyCorrespondenceFunction inline virtual ~ LegacyCorrespondenceFunction () function operator= void operator = ( const LegacyCorrespondenceFunction & ) function LegacyCorrespondenceFunction LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ) function ComputeCovarianceMatrix virtual void ComputeCovarianceMatrix () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#shapeworkslegacycorrespondencefunction","text":"Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types","text":"Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions","text":"Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-self","text":"typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction","text":"inline LegacyCorrespondenceFunction ()","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_1","text":"inline virtual ~ LegacyCorrespondenceFunction ()","title":"function ~LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-operator","text":"void operator = ( const LegacyCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_2","text":"LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & )","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-computecovariancematrix","text":"virtual void ComputeCovarianceMatrix ()","title":"function ComputeCovarianceMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html","text":"shapeworks::LegacyShapeMatrix Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix Public Types Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods). function DomainAddEventCallback inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration function AfterIteration inline virtual void AfterIteration () function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) Protected Functions Documentation function LegacyShapeMatrix inline LegacyShapeMatrix () function ~LegacyShapeMatrix inline virtual ~ LegacyShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#shapeworkslegacyshapematrix","text":"Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions","text":"Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-self","text":"typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods).","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix","text":"inline LegacyShapeMatrix ()","title":"function LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix_1","text":"inline virtual ~ LegacyShapeMatrix ()","title":"function ~LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html","text":"shapeworks::Lightbox Display multiple Viewers in a tiled display. More... #include Inherits from QObject Public Slots Name void handle_timer_callback () Public Signals Name void right_click (int index) Public Functions Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window () Detailed Description class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display Public Slots Documentation slot handle_timer_callback void handle_timer_callback () Public Signals Documentation signal right_click void right_click ( int index ) Public Functions Documentation function Lightbox Lightbox () function ~Lightbox ~ Lightbox () function set_shapes void set_shapes ( ShapeList shapes ) function get_shapes ShapeList get_shapes () function set_interactor void set_interactor ( vtkRenderWindowInteractor * interactor ) function set_render_window void set_render_window ( vtkRenderWindow * render_window ) function set_tile_layout void set_tile_layout ( int width , int height ) function setup_renderers void setup_renderers () function get_num_rows int get_num_rows () function get_num_rows_visible int get_num_rows_visible () function set_start_row void set_start_row ( int row ) function get_viewers ViewerList get_viewers () function redraw void redraw () function handle_pick void handle_pick ( int * click_pos , bool one , bool ctrl ) function handle_hover void handle_hover ( int * click_pos ) function handle_key void handle_key ( int * click_pos , std :: string key ) function handle_right_click void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement. function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_session void set_session ( QSharedPointer < Session > session ) function set_visualizer void set_visualizer ( Visualizer * visualizer ) function render_window_ready inline bool render_window_ready () function clear_renderers void clear_renderers () function initPos std :: array < double , 3 > initPos () function handle_new_mesh void handle_new_mesh () function reset_camera void reset_camera () function reset_camera_clipping_range void reset_camera_clipping_range () function set_orientation_marker void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ) function set_orientation_marker_viewport void set_orientation_marker_viewport () function update_feature_range void update_feature_range () function update_interactor_style void update_interactor_style () function set_shared_window_and_level void set_shared_window_and_level ( double window , double level ) function get_render_window vtkRenderWindow * get_render_window () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#shapeworkslightbox","text":"Display multiple Viewers in a tiled display. More... #include Inherits from QObject","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots","text":"Name void handle_timer_callback ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals","text":"Name void right_click (int index)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions","text":"Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#detailed-description","text":"class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#slot-handle_timer_callback","text":"void handle_timer_callback ()","title":"slot handle_timer_callback"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#signal-right_click","text":"void right_click ( int index )","title":"signal right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox","text":"Lightbox ()","title":"function Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox_1","text":"~ Lightbox ()","title":"function ~Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shapes","text":"void set_shapes ( ShapeList shapes )","title":"function set_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_interactor","text":"void set_interactor ( vtkRenderWindowInteractor * interactor )","title":"function set_interactor"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_render_window","text":"void set_render_window ( vtkRenderWindow * render_window )","title":"function set_render_window"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_tile_layout","text":"void set_tile_layout ( int width , int height )","title":"function set_tile_layout"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-setup_renderers","text":"void setup_renderers ()","title":"function setup_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows","text":"int get_num_rows ()","title":"function get_num_rows"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows_visible","text":"int get_num_rows_visible ()","title":"function get_num_rows_visible"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_start_row","text":"void set_start_row ( int row )","title":"function set_start_row"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_viewers","text":"ViewerList get_viewers ()","title":"function get_viewers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-redraw","text":"void redraw ()","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_pick","text":"void handle_pick ( int * click_pos , bool one , bool ctrl )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_hover","text":"void handle_hover ( int * click_pos )","title":"function handle_hover"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_key","text":"void handle_key ( int * click_pos , std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_right_click","text":"void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-render_window_ready","text":"inline bool render_window_ready ()","title":"function render_window_ready"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-clear_renderers","text":"void clear_renderers ()","title":"function clear_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-initpos","text":"std :: array < double , 3 > initPos ()","title":"function initPos"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera_clipping_range","text":"void reset_camera_clipping_range ()","title":"function reset_camera_clipping_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker","text":"void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner )","title":"function set_orientation_marker"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker_viewport","text":"void set_orientation_marker_viewport ()","title":"function set_orientation_marker_viewport"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_feature_range","text":"void update_feature_range ()","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_interactor_style","text":"void update_interactor_style ()","title":"function update_interactor_style"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shared_window_and_level","text":"void set_shared_window_and_level ( double window , double level )","title":"function set_shared_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_render_window","text":"vtkRenderWindow * get_render_window () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_render_window"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html","text":"shapeworks::LinearRegressionShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function LinearRegressionShapeMatrix inline LinearRegressionShapeMatrix () function ~LinearRegressionShapeMatrix inline virtual ~ LinearRegressionShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#shapeworkslinearregressionshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions","text":"Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-self","text":"typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix","text":"inline LinearRegressionShapeMatrix ()","title":"function LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix_1","text":"inline virtual ~ LinearRegressionShapeMatrix ()","title":"function ~LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html","text":"shapeworks::LogWindow Log Window. More... #include Inherits from QDialog Public Functions Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history Detailed Description class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages) Public Functions Documentation function LogWindow LogWindow ( QWidget * parent = 0 ) function add_message void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#shapeworkslogwindow","text":"Log Window. More... #include Inherits from QDialog","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions","text":"Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#detailed-description","text":"class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages)","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-logwindow","text":"LogWindow ( QWidget * parent = 0 )","title":"function LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-add_message","text":"void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-24 at 22:16:01 +0000","title":"function add_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html","text":"shapeworks::Logging Module: Common Classes ShapeWorks Logging Library. More... #include Public Functions Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted. Detailed Description class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32 Public Functions Documentation function Instance static Logging & Instance () Return the singleton instance. function open_file_log void open_file_log ( const std :: string & filename ) Create a file log. function check_log_open bool check_log_open () const Return if the log is open. function get_log_filename std :: string get_log_filename () const Return the log filename. function log_message void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro. function log_stack void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro. function log_error void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro. function show_message void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro. function show_status void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro. function show_progress void show_progress ( double value , const std :: string & message ) Display progress (0-100) function log_debug void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro. function log_warning void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro. function close_log void close_log () Close the log, use SW_CLOSE_LOG macro. function set_error_callback void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised. function set_message_callback void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted. function set_warning_callback void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted. function set_debug_callback void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted. function set_status_callback void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted. function set_progress_callback void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#shapeworkslogging","text":"Module: Common Classes ShapeWorks Logging Library. More... #include ","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions","text":"Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Logging.html#detailed-description","text":"class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-instance","text":"static Logging & Instance () Return the singleton instance.","title":"function Instance"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-open_file_log","text":"void open_file_log ( const std :: string & filename ) Create a file log.","title":"function open_file_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-check_log_open","text":"bool check_log_open () const Return if the log is open.","title":"function check_log_open"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-get_log_filename","text":"std :: string get_log_filename () const Return the log filename.","title":"function get_log_filename"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_message","text":"void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro.","title":"function log_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_stack","text":"void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro.","title":"function log_stack"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_error","text":"void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro.","title":"function log_error"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_message","text":"void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro.","title":"function show_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_status","text":"void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro.","title":"function show_status"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_progress","text":"void show_progress ( double value , const std :: string & message ) Display progress (0-100)","title":"function show_progress"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_debug","text":"void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro.","title":"function log_debug"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_warning","text":"void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro.","title":"function log_warning"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-close_log","text":"void close_log () Close the log, use SW_CLOSE_LOG macro.","title":"function close_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_error_callback","text":"void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised.","title":"function set_error_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_message_callback","text":"void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted.","title":"function set_message_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_warning_callback","text":"void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted.","title":"function set_warning_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_debug_callback","text":"void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted.","title":"function set_debug_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_status_callback","text":"void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted.","title":"function set_status_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_progress_callback","text":"void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_progress_callback"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html","text":"shapeworks::MatrixContainer Public Attributes Name Eigen::MatrixXd matrix_ Public Attributes Documentation variable matrix_ Eigen :: MatrixXd matrix_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#shapeworksmatrixcontainer","text":"","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes","text":"Name Eigen::MatrixXd matrix_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#variable-matrix_","text":"Eigen :: MatrixXd matrix_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable matrix_"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html","text":"shapeworks::MeanCurvatureContainer More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d) Protected Functions Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ; Public Types Documentation typedef NumericType typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs typedef Self typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ; typedef Superclass typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ; typedef VnlVectorType typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods). function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function PositionAddEventCallback inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function ComputeMeanCurvature inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) function ComputeCurvatureStatistics virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface. function GetMeanCurvature inline double GetMeanCurvature ( int d ) function GetCurvatureStandardDeviation inline double GetCurvatureStandardDeviation ( int d ) Protected Functions Documentation function MeanCurvatureContainer inline MeanCurvatureContainer () function ~MeanCurvatureContainer inline virtual ~ MeanCurvatureContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#shapeworksmeancurvaturecontainer","text":"More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types","text":"Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions","text":"Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#additional-inherited-members","text":"Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#detailed-description","text":"template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-numerictype","text":"typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-self","text":"typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-superclass","text":"typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computemeancurvature","text":"inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom )","title":"function ComputeMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computecurvaturestatistics","text":"virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface.","title":"function ComputeCurvatureStatistics"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getmeancurvature","text":"inline double GetMeanCurvature ( int d )","title":"function GetMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getcurvaturestandarddeviation","text":"inline double GetCurvatureStandardDeviation ( int d )","title":"function GetCurvatureStandardDeviation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer","text":"inline MeanCurvatureContainer ()","title":"function MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer_1","text":"inline virtual ~ MeanCurvatureContainer ()","title":"function ~MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Mesh.html","text":"shapeworks::Mesh Module: Mesh Classes More... #include Public Types Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints Public Functions Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes Public Types Documentation enum FieldType Enumerator Value Description Point Face enum AlignmentType Enumerator Value Description Rigid Similarity Affine enum DistanceMethod Enumerator Value Description PointToPoint PointToCell enum CurvatureType Enumerator Value Description Principal Gaussian Mean enum SubdivisionType Enumerator Value Description Butterfly Loop using MeshType using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ; Public Functions Documentation function Mesh Mesh ( const std :: string & pathname ) function Mesh inline Mesh ( MeshType meshPtr ) function Mesh inline Mesh ( const Mesh & orig ) function Mesh inline Mesh ( Mesh && orig ) function operator= inline Mesh & operator = ( const Mesh & orig ) function Mesh Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ) function operator= inline Mesh & operator = ( Mesh && orig ) function operator+= Mesh & operator += ( const Mesh & otherMesh ) append two meshes function getVTKMesh inline MeshType getVTKMesh () const return the current mesh function write Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension function coverage Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) function smooth Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing function smoothSinc Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing function remesh Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity function remeshPercent Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity function invertNormals Mesh & invertNormals () handle flipping normals function reflect Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis function createTransform MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations function applyTransform Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh function rotate Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis function fillHoles Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them function clean Mesh & clean () clean mesh function probeVolume Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image function clip Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane function translate Mesh & translate ( const Vector3 & v ) helper to translate mesh function scale Mesh & scale ( const Vector3 & v ) helper to scale mesh function boundingBox PhysicalRegion boundingBox () const computes bounding box of current mesh function fixElement Mesh & fixElement () fix element winding of mesh function fixNonManifold Mesh & fixNonManifold () Attempt to fix non-manifold edges. function detectNonManifold bool detectNonManifold () Detect if mesh contain non-manifold edges. function detectTriangular bool detectTriangular () Detect if mesh is triangular;. function distance std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points. function clipClosedSurface Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface function computeNormals Mesh & computeNormals () computes and adds oriented point and cell normals function closestPoint Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point function closestPointId int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space function geodesicDistance double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh function geodesicDistance Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh function geodesicDistance Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh function curvature Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms function computeFieldGradient void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices function computeFieldGradientAtPoint Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point function interpolateFieldAtPoint double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point function applySubdivisionFilter Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop) function toImage Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing) function toDistanceTransform Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding function computeThickness Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points function computeLandmarkGeodesics Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields function center Point3 center () const center of mesh function centerOfMass Point3 centerOfMass () const center of mass of mesh function numPoints inline int numPoints () const number of points function numFaces inline int numFaces () const number of faces function points Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point function faces Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed function getPoint Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index function getFace IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed function getFieldNames std :: vector < std :: string > getFieldNames () const print all field names in mesh function setField Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values) function getField Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist function setFieldValue void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value function getFieldValue double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields) function getMultiFieldValue Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field function compareAllPoints bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal function compareAllFaces bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal function compareAllFields bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal function compareField bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified) function compare bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes function operator== inline bool operator == ( const Mesh & other ) const compare meshes function getFFCValue double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs. function getFFCGradient Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs. function getIGLMesh MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format. function clipByField vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value. function getCellLocator inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator. function getClosestFace int getClosestFace ( const Point3 & point ) const function computeBarycentricCoordinates Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#shapeworksmesh","text":"Module: Mesh Classes More... #include ","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types","text":"Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions","text":"Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#detailed-description","text":"class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-fieldtype","text":"Enumerator Value Description Point Face","title":"enum FieldType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-alignmenttype","text":"Enumerator Value Description Rigid Similarity Affine","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-distancemethod","text":"Enumerator Value Description PointToPoint PointToCell","title":"enum DistanceMethod"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-curvaturetype","text":"Enumerator Value Description Principal Gaussian Mean","title":"enum CurvatureType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-subdivisiontype","text":"Enumerator Value Description Butterfly Loop","title":"enum SubdivisionType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshtype","text":"using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ;","title":"using MeshType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshpoints","text":"using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ;","title":"using MeshPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh","text":"Mesh ( const std :: string & pathname )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_1","text":"inline Mesh ( MeshType meshPtr )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_2","text":"inline Mesh ( const Mesh & orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_3","text":"inline Mesh ( Mesh && orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator","text":"inline Mesh & operator = ( const Mesh & orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_4","text":"Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_1","text":"inline Mesh & operator = ( Mesh && orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_2","text":"Mesh & operator += ( const Mesh & otherMesh ) append two meshes","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getvtkmesh","text":"inline MeshType getVTKMesh () const return the current mesh","title":"function getVTKMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-write","text":"Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-coverage","text":"Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"function coverage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smooth","text":"Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing","title":"function smooth"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smoothsinc","text":"Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing","title":"function smoothSinc"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remesh","text":"Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"function remesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remeshpercent","text":"Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"function remeshPercent"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-invertnormals","text":"Mesh & invertNormals () handle flipping normals","title":"function invertNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-reflect","text":"Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-createtransform","text":"MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations","title":"function createTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applytransform","text":"Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-rotate","text":"Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fillholes","text":"Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them","title":"function fillHoles"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clean","text":"Mesh & clean () clean mesh","title":"function clean"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-probevolume","text":"Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image","title":"function probeVolume"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clip","text":"Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-translate","text":"Mesh & translate ( const Vector3 & v ) helper to translate mesh","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-scale","text":"Mesh & scale ( const Vector3 & v ) helper to scale mesh","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-boundingbox","text":"PhysicalRegion boundingBox () const computes bounding box of current mesh","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixelement","text":"Mesh & fixElement () fix element winding of mesh","title":"function fixElement"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixnonmanifold","text":"Mesh & fixNonManifold () Attempt to fix non-manifold edges.","title":"function fixNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detectnonmanifold","text":"bool detectNonManifold () Detect if mesh contain non-manifold edges.","title":"function detectNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detecttriangular","text":"bool detectTriangular () Detect if mesh is triangular;.","title":"function detectTriangular"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-distance","text":"std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points.","title":"function distance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipclosedsurface","text":"Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface","title":"function clipClosedSurface"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computenormals","text":"Mesh & computeNormals () computes and adds oriented point and cell normals","title":"function computeNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpoint","text":"Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point","title":"function closestPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpointid","text":"int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space","title":"function closestPointId"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance","text":"double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_1","text":"Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_2","text":"Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-curvature","text":"Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms","title":"function curvature"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradient","text":"void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices","title":"function computeFieldGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradientatpoint","text":"Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point","title":"function computeFieldGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-interpolatefieldatpoint","text":"double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point","title":"function interpolateFieldAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applysubdivisionfilter","text":"Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop)","title":"function applySubdivisionFilter"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-toimage","text":"Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"function toImage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-todistancetransform","text":"Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding","title":"function toDistanceTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computethickness","text":"Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points","title":"function computeThickness"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computelandmarkgeodesics","text":"Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields","title":"function computeLandmarkGeodesics"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-center","text":"Point3 center () const center of mesh","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-centerofmass","text":"Point3 centerOfMass () const center of mass of mesh","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numpoints","text":"inline int numPoints () const number of points","title":"function numPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numfaces","text":"inline int numFaces () const number of faces","title":"function numFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-points","text":"Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point","title":"function points"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-faces","text":"Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed","title":"function faces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getpoint","text":"Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index","title":"function getPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getface","text":"IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed","title":"function getFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldnames","text":"std :: vector < std :: string > getFieldNames () const print all field names in mesh","title":"function getFieldNames"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfield","text":"Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values)","title":"function setField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfield","text":"Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist","title":"function getField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfieldvalue","text":"void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value","title":"function setFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldvalue","text":"double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields)","title":"function getFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getmultifieldvalue","text":"Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field","title":"function getMultiFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallpoints","text":"bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal","title":"function compareAllPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfaces","text":"bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal","title":"function compareAllFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfields","text":"bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal","title":"function compareAllFields"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-comparefield","text":"bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified)","title":"function compareField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compare","text":"bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_3","text":"inline bool operator == ( const Mesh & other ) const compare meshes","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcvalue","text":"double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs.","title":"function getFFCValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcgradient","text":"Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs.","title":"function getFFCGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getiglmesh","text":"MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format.","title":"function getIGLMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipbyfield","text":"vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value.","title":"function clipByField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getcelllocator","text":"inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator.","title":"function getCellLocator"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getclosestface","text":"int getClosestFace ( const Point3 & point ) const","title":"function getClosestFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computebarycentriccoordinates","text":"Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number.","title":"function computeBarycentricCoordinates"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:02 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html","text":"shapeworks::MeshCache Thread safe cache for meshes index by shape. More... #include Public Functions Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear () Detailed Description class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread. Public Functions Documentation function MeshCache MeshCache () function set_cache_enabled inline void set_cache_enabled ( bool enabled ) function set_memory_percent inline void set_memory_percent ( int percent ) function get_mesh MeshHandle get_mesh ( const MeshWorkItem & vector ) function insert_mesh void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ) function clear void clear () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#shapeworksmeshcache","text":"Thread safe cache for meshes index by shape. More... #include ","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions","text":"Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#detailed-description","text":"class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-meshcache","text":"MeshCache ()","title":"function MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_cache_enabled","text":"inline void set_cache_enabled ( bool enabled )","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_memory_percent","text":"inline void set_memory_percent ( int percent )","title":"function set_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & vector )","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-insert_mesh","text":"void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh )","title":"function insert_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-clear","text":"void clear () Updated on 2023-10-24 at 22:16:01 +0000","title":"function clear"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html","text":"shapeworks::MeshCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#shapeworksmeshcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html","text":"shapeworks::MeshDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< MeshDomain > Pointer Public Functions Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ; Public Functions Documentation function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function ApplyVectorConstraints bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetMaxDiameter virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function Distance inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function SetMesh inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) function GetSWMesh inline std :: shared_ptr < Mesh > GetSWMesh () const function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#shapeworksmeshdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types","text":"Name using std::shared_ptr< MeshDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions","text":"Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#using-pointer","text":"using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyvectorconstraints","text":"bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const","title":"function ApplyVectorConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-distance","text":"inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-setmesh","text":"inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ )","title":"function SetMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getswmesh","text":"inline std :: shared_ptr < Mesh > GetSWMesh () const","title":"function GetSWMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-24 at 22:16:01 +0000","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html","text":"shapeworks::MeshGenerator Public Functions Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method () Public Attributes Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C Public Functions Documentation function MeshGenerator MeshGenerator () function ~MeshGenerator ~ MeshGenerator () function build_mesh MeshHandle build_mesh ( const MeshWorkItem & item ) function build_mesh_from_points MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ) function build_mesh_from_image MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ) function build_mesh_from_file MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ) function set_mesh_reconstructors void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ) function set_reconstruction_method void set_reconstruction_method ( std :: string method ) function get_reconstruction_method std :: string get_reconstruction_method () Public Attributes Documentation variable RECONSTRUCTION_LEGACY_C static const std :: string RECONSTRUCTION_LEGACY_C ; variable RECONSTRUCTION_DISTANCE_TRANSFORM_C static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; variable RECONSTRUCTION_MESH_WARPER_C static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#shapeworksmeshgenerator","text":"","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions","text":"Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes","text":"Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator","text":"MeshGenerator ()","title":"function MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator_1","text":"~ MeshGenerator ()","title":"function ~MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh","text":"MeshHandle build_mesh ( const MeshWorkItem & item )","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_points","text":"MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain )","title":"function build_mesh_from_points"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_image","text":"MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 )","title":"function build_mesh_from_image"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_file","text":"MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 )","title":"function build_mesh_from_file"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_mesh_reconstructors","text":"void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors )","title":"function set_mesh_reconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_reconstruction_method","text":"void set_reconstruction_method ( std :: string method )","title":"function set_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-get_reconstruction_method","text":"std :: string get_reconstruction_method ()","title":"function get_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_legacy_c","text":"static const std :: string RECONSTRUCTION_LEGACY_C ;","title":"variable RECONSTRUCTION_LEGACY_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_distance_transform_c","text":"static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ;","title":"variable RECONSTRUCTION_DISTANCE_TRANSFORM_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_mesh_warper_c","text":"static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable RECONSTRUCTION_MESH_WARPER_C"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html","text":"shapeworks::MeshGroup Representation of a group of meshes. More... #include Public Functions Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Detailed Description class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain Public Functions Documentation function MeshGroup MeshGroup () function MeshGroup MeshGroup ( unsigned long num_meshes ) function ~MeshGroup ~ MeshGroup () function set_number_of_meshes void set_number_of_meshes ( int n ) function valid bool valid () function set_mesh void set_mesh ( int i , MeshHandle mesh ) function meshes MeshList & meshes () Return a reference to the list of meshes. function get_combined_poly_data vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#shapeworksmeshgroup","text":"Representation of a group of meshes. More... #include ","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions","text":"Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#detailed-description","text":"class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup","text":"MeshGroup ()","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_1","text":"MeshGroup ( unsigned long num_meshes )","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_2","text":"~ MeshGroup ()","title":"function ~MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_number_of_meshes","text":"void set_number_of_meshes ( int n )","title":"function set_number_of_meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-valid","text":"bool valid ()","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_mesh","text":"void set_mesh ( int i , MeshHandle mesh )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshes","text":"MeshList & meshes () Return a reference to the list of meshes.","title":"function meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-get_combined_poly_data","text":"vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_combined_poly_data"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html","text":"shapeworks::MeshManager Class to manage meshes. More... #include Inherits from QObject Public Slots Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress () Public Signals Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string ) Public Functions Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache Detailed Description class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background. Public Slots Documentation slot handle_thread_complete void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ) slot handle_warper_progress void handle_warper_progress () Public Signals Documentation signal new_mesh void new_mesh () signal error_encountered void error_encountered ( QString message ) signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function MeshManager MeshManager () function ~MeshManager ~ MeshManager () function set_cache_enabled void set_cache_enabled ( bool enabled ) Set if the cache should be enabled. function set_cache_memory_percent void set_cache_memory_percent ( int percent ) Set the memory cache size. function set_parallel_enabled inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled. function set_num_threads inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction. function generate_mesh void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread function get_mesh MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem function get_mesh MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points function get_surface_reconstructor std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain function get_mesh_warper std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain function get_mesh_generator inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator function clear_cache void clear_cache () clear the cache Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#shapeworksmeshmanager","text":"Class to manage meshes. More... #include Inherits from QObject","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots","text":"Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals","text":"Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions","text":"Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#detailed-description","text":"class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_thread_complete","text":"void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh )","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_warper_progress","text":"void handle_warper_progress ()","title":"slot handle_warper_progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-error_encountered","text":"void error_encountered ( QString message )","title":"signal error_encountered"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager","text":"MeshManager ()","title":"function MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager_1","text":"~ MeshManager ()","title":"function ~MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool enabled ) Set if the cache should be enabled.","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_memory_percent","text":"void set_cache_memory_percent ( int percent ) Set the memory cache size.","title":"function set_cache_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_parallel_enabled","text":"inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled.","title":"function set_parallel_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_num_threads","text":"inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction.","title":"function set_num_threads"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-generate_mesh","text":"void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread","title":"function generate_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_1","text":"MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_surface_reconstructor","text":"std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain","title":"function get_surface_reconstructor"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_warper","text":"std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain","title":"function get_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_generator","text":"inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator","title":"function get_mesh_generator"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-clear_cache","text":"void clear_cache () clear the cache Updated on 2023-10-24 at 22:16:01 +0000","title":"function clear_cache"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html","text":"shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html#shapeworksmeshreader","text":"reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html","text":"shapeworks::MeshReconstructors Public Attributes Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_ Public Attributes Documentation variable surface_reconstructors_ std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ; variable mesh_warpers_ std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#shapeworksmeshreconstructors","text":"","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes","text":"Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-surface_reconstructors_","text":"std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ;","title":"variable surface_reconstructors_"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-mesh_warpers_","text":"std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable mesh_warpers_"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html","text":"shapeworks::MeshSlice MeshSlice . More... #include Public Functions Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key) Detailed Description class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer Public Functions Documentation function MeshSlice MeshSlice ( Viewer * viewer ) function set_volume void set_volume ( vtkSmartPointer < vtkImageData > volume ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key void handle_key ( std :: string key ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#shapeworksmeshslice","text":"MeshSlice . More... #include ","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions","text":"Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#detailed-description","text":"class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-meshslice","text":"MeshSlice ( Viewer * viewer )","title":"function MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-set_volume","text":"void set_volume ( vtkSmartPointer < vtkImageData > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-handle_key","text":"void handle_key ( std :: string key ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html","text":"shapeworks::MeshUtils Module: Mesh Classes More... #include Public Functions Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations. Detailed Description class shapeworks :: MeshUtils ; This class provides helper functions for meshes Public Functions Documentation function createICPTransform static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform function threadSafeReadMesh static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock. function threadSafeWriteMesh static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock. function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes function findReferenceMesh static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh function boundaryLoopExtractor static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh function sharedBoundaryExtractor static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh function generateNormals static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes function visualizeVectorFieldForFFCs void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs. function getArrow vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#shapeworksmeshutils","text":"Module: Mesh Classes More... #include ","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions","text":"Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#detailed-description","text":"class shapeworks :: MeshUtils ; This class provides helper functions for meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-createicptransform","text":"static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform","title":"function createICPTransform"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafereadmesh","text":"static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock.","title":"function threadSafeReadMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafewritemesh","text":"static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock.","title":"function threadSafeWriteMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-findreferencemesh","text":"static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh","title":"function findReferenceMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundaryloopextractor","text":"static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh","title":"function boundaryLoopExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-sharedboundaryextractor","text":"static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh","title":"function sharedBoundaryExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-generatenormals","text":"static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes","title":"function generateNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals","text":"static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals_1","text":"static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-visualizevectorfieldforffcs","text":"void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs.","title":"function visualizeVectorFieldForFFCs"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-getarrow","text":"vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-24 at 22:16:02 +0000","title":"function getArrow"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html","text":"shapeworks::MeshWarper Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper Public Functions Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Protected Functions Name virtual void update_progress (float p) For overriding to handle progress updates. Detailed Description class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices Public Functions Documentation function set_reference_mesh void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles. function generate_warp bool generate_warp () Generate warp, return true on success. function get_warp_available bool get_warp_available () Return if the warp is available. function is_contour inline bool is_contour () const function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles. function extract_landmarks Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh. function is_contour inline bool is_contour () Return if set as a contour. function get_landmarks_map inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) function get_good_particle_indices inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) function get_warp_matrix inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix. function has_bad_particles inline bool has_bad_particles () const Return true if warping has removed any bad particle(s) function get_reference_mesh inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. function get_reference_particles inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles. function prep_mesh static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh. Protected Functions Documentation function update_progress inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#shapeworksmeshwarper","text":"Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions","text":"Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#detailed-description","text":"class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-set_reference_mesh","text":"void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles.","title":"function set_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-generate_warp","text":"bool generate_warp () Generate warp, return true on success.","title":"function generate_warp"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_available","text":"bool get_warp_available () Return if the warp is available.","title":"function get_warp_available"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour","text":"inline bool is_contour () const","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles.","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-extract_landmarks","text":"Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh.","title":"function extract_landmarks"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour_1","text":"inline bool is_contour () Return if set as a contour.","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_landmarks_map","text":"inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value)","title":"function get_landmarks_map"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_good_particle_indices","text":"inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping)","title":"function get_good_particle_indices"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_matrix","text":"inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix.","title":"function get_warp_matrix"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-has_bad_particles","text":"inline bool has_bad_particles () const Return true if warping has removed any bad particle(s)","title":"function has_bad_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_mesh","text":"inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added.","title":"function get_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_particles","text":"inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles.","title":"function get_reference_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-prep_mesh","text":"static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh.","title":"function prep_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-update_progress","text":"inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html","text":"shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. #include Public Attributes Name std::string filename Eigen::VectorXd points int domain size_t memory_size Friends Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b) Public Attributes Documentation variable filename std :: string filename ; variable points Eigen :: VectorXd points ; variable domain int domain { 0 }; variable memory_size size_t memory_size { 0 }; Friends friend operator< friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend operator== friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#shapeworksmeshworkitem","text":"Provides concurrent access to a list of shapes to work needing reconstruction. #include ","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes","text":"Name std::string filename Eigen::VectorXd points int domain size_t memory_size","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends","text":"Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b)","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-filename","text":"std :: string filename ;","title":"variable filename"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-points","text":"Eigen :: VectorXd points ;","title":"variable points"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-domain","text":"int domain { 0 };","title":"variable domain"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-memory_size","text":"size_t memory_size { 0 };","title":"variable memory_size"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator","text":"friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b );","title":"friend operator<"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator_1","text":"friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-24 at 22:16:01 +0000","title":"friend operator=="},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html","text":"shapeworks::MeshWorkQueue Public Types Name using std::list< MeshWorkItem > WorkList Public Functions Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size () Public Types Documentation using WorkList using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ; Public Functions Documentation function MeshWorkQueue MeshWorkQueue () function ~MeshWorkQueue ~ MeshWorkQueue () function push void push ( const MeshWorkItem & item ) function get_next_work_item MeshWorkItem * get_next_work_item () function is_inside bool is_inside ( const MeshWorkItem & item ) function remove void remove ( const MeshWorkItem & item ) function is_empty bool is_empty () function size int size () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#shapeworksmeshworkqueue","text":"","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types","text":"Name using std::list< MeshWorkItem > WorkList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions","text":"Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#using-worklist","text":"using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ;","title":"using WorkList"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue","text":"MeshWorkQueue ()","title":"function MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue_1","text":"~ MeshWorkQueue ()","title":"function ~MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-push","text":"void push ( const MeshWorkItem & item )","title":"function push"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-get_next_work_item","text":"MeshWorkItem * get_next_work_item ()","title":"function get_next_work_item"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_inside","text":"bool is_inside ( const MeshWorkItem & item )","title":"function is_inside"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-remove","text":"void remove ( const MeshWorkItem & item )","title":"function remove"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_empty","text":"bool is_empty ()","title":"function is_empty"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-size","text":"int size () Updated on 2023-10-24 at 22:16:01 +0000","title":"function size"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html","text":"shapeworks::MeshWorker Inherits from QObject, QRunnable Public Signals Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished () Public Functions Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run () Public Signals Documentation signal result_ready void result_ready ( const MeshWorkItem & item , MeshHandle mesh ) signal finished void finished () Public Functions Documentation function MeshWorker MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ) function ~MeshWorker ~ MeshWorker () function run void run () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#shapeworksmeshworker","text":"Inherits from QObject, QRunnable","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals","text":"Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions","text":"Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-result_ready","text":"void result_ready ( const MeshWorkItem & item , MeshHandle mesh )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker","text":"MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator )","title":"function MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker_1","text":"~ MeshWorker ()","title":"function ~MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-run","text":"void run () Updated on 2023-10-24 at 22:16:01 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html","text":"shapeworks::MeshWrapper Inherited by shapeworks::VtkMeshWrapper Public Types Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType Public Functions Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0 Public Types Documentation typedef PointType typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ; typedef GradNType typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ; Public Functions Documentation function ComputeDistance virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 function IsWithinDistance virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk function GetPointOnMesh virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh function GetMeshLowerBound virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound function GetMeshUpperBound virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound function ProjectVectorToSurfaceTangent virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh function InvalidateParticle inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle function IsGeodesicsEnabled virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled function GetPolydata virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#shapeworksmeshwrapper","text":"Inherited by shapeworks::VtkMeshWrapper","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types","text":"Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions","text":"Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-gradntype","text":"typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-computedistance","text":"virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshlowerbound","text":"virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshupperbound","text":"virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplenormalatpoint","text":"virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-invalidateparticle","text":"inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-isgeodesicsenabled","text":"virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled","title":"function IsGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpolydata","text":"virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html","text":"shapeworks::MixedEffectsShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int i ) function GetTimeptsPerIndividual inline int GetTimeptsPerIndividual () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function GetSlopeRandom inline const vnl_matrix < double > & GetSlopeRandom () const function GetInterceptRandom inline const vnl_matrix < double > & GetInterceptRandom () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function MixedEffectsShapeMatrix inline MixedEffectsShapeMatrix () function ~MixedEffectsShapeMatrix inline virtual ~ MixedEffectsShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#shapeworksmixedeffectsshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types","text":"Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions","text":"Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-self","text":"typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int i )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-gettimeptsperindividual","text":"inline int GetTimeptsPerIndividual () const","title":"function GetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getsloperandom","text":"inline const vnl_matrix < double > & GetSlopeRandom () const","title":"function GetSlopeRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getinterceptrandom","text":"inline const vnl_matrix < double > & GetInterceptRandom () const","title":"function GetInterceptRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix","text":"inline MixedEffectsShapeMatrix ()","title":"function MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix_1","text":"inline virtual ~ MixedEffectsShapeMatrix ()","title":"function ~MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html","text":"shapeworks::NetworkAnalysisJob Inherits from shapeworks::Job , QObject Public Functions Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function NetworkAnalysisJob NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function set_pvalue_of_interest void set_pvalue_of_interest ( double pvalue_of_interest ) function set_pvalue_threshold void set_pvalue_threshold ( double pvalue_threshold ) function set_num_iterations void set_num_iterations ( int num_iterations ) function get_tvalues Eigen :: VectorXf get_tvalues () function get_spm_values Eigen :: VectorXf get_spm_values () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#shapeworksnetworkanalysisjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions","text":"Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-networkanalysisjob","text":"NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature )","title":"function NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_of_interest","text":"void set_pvalue_of_interest ( double pvalue_of_interest )","title":"function set_pvalue_of_interest"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_threshold","text":"void set_pvalue_threshold ( double pvalue_threshold )","title":"function set_pvalue_threshold"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_num_iterations","text":"void set_num_iterations ( int num_iterations )","title":"function set_num_iterations"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_tvalues","text":"Eigen :: VectorXf get_tvalues ()","title":"function get_tvalues"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_spm_values","text":"Eigen :: VectorXf get_spm_values () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_spm_values"},{"location":"api/Classes/classshapeworks_1_1Observer.html","text":"shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix Public Classes Name struct DefinedCallbacksStruct Public Types Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const Public Attributes Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef Self typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: Observer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function TransformSetEventCallback inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) function PrefixTransformSetEventCallback inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) function NeighborhoodSetEventCallback inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback Protected Functions Documentation function Observer inline Observer () function ~Observer inline virtual ~ Observer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Public Attributes Documentation variable m_DefinedCallbacks DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#shapeworksobserver","text":"This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-classes","text":"Name struct DefinedCallbacksStruct","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types","text":"Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions","text":"Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes","text":"Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-self","text":"typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-superclass","text":"typedef DataObject shapeworks :: Observer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itktypemacro","text":"itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-transformseteventcallback","text":"inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function TransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-prefixtransformseteventcallback","text":"inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function PrefixTransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-neighborhoodseteventcallback","text":"inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & )","title":"function NeighborhoodSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer","text":"inline Observer ()","title":"function Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer_1","text":"inline virtual ~ Observer ()","title":"function ~Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#variable-m_definedcallbacks","text":"DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_DefinedCallbacks"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html","text":"shapeworks::OptimizationVisualizer Public Functions Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer () Public Functions Documentation function AddMesh void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ) function IterationCallback void IterationCallback ( ParticleSystem * particleSystem ) function SetWireFrame void SetWireFrame ( bool enabled ) function SetSaveScreenshots void SetSaveScreenshots ( bool enabled , std :: string path ) function OptimizationVisualizer inline OptimizationVisualizer () function ~OptimizationVisualizer inline ~ OptimizationVisualizer () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#shapeworksoptimizationvisualizer","text":"","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions","text":"Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-addmesh","text":"void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-iterationcallback","text":"void IterationCallback ( ParticleSystem * particleSystem )","title":"function IterationCallback"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setwireframe","text":"void SetWireFrame ( bool enabled )","title":"function SetWireFrame"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setsavescreenshots","text":"void SetSaveScreenshots ( bool enabled , std :: string path )","title":"function SetSaveScreenshots"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer","text":"inline OptimizationVisualizer ()","title":"function OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer_1","text":"inline ~ OptimizationVisualizer () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html","text":"shapeworks::Optimize More... #include Inherited by shapeworks::QOptimize Public Types Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir () Protected Attributes Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Detailed Description class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization Public Types Documentation using ImageType using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ; using VectorType using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ; using MatrixType using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ; Public Functions Documentation function Optimize Optimize () Constructor. function ~Optimize virtual ~ Optimize () Destructor. function Run bool Run () Run the optimization. function LoadParameterFile bool LoadParameterFile ( std :: string filename ) Load a parameter file. function SetUpOptimize bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project. function SetProject void SetProject ( std :: shared_ptr < Project > project ) Set the Project object. function SetIterationCallbackFunction inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration. function AbortOptimization void AbortOptimization () Abort optimization. function GetAborted bool GetAborted () Return if the optimization was aborted. function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints function SetCutPlanes void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes. function SetVerbosity void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5) function SetDomainsPerShape void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape. function GetDomainsPerShape int GetDomainsPerShape () Return the number of domains per shape. function SetDomainType void SetDomainType ( shapeworks :: DomainType type ) function GetDomainType shapeworks :: DomainType GetDomainType () function SetNumberOfParticles void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain) function GetNumberOfParticles std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain. function SetTransformFile void SetTransformFile ( std :: string filename ) Set the transform file. function GetTransformFile std :: string GetTransformFile () Get the transform file. function SetPrefixTransformFile void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details) function GetPrefixTransformFile std :: string GetPrefixTransformFile () Get the prefix transform file. function SetOutputDir void SetOutputDir ( std :: string output_dir ) Set the output directory. function SetOutputTransformFile void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file. function SetOutputIndividualTransformFiles void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written. function SetUseMeshBasedAttributes void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used. function GetUseMeshBasedAttributes bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. function SetUseXYZ void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain. function SetUseNormals void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain. function SetAttributesPerDomain void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain. function GetAttributesPerDomain std :: vector < int > GetAttributesPerDomain () Get attributes per domain. function SetDistributionDomainID void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details) function GetDistributionDomainID int GetDistributionDomainID () Get the distribution domain ID. function SetOutputCuttingPlaneFile void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file. function SetUseCuttingPlanes void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes. function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape. function SetProcessingMode void SetProcessingMode ( int mode ) Set processing mode (TODO: details) function SetAdaptivityMode void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details) function SetMeshFFCMode inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. function SetAdaptivityStrength void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details) function SetTimePtsPerSubject void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details) function GetTimePtsPerSubject int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) function SetOptimizationIterations void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations. function SetOptimizationIterationsCompleted void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details) function SetIterationsPerSplit void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split. function SetUseShapeStatisticsInInit void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization. function SetProcrustesInterval void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable) function SetProcrustesScaling void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used. function SetProcrustesRotationTranslation void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used. function SetRelativeWeighting void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details) function SetInitialRelativeWeighting void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details) function SetStartingRegularization void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details) function SetEndingRegularization void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details) function SetRecomputeRegularizationInterval void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details) function SetSaveInitSplits void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not. function SetCheckpointingInterval void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval. function SetKeepCheckpoints void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable) function SetUseRegression void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details) function SetUseMixedEffects void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details) function SetUseDisentangledSpatiotemporalSSM void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method. function GetUseDisentangledSpatiotemporalSSM bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. function SetNormalAngle void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details) function SetPerformGoodBad void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details) function SetLogEnergy void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details) function AddImage void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images. function AddMesh void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFilenames void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details) function SetPointFiles void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details) function SetInitialPoints void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function GetNumShapes int GetNumShapes () Get number of shapes. function SetAttributeScales void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes. function SetParticleFlags void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details) function SetFixedDomains void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details) function SetSharedBoundaryEnabled void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings. function SetSharedBoundaryWeight void SetSharedBoundaryWeight ( double weight ) function GetDomainFlags const std :: vector < int > & GetDomainFlags () function SetFileOutputEnabled void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled. function GetUseXYZ std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape. function GetUseNormals std :: vector < bool > GetUseNormals () Return if Normals are used, per shape. function SetNarrowBand void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing. function GetNarrowBand double GetNarrowBand () Return the narrow band to be used. function SetUseShapeStatisticsAfter void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over. function GetUseShapeStatisticsAfter int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. function PrintParamInfo void PrintParamInfo () Print parameter info to stdout. function GetSampler inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler . function GetParticleSystem MatrixContainer GetParticleSystem () Return the particle system as a matrix. function SetPythonFile void SetPythonFile ( std :: string filename ) Set the python file to run at startup. function SetGeodesicsEnabled void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled. function SetGeodesicsCacheSizeMultiplier void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles function GetVisualizer OptimizationVisualizer & GetVisualizer () function SetShowVisualizer void SetShowVisualizer ( bool show ) function GetShowVisualizer bool GetShowVisualizer () function GetMeshFFCMode inline bool GetMeshFFCMode () function TransformPoint vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary function UpdateProgress void UpdateProgress () function set_particle_format inline void set_particle_format ( std :: string format ) Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback function ComputeTotalIterations void ComputeTotalIterations () function OptimizerStop void OptimizerStop () function ReadTransformFile void ReadTransformFile () function ReadPrefixTransformFile void ReadPrefixTransformFile ( const std :: string & s ) function InitializeSampler void InitializeSampler () function GetMinNeighborhoodRadius double GetMinNeighborhoodRadius () function AddSinglePoint void AddSinglePoint () function Initialize void Initialize () function AddAdaptivity void AddAdaptivity () function RunOptimize void RunOptimize () function IterateCallback virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback function ComputeEnergyAfterIteration void ComputeEnergyAfterIteration () function SetCotanSigma void SetCotanSigma () function WriteTransformFile void WriteTransformFile ( int iter = -1 ) const function WriteTransformFile void WriteTransformFile ( std :: string iter_prefix ) const function WriteTransformFiles void WriteTransformFiles ( int iter = -1 ) const function WriteTransformFiles void WriteTransformFiles ( std :: string iter_prefix ) const function WritePointFiles void WritePointFiles ( int iter = -1 ) function WritePointFiles void WritePointFiles ( std :: string iter_prefix ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( int iter = -1 ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( std :: string iter_prefix ) function WriteEnergyFiles void WriteEnergyFiles () function WriteSplitFiles void WriteSplitFiles ( std :: string name ) function WriteCuttingPlanePoints void WriteCuttingPlanePoints ( int iter = -1 ) function WriteParameters void WriteParameters ( std :: string output_dir = \"\" ) function ReportBadParticles void ReportBadParticles () function SetParameters int SetParameters () function WriteModes void WriteModes () function PrintStartMessage void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const function PrintDoneMessage void PrintDoneMessage ( unsigned int vlevel = 0 ) const function UpdateExportablePoints virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms function UpdateProject void UpdateProject () function GetCheckpointDir std :: string GetCheckpointDir () Protected Attributes Documentation variable m_sampler std :: shared_ptr < Sampler > m_sampler ; variable m_procrustes ProcrustesRegistration :: Pointer m_procrustes ; variable m_good_bad std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; variable m_verbosity_level unsigned int m_verbosity_level = 0 ; variable m_local_points std :: vector < std :: vector < itk :: Point < double > > > m_local_points ; variable m_global_points std :: vector < std :: vector < itk :: Point < double > > > m_global_points ; variable m_checkpoint_counter int m_checkpoint_counter = 0 ; variable m_procrustes_counter int m_procrustes_counter = 0 ; variable m_use_cutting_planes bool m_use_cutting_planes = false ; variable m_optimizing bool m_optimizing = false ; variable m_use_regression bool m_use_regression = false ; variable m_use_mixed_effects bool m_use_mixed_effects = false ; variable m_use_disentangled_ssm bool m_use_disentangled_ssm = false ; variable m_domains_per_shape unsigned int m_domains_per_shape = 1 ; variable m_domain_type shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; variable m_number_of_particles std :: vector < int > m_number_of_particles ; variable m_transform_file std :: string m_transform_file ; variable m_prefix_transform_file std :: string m_prefix_transform_file ; variable m_output_dir std :: string m_output_dir ; variable m_output_transform_file std :: string m_output_transform_file ; variable m_output_transform_files bool m_output_transform_files = false ; variable m_mesh_based_attributes bool m_mesh_based_attributes = false ; variable m_use_xyz std :: vector < bool > m_use_xyz ; variable m_use_normals std :: vector < bool > m_use_normals ; variable m_attributes_per_domain std :: vector < int > m_attributes_per_domain ; variable m_distribution_domain_id int m_distribution_domain_id = -1 ; variable m_output_cutting_plane_file std :: string m_output_cutting_plane_file ; variable m_processing_mode int m_processing_mode = 3 ; variable m_adaptivity_mode int m_adaptivity_mode = 0 ; variable m_adaptivity_strength double m_adaptivity_strength = 0.0 ; variable m_mesh_ffc_mode bool m_mesh_ffc_mode = 0 ; variable m_timepts_per_subject unsigned int m_timepts_per_subject = 1 ; variable m_optimization_iterations int m_optimization_iterations = 2000 ; variable m_optimization_iterations_completed int m_optimization_iterations_completed = 0 ; variable m_iterations_per_split int m_iterations_per_split = 1000 ; variable m_use_shape_statistics_in_init bool m_use_shape_statistics_in_init = false ; variable m_procrustes_interval unsigned int m_procrustes_interval = 3 ; variable m_procrustes_scaling bool m_procrustes_scaling = true ; variable m_procrustes_rotation_translation bool m_procrustes_rotation_translation = true ; variable m_relative_weighting double m_relative_weighting = 1.0 ; variable m_initial_relative_weighting double m_initial_relative_weighting = 0.05 ; variable m_starting_regularization double m_starting_regularization = 1000 ; variable m_ending_regularization double m_ending_regularization = 1.0 ; variable m_recompute_regularization_interval int m_recompute_regularization_interval = 1 ; variable m_save_init_splits bool m_save_init_splits = false ; variable m_checkpointing_interval unsigned int m_checkpointing_interval = 50 ; variable m_keep_checkpoints int m_keep_checkpoints = 0 ; variable m_cotan_sigma_factor double m_cotan_sigma_factor = 5.0 ; variable m_particle_flags std :: vector < int > m_particle_flags ; variable m_domain_flags std :: vector < int > m_domain_flags ; variable m_narrow_band double m_narrow_band = 0.0 ; variable m_narrow_band_set bool m_narrow_band_set = false ; variable m_fixed_domains_present bool m_fixed_domains_present = false ; variable m_use_shape_statistics_after int m_use_shape_statistics_after = -1 ; variable m_python_filename std :: string m_python_filename ; variable m_geodesics_enabled bool m_geodesics_enabled = false ; variable m_geodesic_cache_size_multiplier size_t m_geodesic_cache_size_multiplier = 0 ; variable m_spacing double m_spacing = 0 ; variable m_filenames std :: vector < std :: string > m_filenames ; variable m_num_shapes int m_num_shapes = 0 ; variable m_energy_a std :: vector < double > m_energy_a ; variable m_energy_b std :: vector < double > m_energy_b ; variable m_total_energy std :: vector < double > m_total_energy ; variable m_log_energy bool m_log_energy = false ; variable m_str_energy std :: string m_str_energy ; variable m_bad_ids std :: vector < std :: vector < int > > m_bad_ids ; variable m_normal_angle double m_normal_angle = itk :: Math :: pi / 2.0 ; variable m_perform_good_bad bool m_perform_good_bad = false ; variable m_cutting_planes_per_input std :: vector < int > m_cutting_planes_per_input ; variable m_spheres_per_input std :: vector < int > m_spheres_per_input ; variable m_file_output_enabled bool m_file_output_enabled = true ; variable m_aborted bool m_aborted = false ; variable m_cut_planes std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ; variable m_total_iterations int m_total_iterations = 0 ; variable m_iteration_count int m_iteration_count = 0 ; variable m_split_number int m_split_number = 0 ; variable current_particle_iterations_ int current_particle_iterations_ = 0 ; variable total_particle_iterations_ int total_particle_iterations_ = 0 ; variable iteration_callback_ std :: function < void ( void ) > iteration_callback_ ; variable show_visualizer_ bool show_visualizer_ = false ; variable visualizer_ shapeworks :: OptimizationVisualizer visualizer_ ; variable particle_format_ std :: string particle_format_ = \"particles\" ; variable project_ std :: shared_ptr < Project > project_ ; variable m_start_time std :: chrono :: system_clock :: time_point m_start_time ; variable m_last_update_time std :: chrono :: system_clock :: time_point m_last_update_time ; variable m_last_remaining_update_time std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; variable m_remaining_time_message std :: string m_remaining_time_message ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#shapeworksoptimize","text":"More... #include Inherited by shapeworks::QOptimize","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types","text":"Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions","text":"Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions","text":"Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes","text":"Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#detailed-description","text":"class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-imagetype","text":"using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-vectortype","text":"using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-matrixtype","text":"using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ;","title":"using MatrixType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize","text":"Optimize () Constructor.","title":"function Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize_1","text":"virtual ~ Optimize () Destructor.","title":"function ~Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-run","text":"bool Run () Run the optimization.","title":"function Run"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-loadparameterfile","text":"bool LoadParameterFile ( std :: string filename ) Load a parameter file.","title":"function LoadParameterFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setupoptimize","text":"bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project.","title":"function SetUpOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setproject","text":"void SetProject ( std :: shared_ptr < Project > project ) Set the Project object.","title":"function SetProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallbackfunction","text":"inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration.","title":"function SetIterationCallbackFunction"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-abortoptimization","text":"void AbortOptimization () Abort optimization.","title":"function AbortOptimization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getaborted","text":"bool GetAborted () Return if the optimization was aborted.","title":"function GetAborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcutplanes","text":"void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes.","title":"function SetCutPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setverbosity","text":"void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5)","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomainspershape","text":"void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainspershape","text":"int GetDomainsPerShape () Return the number of domains per shape.","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomaintype","text":"void SetDomainType ( shapeworks :: DomainType type )","title":"function SetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomaintype","text":"shapeworks :: DomainType GetDomainType ()","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnumberofparticles","text":"void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain)","title":"function SetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumberofparticles","text":"std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settransformfile","text":"void SetTransformFile ( std :: string filename ) Set the transform file.","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettransformfile","text":"std :: string GetTransformFile () Get the transform file.","title":"function GetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprefixtransformfile","text":"void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details)","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprefixtransformfile","text":"std :: string GetPrefixTransformFile () Get the prefix transform file.","title":"function GetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputdir","text":"void SetOutputDir ( std :: string output_dir ) Set the output directory.","title":"function SetOutputDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputtransformfile","text":"void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file.","title":"function SetOutputTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputindividualtransformfiles","text":"void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written.","title":"function SetOutputIndividualTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemeshbasedattributes","text":"void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used.","title":"function SetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusemeshbasedattributes","text":"bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used.","title":"function GetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusexyz","text":"void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain.","title":"function SetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusenormals","text":"void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain.","title":"function SetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain.","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getattributesperdomain","text":"std :: vector < int > GetAttributesPerDomain () Get attributes per domain.","title":"function GetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdistributiondomainid","text":"void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details)","title":"function SetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdistributiondomainid","text":"int GetDistributionDomainID () Get the distribution domain ID.","title":"function GetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputcuttingplanefile","text":"void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file.","title":"function SetOutputCuttingPlaneFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusecuttingplanes","text":"void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes.","title":"function SetUseCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocessingmode","text":"void SetProcessingMode ( int mode ) Set processing mode (TODO: details)","title":"function SetProcessingMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitymode","text":"void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details)","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode.","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitystrength","text":"void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details)","title":"function SetAdaptivityStrength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settimeptspersubject","text":"void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details)","title":"function SetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettimeptspersubject","text":"int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details)","title":"function GetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterations","text":"void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations.","title":"function SetOptimizationIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterationscompleted","text":"void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details)","title":"function SetOptimizationIterationsCompleted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationspersplit","text":"void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split.","title":"function SetIterationsPerSplit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsininit","text":"void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization.","title":"function SetUseShapeStatisticsInInit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesinterval","text":"void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable)","title":"function SetProcrustesInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesscaling","text":"void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used.","title":"function SetProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesrotationtranslation","text":"void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used.","title":"function SetProcrustesRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrelativeweighting","text":"void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details)","title":"function SetRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialrelativeweighting","text":"void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details)","title":"function SetInitialRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setstartingregularization","text":"void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details)","title":"function SetStartingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setendingregularization","text":"void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details)","title":"function SetEndingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrecomputeregularizationinterval","text":"void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details)","title":"function SetRecomputeRegularizationInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsaveinitsplits","text":"void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not.","title":"function SetSaveInitSplits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcheckpointinginterval","text":"void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval.","title":"function SetCheckpointingInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setkeepcheckpoints","text":"void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable)","title":"function SetKeepCheckpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseregression","text":"void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details)","title":"function SetUseRegression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemixedeffects","text":"void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details)","title":"function SetUseMixedEffects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusedisentangledspatiotemporalssm","text":"void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method.","title":"function SetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusedisentangledspatiotemporalssm","text":"bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method.","title":"function GetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnormalangle","text":"void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details)","title":"function SetNormalAngle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setperformgoodbad","text":"void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details)","title":"function SetPerformGoodBad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setlogenergy","text":"void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details)","title":"function SetLogEnergy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images.","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addmesh","text":"void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfilenames","text":"void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details)","title":"function SetFilenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpointfiles","text":"void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details)","title":"function SetPointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialpoints","text":"void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumshapes","text":"int GetNumShapes () Get number of shapes.","title":"function GetNumShapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributescales","text":"void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details)","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes.","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparticleflags","text":"void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details)","title":"function SetParticleFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfixeddomains","text":"void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details)","title":"function SetFixedDomains"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryenabled","text":"void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings.","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryweight","text":"void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainflags","text":"const std :: vector < int > & GetDomainFlags ()","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfileoutputenabled","text":"void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled.","title":"function SetFileOutputEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusexyz","text":"std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape.","title":"function GetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusenormals","text":"std :: vector < bool > GetUseNormals () Return if Normals are used, per shape.","title":"function GetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnarrowband","text":"void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing.","title":"function SetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnarrowband","text":"double GetNarrowBand () Return the narrow band to be used.","title":"function GetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsafter","text":"void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over.","title":"function SetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getuseshapestatisticsafter","text":"int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over.","title":"function GetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printparaminfo","text":"void PrintParamInfo () Print parameter info to stdout.","title":"function PrintParamInfo"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getsampler","text":"inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler .","title":"function GetSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getparticlesystem","text":"MatrixContainer GetParticleSystem () Return the particle system as a matrix.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpythonfile","text":"void SetPythonFile ( std :: string filename ) Set the python file to run at startup.","title":"function SetPythonFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicsenabled","text":"void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled.","title":"function SetGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicscachesizemultiplier","text":"void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles","title":"function SetGeodesicsCacheSizeMultiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getvisualizer","text":"OptimizationVisualizer & GetVisualizer ()","title":"function GetVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setshowvisualizer","text":"void SetShowVisualizer ( bool show )","title":"function SetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getshowvisualizer","text":"bool GetShowVisualizer ()","title":"function GetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getmeshffcmode","text":"inline bool GetMeshFFCMode ()","title":"function GetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-transformpoint","text":"vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateprogress","text":"void UpdateProgress ()","title":"function UpdateProgress"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-set_particle_format","text":"inline void set_particle_format ( std :: string format )","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computetotaliterations","text":"void ComputeTotalIterations ()","title":"function ComputeTotalIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimizerstop","text":"void OptimizerStop ()","title":"function OptimizerStop"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readtransformfile","text":"void ReadTransformFile ()","title":"function ReadTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readprefixtransformfile","text":"void ReadPrefixTransformFile ( const std :: string & s )","title":"function ReadPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initializesampler","text":"void InitializeSampler ()","title":"function InitializeSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getminneighborhoodradius","text":"double GetMinNeighborhoodRadius ()","title":"function GetMinNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addsinglepoint","text":"void AddSinglePoint ()","title":"function AddSinglePoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initialize","text":"void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addadaptivity","text":"void AddAdaptivity ()","title":"function AddAdaptivity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-runoptimize","text":"void RunOptimize ()","title":"function RunOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computeenergyafteriteration","text":"void ComputeEnergyAfterIteration ()","title":"function ComputeEnergyAfterIteration"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcotansigma","text":"void SetCotanSigma ()","title":"function SetCotanSigma"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile","text":"void WriteTransformFile ( int iter = -1 ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile_1","text":"void WriteTransformFile ( std :: string iter_prefix ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles","text":"void WriteTransformFiles ( int iter = -1 ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles_1","text":"void WriteTransformFiles ( std :: string iter_prefix ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles","text":"void WritePointFiles ( int iter = -1 )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles_1","text":"void WritePointFiles ( std :: string iter_prefix )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures","text":"void WritePointFilesWithFeatures ( int iter = -1 )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures_1","text":"void WritePointFilesWithFeatures ( std :: string iter_prefix )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeenergyfiles","text":"void WriteEnergyFiles ()","title":"function WriteEnergyFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writesplitfiles","text":"void WriteSplitFiles ( std :: string name )","title":"function WriteSplitFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writecuttingplanepoints","text":"void WriteCuttingPlanePoints ( int iter = -1 )","title":"function WriteCuttingPlanePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeparameters","text":"void WriteParameters ( std :: string output_dir = \"\" )","title":"function WriteParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-reportbadparticles","text":"void ReportBadParticles ()","title":"function ReportBadParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparameters","text":"int SetParameters ()","title":"function SetParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writemodes","text":"void WriteModes ()","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printstartmessage","text":"void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const","title":"function PrintStartMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printdonemessage","text":"void PrintDoneMessage ( unsigned int vlevel = 0 ) const","title":"function PrintDoneMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateproject","text":"void UpdateProject ()","title":"function UpdateProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getcheckpointdir","text":"std :: string GetCheckpointDir ()","title":"function GetCheckpointDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_sampler","text":"std :: shared_ptr < Sampler > m_sampler ;","title":"variable m_sampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes","text":"ProcrustesRegistration :: Pointer m_procrustes ;","title":"variable m_procrustes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_good_bad","text":"std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ;","title":"variable m_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_verbosity_level","text":"unsigned int m_verbosity_level = 0 ;","title":"variable m_verbosity_level"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_local_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_local_points ;","title":"variable m_local_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_global_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_global_points ;","title":"variable m_global_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpoint_counter","text":"int m_checkpoint_counter = 0 ;","title":"variable m_checkpoint_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_counter","text":"int m_procrustes_counter = 0 ;","title":"variable m_procrustes_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_cutting_planes","text":"bool m_use_cutting_planes = false ;","title":"variable m_use_cutting_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimizing","text":"bool m_optimizing = false ;","title":"variable m_optimizing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_regression","text":"bool m_use_regression = false ;","title":"variable m_use_regression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_mixed_effects","text":"bool m_use_mixed_effects = false ;","title":"variable m_use_mixed_effects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_disentangled_ssm","text":"bool m_use_disentangled_ssm = false ;","title":"variable m_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domains_per_shape","text":"unsigned int m_domains_per_shape = 1 ;","title":"variable m_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_type","text":"shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ;","title":"variable m_domain_type"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_number_of_particles","text":"std :: vector < int > m_number_of_particles ;","title":"variable m_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_transform_file","text":"std :: string m_transform_file ;","title":"variable m_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_prefix_transform_file","text":"std :: string m_prefix_transform_file ;","title":"variable m_prefix_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_dir","text":"std :: string m_output_dir ;","title":"variable m_output_dir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_file","text":"std :: string m_output_transform_file ;","title":"variable m_output_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_files","text":"bool m_output_transform_files = false ;","title":"variable m_output_transform_files"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_based_attributes","text":"bool m_mesh_based_attributes = false ;","title":"variable m_mesh_based_attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_xyz","text":"std :: vector < bool > m_use_xyz ;","title":"variable m_use_xyz"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_normals","text":"std :: vector < bool > m_use_normals ;","title":"variable m_use_normals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_attributes_per_domain","text":"std :: vector < int > m_attributes_per_domain ;","title":"variable m_attributes_per_domain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_distribution_domain_id","text":"int m_distribution_domain_id = -1 ;","title":"variable m_distribution_domain_id"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_cutting_plane_file","text":"std :: string m_output_cutting_plane_file ;","title":"variable m_output_cutting_plane_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_processing_mode","text":"int m_processing_mode = 3 ;","title":"variable m_processing_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_mode","text":"int m_adaptivity_mode = 0 ;","title":"variable m_adaptivity_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_strength","text":"double m_adaptivity_strength = 0.0 ;","title":"variable m_adaptivity_strength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_ffc_mode","text":"bool m_mesh_ffc_mode = 0 ;","title":"variable m_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_timepts_per_subject","text":"unsigned int m_timepts_per_subject = 1 ;","title":"variable m_timepts_per_subject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations","text":"int m_optimization_iterations = 2000 ;","title":"variable m_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations_completed","text":"int m_optimization_iterations_completed = 0 ;","title":"variable m_optimization_iterations_completed"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iterations_per_split","text":"int m_iterations_per_split = 1000 ;","title":"variable m_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_in_init","text":"bool m_use_shape_statistics_in_init = false ;","title":"variable m_use_shape_statistics_in_init"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_interval","text":"unsigned int m_procrustes_interval = 3 ;","title":"variable m_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_scaling","text":"bool m_procrustes_scaling = true ;","title":"variable m_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_rotation_translation","text":"bool m_procrustes_rotation_translation = true ;","title":"variable m_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_relative_weighting","text":"double m_relative_weighting = 1.0 ;","title":"variable m_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_initial_relative_weighting","text":"double m_initial_relative_weighting = 0.05 ;","title":"variable m_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_starting_regularization","text":"double m_starting_regularization = 1000 ;","title":"variable m_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_ending_regularization","text":"double m_ending_regularization = 1.0 ;","title":"variable m_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_recompute_regularization_interval","text":"int m_recompute_regularization_interval = 1 ;","title":"variable m_recompute_regularization_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_save_init_splits","text":"bool m_save_init_splits = false ;","title":"variable m_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpointing_interval","text":"unsigned int m_checkpointing_interval = 50 ;","title":"variable m_checkpointing_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_keep_checkpoints","text":"int m_keep_checkpoints = 0 ;","title":"variable m_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cotan_sigma_factor","text":"double m_cotan_sigma_factor = 5.0 ;","title":"variable m_cotan_sigma_factor"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_particle_flags","text":"std :: vector < int > m_particle_flags ;","title":"variable m_particle_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_flags","text":"std :: vector < int > m_domain_flags ;","title":"variable m_domain_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band","text":"double m_narrow_band = 0.0 ;","title":"variable m_narrow_band"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band_set","text":"bool m_narrow_band_set = false ;","title":"variable m_narrow_band_set"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_fixed_domains_present","text":"bool m_fixed_domains_present = false ;","title":"variable m_fixed_domains_present"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_after","text":"int m_use_shape_statistics_after = -1 ;","title":"variable m_use_shape_statistics_after"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_python_filename","text":"std :: string m_python_filename ;","title":"variable m_python_filename"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesics_enabled","text":"bool m_geodesics_enabled = false ;","title":"variable m_geodesics_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesic_cache_size_multiplier","text":"size_t m_geodesic_cache_size_multiplier = 0 ;","title":"variable m_geodesic_cache_size_multiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spacing","text":"double m_spacing = 0 ;","title":"variable m_spacing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_filenames","text":"std :: vector < std :: string > m_filenames ;","title":"variable m_filenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_num_shapes","text":"int m_num_shapes = 0 ;","title":"variable m_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_a","text":"std :: vector < double > m_energy_a ;","title":"variable m_energy_a"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_b","text":"std :: vector < double > m_energy_b ;","title":"variable m_energy_b"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_energy","text":"std :: vector < double > m_total_energy ;","title":"variable m_total_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_log_energy","text":"bool m_log_energy = false ;","title":"variable m_log_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_str_energy","text":"std :: string m_str_energy ;","title":"variable m_str_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_bad_ids","text":"std :: vector < std :: vector < int > > m_bad_ids ;","title":"variable m_bad_ids"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_normal_angle","text":"double m_normal_angle = itk :: Math :: pi / 2.0 ;","title":"variable m_normal_angle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_perform_good_bad","text":"bool m_perform_good_bad = false ;","title":"variable m_perform_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cutting_planes_per_input","text":"std :: vector < int > m_cutting_planes_per_input ;","title":"variable m_cutting_planes_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spheres_per_input","text":"std :: vector < int > m_spheres_per_input ;","title":"variable m_spheres_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_file_output_enabled","text":"bool m_file_output_enabled = true ;","title":"variable m_file_output_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_aborted","text":"bool m_aborted = false ;","title":"variable m_aborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cut_planes","text":"std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ;","title":"variable m_cut_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_iterations","text":"int m_total_iterations = 0 ;","title":"variable m_total_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iteration_count","text":"int m_iteration_count = 0 ;","title":"variable m_iteration_count"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_split_number","text":"int m_split_number = 0 ;","title":"variable m_split_number"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-current_particle_iterations_","text":"int current_particle_iterations_ = 0 ;","title":"variable current_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-total_particle_iterations_","text":"int total_particle_iterations_ = 0 ;","title":"variable total_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-iteration_callback_","text":"std :: function < void ( void ) > iteration_callback_ ;","title":"variable iteration_callback_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-show_visualizer_","text":"bool show_visualizer_ = false ;","title":"variable show_visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-visualizer_","text":"shapeworks :: OptimizationVisualizer visualizer_ ;","title":"variable visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-particle_format_","text":"std :: string particle_format_ = \"particles\" ;","title":"variable particle_format_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-project_","text":"std :: shared_ptr < Project > project_ ;","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_start_time","text":"std :: chrono :: system_clock :: time_point m_start_time ;","title":"variable m_start_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_update_time","text":"std :: chrono :: system_clock :: time_point m_last_update_time ;","title":"variable m_last_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_remaining_update_time","text":"std :: chrono :: system_clock :: time_point m_last_remaining_update_time ;","title":"variable m_last_remaining_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_remaining_time_message","text":"std :: string m_remaining_time_message ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_remaining_time_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html","text":"shapeworks::OptimizeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#shapeworksoptimizecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html","text":"shapeworks::OptimizeParameterFile More... #include Public Functions Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object. Detailed Description class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object. Public Functions Documentation function OptimizeParameterFile OptimizeParameterFile () function load_parameter_file bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#shapeworksoptimizeparameterfile","text":"More... #include ","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions","text":"Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#detailed-description","text":"class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-optimizeparameterfile","text":"OptimizeParameterFile ()","title":"function OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-load_parameter_file","text":"bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-24 at 22:16:01 +0000","title":"function load_parameter_file"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html","text":"shapeworks::OptimizeParameters More... #include Public Functions Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format) Detailed Description class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters Public Functions Documentation function OptimizeParameters explicit OptimizeParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_optimize_output_prefix std :: string get_optimize_output_prefix () function set_optimize_output_prefix void set_optimize_output_prefix ( std :: string prefix ) function get_number_of_particles std :: vector < int > get_number_of_particles () function set_number_of_particles void set_number_of_particles ( std :: vector < int > number_of_particles ) function get_initial_relative_weighting double get_initial_relative_weighting () function set_initial_relative_weighting void set_initial_relative_weighting ( double value ) function get_relative_weighting double get_relative_weighting () function set_relative_weighting void set_relative_weighting ( double value ) function get_starting_regularization double get_starting_regularization () function set_starting_regularization void set_starting_regularization ( double value ) function get_ending_regularization double get_ending_regularization () function set_ending_regularization void set_ending_regularization ( double value ) function get_iterations_per_split int get_iterations_per_split () function set_iterations_per_split void set_iterations_per_split ( int value ) function get_optimization_iterations int get_optimization_iterations () function set_optimization_iterations void set_optimization_iterations ( int value ) function get_use_geodesic_distance bool get_use_geodesic_distance () function set_use_geodesic_distance void set_use_geodesic_distance ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_use_normals std :: vector < bool > get_use_normals () function set_use_normals void set_use_normals ( std :: vector < bool > use_normals ) function get_normals_strength double get_normals_strength () function set_normals_strength void set_normals_strength ( double value ) function get_use_disentangled_ssm bool get_use_disentangled_ssm () function set_use_disentangled_ssm void set_use_disentangled_ssm ( bool value ) function get_use_procrustes bool get_use_procrustes () function set_use_procrustes void set_use_procrustes ( bool value ) function get_use_procrustes_scaling bool get_use_procrustes_scaling () function set_use_procrustes_scaling void set_use_procrustes_scaling ( bool value ) function get_use_procrustes_rotation_translation bool get_use_procrustes_rotation_translation () function set_use_procrustes_rotation_translation void set_use_procrustes_rotation_translation ( bool value ) function get_procrustes_interval int get_procrustes_interval () function set_procrustes_interval void set_procrustes_interval ( int value ) function get_use_multiscale bool get_use_multiscale () function set_use_multiscale void set_use_multiscale ( bool value ) function get_multiscale_particles int get_multiscale_particles () function set_multiscale_particles void set_multiscale_particles ( int value ) function get_narrow_band double get_narrow_band () function set_narrow_band void set_narrow_band ( double value ) function get_verbosity int get_verbosity () function set_verbosity void set_verbosity ( int value ) function get_mesh_ffc_mode bool get_mesh_ffc_mode () function set_mesh_ffc_mode void set_mesh_ffc_mode ( bool value ) function get_use_landmarks bool get_use_landmarks () function set_use_landmarks void set_use_landmarks ( bool value ) function get_use_fixed_subjects bool get_use_fixed_subjects () function set_use_fixed_subjects void set_use_fixed_subjects ( bool value ) function get_fixed_subjects_column std :: string get_fixed_subjects_column () function set_fixed_subject_column void set_fixed_subject_column ( std :: string column ) function get_fixed_subjects_choice std :: string get_fixed_subjects_choice () function set_fixed_subjects_choice void set_fixed_subjects_choice ( std :: string choice ) function set_abort_load void set_abort_load ( bool value ) function set_load_callback void set_load_callback ( const std :: function < void ( int ) > & f ) function set_up_optimize bool set_up_optimize ( Optimize * optimize ) function is_subject_fixed bool is_subject_fixed ( std :: shared_ptr < Subject > subject ) function get_checkpoint_interval int get_checkpoint_interval () function set_checkpoint_interval void set_checkpoint_interval ( int iterations ) function get_save_init_splits bool get_save_init_splits () function set_save_init_splits void set_save_init_splits ( bool enabled ) function get_keep_checkpoints bool get_keep_checkpoints () function set_keep_checkpoints void set_keep_checkpoints ( bool enabled ) function get_field_attributes std :: vector < std :: string > get_field_attributes () function set_field_attributes void set_field_attributes ( std :: vector < std :: string > attributes ) function get_field_attribute_weights std :: vector < double > get_field_attribute_weights () function set_field_attribute_weights void set_field_attribute_weights ( std :: vector < double > weights ) function get_use_geodesics_to_landmarks bool get_use_geodesics_to_landmarks () function set_use_geodesics_to_landmarks void set_use_geodesics_to_landmarks ( bool value ) function get_geodesic_to_landmarks_weight double get_geodesic_to_landmarks_weight () function set_geodesic_to_landmarks_weight void set_geodesic_to_landmarks_weight ( double value ) function get_particle_format std :: string get_particle_format () function set_particle_format void set_particle_format ( std :: string format ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#shapeworksoptimizeparameters","text":"More... #include ","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions","text":"Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#detailed-description","text":"class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-optimizeparameters","text":"explicit OptimizeParameters ( ProjectHandle project )","title":"function OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimize_output_prefix","text":"std :: string get_optimize_output_prefix ()","title":"function get_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimize_output_prefix","text":"void set_optimize_output_prefix ( std :: string prefix )","title":"function set_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_number_of_particles","text":"std :: vector < int > get_number_of_particles ()","title":"function get_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_number_of_particles","text":"void set_number_of_particles ( std :: vector < int > number_of_particles )","title":"function set_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_initial_relative_weighting","text":"double get_initial_relative_weighting ()","title":"function get_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_initial_relative_weighting","text":"void set_initial_relative_weighting ( double value )","title":"function set_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_relative_weighting","text":"double get_relative_weighting ()","title":"function get_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_relative_weighting","text":"void set_relative_weighting ( double value )","title":"function set_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_starting_regularization","text":"double get_starting_regularization ()","title":"function get_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_starting_regularization","text":"void set_starting_regularization ( double value )","title":"function set_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_ending_regularization","text":"double get_ending_regularization ()","title":"function get_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_ending_regularization","text":"void set_ending_regularization ( double value )","title":"function set_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_iterations_per_split","text":"int get_iterations_per_split ()","title":"function get_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_iterations_per_split","text":"void set_iterations_per_split ( int value )","title":"function set_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimization_iterations","text":"int get_optimization_iterations ()","title":"function get_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimization_iterations","text":"void set_optimization_iterations ( int value )","title":"function set_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesic_distance","text":"bool get_use_geodesic_distance ()","title":"function get_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesic_distance","text":"void set_use_geodesic_distance ( bool value )","title":"function set_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_normals","text":"std :: vector < bool > get_use_normals ()","title":"function get_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_normals","text":"void set_use_normals ( std :: vector < bool > use_normals )","title":"function set_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_normals_strength","text":"double get_normals_strength ()","title":"function get_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_normals_strength","text":"void set_normals_strength ( double value )","title":"function set_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_disentangled_ssm","text":"bool get_use_disentangled_ssm ()","title":"function get_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_disentangled_ssm","text":"void set_use_disentangled_ssm ( bool value )","title":"function set_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes","text":"bool get_use_procrustes ()","title":"function get_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes","text":"void set_use_procrustes ( bool value )","title":"function set_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_scaling","text":"bool get_use_procrustes_scaling ()","title":"function get_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_scaling","text":"void set_use_procrustes_scaling ( bool value )","title":"function set_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_rotation_translation","text":"bool get_use_procrustes_rotation_translation ()","title":"function get_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_rotation_translation","text":"void set_use_procrustes_rotation_translation ( bool value )","title":"function set_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_procrustes_interval","text":"int get_procrustes_interval ()","title":"function get_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_procrustes_interval","text":"void set_procrustes_interval ( int value )","title":"function set_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_multiscale","text":"bool get_use_multiscale ()","title":"function get_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_multiscale","text":"void set_use_multiscale ( bool value )","title":"function set_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_multiscale_particles","text":"int get_multiscale_particles ()","title":"function get_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_multiscale_particles","text":"void set_multiscale_particles ( int value )","title":"function set_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_narrow_band","text":"double get_narrow_band ()","title":"function get_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_narrow_band","text":"void set_narrow_band ( double value )","title":"function set_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_verbosity","text":"int get_verbosity ()","title":"function get_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_verbosity","text":"void set_verbosity ( int value )","title":"function set_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_mesh_ffc_mode","text":"bool get_mesh_ffc_mode ()","title":"function get_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_mesh_ffc_mode","text":"void set_mesh_ffc_mode ( bool value )","title":"function set_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_landmarks","text":"void set_use_landmarks ( bool value )","title":"function set_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_fixed_subjects","text":"bool get_use_fixed_subjects ()","title":"function get_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_fixed_subjects","text":"void set_use_fixed_subjects ( bool value )","title":"function set_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_column","text":"std :: string get_fixed_subjects_column ()","title":"function get_fixed_subjects_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subject_column","text":"void set_fixed_subject_column ( std :: string column )","title":"function set_fixed_subject_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_choice","text":"std :: string get_fixed_subjects_choice ()","title":"function get_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subjects_choice","text":"void set_fixed_subjects_choice ( std :: string choice )","title":"function set_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_abort_load","text":"void set_abort_load ( bool value )","title":"function set_abort_load"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_load_callback","text":"void set_load_callback ( const std :: function < void ( int ) > & f )","title":"function set_load_callback"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_up_optimize","text":"bool set_up_optimize ( Optimize * optimize )","title":"function set_up_optimize"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-is_subject_fixed","text":"bool is_subject_fixed ( std :: shared_ptr < Subject > subject )","title":"function is_subject_fixed"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_checkpoint_interval","text":"int get_checkpoint_interval ()","title":"function get_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_checkpoint_interval","text":"void set_checkpoint_interval ( int iterations )","title":"function set_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_save_init_splits","text":"bool get_save_init_splits ()","title":"function get_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_save_init_splits","text":"void set_save_init_splits ( bool enabled )","title":"function set_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_keep_checkpoints","text":"bool get_keep_checkpoints ()","title":"function get_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_keep_checkpoints","text":"void set_keep_checkpoints ( bool enabled )","title":"function set_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attributes","text":"std :: vector < std :: string > get_field_attributes ()","title":"function get_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attributes","text":"void set_field_attributes ( std :: vector < std :: string > attributes )","title":"function set_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attribute_weights","text":"std :: vector < double > get_field_attribute_weights ()","title":"function get_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attribute_weights","text":"void set_field_attribute_weights ( std :: vector < double > weights )","title":"function set_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesics_to_landmarks","text":"bool get_use_geodesics_to_landmarks ()","title":"function get_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesics_to_landmarks","text":"void set_use_geodesics_to_landmarks ( bool value )","title":"function set_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_to_landmarks_weight","text":"double get_geodesic_to_landmarks_weight ()","title":"function get_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_to_landmarks_weight","text":"void set_geodesic_to_landmarks_weight ( double value )","title":"function set_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_particle_format","text":"std :: string get_particle_format ()","title":"function get_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_particle_format","text":"void set_particle_format ( std :: string format ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html","text":"shapeworks::OptimizeTool Inherits from QWidget Public Slots Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs () Public Signals Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string ) Public Functions Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_run_optimize_button_clicked void on_run_optimize_button_clicked () Run optimize tool. slot on_restoreDefaults_clicked void on_restoreDefaults_clicked () slot handle_optimize_complete void handle_optimize_complete () slot handle_optimize_failed void handle_optimize_failed () slot handle_progress void handle_progress ( int val , QString message ) slot handle_error void handle_error ( QString ) slot handle_warning void handle_warning ( QString ) slot handle_message void handle_message ( QString ) slot update_ui_elements void update_ui_elements () slot validate_inputs bool validate_inputs () Public Signals Documentation signal optimize_start void optimize_start () signal optimize_complete void optimize_complete () signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function OptimizeTool OptimizeTool ( Preferences & prefs , Telemetry & telemetry ) function ~OptimizeTool ~ OptimizeTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the project function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function enable_actions void enable_actions () Enable action buttons. function disable_actions void disable_actions () Disable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#shapeworksoptimizetool","text":"Inherits from QWidget","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots","text":"Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals","text":"Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions","text":"Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_run_optimize_button_clicked","text":"void on_run_optimize_button_clicked () Run optimize tool.","title":"slot on_run_optimize_button_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_restoredefaults_clicked","text":"void on_restoreDefaults_clicked ()","title":"slot on_restoreDefaults_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_failed","text":"void handle_optimize_failed ()","title":"slot handle_optimize_failed"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_progress","text":"void handle_progress ( int val , QString message )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_error","text":"void handle_error ( QString )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_warning","text":"void handle_warning ( QString )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_message","text":"void handle_message ( QString )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-update_ui_elements","text":"void update_ui_elements ()","title":"slot update_ui_elements"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-validate_inputs","text":"bool validate_inputs ()","title":"slot validate_inputs"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_start","text":"void optimize_start ()","title":"signal optimize_start"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_complete","text":"void optimize_complete ()","title":"signal optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool","text":"OptimizeTool ( Preferences & prefs , Telemetry & telemetry )","title":"function OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool_1","text":"~ OptimizeTool ()","title":"function ~OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the project","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-24 at 22:16:01 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html","text":"shapeworks::PaintWidget Inherits from vtkAbstractWidget Protected Types Name enum @5 Public Functions Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b) Protected Functions Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w) Protected Attributes Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_ Protected Types Documentation enum @5 Enumerator Value Description Start Paint Erase Public Functions Documentation function New static PaintWidget * New () function vtkTypeMacro vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( PointPlacer , vtkPointPlacer * ) function vtkGetMacro vtkGetMacro ( PointPlacer , vtkPointPlacer * ) function vtkSetMacro vtkSetMacro ( Renderer , vtkRenderer * ) function vtkGetMacro vtkGetMacro ( Renderer , vtkRenderer * ) function set_viewer void set_viewer ( Viewer * viewer ) function SetEnabled virtual void SetEnabled ( int ) function SetRepresentation inline void SetRepresentation ( vtkContourRepresentation * r ) function CreateDefaultRepresentation void CreateDefaultRepresentation () function update_position void update_position () function Initialize virtual void Initialize ( vtkPolyData * poly , int state = 1 ) function Initialize inline virtual void Initialize () function set_brush_size void set_brush_size ( double size ) function get_brush_size double get_brush_size () function set_brush_color void set_brush_color ( float r , float g , float b ) Protected Functions Documentation function PaintWidget PaintWidget () function ~PaintWidget ~ PaintWidget () function use_point_placer bool use_point_placer ( double displayPos [ 2 ], int newState ) function set_cursor void set_cursor ( int requestedShape ) function StartPaintAction static void StartPaintAction ( vtkAbstractWidget * w ) function EndPaintAction static void EndPaintAction ( vtkAbstractWidget * w ) function StartEraseAction static void StartEraseAction ( vtkAbstractWidget * w ) function EndEraseAction static void EndEraseAction ( vtkAbstractWidget * w ) function MoveAction static void MoveAction ( vtkAbstractWidget * w ) function LeaveAction static void LeaveAction ( vtkAbstractWidget * w ) function KeyPressAction static void KeyPressAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable WidgetState int WidgetState ; variable PointPlacer vtkPointPlacer * PointPlacer ; variable Renderer vtkRenderer * Renderer ; variable sphere_cursor_ StudioSphereRepresentation * sphere_cursor_ ; variable mouse_in_window_ bool mouse_in_window_ ; variable viewer_ Viewer * viewer_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#shapeworkspaintwidget","text":"Inherits from vtkAbstractWidget","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types","text":"Name enum @5","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions","text":"Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions","text":"Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes","text":"Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#enum-5","text":"Enumerator Value Description Start Paint Erase","title":"enum @5"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-new","text":"static PaintWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtktypemacro","text":"vtkTypeMacro ( PaintWidget , vtkAbstractWidget )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro","text":"vtkSetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro","text":"vtkGetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro_1","text":"vtkSetMacro ( Renderer , vtkRenderer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Renderer , vtkRenderer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_viewer","text":"void set_viewer ( Viewer * viewer )","title":"function set_viewer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setenabled","text":"virtual void SetEnabled ( int )","title":"function SetEnabled"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setrepresentation","text":"inline void SetRepresentation ( vtkContourRepresentation * r )","title":"function SetRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-createdefaultrepresentation","text":"void CreateDefaultRepresentation ()","title":"function CreateDefaultRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-update_position","text":"void update_position ()","title":"function update_position"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize","text":"virtual void Initialize ( vtkPolyData * poly , int state = 1 )","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize_1","text":"inline virtual void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_size","text":"void set_brush_size ( double size )","title":"function set_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-get_brush_size","text":"double get_brush_size ()","title":"function get_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_color","text":"void set_brush_color ( float r , float g , float b )","title":"function set_brush_color"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget","text":"PaintWidget ()","title":"function PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget_1","text":"~ PaintWidget ()","title":"function ~PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-use_point_placer","text":"bool use_point_placer ( double displayPos [ 2 ], int newState )","title":"function use_point_placer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_cursor","text":"void set_cursor ( int requestedShape )","title":"function set_cursor"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-startpaintaction","text":"static void StartPaintAction ( vtkAbstractWidget * w )","title":"function StartPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-endpaintaction","text":"static void EndPaintAction ( vtkAbstractWidget * w )","title":"function EndPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-starteraseaction","text":"static void StartEraseAction ( vtkAbstractWidget * w )","title":"function StartEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-enderaseaction","text":"static void EndEraseAction ( vtkAbstractWidget * w )","title":"function EndEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-moveaction","text":"static void MoveAction ( vtkAbstractWidget * w )","title":"function MoveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-leaveaction","text":"static void LeaveAction ( vtkAbstractWidget * w )","title":"function LeaveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-keypressaction","text":"static void KeyPressAction ( vtkAbstractWidget * w )","title":"function KeyPressAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-widgetstate","text":"int WidgetState ;","title":"variable WidgetState"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-pointplacer","text":"vtkPointPlacer * PointPlacer ;","title":"variable PointPlacer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-renderer","text":"vtkRenderer * Renderer ;","title":"variable Renderer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-sphere_cursor_","text":"StudioSphereRepresentation * sphere_cursor_ ;","title":"variable sphere_cursor_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-mouse_in_window_","text":"bool mouse_in_window_ ;","title":"variable mouse_in_window_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-viewer_","text":"Viewer * viewer_ ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable viewer_"},{"location":"api/Classes/classshapeworks_1_1Parameters.html","text":"shapeworks::Parameters Parameter settings. More... #include Public Functions Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank Public Attributes Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS Detailed Description class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools Public Functions Documentation function Parameters Parameters () default constructor function Parameters explicit Parameters ( StringMap map ) construct from map function get Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist function key_exists bool key_exists ( std :: string key ) return if a key exists or not function set void set ( std :: string key , Variant value ) set a parameter based on a key function remove_entry void remove_entry ( std :: string key ) remove an entry function set_map void set_map ( StringMap map ) set underlying map function get_map StringMap get_map () const get underlying map function reset_parameters void reset_parameters () reset parameters to blank Public Attributes Documentation variable ANALYSIS_PARAMS static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; variable GROOM_PARAMS static constexpr const char * GROOM_PARAMS = \"groom\" ; variable OPTIMIZE_PARAMS static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; variable STUDIO_PARAMS static constexpr const char * STUDIO_PARAMS = \"studio\" ; variable PROJECT_PARAMS static constexpr const char * PROJECT_PARAMS = \"project\" ; variable DEEPSSM_PARAMS static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#shapeworksparameters","text":"Parameter settings. More... #include ","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions","text":"Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes","text":"Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#detailed-description","text":"class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters","text":"Parameters () default constructor","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters_1","text":"explicit Parameters ( StringMap map ) construct from map","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get","text":"Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist","title":"function get"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-key_exists","text":"bool key_exists ( std :: string key ) return if a key exists or not","title":"function key_exists"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set","text":"void set ( std :: string key , Variant value ) set a parameter based on a key","title":"function set"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-remove_entry","text":"void remove_entry ( std :: string key ) remove an entry","title":"function remove_entry"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set_map","text":"void set_map ( StringMap map ) set underlying map","title":"function set_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get_map","text":"StringMap get_map () const get underlying map","title":"function get_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-reset_parameters","text":"void reset_parameters () reset parameters to blank","title":"function reset_parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-analysis_params","text":"static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ;","title":"variable ANALYSIS_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-groom_params","text":"static constexpr const char * GROOM_PARAMS = \"groom\" ;","title":"variable GROOM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-optimize_params","text":"static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ;","title":"variable OPTIMIZE_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-studio_params","text":"static constexpr const char * STUDIO_PARAMS = \"studio\" ;","title":"variable STUDIO_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-project_params","text":"static constexpr const char * PROJECT_PARAMS = \"project\" ;","title":"variable PROJECT_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-deepssm_params","text":"static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable DEEPSSM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html","text":"shapeworks::ParticleArea Public Functions Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle Public Functions Documentation function assign_vertex_particles static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance function assign_vertex_colors static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids function assign_vertex_areas static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids function colors_from_lut static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors function compute_particle_triangle_areas static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#shapeworksparticlearea","text":"","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions","text":"Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_particles","text":"static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance","title":"function assign_vertex_particles"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_colors","text":"static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids","title":"function assign_vertex_colors"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_areas","text":"static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids","title":"function assign_vertex_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-colors_from_lut","text":"static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors","title":"function colors_from_lut"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-compute_particle_triangle_areas","text":"static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-24 at 22:16:01 +0000","title":"function compute_particle_triangle_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html","text":"shapeworks::ParticleAreaJob Inherits from shapeworks::Job , QObject Public Functions Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function ParticleAreaJob ParticleAreaJob ( QSharedPointer < Session > session ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_mean_areas inline const Eigen :: VectorXf & get_mean_areas () const function get_stddev_areas inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#shapeworksparticleareajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions","text":"Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-particleareajob","text":"ParticleAreaJob ( QSharedPointer < Session > session )","title":"function ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-name","text":"inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_mean_areas","text":"inline const Eigen :: VectorXf & get_mean_areas () const","title":"function get_mean_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_stddev_areas","text":"inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_stddev_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html","text":"shapeworks::ParticleAreaPanel Inherits from QWidget Public Slots Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete () Public Signals Name void update_view () Public Functions Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const Public Slots Documentation slot run_clicked void run_clicked () slot show_particle_area_clicked void show_particle_area_clicked () slot display_option_changed void display_option_changed () slot handle_job_progress void handle_job_progress ( int progress ) slot handle_job_complete void handle_job_complete () Public Signals Documentation signal update_view void update_view () Public Functions Documentation function ParticleAreaPanel ParticleAreaPanel ( QWidget * parent = 0 ) function ~ParticleAreaPanel ~ ParticleAreaPanel () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function reset void reset () function get_display_particle_area bool get_display_particle_area () const function get_computed_values Eigen :: VectorXf get_computed_values () const function get_computed_value_name std :: string get_computed_value_name () const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#shapeworksparticleareapanel","text":"Inherits from QWidget","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots","text":"Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals","text":"Name void update_view ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions","text":"Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-show_particle_area_clicked","text":"void show_particle_area_clicked ()","title":"slot show_particle_area_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-display_option_changed","text":"void display_option_changed ()","title":"slot display_option_changed"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_progress","text":"void handle_job_progress ( int progress )","title":"slot handle_job_progress"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_complete","text":"void handle_job_complete ()","title":"slot handle_job_complete"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel","text":"ParticleAreaPanel ( QWidget * parent = 0 )","title":"function ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel_1","text":"~ ParticleAreaPanel ()","title":"function ~ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_display_particle_area","text":"bool get_display_particle_area () const","title":"function get_display_particle_area"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_values","text":"Eigen :: VectorXf get_computed_values () const","title":"function get_computed_values"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_value_name","text":"std :: string get_computed_value_name () const Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_computed_value_name"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html","text":"shapeworks::ParticleColors Supplies particle colors. More... #include Inherits from QObject Public Types Name enum ParticleColorsType Public Functions Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct () Detailed Description class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles Public Types Documentation enum ParticleColorsType Enumerator Value Description Distinct 0 Original 1 Public Functions Documentation function Q_ENUM Q_ENUM ( ParticleColorsType ) function construct_distinct static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#shapeworksparticlecolors","text":"Supplies particle colors. More... #include Inherits from QObject","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types","text":"Name enum ParticleColorsType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions","text":"Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#detailed-description","text":"class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#enum-particlecolorstype","text":"Enumerator Value Description Distinct 0 Original 1","title":"enum ParticleColorsType"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-q_enum","text":"Q_ENUM ( ParticleColorsType )","title":"function Q_ENUM"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-construct_distinct","text":"static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-24 at 22:16:01 +0000","title":"function construct_distinct"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html","text":"shapeworks::ParticleDomain Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain Public Types Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation typedef Pointer typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ; using PointType using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations. using GradNType using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ; Public Functions Documentation function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleGradientAtPoint virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint function SampleNormalAtPoint virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint function Distance inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function GetCurvature virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius. function GetValidLocationNear virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages function DeletePartialDerivativeImages virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages function UpdateZeroCrossingPoint virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint function IsDomainFixed inline bool IsDomainFixed () const function GetDomainType virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType function GetConstraints inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const function GetPositionAfterSplit inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit function SetDomainID inline void SetDomainID ( int id ) function SetDomainName inline void SetDomainName ( std :: string name ) Protected Functions Documentation function ParticleDomain inline ParticleDomain () function ~ParticleDomain inline virtual ~ ParticleDomain () Protected Attributes Documentation variable m_FixedDomain bool m_FixedDomain { true }; variable m_DomainID int m_DomainID { -1 }; variable m_DomainName std :: string m_DomainName ; variable constraints std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#shapeworksparticledomain","text":"Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types","text":"Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions","text":"Name ParticleDomain () virtual ~ParticleDomain ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes","text":"Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-pointtype","text":"using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations.","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-gradntype","text":"using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectordoubletype","text":"using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ;","title":"using VectorDoubleType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectorfloattype","text":"using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ;","title":"using VectorFloatType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-invalidateparticleposition","text":"inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradientatpoint","text":"virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplenormalatpoint","text":"virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-distance","text":"inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getcurvature","text":"virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacemeancurvature","text":"virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacestddevcurvature","text":"virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getlowerbound","text":"virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getupperbound","text":"virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getzerocrossingpoint","text":"virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacearea","text":"virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getvalidlocationnear","text":"virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deleteimages","text":"virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deletepartialderivativeimages","text":"virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updatezerocrossingpoint","text":"virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-isdomainfixed","text":"inline bool IsDomainFixed () const","title":"function IsDomainFixed"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getdomaintype","text":"virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getconstraints","text":"inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const","title":"function GetConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getpositionaftersplit","text":"inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainid","text":"inline void SetDomainID ( int id )","title":"function SetDomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainname","text":"inline void SetDomainName ( std :: string name )","title":"function SetDomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain","text":"inline ParticleDomain ()","title":"function ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain_1","text":"inline virtual ~ ParticleDomain ()","title":"function ~ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_fixeddomain","text":"bool m_FixedDomain { true };","title":"variable m_FixedDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainid","text":"int m_DomainID { -1 };","title":"variable m_DomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainname","text":"std :: string m_DomainName ;","title":"variable m_DomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-constraints","text":"std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable constraints"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html","text":"shapeworks::ParticleEvent Inherits from itk::EventObject Public Types Name typedef ParticleEvent Self Public Functions Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const Public Types Documentation typedef Self typedef ParticleEvent shapeworks :: ParticleEvent :: Self ; Public Functions Documentation function ParticleEvent inline ParticleEvent () function ~ParticleEvent inline virtual ~ ParticleEvent () function ParticleEvent inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator= function operator= inline const ParticleEvent & operator = ( const ParticleEvent & v ) function GetEventName inline virtual const char * GetEventName () const Standard ITK event members. function CheckEvent inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const function MakeObject inline :: itk :: EventObject * MakeObject () const function SetPositionIndex inline void SetPositionIndex ( int i ) Get/Set the index value. function GetPositionIndex inline int GetPositionIndex () const function SetDomainIndex inline void SetDomainIndex ( int i ) Get/Set the Domain index value. function GetDomainIndex inline int GetDomainIndex () const Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#shapeworksparticleevent","text":"Inherits from itk::EventObject","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types","text":"Name typedef ParticleEvent Self","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions","text":"Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#typedef-self","text":"typedef ParticleEvent shapeworks :: ParticleEvent :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent","text":"inline ParticleEvent ()","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_1","text":"inline virtual ~ ParticleEvent ()","title":"function ~ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_2","text":"inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator=","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-operator","text":"inline const ParticleEvent & operator = ( const ParticleEvent & v )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-geteventname","text":"inline virtual const char * GetEventName () const Standard ITK event members.","title":"function GetEventName"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-checkevent","text":"inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const","title":"function CheckEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-makeobject","text":"inline :: itk :: EventObject * MakeObject () const","title":"function MakeObject"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setpositionindex","text":"inline void SetPositionIndex ( int i ) Get/Set the index value.","title":"function SetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getpositionindex","text":"inline int GetPositionIndex () const","title":"function GetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setdomainindex","text":"inline void SetDomainIndex ( int i ) Get/Set the Domain index value.","title":"function SetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getdomainindex","text":"inline int GetDomainIndex () const Updated on 2023-10-24 at 22:16:01 +0000","title":"function GetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html","text":"shapeworks::ParticleGaussianModeWriter More... Inherits from itk::DataObject Public Types Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const Protected Functions Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & ) Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName Detailed Description template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ; Public Types Documentation typedef Self typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ; typedef Superclass typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes. typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ; typedef PointType typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types. typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Update void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. function GetNumberOfModes inline int GetNumberOfModes () const function SetNumberOfModes inline void SetNumberOfModes ( int b ) function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function SetFileName inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix. function SetFileName inline void SetFileName ( const char * s ) function GetFileName inline const std :: string & GetFileName () const Protected Functions Documentation function ParticleGaussianModeWriter inline ParticleGaussianModeWriter () function ~ParticleGaussianModeWriter inline virtual ~ ParticleGaussianModeWriter () function operator= void operator = ( const ParticleGaussianModeWriter & ) function ParticleGaussianModeWriter ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ) Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_NumberOfModes int m_NumberOfModes ; variable m_FileName std :: string m_FileName ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#shapeworksparticlegaussianmodewriter","text":"More... Inherits from itk::DataObject","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types","text":"Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions","text":"Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions","text":"Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#detailed-description","text":"template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-self","text":"typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGaussianModeWriter , DataObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-update","text":"void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix.","title":"function Update"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getnumberofmodes","text":"inline int GetNumberOfModes () const","title":"function GetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setnumberofmodes","text":"inline void SetNumberOfModes ( int b )","title":"function SetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename","text":"inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix.","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename_1","text":"inline void SetFileName ( const char * s )","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter","text":"inline ParticleGaussianModeWriter ()","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_1","text":"inline virtual ~ ParticleGaussianModeWriter ()","title":"function ~ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-operator","text":"void operator = ( const ParticleGaussianModeWriter & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_2","text":"ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & )","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_numberofmodes","text":"int m_NumberOfModes ;","title":"variable m_NumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_filename","text":"std :: string m_FileName ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_FileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html","text":"shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. #include Public Types Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType Public Functions Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache) Public Types Documentation using MeanCurvatureCacheType using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; Public Functions Documentation function set_domains_per_shape inline void set_domains_per_shape ( int i ) function set_criterion_angle inline void set_criterion_angle ( double a ) function run_assessment std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#shapeworksparticlegoodbadassessment","text":"Performs good/bad points assessment and reports the bad positions of the particle system. #include ","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types","text":"Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions","text":"Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#using-meancurvaturecachetype","text":"using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_domains_per_shape","text":"inline void set_domains_per_shape ( int i )","title":"function set_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_criterion_angle","text":"inline void set_criterion_angle ( double a )","title":"function set_criterion_angle"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-run_assessment","text":"std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function run_assessment"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html","text":"shapeworks::ParticleNeighborhood More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood Public Types Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called. Public Types Documentation typedef Self typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations. using DomainType using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type. typedef PointVectorType typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function itkSetObjectMacro itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called. function itkGetConstObjectMacro itkGetConstObjectMacro ( PointContainer , PointContainerType ) function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points. function FindNeighborhoodPoints inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const function SetDomain inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures. function GetDomain inline DomainType :: Pointer GetDomain () const function AddPosition inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition function RemovePosition inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition Protected Functions Documentation function ParticleNeighborhood inline ParticleNeighborhood () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleNeighborhood inline virtual ~ ParticleNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#shapeworksparticleneighborhood","text":"More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types","text":"Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions","text":"Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-self","text":"typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointvectortype","text":"typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints.","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called.","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkgetconstobjectmacro","text":"itkGetConstObjectMacro ( PointContainer , PointContainerType )","title":"function itkGetConstObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_1","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_2","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_3","text":"inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setdomain","text":"inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-getdomain","text":"inline DomainType :: Pointer GetDomain () const","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-addposition","text":"inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setposition","text":"inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-removeposition","text":"inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood","text":"inline ParticleNeighborhood ()","title":"function ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood_1","text":"inline virtual ~ ParticleNeighborhood ()","title":"function ~ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html","text":"shapeworks::ParticleNormalEvaluation Public Functions Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions. Public Functions Documentation function evaluate_particle_normals static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ) function threshold_particle_normals static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ) function compute_particle_normals static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#shapeworksparticlenormalevaluation","text":"","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions","text":"Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-evaluate_particle_normals","text":"static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals )","title":"function evaluate_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-threshold_particle_normals","text":"static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees )","title":"function threshold_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-compute_particle_normals","text":"static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-24 at 22:16:01 +0000","title":"function compute_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html","text":"shapeworks::ParticleNormalEvaluationJob Inherits from shapeworks::Job , QObject Public Signals Name void result_ready (std::vector< bool > good_bad) Public Functions Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal result_ready void result_ready ( std :: vector < bool > good_bad ) Public Functions Documentation function ParticleNormalEvaluationJob ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_good_bad std :: vector < bool > get_good_bad () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#shapeworksparticlenormalevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals","text":"Name void result_ready (std::vector< bool > good_bad)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions","text":"Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#signal-result_ready","text":"void result_ready ( std :: vector < bool > good_bad )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-particlenormalevaluationjob","text":"ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees )","title":"function ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-get_good_bad","text":"std :: vector < bool > get_good_bad () Updated on 2023-10-24 at 22:16:01 +0000","title":"function get_good_bad"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html","text":"shapeworks::ParticleRegionDomain Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T > Public Types Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType Public Functions Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs typedef PointType typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations. Public Functions Documentation function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries. function GetUpperBound inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetLowerBound inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function SetUpperBound inline void SetUpperBound ( const PointType _UpperBound ) function SetLowerBound inline void SetLowerBound ( const PointType _LowerBound ) function SetRegion inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) Protected Functions Documentation function ParticleRegionDomain inline ParticleRegionDomain () function ~ParticleRegionDomain inline virtual ~ ParticleRegionDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function IsInsideBuffer inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#shapeworksparticleregiondomain","text":"Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T >","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types","text":"Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions","text":"Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#using-pointer","text":"using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType _UpperBound )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType _LowerBound )","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setregion","text":"inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound )","title":"function SetRegion"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain","text":"inline ParticleRegionDomain ()","title":"function ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain_1","text":"inline virtual ~ ParticleRegionDomain ()","title":"function ~ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-isinsidebuffer","text":"inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-24 at 22:16:01 +0000","title":"function IsInsideBuffer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html","text":"shapeworks::ParticleRegionNeighborhood More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood Protected Classes Name struct IteratorNodePair Public Types Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType Protected Types Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Additional inherited members Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Detailed Description class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef Self typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ; typedef PointTreeType typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location. Protected Types Documentation typedef IteratorMapType typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function SetDomain virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree. function itkSetMacro itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree. function itkGetMacro itkGetMacro ( TreeLevels , unsigned int ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function AddPosition virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition function RemovePosition virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition Protected Functions Documentation function ParticleRegionNeighborhood inline ParticleRegionNeighborhood () function ~ParticleRegionNeighborhood inline virtual ~ ParticleRegionNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_Tree PointTreeType :: Pointer m_Tree ; variable m_IteratorMap IteratorMapType :: Pointer m_IteratorMap ; variable m_TreeLevels unsigned int m_TreeLevels ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#shapeworksparticleregionneighborhood","text":"More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-classes","text":"Name struct IteratorNodePair","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types","text":"Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types","text":"Name typedef GenericContainer < IteratorNodePair > IteratorMapType","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions","text":"Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes","text":"Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood ()","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-self","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-superclass","text":"typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ;","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtreetype","text":"typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location.","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-iteratormaptype","text":"typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ;","title":"typedef IteratorMapType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setdomain","text":"virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itksetmacro","text":"itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree.","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkgetmacro","text":"itkGetMacro ( TreeLevels , unsigned int )","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-addposition","text":"virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setposition","text":"virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-removeposition","text":"virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood","text":"inline ParticleRegionNeighborhood ()","title":"function ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood_1","text":"inline virtual ~ ParticleRegionNeighborhood ()","title":"function ~ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_tree","text":"PointTreeType :: Pointer m_Tree ;","title":"variable m_Tree"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_iteratormap","text":"IteratorMapType :: Pointer m_IteratorMap ;","title":"variable m_IteratorMap"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_treelevels","text":"unsigned int m_TreeLevels ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable m_TreeLevels"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html","text":"shapeworks::ParticleShapeStatistics More... #include Public Functions Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix () Public Attributes Name constexpr static int VDimension Detailed Description class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids. Public Functions Documentation function ParticleShapeStatistics inline ParticleShapeStatistics () function ParticleShapeStatistics ParticleShapeStatistics ( std :: shared_ptr < Project > project ) function ~ParticleShapeStatistics inline ~ ParticleShapeStatistics () function DoPCA int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 ) function DoPCA int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function ImportPoints int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics. function ComputeMultiLevelAnalysisStatistics void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis. function ComputeShapeDevModesForMca int ComputeShapeDevModesForMca () Compute shape variations for MLCA. function ComputeRelPoseModesForMca int ComputeRelPoseModesForMca () Compute pose variations for MLCA. function SetNumberOfParticlesArray void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis) function ReadPointFiles int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics. function ReloadPointFiles int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. function WriteCSVFile int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. function WriteCSVFile2 int WriteCSVFile2 ( const std :: string & s ) function ComputeModes int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. function get_num_modes int get_num_modes () const Return the number of modes. function PrincipalComponentProjections int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first. function FisherLinearDiscriminant int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation. function SampleSize inline int SampleSize () const Returns the sample size. function Group1SampleSize inline int Group1SampleSize () const function Group2SampleSize inline int Group2SampleSize () const function NumberOfDimensions inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) function NumberOfObjects inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. function NumberOfPointsArray inline std :: vector < int > NumberOfPointsArray () function GroupID inline int GroupID ( unsigned int i ) const Returns the group ids. function GroupID inline const std :: vector < int > & GroupID () const function Eigenvectors inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values. function Eigenvalues inline const std :: vector < double > & Eigenvalues () const function EigenvectorsRelPose inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. function EigenvaluesShapeDev inline const std :: vector < double > & EigenvaluesShapeDev () function EigenvectorsShapeDev inline const Eigen :: MatrixXd & EigenvectorsShapeDev () function EigenvaluesRelPose inline const std :: vector < double > & EigenvaluesRelPose () function MeanShapeDev inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. function MeanRelPose inline const Eigen :: VectorXd & MeanRelPose () function Mean inline const Eigen :: VectorXd & Mean () const Returns the mean shape. function Group1Mean inline const Eigen :: VectorXd & Group1Mean () const function Group2Mean inline const Eigen :: VectorXd & Group2Mean () const function NormalizedGroupDifference inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. function GroupDifference inline const Eigen :: VectorXd & GroupDifference () const function ComputeMedianShape int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/ function L1Norm double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b. function PCALoadings inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings. function FishersLDA inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant. function ShapeMatrix inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix. function RecenteredShape inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. function PercentVarByMode inline const std :: vector < double > & PercentVarByMode () const function SimpleLinearRegression int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/ function get_compactness Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_specificity Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_generalization Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_group1_matrix Eigen :: MatrixXd get_group1_matrix () const function get_group2_matrix Eigen :: MatrixXd get_group2_matrix () const function matrix inline Eigen :: MatrixXd & matrix () Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#shapeworksparticleshapestatistics","text":"More... #include ","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions","text":"Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#detailed-description","text":"class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics","text":"inline ParticleShapeStatistics ()","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_1","text":"ParticleShapeStatistics ( std :: shared_ptr < Project > project )","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_2","text":"inline ~ ParticleShapeStatistics ()","title":"function ~ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca","text":"int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca_1","text":"int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-importpoints","text":"int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics.","title":"function ImportPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemultilevelanalysisstatistics","text":"void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis.","title":"function ComputeMultiLevelAnalysisStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computeshapedevmodesformca","text":"int ComputeShapeDevModesForMca () Compute shape variations for MLCA.","title":"function ComputeShapeDevModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computerelposemodesformca","text":"int ComputeRelPoseModesForMca () Compute pose variations for MLCA.","title":"function ComputeRelPoseModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-setnumberofparticlesarray","text":"void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis)","title":"function SetNumberOfParticlesArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-readpointfiles","text":"int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics.","title":"function ReadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-reloadpointfiles","text":"int ReloadPointFiles () Reloads a set of point files and recomputes some statistics.","title":"function ReloadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile","text":"int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis.","title":"function WriteCSVFile"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile2","text":"int WriteCSVFile2 ( const std :: string & s )","title":"function WriteCSVFile2"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemodes","text":"int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first.","title":"function ComputeModes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_num_modes","text":"int get_num_modes () const Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-principalcomponentprojections","text":"int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first.","title":"function PrincipalComponentProjections"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherlineardiscriminant","text":"int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation.","title":"function FisherLinearDiscriminant"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-samplesize","text":"inline int SampleSize () const Returns the sample size.","title":"function SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1samplesize","text":"inline int Group1SampleSize () const","title":"function Group1SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2samplesize","text":"inline int Group2SampleSize () const","title":"function Group2SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofdimensions","text":"inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension)","title":"function NumberOfDimensions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofobjects","text":"inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure.","title":"function NumberOfObjects"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofpointsarray","text":"inline std :: vector < int > NumberOfPointsArray ()","title":"function NumberOfPointsArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid","text":"inline int GroupID ( unsigned int i ) const Returns the group ids.","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid_1","text":"inline const std :: vector < int > & GroupID () const","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectors","text":"inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values.","title":"function Eigenvectors"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvalues","text":"inline const std :: vector < double > & Eigenvalues () const","title":"function Eigenvalues"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsrelpose","text":"inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA.","title":"function EigenvectorsRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesshapedev","text":"inline const std :: vector < double > & EigenvaluesShapeDev ()","title":"function EigenvaluesShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsshapedev","text":"inline const Eigen :: MatrixXd & EigenvectorsShapeDev ()","title":"function EigenvectorsShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesrelpose","text":"inline const std :: vector < double > & EigenvaluesRelPose ()","title":"function EigenvaluesRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanshapedev","text":"inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace.","title":"function MeanShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanrelpose","text":"inline const Eigen :: VectorXd & MeanRelPose ()","title":"function MeanRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-mean","text":"inline const Eigen :: VectorXd & Mean () const Returns the mean shape.","title":"function Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1mean","text":"inline const Eigen :: VectorXd & Group1Mean () const","title":"function Group1Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2mean","text":"inline const Eigen :: VectorXd & Group2Mean () const","title":"function Group2Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-normalizedgroupdifference","text":"inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean.","title":"function NormalizedGroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupdifference","text":"inline const Eigen :: VectorXd & GroupDifference () const","title":"function GroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemedianshape","text":"int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/","title":"function ComputeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-l1norm","text":"double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b.","title":"function L1Norm"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-pcaloadings","text":"inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings.","title":"function PCALoadings"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherslda","text":"inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant.","title":"function FishersLDA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-shapematrix","text":"inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix.","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-recenteredshape","text":"inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted.","title":"function RecenteredShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-percentvarbymode","text":"inline const std :: vector < double > & PercentVarByMode () const","title":"function PercentVarByMode"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-simplelinearregression","text":"int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/","title":"function SimpleLinearRegression"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_compactness","text":"Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_compactness"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_specificity","text":"Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_specificity"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_generalization","text":"Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_generalization"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group1_matrix","text":"Eigen :: MatrixXd get_group1_matrix () const","title":"function get_group1_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group2_matrix","text":"Eigen :: MatrixXd get_group2_matrix () const","title":"function get_group2_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-matrix","text":"inline Eigen :: MatrixXd & matrix ()","title":"function matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html","text":"shapeworks::ParticleSurfaceNeighborhood More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject Public Types Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType Public Functions Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood () Additional inherited members Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef TImage typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs typedef ImageType typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ; typedef Self typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ; typedef Superclass typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ; typedef NumericType typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ; typedef PointTreeType typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ; typedef GradientVectorType typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ; typedef DomainType typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ; Public Functions Documentation function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension. function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods). function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function SetWeightingEnabled inline void SetWeightingEnabled ( bool is_enabled ) function IsWeightingEnabled inline bool IsWeightingEnabled () const function SetForceEuclidean inline void SetForceEuclidean ( bool is_enabled ) function IsForceEuclidean inline bool IsForceEuclidean () const function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function ParticleSurfaceNeighborhood inline ParticleSurfaceNeighborhood () function ~ParticleSurfaceNeighborhood inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#shapeworksparticlesurfaceneighborhood","text":"More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types","text":"Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions","text":"Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions","text":"Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#additional-inherited-members","text":"Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-timage","text":"typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs","title":"typedef TImage"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-imagetype","text":"typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-self","text":"typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-superclass","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-numerictype","text":"typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ;","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtreetype","text":"typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ;","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-domaintype","text":"typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ;","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints_1","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setweightingenabled","text":"inline void SetWeightingEnabled ( bool is_enabled )","title":"function SetWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isweightingenabled","text":"inline bool IsWeightingEnabled () const","title":"function IsWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setforceeuclidean","text":"inline void SetForceEuclidean ( bool is_enabled )","title":"function SetForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isforceeuclidean","text":"inline bool IsForceEuclidean () const","title":"function IsForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood","text":"inline ParticleSurfaceNeighborhood ()","title":"function ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood_1","text":"inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-24 at 22:16:01 +0000","title":"function ~ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html","text":"shapeworks::ParticleSystem A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject Public Types Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const Protected Functions Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform () Public Attributes Name constexpr int VDimension Detailed Description class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame. Public Types Documentation typedef Self typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleSystem :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type. typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations. typedef NeighborhoodType typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain. typedef PointVectorType typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ; typedef TransformType typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used. typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ; typedef VnlMatrixType typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function RegisterObserver void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events. function SynchronizePositions inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync. function GetNumberOfParticles inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k. function AddPosition const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain. function SetPosition const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ) function RemovePosition void RemovePosition ( unsigned long int k , unsigned int d = 0 ) function GetPosition inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain. function GetPosition inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const function GetTransformedPosition inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function GetPrefixTransformedPosition inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function SplitAllParticles void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked. function SplitParticle void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ) function AdvancedAllParticleSplitting void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ) function PrintParticleSystem void PrintParticleSystem () function SetNeighborhood void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k. function SetNeighborhood inline void SetNeighborhood ( NeighborhoodType * n ) function GetNeighborhood inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain. function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function AddDomain void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id. function GetDomainsBegin inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains. function GetDomainsEnd inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains. function GetDomain inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object. function GetDomain inline DomainType * GetDomain () API for the single domain case. function GetDomain inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object. function GetDomain inline const DomainType * GetDomain () const API for the single domain case. function GetNumberOfDomains inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system. function SetTransform void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed. function SetTransform inline void SetTransform ( const TransformType & p ) function SetPrefixTransform void SetPrefixTransform ( unsigned int i , const TransformType & ) function SetPrefixTransform inline void SetPrefixTransform ( const TransformType & p ) function GetTransformsBegin inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms. function GetTransformsEnd inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetTransform inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object. function GetTransform inline const TransformType & GetTransform () const API for the single transform case. function GetTransform inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object. function GetTransform inline TransformType GetTransform () API for the single transform case. function GetPrefixTransform inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetPrefixTransform inline const TransformType & GetPrefixTransform () const API for the single transform case. function GetPrefixTransform inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object. function GetPrefixTransform inline TransformType GetPrefixTransform () API for the single transform case. function GetInverseTransformsBegin inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms. function GetInverseTransformsEnd inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetInverseTransform inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object. function GetInverseTransform inline const TransformType & GetInverseTransform () const API for the single transform case. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform () const API for the single transform case. function GetPositions inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions. function GetPositions inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const function AddPositionList void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number. function TransformPoint PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.) function TransformVector VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported. function TransformNormalDerivative VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space. function InvertTransform inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix. function FlagDomain inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system. function UnflagDomain inline void UnflagDomain ( unsigned int i ) function GetDomainFlag inline bool GetDomainFlag ( unsigned int i ) const function GetDomainFlags inline const std :: vector < bool > & GetDomainFlags () const function SetDomainFlags inline void SetDomainFlags () function ResetDomainFlags inline void ResetDomainFlags () function SetFixedParticleFlag inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed. function ResetFixedParticleFlag inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) function GetFixedParticleFlag inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const function ResetFixedParticleFlags inline void ResetFixedParticleFlags () function SetDomainsPerShape inline void SetDomainsPerShape ( unsigned int num ) function GetDomainsPerShape inline unsigned int GetDomainsPerShape () const function SetNumberOfDomains void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists. function ComputeMaxDistNearestNeighbors double ComputeMaxDistNearestNeighbors ( size_t dom ) function SetFieldAttributes inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) function GetFieldAttributes inline const std :: vector < std :: string > & GetFieldAttributes () const Protected Functions Documentation function ParticleSystem ParticleSystem () function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleSystem inline virtual ~ ParticleSystem () function GetInverseTransform inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object. function GetInverseTransform inline TransformType & GetInverseTransform () API for the single transform case. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform () API for the single transform case. Public Attributes Documentation variable VDimension static constexpr int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#shapeworksparticlesystem","text":"A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types","text":"Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions","text":"Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes","text":"Name constexpr int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#detailed-description","text":"class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-self","text":"typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleSystem :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#using-domaintype","text":"using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-neighborhoodtype","text":"typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain.","title":"typedef NeighborhoodType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointvectortype","text":"typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-transformtype","text":"typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used.","title":"typedef TransformType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vnlmatrixtype","text":"typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-registerobserver","text":"void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events.","title":"function RegisterObserver"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-synchronizepositions","text":"inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync.","title":"function SynchronizePositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofparticles","text":"inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addposition","text":"const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setposition","text":"const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 )","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-removeposition","text":"void RemovePosition ( unsigned long int k , unsigned int d = 0 )","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition","text":"inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain.","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition_1","text":"inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformedposition","text":"inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransformedposition","text":"inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPrefixTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitallparticles","text":"void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked.","title":"function SplitAllParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitparticle","text":"void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 )","title":"function SplitParticle"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-advancedallparticlesplitting","text":"void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process )","title":"function AdvancedAllParticleSplitting"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printparticlesystem","text":"void PrintParticleSystem ()","title":"function PrintParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood","text":"void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k.","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood_1","text":"inline void SetNeighborhood ( NeighborhoodType * n )","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getneighborhood","text":"inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const","title":"function GetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_1","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_2","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_3","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_4","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_5","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-adddomain","text":"void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id.","title":"function AddDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsbegin","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains.","title":"function GetDomainsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsend","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains.","title":"function GetDomainsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain","text":"inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_1","text":"inline DomainType * GetDomain () API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_2","text":"inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_3","text":"inline const DomainType * GetDomain () const API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofdomains","text":"inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system.","title":"function GetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform","text":"void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed.","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform_1","text":"inline void SetTransform ( const TransformType & p )","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform","text":"void SetPrefixTransform ( unsigned int i , const TransformType & )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform_1","text":"inline void SetPrefixTransform ( const TransformType & p )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms.","title":"function GetTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform","text":"inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_1","text":"inline const TransformType & GetTransform () const API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_2","text":"inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_3","text":"inline TransformType GetTransform () API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform","text":"inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_1","text":"inline const TransformType & GetPrefixTransform () const API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_2","text":"inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_3","text":"inline TransformType GetPrefixTransform () API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms.","title":"function GetInverseTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetInverseTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform","text":"inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_1","text":"inline const TransformType & GetInverseTransform () const API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform","text":"inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_1","text":"inline const TransformType & GetInversePrefixTransform () const API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions","text":"inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions.","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions_1","text":"inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addpositionlist","text":"void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number.","title":"function AddPositionList"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformpoint","text":"PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.)","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformvector","text":"VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported.","title":"function TransformVector"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformnormalderivative","text":"VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space.","title":"function TransformNormalDerivative"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-inverttransform","text":"inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix.","title":"function InvertTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-flagdomain","text":"inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system.","title":"function FlagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-unflagdomain","text":"inline void UnflagDomain ( unsigned int i )","title":"function UnflagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflag","text":"inline bool GetDomainFlag ( unsigned int i ) const","title":"function GetDomainFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflags","text":"inline const std :: vector < bool > & GetDomainFlags () const","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainflags","text":"inline void SetDomainFlags ()","title":"function SetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetdomainflags","text":"inline void ResetDomainFlags ()","title":"function ResetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfixedparticleflag","text":"inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed.","title":"function SetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflag","text":"inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i )","title":"function ResetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfixedparticleflag","text":"inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const","title":"function GetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflags","text":"inline void ResetFixedParticleFlags ()","title":"function ResetFixedParticleFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( unsigned int num )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainspershape","text":"inline unsigned int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setnumberofdomains","text":"void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists.","title":"function SetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-computemaxdistnearestneighbors","text":"double ComputeMaxDistNearestNeighbors ( size_t dom )","title":"function ComputeMaxDistNearestNeighbors"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfieldattributes","text":"inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfieldattributes","text":"inline const std :: vector < std :: string > & GetFieldAttributes () const","title":"function GetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem","text":"ParticleSystem ()","title":"function ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem_1","text":"inline virtual ~ ParticleSystem ()","title":"function ~ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_2","text":"inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_3","text":"inline TransformType & GetInverseTransform () API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_2","text":"inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_3","text":"inline TransformType & GetInversePrefixTransform () API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#variable-vdimension","text":"static constexpr int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html","text":"shapeworks::ParticleSystemCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#shapeworksparticlesystemcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:01 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html","text":"shapeworks::ParticleSystemEvaluation Public Functions Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points) Friends Name struct SharedCommandData Public Functions Documentation function ParticleSystemEvaluation ParticleSystemEvaluation ( const std :: vector < std :: string > & paths ) function ParticleSystemEvaluation ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ) function Particles inline const Eigen :: MatrixXd & Particles () const function Paths inline const std :: vector < std :: string > & Paths () const function N inline int N () const Number of samples. function D inline int D () const Dimensions (e.g. x/y/z * number of particles) function ExactCompare bool ExactCompare ( const ParticleSystemEvaluation & other ) const function EvaluationCompare bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const function ReadParticleFile static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ) Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#shapeworksparticlesystemevaluation","text":"","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions","text":"Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation","text":"ParticleSystemEvaluation ( const std :: vector < std :: string > & paths )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation_1","text":"ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particles","text":"inline const Eigen :: MatrixXd & Particles () const","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-paths","text":"inline const std :: vector < std :: string > & Paths () const","title":"function Paths"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-n","text":"inline int N () const Number of samples.","title":"function N"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-d","text":"inline int D () const Dimensions (e.g. x/y/z * number of particles)","title":"function D"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-exactcompare","text":"bool ExactCompare ( const ParticleSystemEvaluation & other ) const","title":"function ExactCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-evaluationcompare","text":"bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const","title":"function EvaluationCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-readparticlefile","text":"static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points )","title":"function ReadParticleFile"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-24 at 22:16:01 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1Particles.html","text":"shapeworks::Particles Representation of correspondence points for a shape including multiple domains. More... #include Public Functions Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points) Detailed Description class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points Public Functions Documentation function Particles Particles () = default function set_local_particles void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_world_particles void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_local_particles void set_local_particles ( int domain , Eigen :: VectorXd particles ) function set_world_particles void set_world_particles ( int domain , Eigen :: VectorXd particles ) function get_local_particles std :: vector < Eigen :: VectorXd > get_local_particles () const function get_world_particles std :: vector < Eigen :: VectorXd > get_world_particles () const function get_local_particles Eigen :: VectorXd get_local_particles ( int domain ) function get_world_particles Eigen :: VectorXd get_world_particles ( int domain ) function get_raw_world_particles Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer. function get_combined_local_particles Eigen :: VectorXd get_combined_local_particles () const function get_combined_global_particles Eigen :: VectorXd get_combined_global_particles () const function set_combined_global_particles void set_combined_global_particles ( const Eigen :: VectorXd & particles ) function get_local_points std :: vector < itk :: Point < double > > get_local_points ( int domain ) function get_world_points std :: vector < itk :: Point < double > > get_world_points ( int domain ) function get_domain_for_combined_id int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together. function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function set_procrustes_transforms void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms ) function set_alignment_type void set_alignment_type ( int alignment ) function get_difference_vectors Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const function save_particles_file static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#shapeworksparticles","text":"Representation of correspondence points for a shape including multiple domains. More... #include ","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions","text":"Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Particles.html#detailed-description","text":"class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-particles","text":"Particles () = default","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles","text":"void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles","text":"void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles_1","text":"void set_local_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles_1","text":"void set_world_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles","text":"std :: vector < Eigen :: VectorXd > get_local_particles () const","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles","text":"std :: vector < Eigen :: VectorXd > get_world_particles () const","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles_1","text":"Eigen :: VectorXd get_local_particles ( int domain )","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles_1","text":"Eigen :: VectorXd get_world_particles ( int domain )","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_raw_world_particles","text":"Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer.","title":"function get_raw_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_local_particles","text":"Eigen :: VectorXd get_combined_local_particles () const","title":"function get_combined_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_global_particles","text":"Eigen :: VectorXd get_combined_global_particles () const","title":"function get_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_combined_global_particles","text":"void set_combined_global_particles ( const Eigen :: VectorXd & particles )","title":"function set_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_points","text":"std :: vector < itk :: Point < double > > get_local_points ( int domain )","title":"function get_local_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_points","text":"std :: vector < itk :: Point < double > > get_world_points ( int domain )","title":"function get_world_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_domain_for_combined_id","text":"int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together.","title":"function get_domain_for_combined_id"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms )","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment )","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_difference_vectors","text":"Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const","title":"function get_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-save_particles_file","text":"static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-24 at 22:16:01 +0000","title":"function save_particles_file"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html","text":"shapeworks::PhysicalRegion physical bounds of a 3d region of space #include Public Functions Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Point min Point max Public Functions Documentation function PhysicalRegion PhysicalRegion ( const PhysicalRegion & ) = default function PhysicalRegion inline PhysicalRegion ( const Point & _min , const Point & _max ) function PhysicalRegion inline PhysicalRegion () function operator== inline bool operator == ( const PhysicalRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Point origin () const function size inline Point size () const function shrink PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both function expand PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both function expand PhysicalRegion & expand ( const Point & pt ) expand this region to include this point function pad PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Point min ; variable max Point max ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#shapeworksphysicalregion","text":"physical bounds of a 3d region of space #include ","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions","text":"Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes","text":"Name Point min Point max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion","text":"PhysicalRegion ( const PhysicalRegion & ) = default","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_1","text":"inline PhysicalRegion ( const Point & _min , const Point & _max )","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_2","text":"inline PhysicalRegion ()","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-operator","text":"inline bool operator == ( const PhysicalRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-origin","text":"inline Point origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-size","text":"inline Point size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-shrink","text":"PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both","title":"function shrink"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand","text":"PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand_1","text":"PhysicalRegion & expand ( const Point & pt ) expand this region to include this point","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-pad","text":"PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-min","text":"Point min ;","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-max","text":"Point max ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1PickResult.html","text":"shapeworks::PickResult Public Attributes Name Shape::Point pos_ int domain_ int subject_ Public Attributes Documentation variable pos_ Shape :: Point pos_ ; variable domain_ int domain_ = -1 ; variable subject_ int subject_ = -1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#shapeworkspickresult","text":"","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes","text":"Name Shape::Point pos_ int domain_ int subject_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-pos_","text":"Shape :: Point pos_ ;","title":"variable pos_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-subject_","text":"int subject_ = -1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable subject_"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html","text":"shapeworks::PlaneConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function getPlaneNormal inline Eigen :: Vector3d getPlaneNormal () Get plane normal. function setPlaneNormal inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal. function getPlanePoint inline Eigen :: Vector3d getPlanePoint () Get plane center point. function setPlanePoint inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point. function setPlanePoint inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point. function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function points inline std :: vector < Eigen :: Vector3d > & points () function getOffset double getOffset () function setOffset void setOffset ( double offset ) function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function updatePlaneFromPoints void updatePlaneFromPoints () function getVTKPlane vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#shapeworksplaneconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions","text":"Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#detailed-description","text":"class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-print","text":"virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanenormal","text":"inline Eigen :: Vector3d getPlaneNormal () Get plane normal.","title":"function getPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanenormal","text":"inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal.","title":"function setPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanepoint","text":"inline Eigen :: Vector3d getPlanePoint () Get plane center point.","title":"function getPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint","text":"inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint_1","text":"inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-points","text":"inline std :: vector < Eigen :: Vector3d > & points ()","title":"function points"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getoffset","text":"double getOffset ()","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setoffset","text":"void setOffset ( double offset )","title":"function setOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-updateplanefrompoints","text":"void updatePlaneFromPoints ()","title":"function updatePlaneFromPoints"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getvtkplane","text":"vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-24 at 22:16:01 +0000","title":"function getVTKPlane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html","text":"shapeworks::PlaneWidget PlaneWidget . More... #include Public Functions Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane. Detailed Description class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes Public Functions Documentation function PlaneWidget PlaneWidget ( Viewer * viewer ) function ~PlaneWidget ~ PlaneWidget () function update void update () Update the widget from shape data. function store_positions void store_positions () Store positions back to shape data (this is called by callback) function update_glyph_properties void update_glyph_properties () Update the sizes and detail of control spheres. function clear_planes void clear_planes () Clear point handles and planes. function handle_right_click void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point. function delete_plane void delete_plane ( int domain , int plane_id ) Delete a particular plane. function flip_plane void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane. function apply_plane void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste) function set_plane_offset void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane. function finalize_plane_offset void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#shapeworksplanewidget","text":"PlaneWidget . More... #include ","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions","text":"Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#detailed-description","text":"class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget","text":"PlaneWidget ( Viewer * viewer )","title":"function PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget_1","text":"~ PlaneWidget ()","title":"function ~PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update","text":"void update () Update the widget from shape data.","title":"function update"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-store_positions","text":"void store_positions () Store positions back to shape data (this is called by callback)","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update_glyph_properties","text":"void update_glyph_properties () Update the sizes and detail of control spheres.","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-clear_planes","text":"void clear_planes () Clear point handles and planes.","title":"function clear_planes"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-handle_right_click","text":"void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-delete_plane","text":"void delete_plane ( int domain , int plane_id ) Delete a particular plane.","title":"function delete_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-flip_plane","text":"void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane.","title":"function flip_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-apply_plane","text":"void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste)","title":"function apply_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-set_plane_offset","text":"void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane.","title":"function set_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-finalize_plane_offset","text":"void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-24 at 22:16:01 +0000","title":"function finalize_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html","text":"shapeworks::PowerOfTwoPointTree More... #include Inherits from itk::DataObject Public Types Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ; typedef NodeType typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node. typedef NodePointerType typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes. typedef PointType typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds. typedef PointListType typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType. typedef PointIteratorListType typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node. function itkGetMacro itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree. function ConstructTree void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively. function FindPointsInRegion PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound. function FindPointsInRegion unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const function GetNode NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point. function GetNode const NodePointerType GetNode ( const PointType & ) const function itkGetObjectMacro itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree. function itkSetObjectMacro itkSetObjectMacro ( Root , NodeType ) function AddPoint PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception. function AddPoint inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) function Overlap bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise. function RegionContains inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function PowerOfTwoPointTree inline PowerOfTwoPointTree () function ~PowerOfTwoPointTree inline virtual ~ PowerOfTwoPointTree () function BranchNode void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree. function FindOneNodeInRegion void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively. Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#shapeworkspoweroftwopointtree","text":"More... #include Inherits from itk::DataObject","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types","text":"Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions","text":"Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-self","text":"typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-superclass","text":"typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodetype","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node.","title":"typedef NodeType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodepointertype","text":"typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes.","title":"typedef NodePointerType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointtype","text":"typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointlisttype","text":"typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointiteratorlisttype","text":"typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ;","title":"typedef PointIteratorListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetmacro","text":"itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-constructtree","text":"void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively.","title":"function ConstructTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion","text":"PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound.","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion_1","text":"unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode","text":"NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point.","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode_1","text":"const NodePointerType GetNode ( const PointType & ) const","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( Root , NodeType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint","text":"PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception.","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint_1","text":"inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i )","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-overlap","text":"bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise.","title":"function Overlap"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-regioncontains","text":"inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const","title":"function RegionContains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree","text":"inline PowerOfTwoPointTree ()","title":"function PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree_1","text":"inline virtual ~ PowerOfTwoPointTree ()","title":"function ~PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-branchnode","text":"void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree.","title":"function BranchNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findonenodeinregion","text":"void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively.","title":"function FindOneNodeInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html","text":"shapeworks::PowerOfTwoPointTreeNode More... #include Inherits from itk::LightObject Public Types Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType Public Functions Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList () Protected Functions Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o) Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes. typedef PointListType typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices. Public Functions Documentation function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc. function operator== inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type. function IsLeaf inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing. function InsertElement inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node. function Contains inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise. function SetLowerBound inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node. function GetLowerBound inline const PointType & GetLowerBound () const function SetUpperBound inline void SetUpperBound ( const PointType & p ) function GetUpperBound inline const PointType & GetUpperBound () const function GetBranches inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes. function GetBranches inline const Self :: Pointer * GetBranches () const function GetBranch inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch function GetBranch inline const Self :: Pointer & GetBranch ( unsigned int i ) const function SetBranch inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node. function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method. function GetList inline const PointListType & GetList () const Get the list of elements which contain points and associated indices. function GetList inline PointListType & GetList () Protected Functions Documentation function PowerOfTwoPointTreeNode inline PowerOfTwoPointTreeNode () function ~PowerOfTwoPointTreeNode inline ~ PowerOfTwoPointTreeNode () function PowerOfTwoPointTreeNode PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ) function operator= const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#shapeworkspoweroftwopointtreenode","text":"More... #include Inherits from itk::LightObject","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types","text":"Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions","text":"Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions","text":"Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-self","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointlisttype","text":"typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator","text":"inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type.","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-isleaf","text":"inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing.","title":"function IsLeaf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-insertelement","text":"inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node.","title":"function InsertElement"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-contains","text":"inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise.","title":"function Contains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node.","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlowerbound","text":"inline const PointType & GetLowerBound () const","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType & p )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getupperbound","text":"inline const PointType & GetUpperBound () const","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches","text":"inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes.","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches_1","text":"inline const Self :: Pointer * GetBranches () const","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch","text":"inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch_1","text":"inline const Self :: Pointer & GetBranch ( unsigned int i ) const","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setbranch","text":"inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node.","title":"function SetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method.","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist","text":"inline const PointListType & GetList () const Get the list of elements which contain points and associated indices.","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist_1","text":"inline PointListType & GetList ()","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode","text":"inline PowerOfTwoPointTreeNode ()","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_1","text":"inline ~ PowerOfTwoPointTreeNode ()","title":"function ~PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_2","text":"PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o )","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator_1","text":"const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html","text":"shapeworks::PreferencesWindow Qt UI dialog to control preferences. More... #include Inherits from QDialog Public Slots Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences () Public Signals Name void clear_cache () void update_view () void slider_update () Public Functions Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override Detailed Description class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object Public Slots Documentation slot on_mesh_cache_enabled_stateChanged void on_mesh_cache_enabled_stateChanged ( int state ) slot on_mesh_cache_memory_valueChanged void on_mesh_cache_memory_valueChanged ( int value ) slot on_color_scheme_currentIndexChanged void on_color_scheme_currentIndexChanged ( int index ) slot on_pca_range_valueChanged void on_pca_range_valueChanged ( double value ) slot on_pca_steps_valueChanged void on_pca_steps_valueChanged ( int value ) slot on_parallel_enabled_toggled void on_parallel_enabled_toggled ( bool b ) slot on_num_threads_valueChanged void on_num_threads_valueChanged ( int i ) slot accept void accept () override slot restore_defaults void restore_defaults () slot save_to_preferences void save_to_preferences () Public Signals Documentation signal clear_cache void clear_cache () signal update_view void update_view () signal slider_update void slider_update () Public Functions Documentation function PreferencesWindow PreferencesWindow ( QWidget * parent , Preferences & prefs ) function set_values_from_preferences void set_values_from_preferences () function closeEvent void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#shapeworkspreferenceswindow","text":"Qt UI dialog to control preferences. More... #include Inherits from QDialog","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots","text":"Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals","text":"Name void clear_cache () void update_view () void slider_update ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions","text":"Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#detailed-description","text":"class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_enabled_statechanged","text":"void on_mesh_cache_enabled_stateChanged ( int state )","title":"slot on_mesh_cache_enabled_stateChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_memory_valuechanged","text":"void on_mesh_cache_memory_valueChanged ( int value )","title":"slot on_mesh_cache_memory_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_color_scheme_currentindexchanged","text":"void on_color_scheme_currentIndexChanged ( int index )","title":"slot on_color_scheme_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_range_valuechanged","text":"void on_pca_range_valueChanged ( double value )","title":"slot on_pca_range_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_steps_valuechanged","text":"void on_pca_steps_valueChanged ( int value )","title":"slot on_pca_steps_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_parallel_enabled_toggled","text":"void on_parallel_enabled_toggled ( bool b )","title":"slot on_parallel_enabled_toggled"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_num_threads_valuechanged","text":"void on_num_threads_valueChanged ( int i )","title":"slot on_num_threads_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-accept","text":"void accept () override","title":"slot accept"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-save_to_preferences","text":"void save_to_preferences ()","title":"slot save_to_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-clear_cache","text":"void clear_cache ()","title":"signal clear_cache"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-slider_update","text":"void slider_update ()","title":"signal slider_update"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-preferenceswindow","text":"PreferencesWindow ( QWidget * parent , Preferences & prefs )","title":"function PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-set_values_from_preferences","text":"void set_values_from_preferences ()","title":"function set_values_from_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-24 at 22:16:01 +0000","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html","text":"shapeworks::ProcrustesRegistration Public Types Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType Public Functions Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation) Public Types Documentation using Pointer using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ; using ParticleSystemType using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ; using PointType using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ; Public Functions Documentation function SetParticleSystem inline void SetParticleSystem ( ParticleSystemType * p ) function GetParticleSystem inline ParticleSystemType * GetParticleSystem () const function GetParticleSystem inline ParticleSystemType * GetParticleSystem () function RunRegistration void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object. function RunRegistration void RunRegistration () Run registration on all domains. function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. function GetDomainsPerShape inline int GetDomainsPerShape () const function GetScaling inline bool GetScaling () const function SetScaling inline void SetScaling ( bool scaling ) function GetRotationTranslation inline bool GetRotationTranslation () const function SetRotationTranslation inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#shapeworksprocrustesregistration","text":"","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types","text":"Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions","text":"Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointer","text":"using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-particlesystemtype","text":"using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ;","title":"using ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointtype","text":"using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setparticlesystem","text":"inline void SetParticleSystem ( ParticleSystemType * p )","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem","text":"inline ParticleSystemType * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem_1","text":"inline ParticleSystemType * GetParticleSystem ()","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration","text":"void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration_1","text":"void RunRegistration () Run registration on all domains.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setscaling","text":"inline void SetScaling ( bool scaling )","title":"function SetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setrotationtranslation","text":"inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function SetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Project.html","text":"shapeworks::Project Representation of a project. More... #include Public Types Name using std::map< std::string, std::string > StringMap Public Functions Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types. Detailed Description class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data. Public Types Documentation using StringMap using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ; Public Functions Documentation function Project Project () function ~Project ~ Project () function load bool load ( const std :: string & filename ) Load from project file. function save bool save ( const std :: string & filename ) Save to project file. function set_project_path void set_project_path ( const std :: string & path ) Set the project path. function get_filename std :: string get_filename () Return the filename. function set_filename void set_filename ( std :: string filename ) Set project filename. function get_headers std :: vector < std :: string > get_headers () Return the headers of the subject sheet. function get_string_column std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name. function get_number_of_subjects int get_number_of_subjects () Return the number of subjects in the project. function get_number_of_domains_per_subject int get_number_of_domains_per_subject () Return the number of domains. function get_domain_names std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) function set_domain_names void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names. function get_subjects std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference) function set_subjects void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects. function update_subjects void update_subjects () function get_originals_present bool get_originals_present () const Return if originals are present. function get_groomed_present bool get_groomed_present () const Return if groomed files are present. function get_particles_present bool get_particles_present () const Return if particle files are present. function get_images_present bool get_images_present () Return if images are present (e.g. CT/MRI) function get_fixed_subjects_present bool get_fixed_subjects_present () Return if there are fixed subjects present. function get_feature_names std :: vector < std :: string > get_feature_names () Get feature names. function get_image_names std :: vector < std :: string > get_image_names () Get image names. function get_group_names std :: vector < std :: string > get_group_names () Get group names. function get_group_values std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values. function get_parameters Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key. function get_parameter_map std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name. function set_parameter_map void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name. function set_parameters void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key. function clear_parameters void clear_parameters ( const std :: string & name ) Clear parameters based on key. function get_supported_version int get_supported_version () const Get the supported version (this version of the code) function get_version int get_version () const Get the version of the currently loaded project. function get_landmarks std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain. function get_all_landmark_definitions std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. function set_landmark_definitions void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions. function get_landmarks_present bool get_landmarks_present () Return if landmarks are present. function set_landmarks void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project. function new_landmark void new_landmark ( int domain_id ) Add a new landmark. function get_original_domain_types std :: vector < DomainType > get_original_domain_types () Return the original domain types. function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types. function set_original_domain_types void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types. function set_groomed_domain_types void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#shapeworksproject","text":"Representation of a project. More... #include ","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types","text":"Name using std::map< std::string, std::string > StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions","text":"Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Project.html#detailed-description","text":"class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#using-stringmap","text":"using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project","text":"Project ()","title":"function Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project_1","text":"~ Project ()","title":"function ~Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-load","text":"bool load ( const std :: string & filename ) Load from project file.","title":"function load"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-save","text":"bool save ( const std :: string & filename ) Save to project file.","title":"function save"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_project_path","text":"void set_project_path ( const std :: string & path ) Set the project path.","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_filename","text":"std :: string get_filename () Return the filename.","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_filename","text":"void set_filename ( std :: string filename ) Set project filename.","title":"function set_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_headers","text":"std :: vector < std :: string > get_headers () Return the headers of the subject sheet.","title":"function get_headers"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_string_column","text":"std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name.","title":"function get_string_column"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_subjects","text":"int get_number_of_subjects () Return the number of subjects in the project.","title":"function get_number_of_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_domains_per_subject","text":"int get_number_of_domains_per_subject () Return the number of domains.","title":"function get_number_of_domains_per_subject"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_domain_names","text":"std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc)","title":"function get_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_domain_names","text":"void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names.","title":"function set_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_subjects","text":"std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference)","title":"function get_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_subjects","text":"void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects.","title":"function set_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-update_subjects","text":"void update_subjects ()","title":"function update_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_originals_present","text":"bool get_originals_present () const Return if originals are present.","title":"function get_originals_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_present","text":"bool get_groomed_present () const Return if groomed files are present.","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_particles_present","text":"bool get_particles_present () const Return if particle files are present.","title":"function get_particles_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_images_present","text":"bool get_images_present () Return if images are present (e.g. CT/MRI)","title":"function get_images_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_fixed_subjects_present","text":"bool get_fixed_subjects_present () Return if there are fixed subjects present.","title":"function get_fixed_subjects_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_feature_names","text":"std :: vector < std :: string > get_feature_names () Get feature names.","title":"function get_feature_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_image_names","text":"std :: vector < std :: string > get_image_names () Get image names.","title":"function get_image_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_names","text":"std :: vector < std :: string > get_group_names () Get group names.","title":"function get_group_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_values","text":"std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameters","text":"Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key.","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameter_map","text":"std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name.","title":"function get_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameter_map","text":"void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name.","title":"function set_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameters","text":"void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key.","title":"function set_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-clear_parameters","text":"void clear_parameters ( const std :: string & name ) Clear parameters based on key.","title":"function clear_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_supported_version","text":"int get_supported_version () const Get the supported version (this version of the code)","title":"function get_supported_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_version","text":"int get_version () const Get the version of the currently loaded project.","title":"function get_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks","text":"std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain.","title":"function get_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_all_landmark_definitions","text":"std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions.","title":"function get_all_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmark_definitions","text":"void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions.","title":"function set_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks_present","text":"bool get_landmarks_present () Return if landmarks are present.","title":"function get_landmarks_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmarks","text":"void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project.","title":"function set_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-new_landmark","text":"void new_landmark ( int domain_id ) Add a new landmark.","title":"function new_landmark"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_original_domain_types","text":"std :: vector < DomainType > get_original_domain_types () Return the original domain types.","title":"function get_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types.","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_original_domain_types","text":"void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types.","title":"function set_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_groomed_domain_types","text":"void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html","text":"shapeworks::ProjectCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#shapeworksprojectcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html","text":"shapeworks::ProjectReader Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader Public Types Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0 Protected Functions Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes Name Project & project_ Detailed Description class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers Public Types Documentation using StringMapList using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ; using StringMap using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ; using StringMultiMap using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ; Public Functions Documentation function ProjectReader ProjectReader ( Project & project ) Constructor. function ~ProjectReader virtual ~ ProjectReader () = default Destructor. function read_project virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters Protected Functions Documentation function load_subjects void load_subjects ( StringMapList list ) Load subjects from string map list. function load_parameters void load_parameters () function load_parameter void load_parameter ( std :: string name , StringMap map ) function load_landmark_definitions void load_landmark_definitions ( StringMapList list ) function contains bool contains ( StringMap map , std :: string key ) function get_keys static StringList get_keys ( StringMap map ) Protected Attributes Documentation variable project_ Project & project_ ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#shapeworksprojectreader","text":"Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types","text":"Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions","text":"Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions","text":"Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes","text":"Name Project & project_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#detailed-description","text":"class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmaplist","text":"using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ;","title":"using StringMapList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmap","text":"using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringlist","text":"using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmultimap","text":"using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ;","title":"using StringMultiMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader","text":"ProjectReader ( Project & project ) Constructor.","title":"function ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader_1","text":"virtual ~ ProjectReader () = default Destructor.","title":"function ~ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_subjects","text":"void load_subjects ( StringMapList list ) Load subjects from string map list.","title":"function load_subjects"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameters","text":"void load_parameters ()","title":"function load_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameter","text":"void load_parameter ( std :: string name , StringMap map )","title":"function load_parameter"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_landmark_definitions","text":"void load_landmark_definitions ( StringMapList list )","title":"function load_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-contains","text":"bool contains ( StringMap map , std :: string key )","title":"function contains"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_keys","text":"static StringList get_keys ( StringMap map )","title":"function get_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#variable-project_","text":"Project & project_ ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html","text":"shapeworks::ProjectUtils Public Types Name using project::types::StringList StringList using project::types::StringMap StringMap Public Functions Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject) Public Types Documentation using StringList using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ; using StringMap using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ; Public Functions Documentation function convert_transform static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform function convert_transform static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) function determine_domain_names static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys function determine_domain_types static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types function get_input_prefixes static StringList get_input_prefixes () return a list of the input prefixes function get_groomed_prefixes static StringList get_groomed_prefixes () return a list of the groomed prefixes function get_original_keys static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names function get_values static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names function get_transforms static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names function get_value_map static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) function get_extra_columns static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes function determine_domain_type static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename function starts_with static bool starts_with ( std :: string str , std :: string prefix ) function transform_to_string static std :: string transform_to_string ( std :: vector < double > transform ) function convert_domain_types static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ) function convert_groomed_domain_types static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ) function convert_subject_to_map static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#shapeworksprojectutils","text":"","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types","text":"Name using project::types::StringList StringList using project::types::StringMap StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions","text":"Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringlist","text":"using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringmap","text":"using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform","text":"static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform_1","text":"static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet)","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_names","text":"static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys","title":"function determine_domain_names"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_types","text":"static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types","title":"function determine_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_input_prefixes","text":"static StringList get_input_prefixes () return a list of the input prefixes","title":"function get_input_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_groomed_prefixes","text":"static StringList get_groomed_prefixes () return a list of the groomed prefixes","title":"function get_groomed_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_original_keys","text":"static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names","title":"function get_original_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_values","text":"static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names","title":"function get_values"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_transforms","text":"static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names","title":"function get_transforms"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_value_map","text":"static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_)","title":"function get_value_map"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_extra_columns","text":"static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes","title":"function get_extra_columns"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_type","text":"static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename","title":"function determine_domain_type"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-starts_with","text":"static bool starts_with ( std :: string str , std :: string prefix )","title":"function starts_with"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-transform_to_string","text":"static std :: string transform_to_string ( std :: vector < double > transform )","title":"function transform_to_string"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_domain_types","text":"static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_groomed_domain_types","text":"static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_subject_to_map","text":"static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function convert_subject_to_map"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html","text":"shapeworks::PythonWorker Inherits from QObject Public Slots Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python () Public Signals Name void result_ready () void finished () Public Functions Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job () Public Attributes Name constexpr static const char * python_api_version Public Slots Documentation slot init bool init () slot start_job void start_job ( QSharedPointer < Job > job ) slot finalize_python void finalize_python () Public Signals Documentation signal result_ready void result_ready () signal finished void finished () Public Functions Documentation function PythonWorker PythonWorker () function ~PythonWorker ~ PythonWorker () function set_vtk_output_window void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ) function run_job void run_job ( QSharedPointer < Job > job ) function incoming_python_message void incoming_python_message ( std :: string message_string ) function incoming_python_progress void incoming_python_progress ( double value ) function end_python void end_python () function abort_job void abort_job () Public Attributes Documentation variable python_api_version static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#shapeworkspythonworker","text":"Inherits from QObject","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots","text":"Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals","text":"Name void result_ready () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions","text":"Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes","text":"Name constexpr static const char * python_api_version","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-init","text":"bool init ()","title":"slot init"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-start_job","text":"void start_job ( QSharedPointer < Job > job )","title":"slot start_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-finalize_python","text":"void finalize_python ()","title":"slot finalize_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker","text":"PythonWorker ()","title":"function PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker_1","text":"~ PythonWorker ()","title":"function ~PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-set_vtk_output_window","text":"void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window )","title":"function set_vtk_output_window"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_message","text":"void incoming_python_message ( std :: string message_string )","title":"function incoming_python_message"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_progress","text":"void incoming_python_progress ( double value )","title":"function incoming_python_progress"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-end_python","text":"void end_python ()","title":"function end_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-abort_job","text":"void abort_job ()","title":"function abort_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#variable-python_api_version","text":"static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable python_api_version"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html","text":"shapeworks::QMeshWarper Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper Public Signals Name void progress () Public Functions Name QMeshWarper (QObject * parent =nullptr) float get_progress () Protected Functions Name virtual void update_progress (float p) override For overriding to handle progress updates. Additional inherited members Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Public Signals Documentation signal progress void progress () Public Functions Documentation function QMeshWarper QMeshWarper ( QObject * parent = nullptr ) function get_progress float get_progress () Protected Functions Documentation function update_progress virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#shapeworksqmeshwarper","text":"Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals","text":"Name void progress ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions","text":"Name QMeshWarper (QObject * parent =nullptr) float get_progress ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) override For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#signal-progress","text":"void progress ()","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-qmeshwarper","text":"QMeshWarper ( QObject * parent = nullptr )","title":"function QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-get_progress","text":"float get_progress ()","title":"function get_progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-update_progress","text":"virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-24 at 22:16:02 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html","text":"shapeworks::QOptimize Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize Public Signals Name void progress (int , QString ) Public Functions Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override Protected Functions Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override Additional inherited members Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Public Signals Documentation signal progress void progress ( int , QString ) Public Functions Documentation function QOptimize QOptimize ( QObject * parent = nullptr ) function ~QOptimize virtual ~ QOptimize () function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints function GetParticles std :: vector < Particles > GetParticles () function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms function UpdateExportablePoints virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback function IterateCallback virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#shapeworksqoptimize","text":"Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals","text":"Name void progress (int , QString )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions","text":"Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions","text":"Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#additional-inherited-members","text":"Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#signal-progress","text":"void progress ( int , QString )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize","text":"QOptimize ( QObject * parent = nullptr )","title":"function QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize_1","text":"virtual ~ QOptimize ()","title":"function ~QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getparticles","text":"std :: vector < Particles > GetParticles ()","title":"function GetParticles"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-24 at 22:16:02 +0000","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html","text":"shapeworks::ReconstructSurface More... Public Types Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType Public Functions Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees) Detailed Description template < class TransformType > class shapeworks :: ReconstructSurface ; Public Types Documentation using TransformTypePtr using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ; using PointSetType using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ; using PointIdType using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ; Public Functions Documentation function ReconstructSurface ReconstructSurface () = default function ReconstructSurface ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ) function computeAverageDistanceToNeighbors double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ) function checkMapping void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ) function generateWarpedMeshes void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh ) function getMesh Mesh getMesh ( PointArray localPoints ) function convertToImageCoordinates Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ) function computeMedianShape int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList ) function performKMeansClustering void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices ) function computeParticlesNormals Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ) function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ) function computeDenseMean void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ) function computeSparseMean std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ) function writeMeanInfo void writeMeanInfo () function surface void surface ( const std :: vector < std :: string > localPointsFiles ) function samplesAlongPCAModes void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ) function meanSurface void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ) function setOutPrefix inline void setOutPrefix ( std :: string prefix ) function setOutPath inline void setOutPath ( std :: string path ) function setDoProcrustes inline void setDoProcrustes ( bool doProcrusts ) function setDoProcrustesScaling inline void setDoProcrustesScaling ( bool doProcrustsScaling ) function setPairwiseNormalsDiffForGoodBad inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) function setMeanBeforeWarp inline void setMeanBeforeWarp ( bool meanBeforeWarp ) function setEnableOutput inline void setEnableOutput ( bool enableOutput ) function setModeIndex inline void setModeIndex ( int modeIndex ) function setNumOfModes inline void setNumOfModes ( int numOfModes ) function setNumOfSamplesPerMode inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) function setNumOfParticles inline void setNumOfParticles ( int numOfParticles ) function setNumOfClusters inline void setNumOfClusters ( int numOfClusters ) function setMaxStdDev inline void setMaxStdDev ( float maxStdDev ) function setMaxVarianceCaptured inline void setMaxVarianceCaptured ( float maxVarianceCaptured ) function setMaxAngleDegrees inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#shapeworksreconstructsurface","text":"More...","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types","text":"Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions","text":"Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#detailed-description","text":"template < class TransformType > class shapeworks :: ReconstructSurface ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-transformtypeptr","text":"using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ;","title":"using TransformTypePtr"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointsettype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ;","title":"using PointSetType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointidtype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ;","title":"using PointIdType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface","text":"ReconstructSurface () = default","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface_1","text":"ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile )","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeaveragedistancetoneighbors","text":"double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices )","title":"function computeAverageDistanceToNeighbors"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-checkmapping","text":"void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints )","title":"function checkMapping"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-generatewarpedmeshes","text":"void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh )","title":"function generateWarpedMeshes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getmesh","text":"Mesh getMesh ( PointArray localPoints )","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-converttoimagecoordinates","text":"Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computemedianshape","text":"int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList )","title":"function computeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-performkmeansclustering","text":"void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices )","title":"function performKMeansClustering"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeparticlesnormals","text":"Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt )","title":"function computeParticlesNormals"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform )","title":"function getDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computedensemean","text":"void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform )","title":"function computeDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computesparsemean","text":"std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter )","title":"function computeSparseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-writemeaninfo","text":"void writeMeanInfo ()","title":"function writeMeanInfo"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-surface","text":"void surface ( const std :: vector < std :: string > localPointsFiles )","title":"function surface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-samplesalongpcamodes","text":"void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles )","title":"function samplesAlongPCAModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-meansurface","text":"void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles )","title":"function meanSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutpath","text":"inline void setOutPath ( std :: string path )","title":"function setOutPath"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustes","text":"inline void setDoProcrustes ( bool doProcrusts )","title":"function setDoProcrustes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustesscaling","text":"inline void setDoProcrustesScaling ( bool doProcrustsScaling )","title":"function setDoProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setpairwisenormalsdiffforgoodbad","text":"inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad )","title":"function setPairwiseNormalsDiffForGoodBad"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmeanbeforewarp","text":"inline void setMeanBeforeWarp ( bool meanBeforeWarp )","title":"function setMeanBeforeWarp"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setenableoutput","text":"inline void setEnableOutput ( bool enableOutput )","title":"function setEnableOutput"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmodeindex","text":"inline void setModeIndex ( int modeIndex )","title":"function setModeIndex"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofmodes","text":"inline void setNumOfModes ( int numOfModes )","title":"function setNumOfModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofsamplespermode","text":"inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode )","title":"function setNumOfSamplesPerMode"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofparticles","text":"inline void setNumOfParticles ( int numOfParticles )","title":"function setNumOfParticles"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofclusters","text":"inline void setNumOfClusters ( int numOfClusters )","title":"function setNumOfClusters"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxstddev","text":"inline void setMaxStdDev ( float maxStdDev )","title":"function setMaxStdDev"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxvariancecaptured","text":"inline void setMaxVarianceCaptured ( float maxVarianceCaptured )","title":"function setMaxVarianceCaptured"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxangledegrees","text":"inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function setMaxAngleDegrees"},{"location":"api/Classes/classshapeworks_1_1Sampler.html","text":"shapeworks::Sampler Public Classes Name struct CuttingPlaneType struct SphereType Public Types Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList Public Functions Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode) Public Attributes Name constexpr unsigned int Dimension Public Types Documentation using PixelType using shapeworks :: Sampler :: PixelType = float ; using ImageType using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ; using PointType using shapeworks :: Sampler :: PointType = ImageType :: PointType ; using MeanCurvatureCacheType using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ; using CuttingPlaneList using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ; Public Functions Documentation function Sampler Sampler () Constructor. function ~Sampler inline virtual ~ Sampler () Destructor. function GetParticleSystem inline ParticleSystem * GetParticleSystem () Returns the particle system. function GetParticleSystem inline const ParticleSystem * GetParticleSystem () const function GetGradientFunction inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used. function GetCurvatureGradientFunction inline CurvatureSamplingFunction * GetCurvatureGradientFunction () function GetOptimizer inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object. function GetOptimizer inline const OptimizerType * GetOptimizer () const function SetPointsFile inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set. function SetPointsFile inline void SetPointsFile ( const std :: string & s ) function SetInitialPoints inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function AddImage void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ) function ApplyConstraintsToZeroCrossing inline void ApplyConstraintsToZeroCrossing () function AddMesh void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int n ) function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains. function AddFreeFormConstraint void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ) function TransformCuttingPlanes void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation function AddSphere void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain. function SetAdaptivityMode inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity function GetAdaptivityMode inline int GetAdaptivityMode () const function SetCorrespondenceOn inline void SetCorrespondenceOn () function SetCorrespondenceOff inline void SetCorrespondenceOff () function SetSamplingOn inline void SetSamplingOn () function SetSamplingOff inline void SetSamplingOff () function GetCorrespondenceOn inline bool GetCorrespondenceOn () const function GetSamplingOn inline bool GetSamplingOn () const function SetCorrespondenceMode void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains). function RegisterGeneralShapeMatrices inline void RegisterGeneralShapeMatrices () function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( unsigned int i , bool flag ) function SetNormals inline void SetNormals ( int i , bool flag ) function SetAttributesPerDomain void SetAttributesPerDomain ( const std :: vector < int > s ) function GetShapeMatrix inline LegacyShapeMatrix * GetShapeMatrix () function GetGeneralShapeMatrix inline ShapeMatrix * GetGeneralShapeMatrix () function GetGeneralShapeGradientMatrix inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix () function GetLinkingFunction inline DualVectorFunction * GetLinkingFunction () function GetEnsembleEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () function GetDisentangledEnsembleEntropyFunction inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () function GetEnsembleRegressionEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () function GetEnsembleMixedEffectsEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () function GetMeshBasedGeneralEntropyGradientFunction inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () function GetLinkingFunction inline const DualVectorFunction * GetLinkingFunction () const function GetEnsembleEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const function GetDisentangledEnsembleEntropyFunction inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const function GetEnsembleRegressionEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const function GetEnsembleMixedEffectsEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const function GetMeshBasedGeneralEntropyGradientFunction inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int n ) function GetCorrespondenceMode inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const function SetTransformFile inline void SetTransformFile ( const std :: string & s ) function SetTransformFile inline void SetTransformFile ( const char * s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const std :: string & s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const char * s ) function SetPairwisePotentialType inline void SetPairwisePotentialType ( int pairwise_potential_type ) function GetPairwisePotentialType inline int GetPairwisePotentialType () function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double weight ) function ReadTransforms void ReadTransforms () function ReadPointsFiles void ReadPointsFiles () function AllocateDataCaches void AllocateDataCaches () function AllocateDomainsAndNeighborhoods void AllocateDomainsAndNeighborhoods () function InitializeOptimizationFunctions void InitializeOptimizationFunctions () function initialize_initial_positions void initialize_initial_positions () function Initialize inline void Initialize () function ReInitialize void ReInitialize () function Execute void Execute () function ComputeCuttingPlanes CuttingPlaneList ComputeCuttingPlanes () function ComputePlaneNormal Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) function GetFFCs inline std :: vector < FreeFormConstraint > GetFFCs () function SetMeshFFCMode inline void SetMeshFFCMode ( bool mesh_ffc_mode ) Public Attributes Documentation variable Dimension static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#shapeworkssampler","text":"","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-classes","text":"Name struct CuttingPlaneType struct SphereType","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types","text":"Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions","text":"Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes","text":"Name constexpr unsigned int Dimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pixeltype","text":"using shapeworks :: Sampler :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-imagetype","text":"using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pointtype","text":"using shapeworks :: Sampler :: PointType = ImageType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-meancurvaturecachetype","text":"using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-transformtype","text":"using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ;","title":"using TransformType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-optimizertype","text":"using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ;","title":"using OptimizerType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-cuttingplanelist","text":"using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ;","title":"using CuttingPlaneList"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler","text":"Sampler () Constructor.","title":"function Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler_1","text":"inline virtual ~ Sampler () Destructor.","title":"function ~Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem","text":"inline ParticleSystem * GetParticleSystem () Returns the particle system.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem_1","text":"inline const ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgradientfunction","text":"inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used.","title":"function GetGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcurvaturegradientfunction","text":"inline CurvatureSamplingFunction * GetCurvatureGradientFunction ()","title":"function GetCurvatureGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer","text":"inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object.","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer_1","text":"inline const OptimizerType * GetOptimizer () const","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile","text":"inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set.","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile_1","text":"inline void SetPointsFile ( const std :: string & s )","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setinitialpoints","text":"inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" )","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-applyconstraintstozerocrossing","text":"inline void ApplyConstraintsToZeroCrossing ()","title":"function ApplyConstraintsToZeroCrossing"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addmesh","text":"void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & s )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int n )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addfreeformconstraint","text":"void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc )","title":"function AddFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-transformcuttingplanes","text":"void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation","title":"function TransformCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addsphere","text":"void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain.","title":"function AddSphere"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setadaptivitymode","text":"inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getadaptivitymode","text":"inline int GetAdaptivityMode () const","title":"function GetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceon","text":"inline void SetCorrespondenceOn ()","title":"function SetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceoff","text":"inline void SetCorrespondenceOff ()","title":"function SetCorrespondenceOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingon","text":"inline void SetSamplingOn ()","title":"function SetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingoff","text":"inline void SetSamplingOff ()","title":"function SetSamplingOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondenceon","text":"inline bool GetCorrespondenceOn () const","title":"function GetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getsamplingon","text":"inline bool GetSamplingOn () const","title":"function GetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondencemode","text":"void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains).","title":"function SetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-registergeneralshapematrices","text":"inline void RegisterGeneralShapeMatrices ()","title":"function RegisterGeneralShapeMatrices"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setxyz","text":"inline void SetXYZ ( unsigned int i , bool flag )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setnormals","text":"inline void SetNormals ( int i , bool flag )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( const std :: vector < int > s )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getshapematrix","text":"inline LegacyShapeMatrix * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapematrix","text":"inline ShapeMatrix * GetGeneralShapeMatrix ()","title":"function GetGeneralShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapegradientmatrix","text":"inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix ()","title":"function GetGeneralShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction","text":"inline DualVectorFunction * GetLinkingFunction ()","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction ()","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction","text":"inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction ()","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction ()","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction ()","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction","text":"inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction ()","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction_1","text":"inline const DualVectorFunction * GetLinkingFunction () const","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction_1","text":"inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction_1","text":"inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int n )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondencemode","text":"inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const","title":"function GetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile","text":"inline void SetTransformFile ( const std :: string & s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile_1","text":"inline void SetTransformFile ( const char * s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile","text":"inline void SetPrefixTransformFile ( const std :: string & s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile_1","text":"inline void SetPrefixTransformFile ( const char * s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpairwisepotentialtype","text":"inline void SetPairwisePotentialType ( int pairwise_potential_type )","title":"function SetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getpairwisepotentialtype","text":"inline int GetPairwisePotentialType ()","title":"function GetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readtransforms","text":"void ReadTransforms ()","title":"function ReadTransforms"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readpointsfiles","text":"void ReadPointsFiles ()","title":"function ReadPointsFiles"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedatacaches","text":"void AllocateDataCaches ()","title":"function AllocateDataCaches"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedomainsandneighborhoods","text":"void AllocateDomainsAndNeighborhoods ()","title":"function AllocateDomainsAndNeighborhoods"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initializeoptimizationfunctions","text":"void InitializeOptimizationFunctions ()","title":"function InitializeOptimizationFunctions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize_initial_positions","text":"void initialize_initial_positions ()","title":"function initialize_initial_positions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-reinitialize","text":"void ReInitialize ()","title":"function ReInitialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-execute","text":"void Execute ()","title":"function Execute"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computecuttingplanes","text":"CuttingPlaneList ComputeCuttingPlanes ()","title":"function ComputeCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computeplanenormal","text":"Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c )","title":"function ComputePlaneNormal"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getffcs","text":"inline std :: vector < FreeFormConstraint > GetFFCs ()","title":"function GetFFCs"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( bool mesh_ffc_mode )","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#variable-dimension","text":"static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable Dimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html","text":"shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction Public Types Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType Public Functions Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone () Protected Functions Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i). Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: SamplingFunction :: TGradientNumericType ; typedef Self typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ; typedef GradientNumericType typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components. typedef SigmaCacheType typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values. typedef VectorType typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ; typedef GradientVectorType typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( SamplingFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate function Energy inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function AngleCoefficient TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees. function SetMinimumNeighborhoodRadius inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius. function GetMinimumNeighborhoodRadius inline double GetMinimumNeighborhoodRadius () const function SetMaximumNeighborhoodRadius inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. function GetMaximumNeighborhoodRadius inline double GetMaximumNeighborhoodRadius () const function SetFlatCutoff inline void SetFlatCutoff ( double s ) Numerical parameters function GetFlatCutoff inline double GetFlatCutoff () const function SetNeighborhoodToSigmaRatio inline void SetNeighborhoodToSigmaRatio ( double s ) function GetNeighborhoodToSigmaRatio inline double GetNeighborhoodToSigmaRatio () const function SetSpatialSigmaCache inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem). function GetSpatialSigmaCache inline SigmaCacheType * GetSpatialSigmaCache () function GetSpatialSigmaCache inline const SigmaCacheType * GetSpatialSigmaCache () const function ComputeAngularWeights void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0. function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone Protected Functions Documentation function SamplingFunction inline SamplingFunction () function ~SamplingFunction inline virtual ~ SamplingFunction () function operator= void operator = ( const SamplingFunction & ) function SamplingFunction SamplingFunction ( const SamplingFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MinimumNeighborhoodRadius double m_MinimumNeighborhoodRadius ; variable m_MaximumNeighborhoodRadius double m_MaximumNeighborhoodRadius ; variable m_FlatCutoff double m_FlatCutoff ; variable m_NeighborhoodToSigmaRatio double m_NeighborhoodToSigmaRatio ; variable m_SpatialSigmaCache SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#shapeworkssamplingfunction","text":"This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions","text":"Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions","text":"Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes","text":"Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#detailed-description","text":"class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i).","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: SamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-self","text":"typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientnumerictype","text":"typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-sigmacachetype","text":"typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values.","title":"typedef SigmaCacheType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( SamplingFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-anglecoefficient","text":"TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees.","title":"function AngleCoefficient"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setminimumneighborhoodradius","text":"inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius.","title":"function SetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getminimumneighborhoodradius","text":"inline double GetMinimumNeighborhoodRadius () const","title":"function GetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setmaximumneighborhoodradius","text":"inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space.","title":"function SetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getmaximumneighborhoodradius","text":"inline double GetMaximumNeighborhoodRadius () const","title":"function GetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setflatcutoff","text":"inline void SetFlatCutoff ( double s ) Numerical parameters","title":"function SetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getflatcutoff","text":"inline double GetFlatCutoff () const","title":"function GetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setneighborhoodtosigmaratio","text":"inline void SetNeighborhoodToSigmaRatio ( double s )","title":"function SetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getneighborhoodtosigmaratio","text":"inline double GetNeighborhoodToSigmaRatio () const","title":"function GetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setspatialsigmacache","text":"inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem).","title":"function SetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache","text":"inline SigmaCacheType * GetSpatialSigmaCache ()","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache_1","text":"inline const SigmaCacheType * GetSpatialSigmaCache () const","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-computeangularweights","text":"void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0.","title":"function ComputeAngularWeights"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction","text":"inline SamplingFunction ()","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_1","text":"inline virtual ~ SamplingFunction ()","title":"function ~SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-operator","text":"void operator = ( const SamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_2","text":"SamplingFunction ( const SamplingFunction & )","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_minimumneighborhoodradius","text":"double m_MinimumNeighborhoodRadius ;","title":"variable m_MinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_maximumneighborhoodradius","text":"double m_MaximumNeighborhoodRadius ;","title":"variable m_MaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_flatcutoff","text":"double m_FlatCutoff ;","title":"variable m_FlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_neighborhoodtosigmaratio","text":"double m_NeighborhoodToSigmaRatio ;","title":"variable m_NeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_spatialsigmacache","text":"SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_SpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1Session.html","text":"shapeworks::Session Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session > Public Slots Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete () Public Signals Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes () Public Functions Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i) Public Attributes Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C Detailed Description class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project. Public Slots Documentation slot set_feature_auto_scale void set_feature_auto_scale ( bool value ) slot set_landmark_drag_mode void set_landmark_drag_mode ( bool mode ) slot get_landmark_drag_mode bool get_landmark_drag_mode () slot handle_clear_cache void handle_clear_cache () slot handle_new_mesh void handle_new_mesh () slot handle_thread_complete void handle_thread_complete () Public Signals Documentation signal data_changed void data_changed () signal that the data has changed signal points_changed void points_changed () signal landmarks_changed void landmarks_changed () signal planes_changed void planes_changed () signal ffc_changed void ffc_changed () signal update_display void update_display () signal new_mesh void new_mesh () signal feature_range_changed void feature_range_changed () signal update_view_mode void update_view_mode () signal image_slice_settings_changed void image_slice_settings_changed () signal ffc_paint_mode_changed void ffc_paint_mode_changed () signal repaint void repaint () signal reinsert_shapes void reinsert_shapes () Public Functions Documentation function Session Session ( QWidget * parent , Preferences & prefs ) constructor function ~Session ~ Session () destructor function set_parent void set_parent ( QWidget * parent ) set QWidget parent function save_project bool save_project ( QString filename ) save project to file function load_project bool load_project ( QString filename ) load project from file function load_light_project bool load_light_project ( QString filename ) read a lightweight project file function load_xl_project bool load_xl_project ( QString filename ) load a shapeworks project function set_project_path void set_project_path ( QString relative_path ) function get_project std :: shared_ptr < shapeworks :: Project > get_project () function load_original_files void load_original_files ( std :: vector < std :: string > filenames ) import files function load_groomed_files void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files function load_point_files bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ) function update_particles bool update_particles ( std :: vector < Particles > particles ) function get_num_particles int get_num_particles () Return the total number of particles for all domains, combined. function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) function update_procrustes_transforms void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms ) function is_light_project bool is_light_project () function get_groomed_present bool get_groomed_present () function remove_shapes void remove_shapes ( QList < int > list ) remove shapes function get_shapes ShapeList get_shapes () return all shapes function calculate_reconstructed_samples void calculate_reconstructed_samples () function get_filename QString get_filename () get the filename function get_display_name QString get_display_name () get file display name function original_present bool original_present () function groomed_present bool groomed_present () function particles_present bool particles_present () function groups_available bool groups_available () function get_num_shapes int get_num_shapes () function get_domains_per_shape int get_domains_per_shape () function get_default_feature_map std :: string get_default_feature_map () function get_mesh_manager inline std :: shared_ptr < MeshManager > get_mesh_manager () function parameters shapeworks :: Parameters & parameters () function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () function update_auto_glyph_size double update_auto_glyph_size () function get_auto_glyph_size double get_auto_glyph_size () function clear_particles void clear_particles () clear particles from session (e.g. groom start, optimize start) function get_feature_auto_scale bool get_feature_auto_scale () function get_feature_range_max double get_feature_range_max () function get_feature_range_min double get_feature_range_min () function set_feature_range void set_feature_range ( double min , double max ) function set_feature_range_min void set_feature_range_min ( double value ) function set_feature_range_max void set_feature_range_max ( double value ) function handle_ctrl_click void handle_ctrl_click ( PickResult result ) function trigger_landmarks_changed void trigger_landmarks_changed () function trigger_planes_changed void trigger_planes_changed () function trigger_ffc_changed void trigger_ffc_changed () function set_active_landmark_domain void set_active_landmark_domain ( int id ) function get_active_landmark_domain int get_active_landmark_domain () function set_placing_landmark void set_placing_landmark ( int id ) function get_placing_landmark int get_placing_landmark () function set_landmarks_active void set_landmarks_active ( bool active ) function get_landmarks_active bool get_landmarks_active () function set_planes_active void set_planes_active ( bool active ) function get_planes_active bool get_planes_active () function set_show_landmark_labels void set_show_landmark_labels ( bool show ) function get_show_landmark_labels bool get_show_landmark_labels () function set_show_planes void set_show_planes ( bool show ) function get_show_planes bool get_show_planes () function should_show_planes bool should_show_planes () function set_show_landmarks void set_show_landmarks ( bool show ) function get_show_landmarks bool get_show_landmarks () function set_image_name bool set_image_name ( std :: string image_name ) function get_image_name std :: string get_image_name () function set_image_axis void set_image_axis ( QString axis ) function get_image_axis Axis get_image_axis () function set_image_3d_mode void set_image_3d_mode ( bool mode ) function get_image_3d_mode bool get_image_3d_mode () function set_image_share_window_and_level void set_image_share_window_and_level ( bool enabled ) function get_image_share_window_and_level bool get_image_share_window_and_level () function set_image_sync_slice void set_image_sync_slice ( bool enabled ) function get_image_sync_slice bool get_image_sync_slice () function has_constraints bool has_constraints () function set_loading void set_loading ( bool loading ) function is_loading bool is_loading () function set_tool_state void set_tool_state ( std :: string state ) function get_tool_state std :: string get_tool_state () function is_analysis_mode bool is_analysis_mode () function set_ffc_paint_active void set_ffc_paint_active ( bool enabled ) function get_ffc_paint_active bool get_ffc_paint_active () function set_ffc_paint_mode_inclusive void set_ffc_paint_mode_inclusive ( bool inclusive ) function get_ffc_paint_mode_inclusive bool get_ffc_paint_mode_inclusive () function set_ffc_paint_size void set_ffc_paint_size ( double size ) function get_ffc_paint_size double get_ffc_paint_size () function get_show_good_bad_particles bool get_show_good_bad_particles () function set_show_good_bad_particles void set_show_good_bad_particles ( bool enabled ) function get_show_difference_vectors bool get_show_difference_vectors () function set_show_difference_vectors void set_show_difference_vectors ( bool enabled ) function should_difference_vectors_show bool should_difference_vectors_show () function get_good_bad_particles std :: vector < bool > get_good_bad_particles () function set_good_bad_particles void set_good_bad_particles ( const std :: vector < bool > & good_bad ) function set_difference_particles inline void set_difference_particles ( Particles particles ) function get_difference_particles inline Particles get_difference_particles () function set_compare_settings void set_compare_settings ( CompareSettings settings ) function get_compare_settings CompareSettings get_compare_settings () function trigger_repaint void trigger_repaint () function trigger_reinsert_shapes void trigger_reinsert_shapes () function set_display_mode void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed) function get_display_mode DisplayMode get_display_mode () return the current display mode function set_glyph_lut inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function get_glyph_lut inline vtkSmartPointer < vtkLookupTable > get_glyph_lut () function is_supported_file_format static bool is_supported_file_format ( std :: string filename ) function get_point static Point3 get_point ( const Eigen :: VectorXd & points , int i ) Public Attributes Documentation variable DATA_C static const std :: string DATA_C ; variable GROOM_C static const std :: string GROOM_C ; variable OPTIMIZE_C static const std :: string OPTIMIZE_C ; variable ANALYSIS_C static const std :: string ANALYSIS_C ; variable DEEPSSM_C static const std :: string DEEPSSM_C ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#shapeworkssession","text":"Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session >","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots","text":"Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals","text":"Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions","text":"Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes","text":"Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Session.html#detailed-description","text":"class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_feature_auto_scale","text":"void set_feature_auto_scale ( bool value )","title":"slot set_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_landmark_drag_mode","text":"void set_landmark_drag_mode ( bool mode )","title":"slot set_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-get_landmark_drag_mode","text":"bool get_landmark_drag_mode ()","title":"slot get_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-data_changed","text":"void data_changed () signal that the data has changed","title":"signal data_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-points_changed","text":"void points_changed ()","title":"signal points_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-landmarks_changed","text":"void landmarks_changed ()","title":"signal landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-planes_changed","text":"void planes_changed ()","title":"signal planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_changed","text":"void ffc_changed ()","title":"signal ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_display","text":"void update_display ()","title":"signal update_display"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-feature_range_changed","text":"void feature_range_changed ()","title":"signal feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_view_mode","text":"void update_view_mode ()","title":"signal update_view_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-image_slice_settings_changed","text":"void image_slice_settings_changed ()","title":"signal image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_paint_mode_changed","text":"void ffc_paint_mode_changed ()","title":"signal ffc_paint_mode_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-repaint","text":"void repaint ()","title":"signal repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-reinsert_shapes","text":"void reinsert_shapes ()","title":"signal reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session","text":"Session ( QWidget * parent , Preferences & prefs ) constructor","title":"function Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session_1","text":"~ Session () destructor","title":"function ~Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_parent","text":"void set_parent ( QWidget * parent ) set QWidget parent","title":"function set_parent"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-save_project","text":"bool save_project ( QString filename ) save project to file","title":"function save_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_project","text":"bool load_project ( QString filename ) load project from file","title":"function load_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_light_project","text":"bool load_light_project ( QString filename ) read a lightweight project file","title":"function load_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_xl_project","text":"bool load_xl_project ( QString filename ) load a shapeworks project","title":"function load_xl_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_project_path","text":"void set_project_path ( QString relative_path )","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_project","text":"std :: shared_ptr < shapeworks :: Project > get_project ()","title":"function get_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_original_files","text":"void load_original_files ( std :: vector < std :: string > filenames ) import files","title":"function load_original_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_groomed_files","text":"void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files","title":"function load_groomed_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_point_files","text":"bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape )","title":"function load_point_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_particles","text":"bool update_particles ( std :: vector < Particles > particles )","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_particles","text":"int get_num_particles () Return the total number of particles for all domains, combined.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain )","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_procrustes_transforms","text":"void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms )","title":"function update_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_light_project","text":"bool is_light_project ()","title":"function is_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_present","text":"bool get_groomed_present ()","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-remove_shapes","text":"void remove_shapes ( QList < int > list ) remove shapes","title":"function remove_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_shapes","text":"ShapeList get_shapes () return all shapes","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-calculate_reconstructed_samples","text":"void calculate_reconstructed_samples ()","title":"function calculate_reconstructed_samples"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_filename","text":"QString get_filename () get the filename","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_name","text":"QString get_display_name () get file display name","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-original_present","text":"bool original_present ()","title":"function original_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groomed_present","text":"bool groomed_present ()","title":"function groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-particles_present","text":"bool particles_present ()","title":"function particles_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groups_available","text":"bool groups_available ()","title":"function groups_available"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_shapes","text":"int get_num_shapes ()","title":"function get_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_domains_per_shape","text":"int get_domains_per_shape ()","title":"function get_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_default_feature_map","text":"std :: string get_default_feature_map ()","title":"function get_default_feature_map"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_mesh_manager","text":"inline std :: shared_ptr < MeshManager > get_mesh_manager ()","title":"function get_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-parameters","text":"shapeworks :: Parameters & parameters ()","title":"function parameters"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types ()","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_auto_glyph_size","text":"double update_auto_glyph_size ()","title":"function update_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_auto_glyph_size","text":"double get_auto_glyph_size ()","title":"function get_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-clear_particles","text":"void clear_particles () clear particles from session (e.g. groom start, optimize start)","title":"function clear_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_auto_scale","text":"bool get_feature_auto_scale ()","title":"function get_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_max","text":"double get_feature_range_max ()","title":"function get_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_min","text":"double get_feature_range_min ()","title":"function get_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range","text":"void set_feature_range ( double min , double max )","title":"function set_feature_range"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_min","text":"void set_feature_range_min ( double value )","title":"function set_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_max","text":"void set_feature_range_max ( double value )","title":"function set_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_landmarks_changed","text":"void trigger_landmarks_changed ()","title":"function trigger_landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_planes_changed","text":"void trigger_planes_changed ()","title":"function trigger_planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_ffc_changed","text":"void trigger_ffc_changed ()","title":"function trigger_ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_active_landmark_domain","text":"void set_active_landmark_domain ( int id )","title":"function set_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_active_landmark_domain","text":"int get_active_landmark_domain ()","title":"function get_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_placing_landmark","text":"void set_placing_landmark ( int id )","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_placing_landmark","text":"int get_placing_landmark ()","title":"function get_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_landmarks_active","text":"void set_landmarks_active ( bool active )","title":"function set_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_landmarks_active","text":"bool get_landmarks_active ()","title":"function get_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_planes_active","text":"void set_planes_active ( bool active )","title":"function set_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_planes_active","text":"bool get_planes_active ()","title":"function get_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmark_labels","text":"void set_show_landmark_labels ( bool show )","title":"function set_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmark_labels","text":"bool get_show_landmark_labels ()","title":"function get_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_planes","text":"void set_show_planes ( bool show )","title":"function set_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_planes","text":"bool get_show_planes ()","title":"function get_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_show_planes","text":"bool should_show_planes ()","title":"function should_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmarks","text":"void set_show_landmarks ( bool show )","title":"function set_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmarks","text":"bool get_show_landmarks ()","title":"function get_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_name","text":"bool set_image_name ( std :: string image_name )","title":"function set_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_name","text":"std :: string get_image_name ()","title":"function get_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_axis","text":"void set_image_axis ( QString axis )","title":"function set_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_axis","text":"Axis get_image_axis ()","title":"function get_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_3d_mode","text":"void set_image_3d_mode ( bool mode )","title":"function set_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_3d_mode","text":"bool get_image_3d_mode ()","title":"function get_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_share_window_and_level","text":"void set_image_share_window_and_level ( bool enabled )","title":"function set_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_share_window_and_level","text":"bool get_image_share_window_and_level ()","title":"function get_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_sync_slice","text":"void set_image_sync_slice ( bool enabled )","title":"function set_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_sync_slice","text":"bool get_image_sync_slice ()","title":"function get_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-has_constraints","text":"bool has_constraints ()","title":"function has_constraints"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_loading","text":"void set_loading ( bool loading )","title":"function set_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_loading","text":"bool is_loading ()","title":"function is_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_tool_state","text":"void set_tool_state ( std :: string state )","title":"function set_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_tool_state","text":"std :: string get_tool_state ()","title":"function get_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_analysis_mode","text":"bool is_analysis_mode ()","title":"function is_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_active","text":"void set_ffc_paint_active ( bool enabled )","title":"function set_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_active","text":"bool get_ffc_paint_active ()","title":"function get_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_mode_inclusive","text":"void set_ffc_paint_mode_inclusive ( bool inclusive )","title":"function set_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_mode_inclusive","text":"bool get_ffc_paint_mode_inclusive ()","title":"function get_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_size","text":"void set_ffc_paint_size ( double size )","title":"function set_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_size","text":"double get_ffc_paint_size ()","title":"function get_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_good_bad_particles","text":"bool get_show_good_bad_particles ()","title":"function get_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_good_bad_particles","text":"void set_show_good_bad_particles ( bool enabled )","title":"function set_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_difference_vectors","text":"bool get_show_difference_vectors ()","title":"function get_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_difference_vectors","text":"void set_show_difference_vectors ( bool enabled )","title":"function set_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_difference_vectors_show","text":"bool should_difference_vectors_show ()","title":"function should_difference_vectors_show"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_good_bad_particles","text":"std :: vector < bool > get_good_bad_particles ()","title":"function get_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_good_bad_particles","text":"void set_good_bad_particles ( const std :: vector < bool > & good_bad )","title":"function set_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_difference_particles","text":"inline void set_difference_particles ( Particles particles )","title":"function set_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_difference_particles","text":"inline Particles get_difference_particles ()","title":"function get_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_compare_settings","text":"void set_compare_settings ( CompareSettings settings )","title":"function set_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_compare_settings","text":"CompareSettings get_compare_settings ()","title":"function get_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_repaint","text":"void trigger_repaint ()","title":"function trigger_repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_reinsert_shapes","text":"void trigger_reinsert_shapes ()","title":"function trigger_reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_display_mode","text":"void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed)","title":"function set_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_mode","text":"DisplayMode get_display_mode () return the current display mode","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_glyph_lut","text":"inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_glyph_lut","text":"inline vtkSmartPointer < vtkLookupTable > get_glyph_lut ()","title":"function get_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_supported_file_format","text":"static bool is_supported_file_format ( std :: string filename )","title":"function is_supported_file_format"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_point","text":"static Point3 get_point ( const Eigen :: VectorXd & points , int i )","title":"function get_point"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-data_c","text":"static const std :: string DATA_C ;","title":"variable DATA_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-groom_c","text":"static const std :: string GROOM_C ;","title":"variable GROOM_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-optimize_c","text":"static const std :: string OPTIMIZE_C ;","title":"variable OPTIMIZE_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-analysis_c","text":"static const std :: string ANALYSIS_C ;","title":"variable ANALYSIS_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-deepssm_c","text":"static const std :: string DEEPSSM_C ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable DEEPSSM_C"},{"location":"api/Classes/classshapeworks_1_1Shape.html","text":"shapeworks::Shape Representation of a single shape/patient/subject. #include Public Classes Name class Point TODO: replace this wherever it is used. Public Functions Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers () Public Functions Documentation function Shape Shape () function ~Shape ~ Shape () function get_display_name std :: string get_display_name () function get_meshes MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ) function set_annotations void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ) function get_annotations std :: vector < std :: string > get_annotations () function set_mesh_manager void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ) function set_subject void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ) function is_subject bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) function get_subject std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object. function import_original_file void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file. function get_original_meshes MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes. function get_groomed_meshes MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes. function get_reconstructed_meshes MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes. function reset_groomed_mesh void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. function import_global_point_files bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files. function import_local_point_files bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files. function import_landmarks_files bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files. function store_landmarks bool store_landmarks () Store landmarks. function import_constraints bool import_constraints ( std :: vector < std :: string > filenames ) import constraints function store_constraints bool store_constraints () Store constraints. function set_particles void set_particles ( Particles particles ) Set particles. function get_particles Particles get_particles () Get particles. function set_particle_transform void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment) function set_alignment_type void set_alignment_type ( int alignment ) Set the alignment type. function get_global_correspondence_points Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points. function get_particles_for_display std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display. function get_local_correspondence_points Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points. function clear_reconstructed_mesh void clear_reconstructed_mesh () function get_id int get_id () Get the id of this shape. function set_id void set_id ( int id ) Set the id of this shape. function get_original_filenames std :: vector < std :: string > get_original_filenames () function get_original_filenames_with_path std :: vector < std :: string > get_original_filenames_with_path () function get_original_filename std :: string get_original_filename () function get_original_filename_with_path std :: string get_original_filename_with_path () function get_groomed_filename std :: string get_groomed_filename () function get_groomed_filename_with_path std :: string get_groomed_filename_with_path ( int domain ) function get_global_point_filename std :: string get_global_point_filename () function get_global_point_filename_with_path std :: string get_global_point_filename_with_path () function get_local_point_filename std :: string get_local_point_filename () function get_local_point_filename_with_path std :: string get_local_point_filename_with_path () function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function get_transform vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ) function get_inverse_transform vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ) function has_alignment bool has_alignment () function get_original_transform vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ) function set_reconstruction_transforms void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms ) function get_reconstruction_transform vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ) function get_groomed_transform vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ) function get_procrustes_transform vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ) function get_procrustes_transforms std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms () function get_alignment vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ) function load_feature void load_feature ( DisplayMode display_mode , std :: string feature ) function get_image_volume std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ) function get_point_features Eigen :: VectorXf get_point_features ( std :: string feature ) function set_point_features void set_point_features ( std :: string feature , Eigen :: VectorXf values ) function load_feature_from_scalar_file void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ) function set_override_feature void set_override_feature ( std :: string feature ) function get_override_feature std :: string get_override_feature () function landmarks Eigen :: MatrixXd & landmarks () function constraints std :: vector < Constraints > & constraints () function get_constraints Constraints & get_constraints ( int domain_id ) function has_planes bool has_planes () function get_groomed_mesh_wrappers std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#shapeworksshape","text":"Representation of a single shape/patient/subject. #include ","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-classes","text":"Name class Point TODO: replace this wherever it is used.","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions","text":"Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape","text":"Shape ()","title":"function Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape_1","text":"~ Shape ()","title":"function ~Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_display_name","text":"std :: string get_display_name ()","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_meshes","text":"MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false )","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_annotations","text":"void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true )","title":"function set_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_annotations","text":"std :: vector < std :: string > get_annotations ()","title":"function get_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_mesh_manager","text":"void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager )","title":"function set_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_subject","text":"void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject )","title":"function set_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-is_subject","text":"bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not)","title":"function is_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_subject","text":"std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object.","title":"function get_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_original_file","text":"void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file.","title":"function import_original_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_meshes","text":"MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes.","title":"function get_original_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_meshes","text":"MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes.","title":"function get_groomed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstructed_meshes","text":"MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes.","title":"function get_reconstructed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-reset_groomed_mesh","text":"void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created.","title":"function reset_groomed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_global_point_files","text":"bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files.","title":"function import_global_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_local_point_files","text":"bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files.","title":"function import_local_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_landmarks_files","text":"bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files.","title":"function import_landmarks_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_landmarks","text":"bool store_landmarks () Store landmarks.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_constraints","text":"bool import_constraints ( std :: vector < std :: string > filenames ) import constraints","title":"function import_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_constraints","text":"bool store_constraints () Store constraints.","title":"function store_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particles","text":"void set_particles ( Particles particles ) Set particles.","title":"function set_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles","text":"Particles get_particles () Get particles.","title":"function get_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particle_transform","text":"void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment)","title":"function set_particle_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment ) Set the alignment type.","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_correspondence_points","text":"Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points.","title":"function get_global_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles_for_display","text":"std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display.","title":"function get_particles_for_display"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_correspondence_points","text":"Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points.","title":"function get_local_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-clear_reconstructed_mesh","text":"void clear_reconstructed_mesh ()","title":"function clear_reconstructed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_id","text":"int get_id () Get the id of this shape.","title":"function get_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_id","text":"void set_id ( int id ) Set the id of this shape.","title":"function set_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames","text":"std :: vector < std :: string > get_original_filenames ()","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames_with_path","text":"std :: vector < std :: string > get_original_filenames_with_path ()","title":"function get_original_filenames_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename","text":"std :: string get_original_filename ()","title":"function get_original_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename_with_path","text":"std :: string get_original_filename_with_path ()","title":"function get_original_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename","text":"std :: string get_groomed_filename ()","title":"function get_groomed_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename_with_path","text":"std :: string get_groomed_filename_with_path ( int domain )","title":"function get_groomed_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename","text":"std :: string get_global_point_filename ()","title":"function get_global_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename_with_path","text":"std :: string get_global_point_filename_with_path ()","title":"function get_global_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename","text":"std :: string get_local_point_filename ()","title":"function get_local_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename_with_path","text":"std :: string get_local_point_filename_with_path ()","title":"function get_local_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_inverse_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 )","title":"function get_inverse_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_alignment","text":"bool has_alignment ()","title":"function has_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_transform","text":"vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 )","title":"function get_original_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_reconstruction_transforms","text":"void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms )","title":"function set_reconstruction_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstruction_transform","text":"vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain )","title":"function get_reconstruction_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_transform","text":"vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 )","title":"function get_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transform","text":"vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 )","title":"function get_procrustes_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transforms","text":"std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms ()","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_alignment","text":"vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 )","title":"function get_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature","text":"void load_feature ( DisplayMode display_mode , std :: string feature )","title":"function load_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_image_volume","text":"std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name )","title":"function get_image_volume"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_point_features","text":"Eigen :: VectorXf get_point_features ( std :: string feature )","title":"function get_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_point_features","text":"void set_point_features ( std :: string feature , Eigen :: VectorXf values )","title":"function set_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature_from_scalar_file","text":"void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name )","title":"function load_feature_from_scalar_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_override_feature","text":"void set_override_feature ( std :: string feature )","title":"function set_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_override_feature","text":"std :: string get_override_feature ()","title":"function get_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-landmarks","text":"Eigen :: MatrixXd & landmarks ()","title":"function landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-constraints","text":"std :: vector < Constraints > & constraints ()","title":"function constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_constraints","text":"Constraints & get_constraints ( int domain_id )","title":"function get_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_planes","text":"bool has_planes ()","title":"function has_planes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_mesh_wrappers","text":"std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-24 at 22:16:02 +0000","title":"function get_groomed_mesh_wrappers"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html","text":"shapeworks::ShapeEvaluation Public Functions Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) Public Attributes Name const unsigned VDimension Public Functions Documentation function ShapeEvaluation ShapeEvaluation () function ComputeCompactness static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullCompactness static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeGeneralization static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullGeneralization static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeSpecificity static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullSpecificity static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) Public Attributes Documentation variable VDimension static const unsigned VDimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#shapeworksshapeevaluation","text":"","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions","text":"Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes","text":"Name const unsigned VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-shapeevaluation","text":"ShapeEvaluation ()","title":"function ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computecompactness","text":"static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullcompactness","text":"static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computegeneralization","text":"static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullgeneralization","text":"static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computespecificity","text":"static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullspecificity","text":"static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#variable-vdimension","text":"static const unsigned VDimension = 3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html","text":"shapeworks::ShapeEvaluationJob Inherits from shapeworks::Job , QObject Public Types Name enum class JobType Public Signals Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) Public Functions Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Types Documentation enum JobType Enumerator Value Description CompactnessType SpecificityType GeneralizationType Public Signals Documentation signal report_progress void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ) signal result_ready void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) Public Functions Documentation function ShapeEvaluationJob ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#shapeworksshapeevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types","text":"Name enum class JobType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals","text":"Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions","text":"Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#enum-jobtype","text":"Enumerator Value Description CompactnessType SpecificityType GeneralizationType","title":"enum JobType"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-report_progress","text":"void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress )","title":"signal report_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-result_ready","text":"void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-shapeevaluationjob","text":"ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats )","title":"function ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-24 at 22:16:02 +0000","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html","text":"shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) function itkTypeMacro itkTypeMacro ( ShapeGradientMatrix , Observer ) function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function SetValues void SetValues ( const ParticleSystemType * ps , int idx , int d ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Protected Functions Documentation function ShapeGradientMatrix inline ShapeGradientMatrix () function ~ShapeGradientMatrix inline virtual ~ ShapeGradientMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#shapeworksshapegradientmatrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions","text":"Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#detailed-description","text":"class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-self","text":"typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ;","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self )","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeGradientMatrix , Observer )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setvalues","text":"void SetValues ( const ParticleSystemType * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix","text":"inline ShapeGradientMatrix ()","title":"function ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix_1","text":"inline virtual ~ ShapeGradientMatrix ()","title":"function ~ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html","text":"shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () Protected Functions Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods). function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function SetValues inline void SetValues ( const ParticleSystem * ps , int idx , int d ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () Protected Functions Documentation function ShapeMatrix inline ShapeMatrix () function ~ShapeMatrix inline virtual ~ ShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#shapeworksshapematrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions","text":"Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#detailed-description","text":"class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-self","text":"typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setvalues","text":"inline void SetValues ( const ParticleSystem * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix","text":"inline ShapeMatrix ()","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix_1","text":"inline virtual ~ ShapeMatrix ()","title":"function ~ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html","text":"shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. More... #include Inherits from QMainWindow Public Slots Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session () Public Functions Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names) Protected Functions Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override Detailed Description class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface Public Slots Documentation slot open_project void open_project ( QString filename ) slot on_action_new_project_triggered void on_action_new_project_triggered () slot on_action_open_project_triggered void on_action_open_project_triggered () slot on_action_show_project_folder_triggered void on_action_show_project_folder_triggered () slot on_action_save_project_triggered bool on_action_save_project_triggered () slot save_project_as bool save_project_as ( QString type ) slot save_as_swproj_clicked void save_as_swproj_clicked () slot save_as_xlsx_clicked void save_as_xlsx_clicked () slot on_action_quit_triggered void on_action_quit_triggered () slot on_action_import_triggered void on_action_import_triggered () slot splash_screen_closed void splash_screen_closed () slot on_vertical_scroll_bar_valueChanged void on_vertical_scroll_bar_valueChanged () slot on_action_import_mode_triggered void on_action_import_mode_triggered () slot on_action_groom_mode_triggered void on_action_groom_mode_triggered () slot on_action_optimize_mode_triggered void on_action_optimize_mode_triggered () slot on_action_analysis_mode_triggered void on_action_analysis_mode_triggered () slot on_action_deepssm_mode_triggered void on_action_deepssm_mode_triggered () slot on_actionShow_Tool_Window_triggered void on_actionShow_Tool_Window_triggered () slot on_actionExport_PCA_Mesh_triggered void on_actionExport_PCA_Mesh_triggered () slot on_actionExport_Eigenvalues_triggered void on_actionExport_Eigenvalues_triggered () slot on_actionExport_Eigenvectors_triggered void on_actionExport_Eigenvectors_triggered () slot on_actionExport_PCA_Mode_Points_triggered void on_actionExport_PCA_Mode_Points_triggered () slot on_action_preferences_triggered void on_action_preferences_triggered () slot action_export_current_mesh_triggered void action_export_current_mesh_triggered ( int index = 0 ) slot on_action_export_current_particles_triggered void on_action_export_current_particles_triggered () slot on_action_export_mesh_scalars_triggered void on_action_export_mesh_scalars_triggered () slot on_action_export_pca_scores_triggered void on_action_export_pca_scores_triggered () slot action_export_pca_montage_triggered void action_export_pca_montage_triggered () slot action_export_screenshot_triggered void action_export_screenshot_triggered () slot action_export_particle_scalars_triggered void action_export_particle_scalars_triggered () slot action_export_all_subjects_particle_scalars_triggered void action_export_all_subjects_particle_scalars_triggered () slot on_center_checkbox_stateChanged void on_center_checkbox_stateChanged () slot on_zoom_slider_valueChanged void on_zoom_slider_valueChanged () slot on_view_mode_combobox_currentIndexChanged void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ) slot on_auto_view_button_clicked void on_auto_view_button_clicked () slot handle_pca_changed void handle_pca_changed () slot handle_slider_update void handle_slider_update () slot handle_mca_changed void handle_mca_changed () slot handle_project_changed void handle_project_changed () slot handle_points_changed void handle_points_changed () slot handle_groom_start void handle_groom_start () slot handle_groom_complete void handle_groom_complete () slot handle_optimize_start void handle_optimize_start () slot handle_optimize_complete void handle_optimize_complete () slot handle_reconstruction_complete void handle_reconstruction_complete () slot handle_display_setting_changed void handle_display_setting_changed () slot handle_glyph_changed void handle_glyph_changed () slot handle_opacity_changed void handle_opacity_changed () slot handle_alignment_changed void handle_alignment_changed () slot handle_open_recent void handle_open_recent () slot handle_color_scheme void handle_color_scheme () slot handle_pca_update void handle_pca_update () slot clear_message void clear_message () slot handle_message void handle_message ( std :: string str ) slot handle_error void handle_error ( std :: string str ) slot handle_warning void handle_warning ( std :: string str ) slot handle_debug void handle_debug ( std :: string str ) slot handle_status void handle_status ( std :: string str ) slot handle_progress_with_message void handle_progress_with_message ( int amt , std :: string str ) slot handle_progress void handle_progress ( int amt ) slot message_callback void message_callback ( std :: string str ) slot handle_new_mesh void handle_new_mesh () slot handle_clear_cache void handle_clear_cache () slot handle_compare_settings_changed void handle_compare_settings_changed () slot handle_lightbox_right_click void handle_lightbox_right_click ( int index ) slot update_feature_map_selection void update_feature_map_selection ( int index ) slot update_feature_map_scale void update_feature_map_scale () slot image_combo_changed void image_combo_changed ( int index ) slot show_splash_screen void show_splash_screen () slot hide_splash_screen void hide_splash_screen () slot about void about () slot keyboard_shortcuts void keyboard_shortcuts () slot toggle_log_window void toggle_log_window () slot get_py_worker QSharedPointer < PythonWorker > get_py_worker () slot prefs inline Preferences & prefs () slot session inline QSharedPointer < Session > session () Public Functions Documentation function ShapeWorksStudioApp ShapeWorksStudioApp () function ~ShapeWorksStudioApp ~ ShapeWorksStudioApp () function closeEvent void closeEvent ( QCloseEvent * event ) override function initialize_vtk void initialize_vtk () function import_files void import_files ( QStringList file_names ) Protected Functions Documentation function dragEnterEvent void dragEnterEvent ( QDragEnterEvent * event ) override function dragLeaveEvent void dragLeaveEvent ( QDragLeaveEvent * event ) override function dropEvent void dropEvent ( QDropEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#shapeworksshapeworksstudioapp","text":"Main ShapeWorksStudio window. More... #include Inherits from QMainWindow","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots","text":"Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions","text":"Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions","text":"Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#detailed-description","text":"class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-open_project","text":"void open_project ( QString filename )","title":"slot open_project"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_new_project_triggered","text":"void on_action_new_project_triggered ()","title":"slot on_action_new_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_open_project_triggered","text":"void on_action_open_project_triggered ()","title":"slot on_action_open_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_show_project_folder_triggered","text":"void on_action_show_project_folder_triggered ()","title":"slot on_action_show_project_folder_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_save_project_triggered","text":"bool on_action_save_project_triggered ()","title":"slot on_action_save_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_project_as","text":"bool save_project_as ( QString type )","title":"slot save_project_as"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_swproj_clicked","text":"void save_as_swproj_clicked ()","title":"slot save_as_swproj_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_xlsx_clicked","text":"void save_as_xlsx_clicked ()","title":"slot save_as_xlsx_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_quit_triggered","text":"void on_action_quit_triggered ()","title":"slot on_action_quit_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_triggered","text":"void on_action_import_triggered ()","title":"slot on_action_import_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-splash_screen_closed","text":"void splash_screen_closed ()","title":"slot splash_screen_closed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_vertical_scroll_bar_valuechanged","text":"void on_vertical_scroll_bar_valueChanged ()","title":"slot on_vertical_scroll_bar_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_mode_triggered","text":"void on_action_import_mode_triggered ()","title":"slot on_action_import_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_groom_mode_triggered","text":"void on_action_groom_mode_triggered ()","title":"slot on_action_groom_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_optimize_mode_triggered","text":"void on_action_optimize_mode_triggered ()","title":"slot on_action_optimize_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_analysis_mode_triggered","text":"void on_action_analysis_mode_triggered ()","title":"slot on_action_analysis_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_deepssm_mode_triggered","text":"void on_action_deepssm_mode_triggered ()","title":"slot on_action_deepssm_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionshow_tool_window_triggered","text":"void on_actionShow_Tool_Window_triggered ()","title":"slot on_actionShow_Tool_Window_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mesh_triggered","text":"void on_actionExport_PCA_Mesh_triggered ()","title":"slot on_actionExport_PCA_Mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvalues_triggered","text":"void on_actionExport_Eigenvalues_triggered ()","title":"slot on_actionExport_Eigenvalues_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvectors_triggered","text":"void on_actionExport_Eigenvectors_triggered ()","title":"slot on_actionExport_Eigenvectors_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mode_points_triggered","text":"void on_actionExport_PCA_Mode_Points_triggered ()","title":"slot on_actionExport_PCA_Mode_Points_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_preferences_triggered","text":"void on_action_preferences_triggered ()","title":"slot on_action_preferences_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_current_mesh_triggered","text":"void action_export_current_mesh_triggered ( int index = 0 )","title":"slot action_export_current_mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_current_particles_triggered","text":"void on_action_export_current_particles_triggered ()","title":"slot on_action_export_current_particles_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_mesh_scalars_triggered","text":"void on_action_export_mesh_scalars_triggered ()","title":"slot on_action_export_mesh_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_pca_scores_triggered","text":"void on_action_export_pca_scores_triggered ()","title":"slot on_action_export_pca_scores_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_pca_montage_triggered","text":"void action_export_pca_montage_triggered ()","title":"slot action_export_pca_montage_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_screenshot_triggered","text":"void action_export_screenshot_triggered ()","title":"slot action_export_screenshot_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_particle_scalars_triggered","text":"void action_export_particle_scalars_triggered ()","title":"slot action_export_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_all_subjects_particle_scalars_triggered","text":"void action_export_all_subjects_particle_scalars_triggered ()","title":"slot action_export_all_subjects_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_center_checkbox_statechanged","text":"void on_center_checkbox_stateChanged ()","title":"slot on_center_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_zoom_slider_valuechanged","text":"void on_zoom_slider_valueChanged ()","title":"slot on_zoom_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_view_mode_combobox_currentindexchanged","text":"void on_view_mode_combobox_currentIndexChanged ( QString disp_mode )","title":"slot on_view_mode_combobox_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_auto_view_button_clicked","text":"void on_auto_view_button_clicked ()","title":"slot on_auto_view_button_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_changed","text":"void handle_pca_changed ()","title":"slot handle_pca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_slider_update","text":"void handle_slider_update ()","title":"slot handle_slider_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_mca_changed","text":"void handle_mca_changed ()","title":"slot handle_mca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_project_changed","text":"void handle_project_changed ()","title":"slot handle_project_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_points_changed","text":"void handle_points_changed ()","title":"slot handle_points_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_start","text":"void handle_groom_start ()","title":"slot handle_groom_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_complete","text":"void handle_groom_complete ()","title":"slot handle_groom_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_start","text":"void handle_optimize_start ()","title":"slot handle_optimize_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_display_setting_changed","text":"void handle_display_setting_changed ()","title":"slot handle_display_setting_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_glyph_changed","text":"void handle_glyph_changed ()","title":"slot handle_glyph_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_opacity_changed","text":"void handle_opacity_changed ()","title":"slot handle_opacity_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ()","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_open_recent","text":"void handle_open_recent ()","title":"slot handle_open_recent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_color_scheme","text":"void handle_color_scheme ()","title":"slot handle_color_scheme"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_update","text":"void handle_pca_update ()","title":"slot handle_pca_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-clear_message","text":"void clear_message ()","title":"slot clear_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_message","text":"void handle_message ( std :: string str )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_error","text":"void handle_error ( std :: string str )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_warning","text":"void handle_warning ( std :: string str )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_debug","text":"void handle_debug ( std :: string str )","title":"slot handle_debug"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_status","text":"void handle_status ( std :: string str )","title":"slot handle_status"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress_with_message","text":"void handle_progress_with_message ( int amt , std :: string str )","title":"slot handle_progress_with_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress","text":"void handle_progress ( int amt )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-message_callback","text":"void message_callback ( std :: string str )","title":"slot message_callback"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_compare_settings_changed","text":"void handle_compare_settings_changed ()","title":"slot handle_compare_settings_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_lightbox_right_click","text":"void handle_lightbox_right_click ( int index )","title":"slot handle_lightbox_right_click"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_selection","text":"void update_feature_map_selection ( int index )","title":"slot update_feature_map_selection"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_scale","text":"void update_feature_map_scale ()","title":"slot update_feature_map_scale"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-image_combo_changed","text":"void image_combo_changed ( int index )","title":"slot image_combo_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-show_splash_screen","text":"void show_splash_screen ()","title":"slot show_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-hide_splash_screen","text":"void hide_splash_screen ()","title":"slot hide_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-about","text":"void about ()","title":"slot about"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-keyboard_shortcuts","text":"void keyboard_shortcuts ()","title":"slot keyboard_shortcuts"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-toggle_log_window","text":"void toggle_log_window ()","title":"slot toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-get_py_worker","text":"QSharedPointer < PythonWorker > get_py_worker ()","title":"slot get_py_worker"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-prefs","text":"inline Preferences & prefs ()","title":"slot prefs"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-session","text":"inline QSharedPointer < Session > session ()","title":"slot session"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp","text":"ShapeWorksStudioApp ()","title":"function ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp_1","text":"~ ShapeWorksStudioApp ()","title":"function ~ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-initialize_vtk","text":"void initialize_vtk ()","title":"function initialize_vtk"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-import_files","text":"void import_files ( QStringList file_names )","title":"function import_files"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragenterevent","text":"void dragEnterEvent ( QDragEnterEvent * event ) override","title":"function dragEnterEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragleaveevent","text":"void dragLeaveEvent ( QDragLeaveEvent * event ) override","title":"function dragLeaveEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dropevent","text":"void dropEvent ( QDropEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function dropEvent"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html","text":"title: shapeworks::Shape::Point summary: TODO: replace this wherever it is used. shapeworks::Shape::Point TODO: replace this wherever it is used. #include Public Functions Name Point () Point (double _x, double _y, double _z) Public Attributes Name double x double y double z Public Functions Documentation function Point inline Point () function Point inline Point ( double _x , double _y , double _z ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"classshapeworks 1 1Shape 1 1Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#shapeworksshapepoint","text":"TODO: replace this wherever it is used. #include ","title":"shapeworks::Shape::Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions","text":"Name Point () Point (double _x, double _y, double _z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point","text":"inline Point ()","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point_1","text":"inline Point ( double _x , double _y , double _z )","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-z","text":"double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable z"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html","text":"shapeworks::ShapeworksCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#shapeworksshapeworkscommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-24 at 22:16:02 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html","text":"shapeworks::ShapeworksUtils Public Functions Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat) Public Functions Documentation function now static inline time_point now () get the current time function elapsed static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console function rngSeed static inline unsigned rngSeed () returns random seed function setRngSeed static void setRngSeed ( const unsigned seed ) sets random seed function generateNumber static inline unsigned generateNumber () generates random number function is_directory static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory function exists static bool exists ( const std :: string & filename ) returns true if filename exists function getMatrix static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector function getOffset static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#shapeworksshapeworksutils","text":"","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions","text":"Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-now","text":"static inline time_point now () get the current time","title":"function now"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-elapsed","text":"static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console","title":"function elapsed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-rngseed","text":"static inline unsigned rngSeed () returns random seed","title":"function rngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-setrngseed","text":"static void setRngSeed ( const unsigned seed ) sets random seed","title":"function setRngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-generatenumber","text":"static inline unsigned generateNumber () generates random number","title":"function generateNumber"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-is_directory","text":"static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory","title":"function is_directory"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-exists","text":"static bool exists ( const std :: string & filename ) returns true if filename exists","title":"function exists"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getmatrix","text":"static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector","title":"function getMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getoffset","text":"static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html","text":"shapeworks::ShapeworksWorker Inherits from QObject Public Types Name enum ThreadType Public Slots Name void process () Public Signals Name void result_ready () void failure () void finished () Public Functions Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker () Public Types Documentation enum ThreadType Enumerator Value Description GroomType OptimizeType ReconstructType Public Slots Documentation slot process void process () Public Signals Documentation signal result_ready void result_ready () signal failure void failure () signal finished void finished () Public Functions Documentation function ShapeworksWorker ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ) function ~ShapeworksWorker ~ ShapeworksWorker () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#shapeworksshapeworksworker","text":"Inherits from QObject","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types","text":"Name enum ThreadType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals","text":"Name void result_ready () void failure () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions","text":"Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#enum-threadtype","text":"Enumerator Value Description GroomType OptimizeType ReconstructType","title":"enum ThreadType"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-failure","text":"void failure ()","title":"signal failure"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker","text":"ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 )","title":"function ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker_1","text":"~ ShapeworksWorker () Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1SliceView.html","text":"shapeworks::SliceView SliceView . More... #include Public Types Name enum SliceChange Public Functions Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z) Detailed Description class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer Public Types Documentation enum SliceChange Enumerator Value Description Down Up Public Functions Documentation function SliceView SliceView ( Viewer * viewer ) function set_volume void set_volume ( std :: shared_ptr < Image > volume ) function set_mesh void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ) function set_orientation void set_orientation ( int orientation ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key Point handle_key ( std :: string key ) function change_slice void change_slice ( SliceChange change ) function get_slice_position Point get_slice_position () function set_slice_position void set_slice_position ( Point point ) function set_window_and_level void set_window_and_level ( double window , double level ) function get_spacing double get_spacing () function get_orientation_index int get_orientation_index () function update_particles void update_particles () function get_viewer Viewer * get_viewer () function should_point_show bool should_point_show ( double x , double y , double z ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#shapeworkssliceview","text":"SliceView . More... #include ","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types","text":"Name enum SliceChange","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions","text":"Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#detailed-description","text":"class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#enum-slicechange","text":"Enumerator Value Description Down Up","title":"enum SliceChange"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-sliceview","text":"SliceView ( Viewer * viewer )","title":"function SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_volume","text":"void set_volume ( std :: shared_ptr < Image > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_mesh","text":"void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_orientation","text":"void set_orientation ( int orientation )","title":"function set_orientation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-handle_key","text":"Point handle_key ( std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-change_slice","text":"void change_slice ( SliceChange change )","title":"function change_slice"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_slice_position","text":"Point get_slice_position ()","title":"function get_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_slice_position","text":"void set_slice_position ( Point point )","title":"function set_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_window_and_level","text":"void set_window_and_level ( double window , double level )","title":"function set_window_and_level"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_spacing","text":"double get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_orientation_index","text":"int get_orientation_index ()","title":"function get_orientation_index"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_particles","text":"void update_particles ()","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_viewer","text":"Viewer * get_viewer ()","title":"function get_viewer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-should_point_show","text":"bool should_point_show ( double x , double y , double z ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function should_point_show"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html","text":"shapeworks::SplashScreen More... #include Inherits from QDialog Public Signals Name void open_project (QString file_path) signal to open a particular project Public Functions Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor Detailed Description class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects Public Signals Documentation signal open_project void open_project ( QString file_path ) signal to open a particular project Public Functions Documentation function SplashScreen SplashScreen ( QWidget * parent , Preferences & preferences ) constructor function ~SplashScreen virtual ~ SplashScreen () destructor Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#shapeworkssplashscreen","text":"More... #include Inherits from QDialog","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals","text":"Name void open_project (QString file_path) signal to open a particular project","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions","text":"Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#detailed-description","text":"class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#signal-open_project","text":"void open_project ( QString file_path ) signal to open a particular project","title":"signal open_project"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen","text":"SplashScreen ( QWidget * parent , Preferences & preferences ) constructor","title":"function SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen_1","text":"virtual ~ SplashScreen () destructor Updated on 2023-10-24 at 22:16:02 +0000","title":"function ~SplashScreen"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html","text":"shapeworks::StatsGroupLDAJob Inherits from shapeworks::Job , QObject Public Functions Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function StatsGroupLDAJob StatsGroupLDAJob () function set_stats void set_stats ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () function plot void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#shapeworksstatsgroupldajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions","text":"Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-statsgroupldajob","text":"StatsGroupLDAJob ()","title":"function StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-set_stats","text":"void set_stats ( ParticleShapeStatistics stats )","title":"function set_stats"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues ()","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-plot","text":"void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function plot"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html","text":"shapeworks::StatusBarWidget StatusBarWidget . More... #include Inherits from QWidget Public Signals Name void toggle_log_window () Public Functions Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override Detailed Description class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar Public Signals Documentation signal toggle_log_window void toggle_log_window () Public Functions Documentation function StatusBarWidget StatusBarWidget ( QMainWindow * parent = 0 ) function set_message void set_message ( MessageType message_type , QString message ) function set_progress void set_progress ( int value ) function resizeEvent void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#shapeworksstatusbarwidget","text":"StatusBarWidget . More... #include Inherits from QWidget","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals","text":"Name void toggle_log_window ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions","text":"Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#detailed-description","text":"class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#signal-toggle_log_window","text":"void toggle_log_window ()","title":"signal toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-statusbarwidget","text":"StatusBarWidget ( QMainWindow * parent = 0 )","title":"function StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_message","text":"void set_message ( MessageType message_type , QString message )","title":"function set_message"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_progress","text":"void set_progress ( int value )","title":"function set_progress"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html","text":"shapeworks::StringUtils String utility functions. #include Public Functions Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement. Public Functions Documentation function removeExtension static std :: string removeExtension ( std :: string const & filename ) function getPath static std :: string getPath ( std :: string const & filename ) function getFilename static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return. function getBaseFilenameWithoutExtension static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension. function toLower static std :: string toLower ( std :: string s ) function hasSuffix static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ) function getFileNamesFromPaths static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths ) function getLowerExtension static std :: string getLowerExtension ( std :: string const & filename ) function safeString static inline std :: string safeString ( const char * s ) function replace_string static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#shapeworksstringutils","text":"String utility functions. #include ","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions","text":"Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-removeextension","text":"static std :: string removeExtension ( std :: string const & filename )","title":"function removeExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getpath","text":"static std :: string getPath ( std :: string const & filename )","title":"function getPath"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilename","text":"static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return.","title":"function getFilename"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getbasefilenamewithoutextension","text":"static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension.","title":"function getBaseFilenameWithoutExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-tolower","text":"static std :: string toLower ( std :: string s )","title":"function toLower"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-hassuffix","text":"static bool hasSuffix ( std :: string const & filename , std :: string const & suffix )","title":"function hasSuffix"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilenamesfrompaths","text":"static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths )","title":"function getFileNamesFromPaths"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getlowerextension","text":"static std :: string getLowerExtension ( std :: string const & filename )","title":"function getLowerExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-safestring","text":"static inline std :: string safeString ( const char * s )","title":"function safeString"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-replace_string","text":"static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-24 at 22:16:02 +0000","title":"function replace_string"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html","text":"shapeworks::StudioHandleWidget Inherits from vtkHandleWidget Public Functions Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget) Protected Functions Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w) Protected Attributes Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_ Public Functions Documentation function New static StudioHandleWidget * New () function StudioHandleWidget StudioHandleWidget () function set_domain inline void set_domain ( int domain ) function set_plane inline void set_plane ( int plane ) function set_point inline void set_point ( int point ) function set_plane_widget inline void set_plane_widget ( PlaneWidget * plane_widget ) Protected Functions Documentation function RightClickSelectAction static void RightClickSelectAction ( vtkAbstractWidget * w ) function CustomMoveAction static void CustomMoveAction ( vtkAbstractWidget * w ) function CustomSelectAction static void CustomSelectAction ( vtkAbstractWidget * w ) function CustomEndSelectAction static void CustomEndSelectAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable domain_ int domain_ = -1 ; variable plane_ int plane_ = -1 ; variable point_ int point_ = -1 ; variable plane_widget_ PlaneWidget * plane_widget_ ; variable shift_active_ bool shift_active_ = false ; variable start_y_ int start_y_ = 0 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#shapeworksstudiohandlewidget","text":"Inherits from vtkHandleWidget","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions","text":"Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions","text":"Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes","text":"Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-new","text":"static StudioHandleWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-studiohandlewidget","text":"StudioHandleWidget ()","title":"function StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_domain","text":"inline void set_domain ( int domain )","title":"function set_domain"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane","text":"inline void set_plane ( int plane )","title":"function set_plane"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_point","text":"inline void set_point ( int point )","title":"function set_point"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane_widget","text":"inline void set_plane_widget ( PlaneWidget * plane_widget )","title":"function set_plane_widget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-rightclickselectaction","text":"static void RightClickSelectAction ( vtkAbstractWidget * w )","title":"function RightClickSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-custommoveaction","text":"static void CustomMoveAction ( vtkAbstractWidget * w )","title":"function CustomMoveAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customselectaction","text":"static void CustomSelectAction ( vtkAbstractWidget * w )","title":"function CustomSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customendselectaction","text":"static void CustomEndSelectAction ( vtkAbstractWidget * w )","title":"function CustomEndSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_","text":"int plane_ = -1 ;","title":"variable plane_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-point_","text":"int point_ = -1 ;","title":"variable point_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_widget_","text":"PlaneWidget * plane_widget_ ;","title":"variable plane_widget_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-shift_active_","text":"bool shift_active_ = false ;","title":"variable shift_active_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-start_y_","text":"int start_y_ = 0 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable start_y_"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html","text":"shapeworks::StudioInteractorStyle Inherits from vtkInteractorStyleTrackballCamera Public Functions Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override Protected Functions Name void Dolly (double factor) override Public Functions Documentation function New static StudioInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioInteractorStyle StudioInteractorStyle () function ~StudioInteractorStyle virtual ~ StudioInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnRightButtonUp void OnRightButtonUp () override function OnMouseWheelForward void OnMouseWheelForward () override function OnMouseWheelBackward void OnMouseWheelBackward () override function OnKeyDown void OnKeyDown () override function Dolly void Dolly () override function Rotate void Rotate () override function OnMouseMove void OnMouseMove () override Protected Functions Documentation function Dolly void Dolly ( double factor ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#shapeworksstudiointeractorstyle","text":"Inherits from vtkInteractorStyleTrackballCamera","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions","text":"Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions","text":"Name void Dolly (double factor) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-new","text":"static StudioInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle","text":"StudioInteractorStyle ()","title":"function StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle_1","text":"virtual ~ StudioInteractorStyle ()","title":"function ~StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttonup","text":"void OnRightButtonUp () override","title":"function OnRightButtonUp"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelforward","text":"void OnMouseWheelForward () override","title":"function OnMouseWheelForward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelbackward","text":"void OnMouseWheelBackward () override","title":"function OnMouseWheelBackward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly","text":"void Dolly () override","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-rotate","text":"void Rotate () override","title":"function Rotate"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousemove","text":"void OnMouseMove () override","title":"function OnMouseMove"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly_1","text":"void Dolly ( double factor ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html","text":"shapeworks::StudioMesh Representation of a single mesh. More... #include Public Functions Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Name constexpr const char *const FFC_PAINT Detailed Description class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class Public Functions Documentation function StudioMesh StudioMesh () Constructor. function ~StudioMesh ~ StudioMesh () Destructor. function get_poly_data vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata. function set_poly_data void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly. function set_error_message void set_error_message ( std :: string error_message ) Set the error message. function get_error_message std :: string get_error_message () Return the error message. function apply_feature_map void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map. function apply_scalars void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform. function interpolate_scalars_to_mesh void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh. function get_largest_dimension_size double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) function get_or_create_array vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name. function paint_ffc void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint. function has_ffc_paint bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Documentation variable FFC_PAINT static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#shapeworksstudiomesh","text":"Representation of a single mesh. More... #include ","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions","text":"Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes","text":"Name constexpr const char *const FFC_PAINT","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#detailed-description","text":"class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh","text":"StudioMesh () Constructor.","title":"function StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh_1","text":"~ StudioMesh () Destructor.","title":"function ~StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_poly_data","text":"vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata.","title":"function get_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_poly_data","text":"void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly.","title":"function set_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_error_message","text":"void set_error_message ( std :: string error_message ) Set the error message.","title":"function set_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_error_message","text":"std :: string get_error_message () Return the error message.","title":"function get_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_feature_map","text":"void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map.","title":"function apply_feature_map"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_scalars","text":"void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform.","title":"function apply_scalars"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-interpolate_scalars_to_mesh","text":"void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh.","title":"function interpolate_scalars_to_mesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_largest_dimension_size","text":"double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100)","title":"function get_largest_dimension_size"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_or_create_array","text":"vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name.","title":"function get_or_create_array"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-paint_ffc","text":"void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint.","title":"function paint_ffc"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-has_ffc_paint","text":"bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"function has_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#variable-ffc_paint","text":"static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable FFC_PAINT"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html","text":"shapeworks::StudioSliceInteractorStyle Inherits from vtkInteractorStyleImage Public Functions Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override Public Functions Documentation function New static StudioSliceInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioSliceInteractorStyle StudioSliceInteractorStyle () function ~StudioSliceInteractorStyle virtual ~ StudioSliceInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnKeyDown void OnKeyDown () override function WindowLevel void WindowLevel () override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#shapeworksstudiosliceinteractorstyle","text":"Inherits from vtkInteractorStyleImage","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions","text":"Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-new","text":"static StudioSliceInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle","text":"StudioSliceInteractorStyle ()","title":"function StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle_1","text":"virtual ~ StudioSliceInteractorStyle ()","title":"function ~StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-windowlevel","text":"void WindowLevel () override Updated on 2023-10-24 at 22:16:02 +0000","title":"function WindowLevel"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html","text":"shapeworks::StudioUtils Utilities for Studio. #include Public Functions Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport Public Functions Documentation function ask_multiple_domains_as_single static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ) function to_string_list static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList function vtk_image_to_qimage static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage function reverse_poly_data static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data function get_platform_string static QString get_platform_string () return platform string function add_viewport_border static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#shapeworksstudioutils","text":"Utilities for Studio. #include ","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions","text":"Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-ask_multiple_domains_as_single","text":"static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project )","title":"function ask_multiple_domains_as_single"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-to_string_list","text":"static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList","title":"function to_string_list"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-vtk_image_to_qimage","text":"static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage","title":"function vtk_image_to_qimage"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-reverse_poly_data","text":"static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data","title":"function reverse_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-get_platform_string","text":"static QString get_platform_string () return platform string","title":"function get_platform_string"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-add_viewport_border","text":"static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-24 at 22:16:02 +0000","title":"function add_viewport_border"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html","text":"shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow Public Functions Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override Public Functions Documentation function New static StudioVtkOutputWindow * New () function vtkTypeMacro vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) function StudioVtkOutputWindow StudioVtkOutputWindow () function DisplayErrorText void DisplayErrorText ( const char * text ) override function DisplayWarningText void DisplayWarningText ( const char * text ) override function DisplayGenericWarningText void DisplayGenericWarningText ( const char * text ) override function DisplayDebugText void DisplayDebugText ( const char * text ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#shapeworksstudiovtkoutputwindow","text":"Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions","text":"Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-new","text":"static StudioVtkOutputWindow * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-studiovtkoutputwindow","text":"StudioVtkOutputWindow ()","title":"function StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displayerrortext","text":"void DisplayErrorText ( const char * text ) override","title":"function DisplayErrorText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaywarningtext","text":"void DisplayWarningText ( const char * text ) override","title":"function DisplayWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaygenericwarningtext","text":"void DisplayGenericWarningText ( const char * text ) override","title":"function DisplayGenericWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaydebugtext","text":"void DisplayDebugText ( const char * text ) override Updated on 2023-10-24 at 22:16:02 +0000","title":"function DisplayDebugText"},{"location":"api/Classes/classshapeworks_1_1Style.html","text":"shapeworks::Style Public Functions Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button) Public Functions Documentation function Style Style () function apply_normal_button_style static void apply_normal_button_style ( QPushButton * button ) function apply_abort_button_style static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#shapeworksstyle","text":"","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions","text":"Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-style","text":"Style ()","title":"function Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_normal_button_style","text":"static void apply_normal_button_style ( QPushButton * button )","title":"function apply_normal_button_style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_abort_button_style","text":"static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function apply_abort_button_style"},{"location":"api/Classes/classshapeworks_1_1Subject.html","text":"shapeworks::Subject Representation of a single subject. More... #include Public Types Name using project::types::StringMap StringMap using project::types::StringList StringList Public Functions Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not. Detailed Description class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it. Public Types Documentation using StringMap using shapeworks :: Subject :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: Subject :: StringList = project :: types :: StringList ; Public Functions Documentation function Subject Subject () function ~Subject ~ Subject () function set_original_filenames void set_original_filenames ( StringList filenames ) Set original filenames (one per domain) function get_original_filenames StringList get_original_filenames () Get original filenames. function set_groomed_filenames void set_groomed_filenames ( StringList filenames ) Set groomed filenames. function get_groomed_filenames StringList get_groomed_filenames () Get groomed filenames. function set_local_particle_filenames void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain) function get_local_particle_filenames StringList get_local_particle_filenames () Get local particle filenames. function set_world_particle_filenames void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames. function get_world_particle_filenames StringList get_world_particle_filenames () Get the world particle filenames. function set_landmarks_filenames void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain) function get_landmarks_filenames StringList get_landmarks_filenames () Set the landmarks filenames. function set_constraints_filenames void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain) function get_constraints_filenames StringList get_constraints_filenames () Set the constratins filenames. function set_number_of_domains void set_number_of_domains ( int number_of_domains ) Set the number of domains. function get_number_of_domains int get_number_of_domains () Get the number of domains. function get_feature_filenames StringMap get_feature_filenames () const Get the feature map filenames. function set_feature_filenames void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames. function get_groomed_transforms std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) function set_groomed_transforms void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain) function set_groomed_transform void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform. function get_procrustes_transforms std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) function set_procrustes_transforms void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain) function get_group_values StringMap get_group_values () const Get the group values. function get_group_value std :: string get_group_value ( std :: string group_name ) Get a specific group value. function set_group_values void set_group_values ( const StringMap & group_values ) Set the group values. function get_extra_values StringMap get_extra_values () const Get extra values (extra columns we don't interpret) function set_extra_values void set_extra_values ( StringMap extra_values ) function get_table_values StringMap get_table_values () const Get all table values. function set_table_values void set_table_values ( StringMap table_values ) function get_display_name std :: string get_display_name () Get the display name. function set_display_name void set_display_name ( std :: string display_name ) Set the display name. function is_fixed bool is_fixed () Get if this subject is fixed or not. function set_fixed void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#shapeworkssubject","text":"Representation of a single subject. More... #include ","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types","text":"Name using project::types::StringMap StringMap using project::types::StringList StringList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions","text":"Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Subject.html#detailed-description","text":"class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringmap","text":"using shapeworks :: Subject :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringlist","text":"using shapeworks :: Subject :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject","text":"Subject ()","title":"function Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject_1","text":"~ Subject ()","title":"function ~Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_original_filenames","text":"void set_original_filenames ( StringList filenames ) Set original filenames (one per domain)","title":"function set_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_original_filenames","text":"StringList get_original_filenames () Get original filenames.","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_filenames","text":"void set_groomed_filenames ( StringList filenames ) Set groomed filenames.","title":"function set_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_filenames","text":"StringList get_groomed_filenames () Get groomed filenames.","title":"function get_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_local_particle_filenames","text":"void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain)","title":"function set_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_local_particle_filenames","text":"StringList get_local_particle_filenames () Get local particle filenames.","title":"function get_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_world_particle_filenames","text":"void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames.","title":"function set_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_world_particle_filenames","text":"StringList get_world_particle_filenames () Get the world particle filenames.","title":"function get_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_landmarks_filenames","text":"void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain)","title":"function set_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_landmarks_filenames","text":"StringList get_landmarks_filenames () Set the landmarks filenames.","title":"function get_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_constraints_filenames","text":"void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain)","title":"function set_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_constraints_filenames","text":"StringList get_constraints_filenames () Set the constratins filenames.","title":"function get_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_number_of_domains","text":"void set_number_of_domains ( int number_of_domains ) Set the number of domains.","title":"function set_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_number_of_domains","text":"int get_number_of_domains () Get the number of domains.","title":"function get_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_feature_filenames","text":"StringMap get_feature_filenames () const Get the feature map filenames.","title":"function get_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_feature_filenames","text":"void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames.","title":"function set_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_transforms","text":"std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain)","title":"function get_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transforms","text":"void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain)","title":"function set_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transform","text":"void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform.","title":"function set_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_procrustes_transforms","text":"std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain)","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain)","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_values","text":"StringMap get_group_values () const Get the group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_value","text":"std :: string get_group_value ( std :: string group_name ) Get a specific group value.","title":"function get_group_value"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_group_values","text":"void set_group_values ( const StringMap & group_values ) Set the group values.","title":"function set_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_extra_values","text":"StringMap get_extra_values () const Get extra values (extra columns we don't interpret)","title":"function get_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_extra_values","text":"void set_extra_values ( StringMap extra_values )","title":"function set_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_table_values","text":"StringMap get_table_values () const Get all table values.","title":"function get_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_table_values","text":"void set_table_values ( StringMap table_values )","title":"function set_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_display_name","text":"std :: string get_display_name () Get the display name.","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_display_name","text":"void set_display_name ( std :: string display_name ) Set the display name.","title":"function set_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-is_fixed","text":"bool is_fixed () Get if this subject is fixed or not.","title":"function is_fixed"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_fixed","text":"void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-24 at 22:16:02 +0000","title":"function set_fixed"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html","text":"shapeworks::Telemetry Inherits from QObject Public Slots Name void handle_network_reply (QNetworkReply * reply) Public Functions Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params) Public Slots Documentation slot handle_network_reply void handle_network_reply ( QNetworkReply * reply ) Public Functions Documentation function Telemetry Telemetry ( Preferences & prefs ) function record_event void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#shapeworkstelemetry","text":"Inherits from QObject","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots","text":"Name void handle_network_reply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions","text":"Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#slot-handle_network_reply","text":"void handle_network_reply ( QNetworkReply * reply )","title":"slot handle_network_reply"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-telemetry","text":"Telemetry ( Preferences & prefs )","title":"function Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-record_event","text":"void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function record_event"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html","text":"shapeworks::UpdateChecker Update Checker. More... #include Inherits from QDialog Public Slots Name void handleNetworkReply (QNetworkReply * reply) Public Functions Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check () Detailed Description class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog Public Slots Documentation slot handleNetworkReply void handleNetworkReply ( QNetworkReply * reply ) Public Functions Documentation function UpdateChecker explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ) function ~UpdateChecker ~ UpdateChecker () function run_auto_update_check void run_auto_update_check () function run_manual_update_check void run_manual_update_check () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#shapeworksupdatechecker","text":"Update Checker. More... #include Inherits from QDialog","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots","text":"Name void handleNetworkReply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions","text":"Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#detailed-description","text":"class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#slot-handlenetworkreply","text":"void handleNetworkReply ( QNetworkReply * reply )","title":"slot handleNetworkReply"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker","text":"explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr )","title":"function UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker_1","text":"~ UpdateChecker ()","title":"function ~UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_auto_update_check","text":"void run_auto_update_check ()","title":"function run_auto_update_check"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_manual_update_check","text":"void run_manual_update_check () Updated on 2023-10-24 at 22:16:02 +0000","title":"function run_manual_update_check"},{"location":"api/Classes/classshapeworks_1_1Variant.html","text":"shapeworks::Variant Variant class to represent multiple types. More... #include Public Functions Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const Detailed Description class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet Public Functions Documentation function Variant inline Variant () function Variant inline Variant ( const std :: string & v ) function Variant inline Variant ( int v ) function Variant inline Variant ( double v ) function Variant inline Variant ( const char * v ) function Variant inline Variant ( bool v ) function Variant inline Variant ( std :: vector < double > v ) function Variant inline Variant ( std :: vector < int > v ) function Variant inline Variant ( std :: vector < bool > v ) function Variant inline Variant ( std :: vector < std :: string > v ) function operator std::string operator std :: string () const function operator bool operator bool () const function operator int operator int () const function operator unsigned int operator unsigned int () const function operator long operator long () const function operator unsigned long operator unsigned long () const function operator float operator float () const function operator double operator double () const function operator std::vector< double > operator std :: vector < double > () const function operator std::vector< int > operator std :: vector < int > () const function operator std::vector< bool > operator std :: vector < bool > () const function operator std::vector< std::string > operator std :: vector < std :: string > () const Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#shapeworksvariant","text":"Variant class to represent multiple types. More... #include ","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions","text":"Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Variant.html#detailed-description","text":"class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant","text":"inline Variant ()","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_1","text":"inline Variant ( const std :: string & v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_2","text":"inline Variant ( int v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_3","text":"inline Variant ( double v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_4","text":"inline Variant ( const char * v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_5","text":"inline Variant ( bool v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_6","text":"inline Variant ( std :: vector < double > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_7","text":"inline Variant ( std :: vector < int > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_8","text":"inline Variant ( std :: vector < bool > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_9","text":"inline Variant ( std :: vector < std :: string > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdstring","text":"operator std :: string () const","title":"function operator std::string"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-bool","text":"operator bool () const","title":"function operator bool"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-int","text":"operator int () const","title":"function operator int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-int","text":"operator unsigned int () const","title":"function operator unsigned int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-long","text":"operator long () const","title":"function operator long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-long","text":"operator unsigned long () const","title":"function operator unsigned long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-float","text":"operator float () const","title":"function operator float"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-double","text":"operator double () const","title":"function operator double"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-double","text":"operator std :: vector < double > () const","title":"function operator std::vector< double >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-int","text":"operator std :: vector < int > () const","title":"function operator std::vector< int >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-bool","text":"operator std :: vector < bool > () const","title":"function operator std::vector< bool >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-stdstring","text":"operator std :: vector < std :: string > () const Updated on 2023-10-24 at 22:16:02 +0000","title":"function operator std::vector< std::string >"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html","text":"shapeworks::VectorFunction More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction Public Types Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType Public Functions Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & ) Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result. Public Types Documentation typedef Self typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ; typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors. Public Functions Documentation function itkTypeMacro itkTypeMacro ( VectorFunction , LightObject ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate function Energy virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class. function AfterIteration inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function GetParticleSystem inline virtual ParticleSystem * GetParticleSystem () const function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber function GetDomainNumber inline virtual int GetDomainNumber () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling Protected Functions Documentation function VectorFunction inline VectorFunction () function ~VectorFunction inline virtual ~ VectorFunction () function operator= void operator = ( const VectorFunction & ) function VectorFunction VectorFunction ( const VectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ParticleSystem ParticleSystem * m_ParticleSystem ; variable m_DomainNumber unsigned int m_DomainNumber ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#shapeworksvectorfunction","text":"More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types","text":"Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions","text":"Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions","text":"Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes","text":"Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#detailed-description","text":"class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-self","text":"typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( VectorFunction , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-energy","text":"virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getparticlesystem","text":"inline virtual ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getdomainnumber","text":"inline virtual int GetDomainNumber () const","title":"function GetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction","text":"inline VectorFunction ()","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_1","text":"inline virtual ~ VectorFunction ()","title":"function ~VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-operator","text":"void operator = ( const VectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_2","text":"VectorFunction ( const VectorFunction & )","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_particlesystem","text":"ParticleSystem * m_ParticleSystem ;","title":"variable m_ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_domainnumber","text":"unsigned int m_DomainNumber ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_DomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html","text":"shapeworks::VectorImage Gradient (vector) image. #include Public Types Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator Public Functions Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator () Public Types Documentation using GradientImageFilter using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; Public Functions Documentation function VectorImage VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform) function VectorImage VectorImage () = delete function ~VectorImage ~ VectorImage () = default function evaluate Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ). function iterator ImageIterator iterator () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#shapeworksvectorimage","text":"Gradient (vector) image. #include ","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types","text":"Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions","text":"Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientimagefilter","text":"using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ;","title":"using GradientImageFilter"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imagetype","text":"using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientinterpolatortype","text":"using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ;","title":"using GradientInterpolatorType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imageiterator","text":"using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage","text":"VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform)","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_1","text":"VectorImage () = delete","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_2","text":"~ VectorImage () = default","title":"function ~VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-evaluate","text":"Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ).","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-iterator","text":"ImageIterator iterator () Updated on 2023-10-24 at 22:16:02 +0000","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Viewer.html","text":"shapeworks::Viewer 3D Viewer More... #include Public Functions Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform) Detailed Description class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape Public Functions Documentation function Viewer Viewer () function ~Viewer ~ Viewer () = default function set_renderer void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ) function get_renderer vtkSmartPointer < vtkRenderer > get_renderer () function display_shape void display_shape ( std :: shared_ptr < Shape > shape ) function clear_viewer void clear_viewer () function reset_camera void reset_camera ( std :: array < double , 3 > c ) function reset_camera void reset_camera () function set_color_series void set_color_series ( ColorMap color_series ) function set_glyph_size_and_quality void set_glyph_size_and_quality ( double size , double quality ) function get_glyph_size double get_glyph_size () function get_glyph_quality double get_glyph_quality () function set_session void set_session ( QSharedPointer < Session > session ) function get_session QSharedPointer < Session > get_session () function set_show_glyphs void set_show_glyphs ( bool show ) function set_show_surface void set_show_surface ( bool show ) function set_scale_arrows void set_scale_arrows ( bool scale ) function update_points void update_points () function update_glyph_properties void update_glyph_properties () function handle_pick int handle_pick ( int * click_pos ) function handle_ctrl_click PickResult handle_ctrl_click ( int * click_pos ) function set_selected_point void set_selected_point ( int id ) function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_loading_screen void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ) function set_color_scheme void set_color_scheme ( int i ) function handle_new_mesh void handle_new_mesh () function is_viewer_ready bool is_viewer_ready () function set_visualizer void set_visualizer ( Visualizer * visualizer ) function update_feature_range void update_feature_range ( double * range ) function update_opacities void update_opacities () function get_shape std :: shared_ptr < Shape > get_shape () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function get_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors () function get_unclipped_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors () function get_meshes MeshGroup get_meshes () function get_transform vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ) function get_landmark_transform vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ) function get_inverse_landmark_transform vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ) function get_image_transform vtkSmartPointer < vtkTransform > get_image_transform () function slice_view SliceView & slice_view () function update_image_volume void update_image_volume () function get_glyph_points vtkSmartPointer < vtkPoints > get_glyph_points () function get_alignment_transform vtkSmartPointer < vtkTransform > get_alignment_transform () function update_clipping_planes void update_clipping_planes () function get_point_placer vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer () function handle_ffc_paint void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] ) function update_actors void update_actors () function remove_scalar_bar void remove_scalar_bar () function is_ready inline bool is_ready () function get_particle_scalars vtkFloatArray * get_particle_scalars () function get_particle_poly_data vtkSmartPointer < vtkPolyData > get_particle_poly_data () function insert_compare_meshes void insert_compare_meshes () function set_scalar_visibility void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ) function is_reverse static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#shapeworksviewer","text":"3D Viewer More... #include ","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions","text":"Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#detailed-description","text":"class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer","text":"Viewer ()","title":"function Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer_1","text":"~ Viewer () = default","title":"function ~Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_renderer","text":"void set_renderer ( vtkSmartPointer < vtkRenderer > renderer )","title":"function set_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_renderer","text":"vtkSmartPointer < vtkRenderer > get_renderer ()","title":"function get_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-display_shape","text":"void display_shape ( std :: shared_ptr < Shape > shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-clear_viewer","text":"void clear_viewer ()","title":"function clear_viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera","text":"void reset_camera ( std :: array < double , 3 > c )","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera_1","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_series","text":"void set_color_series ( ColorMap color_series )","title":"function set_color_series"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_size_and_quality","text":"void set_glyph_size_and_quality ( double size , double quality )","title":"function set_glyph_size_and_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_size","text":"double get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_quality","text":"double get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_session","text":"QSharedPointer < Session > get_session ()","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show )","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_surface","text":"void set_show_surface ( bool show )","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scale_arrows","text":"void set_scale_arrows ( bool scale )","title":"function set_scale_arrows"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_points","text":"void update_points ()","title":"function update_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_pick","text":"int handle_pick ( int * click_pos )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ctrl_click","text":"PickResult handle_ctrl_click ( int * click_pos )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_selected_point","text":"void set_selected_point ( int id )","title":"function set_selected_point"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_loading_screen","text":"void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen )","title":"function set_loading_screen"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_scheme","text":"void set_color_scheme ( int i )","title":"function set_color_scheme"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_viewer_ready","text":"bool is_viewer_ready ()","title":"function is_viewer_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_feature_range","text":"void update_feature_range ( double * range )","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_opacities","text":"void update_opacities ()","title":"function update_opacities"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_shape","text":"std :: shared_ptr < Shape > get_shape ()","title":"function get_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors ()","title":"function get_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_unclipped_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors ()","title":"function get_unclipped_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_meshes","text":"MeshGroup get_meshes ()","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain )","title":"function get_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_inverse_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain )","title":"function get_inverse_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_image_transform","text":"vtkSmartPointer < vtkTransform > get_image_transform ()","title":"function get_image_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-slice_view","text":"SliceView & slice_view ()","title":"function slice_view"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_image_volume","text":"void update_image_volume ()","title":"function update_image_volume"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_points","text":"vtkSmartPointer < vtkPoints > get_glyph_points ()","title":"function get_glyph_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_alignment_transform","text":"vtkSmartPointer < vtkTransform > get_alignment_transform ()","title":"function get_alignment_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_clipping_planes","text":"void update_clipping_planes ()","title":"function update_clipping_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_point_placer","text":"vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer ()","title":"function get_point_placer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ffc_paint","text":"void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] )","title":"function handle_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_actors","text":"void update_actors ()","title":"function update_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-remove_scalar_bar","text":"void remove_scalar_bar ()","title":"function remove_scalar_bar"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_ready","text":"inline bool is_ready ()","title":"function is_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_scalars","text":"vtkFloatArray * get_particle_scalars ()","title":"function get_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_particle_poly_data ()","title":"function get_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-insert_compare_meshes","text":"void insert_compare_meshes ()","title":"function insert_compare_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scalar_visibility","text":"void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar )","title":"function set_scalar_visibility"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_reverse","text":"static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function is_reverse"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html","text":"shapeworks::Visualizer Controls display of objects in viewers. More... #include Inherits from QObject Public Slots Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed () Public Functions Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size. Detailed Description class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions. Public Slots Documentation slot update_viewer_properties void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) slot handle_feature_range_changed void handle_feature_range_changed () slot handle_image_slice_settings_changed void handle_image_slice_settings_changed () Public Functions Documentation function Visualizer Visualizer ( Preferences & prefs ) function ~Visualizer ~ Visualizer () function set_lightbox void set_lightbox ( LightboxHandle lightbox ) set the lightbox function set_session void set_session ( SessionHandle session ) set the session function set_center void set_center ( bool center ) turn automatic centering on/off function get_center bool get_center () get centering on/off function set_alignment_domain void set_alignment_domain ( int domain ) set the alignment domain function get_alignment_domain int get_alignment_domain () get the current alignment domain function set_show_glyphs void set_show_glyphs ( bool show ) turn on/off glyph display function set_show_surface void set_show_surface ( bool show ) turn on/off surface display function display_samples void display_samples () update the display using the current settings function update_samples void update_samples () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function display_sample void display_sample ( int i ) function display_shape void display_shape ( ShapeHandle shape ) function display_shapes void display_shapes ( ShapeList shapes ) function set_selected_point_one void set_selected_point_one ( int id ) function set_selected_point_two void set_selected_point_two ( int id ) function set_mean void set_mean ( const Eigen :: VectorXd & mean ) function set_mean_shape void set_mean_shape ( ShapeHandle mean_shape ) function get_mean_shape ShapeHandle get_mean_shape () function reset_camera void reset_camera () function update_lut void update_lut () function get_current_shape Particles get_current_shape () function get_current_particle_scalars vtkFloatArray * get_current_particle_scalars () function get_current_particle_poly_data vtkSmartPointer < vtkPolyData > get_current_particle_poly_data () function handle_new_mesh void handle_new_mesh () function get_current_mesh vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ) function get_current_meshes_transformed std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index ) function get_feature_map const std :: string & get_feature_map () const Get the currently selected feature map. function set_uniform_feature_range void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range. function get_uniform_feature_range bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range. function set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. function clear_viewers void clear_viewers () clear out the viewers function reset_feature_range void reset_feature_range () Reset the feature range (e.g. for a new feature) function get_feature_range double * get_feature_range () Get the current feature range. function get_feature_raw_range double * get_feature_raw_range () Get the current raw feature range. function get_feature_range_valid bool get_feature_range_valid () Return if the feature range is valid or not. function update_feature_range void update_feature_range ( double * range ) Update the feature range with a given range. function update_feature_range void update_feature_range ( double min , double max ) Update the feature range with a given range. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode. function set_opacities void set_opacities ( std :: vector < float > opacities ) Set domain opacities. function get_opacities std :: vector < float > get_opacities () Get domain opacities. function set_domain_particle_visibilities void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities. function get_domain_particle_visibilities std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. function get_current_glyph_size double get_current_glyph_size () Get the current glyph size. function handle_ctrl_click void handle_ctrl_click ( PickResult result ) Handle ctrl click. function redraw void redraw () Redraw renderers. function export_to_pixmap QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap. function get_render_size QSize get_render_size () Return render window size. Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#shapeworksvisualizer","text":"Controls display of objects in viewers. More... #include Inherits from QObject","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots","text":"Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions","text":"Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#detailed-description","text":"class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-update_viewer_properties","text":"void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc)","title":"slot update_viewer_properties"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_feature_range_changed","text":"void handle_feature_range_changed ()","title":"slot handle_feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_image_slice_settings_changed","text":"void handle_image_slice_settings_changed ()","title":"slot handle_image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer","text":"Visualizer ( Preferences & prefs )","title":"function Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer_1","text":"~ Visualizer ()","title":"function ~Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_lightbox","text":"void set_lightbox ( LightboxHandle lightbox ) set the lightbox","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_session","text":"void set_session ( SessionHandle session ) set the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_center","text":"void set_center ( bool center ) turn automatic centering on/off","title":"function set_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_center","text":"bool get_center () get centering on/off","title":"function get_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_alignment_domain","text":"void set_alignment_domain ( int domain ) set the alignment domain","title":"function set_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_alignment_domain","text":"int get_alignment_domain () get the current alignment domain","title":"function get_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show ) turn on/off glyph display","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_surface","text":"void set_show_surface ( bool show ) turn on/off surface display","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_samples","text":"void display_samples () update the display using the current settings","title":"function display_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_samples","text":"void update_samples ()","title":"function update_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_sample","text":"void display_sample ( int i )","title":"function display_sample"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shape","text":"void display_shape ( ShapeHandle shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shapes","text":"void display_shapes ( ShapeList shapes )","title":"function display_shapes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_one","text":"void set_selected_point_one ( int id )","title":"function set_selected_point_one"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_two","text":"void set_selected_point_two ( int id )","title":"function set_selected_point_two"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean","text":"void set_mean ( const Eigen :: VectorXd & mean )","title":"function set_mean"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean_shape","text":"void set_mean_shape ( ShapeHandle mean_shape )","title":"function set_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_lut","text":"void update_lut ()","title":"function update_lut"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_shape","text":"Particles get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_scalars","text":"vtkFloatArray * get_current_particle_scalars ()","title":"function get_current_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_current_particle_poly_data ()","title":"function get_current_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_mesh","text":"vtkSmartPointer < vtkPolyData > get_current_mesh ( int index )","title":"function get_current_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_meshes_transformed","text":"std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index )","title":"function get_current_meshes_transformed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_map","text":"const std :: string & get_feature_map () const Get the currently selected feature map.","title":"function get_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_uniform_feature_range","text":"void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range.","title":"function set_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_uniform_feature_range","text":"bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range.","title":"function get_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"function set_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-clear_viewers","text":"void clear_viewers () clear out the viewers","title":"function clear_viewers"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_feature_range","text":"void reset_feature_range () Reset the feature range (e.g. for a new feature)","title":"function reset_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range","text":"double * get_feature_range () Get the current feature range.","title":"function get_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_raw_range","text":"double * get_feature_raw_range () Get the current raw feature range.","title":"function get_feature_raw_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range_valid","text":"bool get_feature_range_valid () Return if the feature range is valid or not.","title":"function get_feature_range_valid"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range","text":"void update_feature_range ( double * range ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range_1","text":"void update_feature_range ( double min , double max ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform_1","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_opacities","text":"void set_opacities ( std :: vector < float > opacities ) Set domain opacities.","title":"function set_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_opacities","text":"std :: vector < float > get_opacities () Get domain opacities.","title":"function get_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_domain_particle_visibilities","text":"void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities.","title":"function set_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_domain_particle_visibilities","text":"std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities.","title":"function get_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_glyph_size","text":"double get_current_glyph_size () Get the current glyph size.","title":"function get_current_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result ) Handle ctrl click.","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-redraw","text":"void redraw () Redraw renderers.","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-export_to_pixmap","text":"QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap.","title":"function export_to_pixmap"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_render_size","text":"QSize get_render_size () Return render window size. Updated on 2023-10-24 at 22:16:02 +0000","title":"function get_render_size"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html","text":"shapeworks::VtkMeshWrapper Inherits from shapeworks::MeshWrapper Public Types Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType Public Functions Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override Public Types Documentation using PointType using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ; using GradNType using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ; using NormalType using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ; Public Functions Documentation function VtkMeshWrapper explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ) function ~VtkMeshWrapper ~ VtkMeshWrapper () = default function ComputeDistance double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override function IsWithinDistance virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk function ProjectVectorToSurfaceTangent virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh function GetPointOnMesh virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh function GetMeshLowerBound inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound function GetMeshUpperBound inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound function InvalidateParticle virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle function GetPolydata inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#shapeworksvtkmeshwrapper","text":"Inherits from shapeworks::MeshWrapper","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types","text":"Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions","text":"Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-pointtype","text":"using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-gradntype","text":"using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-normaltype","text":"using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ;","title":"using NormalType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-vectortype","text":"using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper","text":"explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 )","title":"function VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper_1","text":"~ VtkMeshWrapper () = default","title":"function ~VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-computedistance","text":"double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplenormalatpoint","text":"virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshlowerbound","text":"inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshupperbound","text":"inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-invalidateparticle","text":"virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpolydata","text":"inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-24 at 22:16:02 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html","text":"shapeworks::WheelEventForwarder Inherits from QObject Public Functions Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event) Public Functions Documentation function WheelEventForwarder explicit WheelEventForwarder ( QScrollBar * target ) function ~WheelEventForwarder ~ WheelEventForwarder () function eventFilter bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#shapeworkswheeleventforwarder","text":"Inherits from QObject","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions","text":"Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder","text":"explicit WheelEventForwarder ( QScrollBar * target )","title":"function WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder_1","text":"~ WheelEventForwarder ()","title":"function ~WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-eventfilter","text":"bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function eventFilter"},{"location":"api/Classes/classshapeworks_1_1Worker.html","text":"shapeworks::Worker Inherits from QObject Public Slots Name void process () Public Signals Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished () Public Functions Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker () Public Slots Documentation slot process void process () Public Signals Documentation signal error_message void error_message ( QString ) signal warning_message void warning_message ( QString ) signal status_message void status_message ( QString ) signal progress void progress ( int ) signal finished void finished () Public Functions Documentation function Worker Worker () function ~Worker ~ Worker () function run_job void run_job ( QSharedPointer < Job > job ) function create_worker static Worker * create_worker () Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#shapeworksworker","text":"Inherits from QObject","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals","text":"Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions","text":"Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-error_message","text":"void error_message ( QString )","title":"signal error_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-warning_message","text":"void warning_message ( QString )","title":"signal warning_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-status_message","text":"void status_message ( QString )","title":"signal status_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker","text":"Worker ()","title":"function Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker_1","text":"~ Worker ()","title":"function ~Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-create_worker","text":"static Worker * create_worker () Updated on 2023-10-24 at 22:16:02 +0000","title":"function create_worker"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html","text":"shapeworks::shapeworks_exception Inherits from std::runtime_error Public Functions Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message) Public Functions Documentation function shapeworks_exception shapeworks_exception ( char const * const message ) function shapeworks_exception shapeworks_exception ( std :: string const & message ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#shapeworksshapeworks_exception","text":"Inherits from std::runtime_error","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions","text":"Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception","text":"shapeworks_exception ( char const * const message )","title":"function shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception_1","text":"shapeworks_exception ( std :: string const & message ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function shapeworks_exception"},{"location":"api/Classes/classvec2d.html","text":"vec2d Public Functions Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const Public Attributes Name double x double y Public Functions Documentation function vec2d inline vec2d () function vec2d inline vec2d ( double X , double Y ) function operator- inline vec2d operator - () function operator- inline vec2d operator - ( const vec2d & r ) function operator+ inline vec2d operator + ( const vec2d & r ) function operator* inline vec2d operator * ( double g ) function operator* inline double operator * ( const vec2d & r ) function norm inline double norm () function unit inline double unit () function operator== inline bool operator == ( const vec2d & r ) const Public Attributes Documentation variable x double x ; variable y double y ; Updated on 2023-10-24 at 22:16:02 +0000","title":"vec2d"},{"location":"api/Classes/classvec2d.html#vec2d","text":"","title":"vec2d"},{"location":"api/Classes/classvec2d.html#public-functions","text":"Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const","title":"Public Functions"},{"location":"api/Classes/classvec2d.html#public-attributes","text":"Name double x double y","title":"Public Attributes"},{"location":"api/Classes/classvec2d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec2d.html#function-vec2d","text":"inline vec2d ()","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-vec2d_1","text":"inline vec2d ( double X , double Y )","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-operator-","text":"inline vec2d operator - ()","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator-_1","text":"inline vec2d operator - ( const vec2d & r )","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator","text":"inline vec2d operator + ( const vec2d & r )","title":"function operator+"},{"location":"api/Classes/classvec2d.html#function-operator_1","text":"inline vec2d operator * ( double g )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-operator_2","text":"inline double operator * ( const vec2d & r )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-norm","text":"inline double norm ()","title":"function norm"},{"location":"api/Classes/classvec2d.html#function-unit","text":"inline double unit ()","title":"function unit"},{"location":"api/Classes/classvec2d.html#function-operator_3","text":"inline bool operator == ( const vec2d & r ) const","title":"function operator=="},{"location":"api/Classes/classvec2d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec2d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec2d.html#variable-y","text":"double y ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable y"},{"location":"api/Classes/classvec3d.html","text":"vec3d Public Functions Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize () Public Attributes Name double x double y double z Public Functions Documentation function vec3d inline vec3d () function vec3d inline vec3d ( double rx , double ry , double rz ) function vec3d inline vec3d ( const vec2d & r ) function operator+ inline vec3d operator + ( const vec3d & v ) const function operator- inline vec3d operator - ( const vec3d & v ) const function operator^ inline vec3d operator ^ ( const vec3d & v ) const function operator* inline double operator * ( const vec3d & v ) const function operator* inline vec3d operator * ( const double g ) const function operator/ inline vec3d operator / ( const double g ) const function operator+= inline const vec3d & operator += ( const vec3d & v ) function operator-= inline const vec3d & operator -= ( const vec3d & v ) function operator/= inline const vec3d & operator /= ( const double f ) function operator/= inline const vec3d & operator /= ( const int n ) function operator*= inline const vec3d & operator *= ( const double f ) function operator- inline vec3d operator - () const function Length inline double Length () const function SqrLength inline double SqrLength () const function Normalize inline vec3d & Normalize () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"vec3d"},{"location":"api/Classes/classvec3d.html#vec3d","text":"","title":"vec3d"},{"location":"api/Classes/classvec3d.html#public-functions","text":"Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize ()","title":"Public Functions"},{"location":"api/Classes/classvec3d.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classvec3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec3d.html#function-vec3d","text":"inline vec3d ()","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_1","text":"inline vec3d ( double rx , double ry , double rz )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_2","text":"inline vec3d ( const vec2d & r )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-operator","text":"inline vec3d operator + ( const vec3d & v ) const","title":"function operator+"},{"location":"api/Classes/classvec3d.html#function-operator-","text":"inline vec3d operator - ( const vec3d & v ) const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-operator_1","text":"inline vec3d operator ^ ( const vec3d & v ) const","title":"function operator^"},{"location":"api/Classes/classvec3d.html#function-operator_2","text":"inline double operator * ( const vec3d & v ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_3","text":"inline vec3d operator * ( const double g ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_4","text":"inline vec3d operator / ( const double g ) const","title":"function operator/"},{"location":"api/Classes/classvec3d.html#function-operator_5","text":"inline const vec3d & operator += ( const vec3d & v )","title":"function operator+="},{"location":"api/Classes/classvec3d.html#function-operator-_1","text":"inline const vec3d & operator -= ( const vec3d & v )","title":"function operator-="},{"location":"api/Classes/classvec3d.html#function-operator_6","text":"inline const vec3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_7","text":"inline const vec3d & operator /= ( const int n )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_8","text":"inline const vec3d & operator *= ( const double f )","title":"function operator*="},{"location":"api/Classes/classvec3d.html#function-operator-_2","text":"inline vec3d operator - () const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-length","text":"inline double Length () const","title":"function Length"},{"location":"api/Classes/classvec3d.html#function-sqrlength","text":"inline double SqrLength () const","title":"function SqrLength"},{"location":"api/Classes/classvec3d.html#function-normalize","text":"inline vec3d & Normalize ()","title":"function Normalize"},{"location":"api/Classes/classvec3d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec3d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec3d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec3d.html#variable-z","text":"double z ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable z"},{"location":"api/Classes/classvec6d.html","text":"vec6d Public Functions Name vec6d () Public Attributes Name double x double y double z double xy double yz double xz Public Functions Documentation function vec6d inline vec6d () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable xy double xy ; variable yz double yz ; variable xz double xz ; Updated on 2023-10-24 at 22:16:02 +0000","title":"vec6d"},{"location":"api/Classes/classvec6d.html#vec6d","text":"","title":"vec6d"},{"location":"api/Classes/classvec6d.html#public-functions","text":"Name vec6d ()","title":"Public Functions"},{"location":"api/Classes/classvec6d.html#public-attributes","text":"Name double x double y double z double xy double yz double xz","title":"Public Attributes"},{"location":"api/Classes/classvec6d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec6d.html#function-vec6d","text":"inline vec6d ()","title":"function vec6d"},{"location":"api/Classes/classvec6d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec6d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec6d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec6d.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classvec6d.html#variable-xy","text":"double xy ;","title":"variable xy"},{"location":"api/Classes/classvec6d.html#variable-yz","text":"double yz ;","title":"variable yz"},{"location":"api/Classes/classvec6d.html#variable-xz","text":"double xz ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable xz"},{"location":"api/Classes/classvtkPolyDataToImageData.html","text":"vtkPolyDataToImageData Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New () Protected Functions Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( Border , unsigned int ) function vtkGetMacro vtkGetMacro ( Border , unsigned int ) function vtkSetMacro vtkSetMacro ( Spacing , double ) function vtkGetMacro vtkGetMacro ( Spacing , double ) function vtkSetMacro vtkSetMacro ( SampleDistance , double ) function vtkGetMacro vtkGetMacro ( SampleDistance , double ) function vtkSetMacro vtkSetMacro ( InitialBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( InitialBallSize , unsigned int ) function vtkSetMacro vtkSetMacro ( FinalBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( FinalBallSize , unsigned int ) function FillInputPortInformation virtual int FillInputPortInformation ( int port , vtkInformation * info ) function New static vtkPolyDataToImageData * New () Protected Functions Documentation function vtkPolyDataToImageData vtkPolyDataToImageData () function ~vtkPolyDataToImageData inline ~ vtkPolyDataToImageData () function RequestInformation virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestData virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestUpdateExtent virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-24 at 22:16:02 +0000","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#vtkpolydatatoimagedata","text":"Inherits from vtkImageAlgorithm","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions","text":"Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New ()","title":"Public Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions","text":"Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector)","title":"Protected Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtktypemacro","text":"vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro","text":"vtkSetMacro ( Border , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro","text":"vtkGetMacro ( Border , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_1","text":"vtkSetMacro ( Spacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Spacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_2","text":"vtkSetMacro ( SampleDistance , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_2","text":"vtkGetMacro ( SampleDistance , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_3","text":"vtkSetMacro ( InitialBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_3","text":"vtkGetMacro ( InitialBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_4","text":"vtkSetMacro ( FinalBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_4","text":"vtkGetMacro ( FinalBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int port , vtkInformation * info )","title":"function FillInputPortInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-new","text":"static vtkPolyDataToImageData * New ()","title":"function New"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata","text":"vtkPolyDataToImageData ()","title":"function vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata_1","text":"inline ~ vtkPolyDataToImageData ()","title":"function ~vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestupdateextent","text":"virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function RequestUpdateExtent"},{"location":"api/Classes/index_classes.html","text":"Classes class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-24 at 22:16:03 +0000","title":"Classes"},{"location":"api/Classes/index_classes.html#classes","text":"class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-24 at 22:16:03 +0000","title":"Classes"},{"location":"api/Classes/structColorScheme_1_1rgb.html","text":"ColorScheme::rgb Public Functions Name rgb () rgb (float l, float m, float n) Public Attributes Name float r float g float b Public Functions Documentation function rgb inline rgb () function rgb inline rgb ( float l , float m , float n ) Public Attributes Documentation variable r float r ; variable g float g ; variable b float b ; Updated on 2023-10-24 at 22:16:02 +0000","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#colorschemergb","text":"","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions","text":"Name rgb () rgb (float l, float m, float n)","title":"Public Functions"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes","text":"Name float r float g float b","title":"Public Attributes"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb","text":"inline rgb ()","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb_1","text":"inline rgb ( float l , float m , float n )","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-g","text":"float g ;","title":"variable g"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-b","text":"float b ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable b"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html","text":"FECVDDecimationModifier::EDGE Public Attributes Name int face int node Public Attributes Documentation variable face int face ; variable node int node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#fecvddecimationmodifieredge","text":"","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes","text":"Name int face int node","title":"Public Attributes"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-face","text":"int face ;","title":"variable face"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-node","text":"int node ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable node"},{"location":"api/Classes/structFEFillHole_1_1FACE.html","text":"FEFillHole::FACE Public Attributes Name vec3d r int n Public Attributes Documentation variable r vec3d r ; variable n int n ; Updated on 2023-10-24 at 22:16:02 +0000","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#fefillholeface","text":"","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes","text":"Name vec3d r int n","title":"Public Attributes"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-n","text":"int n ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable n"},{"location":"api/Classes/structIntersection.html","text":"Intersection Public Attributes Name vec3d point float r int m_index int m_faceIndex Public Attributes Documentation variable point vec3d point ; variable r float r ; variable m_index int m_index ; variable m_faceIndex int m_faceIndex ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Intersection"},{"location":"api/Classes/structIntersection.html#intersection","text":"","title":"Intersection"},{"location":"api/Classes/structIntersection.html#public-attributes","text":"Name vec3d point float r int m_index int m_faceIndex","title":"Public Attributes"},{"location":"api/Classes/structIntersection.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structIntersection.html#variable-point","text":"vec3d point ;","title":"variable point"},{"location":"api/Classes/structIntersection.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structIntersection.html#variable-m_index","text":"int m_index ;","title":"variable m_index"},{"location":"api/Classes/structIntersection.html#variable-m_faceindex","text":"int m_faceIndex ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable m_faceIndex"},{"location":"api/Classes/structQuad.html","text":"Quad Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d r3 Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable r3 vec3d r3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Quad"},{"location":"api/Classes/structQuad.html#quad","text":"","title":"Quad"},{"location":"api/Classes/structQuad.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d r3","title":"Public Attributes"},{"location":"api/Classes/structQuad.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structQuad.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structQuad.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structQuad.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structQuad.html#variable-r3","text":"vec3d r3 ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable r3"},{"location":"api/Classes/structRay.html","text":"Ray Public Attributes Name vec3d origin vec3d direction Public Attributes Documentation variable origin vec3d origin ; variable direction vec3d direction ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Ray"},{"location":"api/Classes/structRay.html#ray","text":"","title":"Ray"},{"location":"api/Classes/structRay.html#public-attributes","text":"Name vec3d origin vec3d direction","title":"Public Attributes"},{"location":"api/Classes/structRay.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structRay.html#variable-origin","text":"vec3d origin ;","title":"variable origin"},{"location":"api/Classes/structRay.html#variable-direction","text":"vec3d direction ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable direction"},{"location":"api/Classes/structSimilarityTransform3D.html","text":"SimilarityTransform3D Public Attributes Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation Public Attributes Documentation variable rotation vnl_matrix_fixed < double , 3 , 3 > rotation ; variable scale double scale ; variable translation vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-24 at 22:16:02 +0000","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#similaritytransform3d","text":"","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes","text":"Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation","title":"Public Attributes"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-rotation","text":"vnl_matrix_fixed < double , 3 , 3 > rotation ;","title":"variable rotation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-scale","text":"double scale ;","title":"variable scale"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-translation","text":"vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable translation"},{"location":"api/Classes/structTriangle.html","text":"Triangle Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d fn Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable fn vec3d fn ; Updated on 2023-10-24 at 22:16:02 +0000","title":"Triangle"},{"location":"api/Classes/structTriangle.html#triangle","text":"","title":"Triangle"},{"location":"api/Classes/structTriangle.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d fn","title":"Public Attributes"},{"location":"api/Classes/structTriangle.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structTriangle.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structTriangle.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structTriangle.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structTriangle.html#variable-fn","text":"vec3d fn ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable fn"},{"location":"api/Classes/structVTKEXPORT.html","text":"VTKEXPORT Public Attributes Name bool bshellthick bool bscalar_data Public Attributes Documentation variable bshellthick bool bshellthick ; variable bscalar_data bool bscalar_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#vtkexport","text":"","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes","text":"Name bool bshellthick bool bscalar_data","title":"Public Attributes"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structVTKEXPORT.html#variable-bshellthick","text":"bool bshellthick ;","title":"variable bshellthick"},{"location":"api/Classes/structVTKEXPORT.html#variable-bscalar_data","text":"bool bscalar_data ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable bscalar_data"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html","text":"fmt::formatter< QString > Public Functions Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const Public Functions Documentation function parse inline constexpr auto parse ( format_parse_context & ctx ) function format template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#fmtformatter-qstring","text":"","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions","text":"Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const","title":"Public Functions"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-parse","text":"inline constexpr auto parse ( format_parse_context & ctx )","title":"function parse"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-format","text":"template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-24 at 22:16:01 +0000","title":"function format"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html","text":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood Public Functions Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_) Public Attributes Name ParticlePointIndexPair pi_pair double weight double distance int dom Public Functions Documentation function CrossDomainNeighborhood inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) Public Attributes Documentation variable pi_pair ParticlePointIndexPair pi_pair ; variable weight double weight ; variable distance double distance ; variable dom int dom ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#shapeworkscurvaturesamplingfunctioncrossdomainneighborhood","text":"","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions","text":"Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes","text":"Name ParticlePointIndexPair pi_pair double weight double distance int dom","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#function-crossdomainneighborhood","text":"inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ )","title":"function CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-pi_pair","text":"ParticlePointIndexPair pi_pair ;","title":"variable pi_pair"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-weight","text":"double weight ;","title":"variable weight"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-distance","text":"double distance ;","title":"variable distance"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-dom","text":"int dom ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable dom"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html","text":"shapeworks::MeshGeoEntry Public Types Name enum Mode Public Functions Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target) Public Attributes Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full Public Types Documentation enum Mode Enumerator Value Description Full Partial Public Functions Documentation function clear inline void clear () function is_full_mode inline bool is_full_mode () const function update_max_dist inline void update_max_dist () function has_entry inline bool has_entry ( int target ) Public Attributes Documentation variable mode Mode mode { Mode :: Partial }; variable max_dist double max_dist { 0.0 }; variable data_partial robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; variable data_full std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#shapeworksmeshgeoentry","text":"","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types","text":"Name enum Mode","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions","text":"Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes","text":"Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#enum-mode","text":"Enumerator Value Description Full Partial","title":"enum Mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-is_full_mode","text":"inline bool is_full_mode () const","title":"function is_full_mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-update_max_dist","text":"inline void update_max_dist ()","title":"function update_max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-has_entry","text":"inline bool has_entry ( int target )","title":"function has_entry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-mode","text":"Mode mode { Mode :: Partial };","title":"variable mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-max_dist","text":"double max_dist { 0.0 };","title":"variable max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_partial","text":"robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ;","title":"variable data_partial"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_full","text":"std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable data_full"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html","text":"shapeworks::MultiVariateNormalRandom Public Functions Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() () Public Attributes Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist Public Functions Documentation function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) function operator() inline Eigen :: MatrixXd operator ()() Public Attributes Documentation variable mean Eigen :: VectorXd mean ; variable transform Eigen :: MatrixXd transform ; variable gen boost :: mt19937 gen { 42 }; variable dist boost :: normal_distribution dist ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#shapeworksmultivariatenormalrandom","text":"","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions","text":"Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes","text":"Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom","text":"inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom_1","text":"inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-operator","text":"inline Eigen :: MatrixXd operator ()()","title":"function operator()"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-mean","text":"Eigen :: VectorXd mean ;","title":"variable mean"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-transform","text":"Eigen :: MatrixXd transform ;","title":"variable transform"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-gen","text":"boost :: mt19937 gen { 42 };","title":"variable gen"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-dist","text":"boost :: normal_distribution dist ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html","text":"shapeworks::Observer::DefinedCallbacksStruct More... #include Public Functions Name DefinedCallbacksStruct () Public Attributes Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent Detailed Description struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register. Public Functions Documentation function DefinedCallbacksStruct inline DefinedCallbacksStruct () Public Attributes Documentation variable DomainAddEvent bool DomainAddEvent ; variable TransformSetEvent bool TransformSetEvent ; variable PrefixTransformSetEvent bool PrefixTransformSetEvent ; variable NeighborhoodSetEvent bool NeighborhoodSetEvent ; variable PositionSetEvent bool PositionSetEvent ; variable PositionAddEvent bool PositionAddEvent ; variable PositionRemoveEvent bool PositionRemoveEvent ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#shapeworksobserverdefinedcallbacksstruct","text":"More... #include ","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions","text":"Name DefinedCallbacksStruct ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes","text":"Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#detailed-description","text":"struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#function-definedcallbacksstruct","text":"inline DefinedCallbacksStruct ()","title":"function DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-domainaddevent","text":"bool DomainAddEvent ;","title":"variable DomainAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-transformsetevent","text":"bool TransformSetEvent ;","title":"variable TransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-prefixtransformsetevent","text":"bool PrefixTransformSetEvent ;","title":"variable PrefixTransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-neighborhoodsetevent","text":"bool NeighborhoodSetEvent ;","title":"variable NeighborhoodSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionsetevent","text":"bool PositionSetEvent ;","title":"variable PositionSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionaddevent","text":"bool PositionAddEvent ;","title":"variable PositionAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionremoveevent","text":"bool PositionRemoveEvent ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable PositionRemoveEvent"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html","text":"shapeworks::ParticlePointIndexPair More... #include Public Types Name typedef itk::Point< double, 3 > PointType Public Functions Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o) Public Attributes Name PointType Point unsigned int Index Detailed Description struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h] Public Types Documentation typedef PointType typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ; Public Functions Documentation function ParticlePointIndexPair inline ParticlePointIndexPair () function ParticlePointIndexPair inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) function ParticlePointIndexPair inline ParticlePointIndexPair ( const ParticlePointIndexPair & o ) function operator= inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) Public Attributes Documentation variable Point PointType Point ; variable Index unsigned int Index ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#shapeworksparticlepointindexpair","text":"More... #include ","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types","text":"Name typedef itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions","text":"Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes","text":"Name PointType Point unsigned int Index","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#detailed-description","text":"struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h]","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#typedef-pointtype","text":"typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair","text":"inline ParticlePointIndexPair ()","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_1","text":"inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_2","text":"inline ParticlePointIndexPair ( const ParticlePointIndexPair & o )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-operator","text":"inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-point","text":"PointType Point ;","title":"variable Point"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-index","text":"unsigned int Index ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable Index"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html","text":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair More... #include Public Types Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType Public Functions Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o) Public Attributes Name IteratorType Iterator NodePointerType NodePointer Detailed Description struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values. Public Types Documentation typedef NodePointerType typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ; typedef IteratorType typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ; Public Functions Documentation function IteratorNodePair inline IteratorNodePair () function ~IteratorNodePair inline ~ IteratorNodePair () function IteratorNodePair inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) function IteratorNodePair inline IteratorNodePair ( const IteratorNodePair & o ) function operator= inline const IteratorNodePair & operator = ( const IteratorNodePair & o ) Public Attributes Documentation variable Iterator IteratorType Iterator ; variable NodePointer NodePointerType NodePointer ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#shapeworksparticleregionneighborhooditeratornodepair","text":"More... #include ","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types","text":"Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions","text":"Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes","text":"Name IteratorType Iterator NodePointerType NodePointer","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#detailed-description","text":"struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-nodepointertype","text":"typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ;","title":"typedef NodePointerType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-iteratortype","text":"typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ;","title":"typedef IteratorType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair","text":"inline IteratorNodePair ()","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_1","text":"inline ~ IteratorNodePair ()","title":"function ~IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_2","text":"inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_3","text":"inline IteratorNodePair ( const IteratorNodePair & o )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-operator","text":"inline const IteratorNodePair & operator = ( const IteratorNodePair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-iterator","text":"IteratorType Iterator ;","title":"variable Iterator"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-nodepointer","text":"NodePointerType NodePointer ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable NodePointer"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html","text":"shapeworks::Reconstruction Public Attributes Name double dist int shapeIdx Eigen::MatrixXd rec Public Attributes Documentation variable dist double dist ; variable shapeIdx int shapeIdx ; variable rec Eigen :: MatrixXd rec ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#shapeworksreconstruction","text":"","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes","text":"Name double dist int shapeIdx Eigen::MatrixXd rec","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-dist","text":"double dist ;","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-shapeidx","text":"int shapeIdx ;","title":"variable shapeIdx"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-rec","text":"Eigen :: MatrixXd rec ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable rec"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html","text":"shapeworks::Sampler::CuttingPlaneType More... #include Public Attributes Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c Detailed Description struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information Public Attributes Documentation variable a vnl_vector_fixed < double , 3 > a ; variable b vnl_vector_fixed < double , 3 > b ; variable c vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#shapeworkssamplercuttingplanetype","text":"More... #include ","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes","text":"Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#detailed-description","text":"struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-a","text":"vnl_vector_fixed < double , 3 > a ;","title":"variable a"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-b","text":"vnl_vector_fixed < double , 3 > b ;","title":"variable b"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-c","text":"vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html","text":"shapeworks::Sampler::SphereType More... #include Public Attributes Name vnl_vector_fixed< double, Dimension > center double radius Detailed Description struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information Public Attributes Documentation variable center vnl_vector_fixed < double , Dimension > center ; variable radius double radius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#shapeworkssamplerspheretype","text":"More... #include ","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes","text":"Name vnl_vector_fixed< double, Dimension > center double radius","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#detailed-description","text":"struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-center","text":"vnl_vector_fixed < double , Dimension > center ;","title":"variable center"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-radius","text":"double radius ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable radius"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html","text":"shapeworks::SharedCommandData Public Functions Name bool validImage () const bool validMesh () const bool validParticleSystem () const Public Attributes Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field Public Functions Documentation function validImage inline bool validImage () const function validMesh inline bool validMesh () const function validParticleSystem inline bool validParticleSystem () const Public Attributes Documentation variable image Image image ; variable mesh std :: unique_ptr < Mesh > mesh ; variable region PhysicalRegion region ; variable particleSystem ParticleSystemEvaluation particleSystem ; variable field Field field ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#shapeworkssharedcommanddata","text":"","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions","text":"Name bool validImage () const bool validMesh () const bool validParticleSystem () const","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes","text":"Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validimage","text":"inline bool validImage () const","title":"function validImage"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validmesh","text":"inline bool validMesh () const","title":"function validMesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validparticlesystem","text":"inline bool validParticleSystem () const","title":"function validParticleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-image","text":"Image image ;","title":"variable image"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-mesh","text":"std :: unique_ptr < Mesh > mesh ;","title":"variable mesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-region","text":"PhysicalRegion region ;","title":"variable region"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-particlesystem","text":"ParticleSystemEvaluation particleSystem ;","title":"variable particleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-field","text":"Field field ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable field"},{"location":"api/Classes/structshapeworks_1_1powstruct.html","text":"shapeworks::powstruct More... #include Public Attributes Name const int c Detailed Description template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time. Public Attributes Documentation variable c static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#shapeworkspowstruct","text":"More... #include ","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#detailed-description","text":"template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#variable-c","text":"static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html","text":"shapeworks::powstruct< a, 0 > More... Public Attributes Name const int c Detailed Description template < int a > struct shapeworks :: powstruct < a , 0 > ; Public Attributes Documentation variable c static const int c = 1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#shapeworkspowstruct-a-0","text":"More...","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#detailed-description","text":"template < int a > struct shapeworks :: powstruct < a , 0 > ;","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#variable-c","text":"static const int c = 1 ; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable c"},{"location":"api/Files/AnalysisTool_8h.html","text":"Studio/Analysis/AnalysisTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisTool Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#studioanalysisanalysistoolh","text":"","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisTool_8h.html#classes","text":"Name class shapeworks::AnalysisTool","title":"Classes"},{"location":"api/Files/AnalysisTool_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/AnalysisUtils_8h.html","text":"Studio/Utils/AnalysisUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisUtils Source code #pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#studioutilsanalysisutilsh","text":"","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisUtils_8h.html#classes","text":"Name class shapeworks::AnalysisUtils","title":"Classes"},{"location":"api/Files/AnalysisUtils_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Analyze_8h.html","text":"Libs/Analyze/Analyze.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Analyze High level analyze API. Source code #pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#libsanalyzeanalyzeh","text":"","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Analyze_8h.html#classes","text":"Name class shapeworks::Analyze High level analyze API.","title":"Classes"},{"location":"api/Files/Analyze_8h.html#source-code","text":"#pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ColorMap_8h.html","text":"Studio/Visualization/ColorMap.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ColorMap class shapeworks::ColorMaps Source code #pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#studiovisualizationcolormaph","text":"","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ColorMap_8h.html#classes","text":"Name class shapeworks::ColorMap class shapeworks::ColorMaps","title":"Classes"},{"location":"api/Files/ColorMap_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ColorSchemes_8h.html","text":"Studio/Visualization/ColorSchemes.h Classes Name class ColorScheme struct ColorScheme::rgb class ColorSchemes Source code #pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#studiovisualizationcolorschemesh","text":"","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#classes","text":"Name class ColorScheme struct ColorScheme::rgb class ColorSchemes","title":"Classes"},{"location":"api/Files/ColorSchemes_8h.html#source-code","text":"#pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Command_8h.html","text":"Applications/shapeworks/Command.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand Functions Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd) Defines Name COMMAND_DECLARE (CommandName, CommandType) Functions Documentation function operator<< std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ) Macros Documentation define COMMAND_DECLARE #define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ } Source code #pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#applicationsshapeworkscommandh","text":"","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Command_8h.html#classes","text":"Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand","title":"Classes"},{"location":"api/Files/Command_8h.html#functions","text":"Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd)","title":"Functions"},{"location":"api/Files/Command_8h.html#defines","text":"Name COMMAND_DECLARE (CommandName, CommandType)","title":"Defines"},{"location":"api/Files/Command_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Command_8h.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd )","title":"function operator<<"},{"location":"api/Files/Command_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Command_8h.html#define-command_declare","text":"#define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ }","title":"define COMMAND_DECLARE"},{"location":"api/Files/Command_8h.html#source-code","text":"#pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Commands_8h.html","text":"Applications/shapeworks/Commands.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#applicationsshapeworkscommandsh","text":"","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Commands_8h.html#source-code","text":"#pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CompareWidget_8h.html","text":"Studio/Interface/CompareWidget.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareWidget Source code #pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#studiointerfacecomparewidgeth","text":"","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CompareWidget_8h.html#classes","text":"Name class shapeworks::CompareWidget","title":"Classes"},{"location":"api/Files/CompareWidget_8h.html#source-code","text":"#pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ConstraintType_8h.html","text":"Libs/Optimize/Constraints/ConstraintType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#libsoptimizeconstraintsconstrainttypeh","text":"","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ConstraintType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/ConstraintType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/ConstraintType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/ConstraintType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Constraint_8h.html","text":"Libs/Optimize/Constraints/Constraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraint Source code #pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#libsoptimizeconstraintsconstrainth","text":"","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraint_8h.html#classes","text":"Name class shapeworks::Constraint","title":"Classes"},{"location":"api/Files/Constraint_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Constraints_8h.html","text":"Libs/Optimize/Constraints/Constraints.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraints Source code #pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#libsoptimizeconstraintsconstraintsh","text":"","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraints_8h.html#classes","text":"Name class shapeworks::Constraints","title":"Classes"},{"location":"api/Files/Constraints_8h.html#source-code","text":"#pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ContourDomain_8h.html","text":"Libs/Optimize/Domain/ContourDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ContourDomain Source code #pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#libsoptimizedomaincontourdomainh","text":"","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ContourDomain_8h.html#classes","text":"Name class shapeworks::ContourDomain","title":"Classes"},{"location":"api/Files/ContourDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/CorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CorrespondenceFunction Correspondence term. Source code #pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#libsoptimizefunctioncorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::CorrespondenceFunction Correspondence term.","title":"Classes"},{"location":"api/Files/CorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceMode_8h.html","text":"Libs/Optimize/CorrespondenceMode.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#libsoptimizecorrespondencemodeh","text":"","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceMode_8h.html#source-code","text":"#pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/CurvatureSamplingFunction_8h.html","text":"Libs/Optimize/Function/CurvatureSamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#libsoptimizefunctioncurvaturesamplingfunctionh","text":"","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#classes","text":"Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used.","title":"Classes"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/CustomSlider_8h.html","text":"Studio/Interface/CustomSlider.h Classes Name class CustomSlider Source code #pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#studiointerfacecustomsliderh","text":"","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#classes","text":"Name class CustomSlider","title":"Classes"},{"location":"api/Files/CustomSlider_8h.html#source-code","text":"#pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html","text":"Libs/Analyze/CustomSurfaceReconstructionFilter.h Classes Name class CustomSurfaceReconstructionFilter Source code /*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#libsanalyzecustomsurfacereconstructionfilterh","text":"","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#classes","text":"Name class CustomSurfaceReconstructionFilter","title":"Classes"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#source-code","text":"/*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/DataTool_8h.html","text":"Studio/Data/DataTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DataTool Source code #pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#studiodatadatatoolh","text":"","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DataTool_8h.html#classes","text":"Name class shapeworks::DataTool","title":"Classes"},{"location":"api/Files/DataTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DeepSSMJob_8h.html","text":"Studio/DeepSSM/DeepSSMJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. Source code #pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#studiodeepssmdeepssmjobh","text":"","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMJob_8h.html#classes","text":"Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM.","title":"Classes"},{"location":"api/Files/DeepSSMJob_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DeepSSMParameters_8h.html","text":"Studio/DeepSSM/DeepSSMParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMParameters Source code #pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#studiodeepssmdeepssmparametersh","text":"","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMParameters_8h.html#classes","text":"Name class shapeworks::DeepSSMParameters","title":"Classes"},{"location":"api/Files/DeepSSMParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DeepSSMTool_8h.html","text":"Studio/DeepSSM/DeepSSMTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMTool Source code #pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#studiodeepssmdeepssmtoolh","text":"","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMTool_8h.html#classes","text":"Name class shapeworks::DeepSSMTool","title":"Classes"},{"location":"api/Files/DeepSSMTool_8h.html#source-code","text":"#pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DisentangledCorrespondenceFunction Source code #pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#libsoptimizefunctiondisentangledcorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::DisentangledCorrespondenceFunction","title":"Classes"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/DomainType_8h.html","text":"Libs/Optimize/Domain/DomainType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#libsoptimizedomaindomaintypeh","text":"","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DomainType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/DomainType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/DomainType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/DomainType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/DualVectorFunction_8h.html","text":"Libs/Optimize/Function/DualVectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DualVectorFunction Source code #pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#libsoptimizefunctiondualvectorfunctionh","text":"","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DualVectorFunction_8h.html#classes","text":"Name class shapeworks::DualVectorFunction","title":"Classes"},{"location":"api/Files/DualVectorFunction_8h.html#source-code","text":"#pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/EigenUtils_8h.html","text":"Libs/Utils/EigenUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::EigenUtils Source code #pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#libsutilseigenutilsh","text":"","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EigenUtils_8h.html#classes","text":"Name class shapeworks::EigenUtils","title":"Classes"},{"location":"api/Files/EigenUtils_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/EvaluationUtil_8h.html","text":"Libs/Particles/EvaluationUtil.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction Source code #pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#libsparticlesevaluationutilh","text":"","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EvaluationUtil_8h.html#classes","text":"Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction","title":"Classes"},{"location":"api/Files/EvaluationUtil_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectReader_8h.html","text":"Libs/Project/ExcelProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectReader Excel file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#libsprojectexcelprojectreaderh","text":"","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectReader_8h.html#classes","text":"Name class shapeworks::ExcelProjectReader Excel file format reader for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectWriter_8h.html","text":"Libs/Project/ExcelProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectWriter Excel file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#libsprojectexcelprojectwriterh","text":"","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectWriter_8h.html#classes","text":"Name class shapeworks::ExcelProjectWriter Excel file format writer for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Exception_8h.html","text":"Libs/Common/Exception.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::shapeworks_exception Source code #pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#libscommonexceptionh","text":"","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Exception_8h.html#classes","text":"Name class shapeworks::shapeworks_exception","title":"Classes"},{"location":"api/Files/Exception_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Executable_8h.html","text":"Applications/shapeworks/Executable.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Executable Source code #pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#applicationsshapeworksexecutableh","text":"","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Executable_8h.html#classes","text":"Name class shapeworks::Executable","title":"Classes"},{"location":"api/Files/Executable_8h.html#source-code","text":"#pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ExportImageDialog_8h.html","text":"Studio/Interface/ExportImageDialog.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportImageDialog Source code #pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#studiointerfaceexportimagedialogh","text":"","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportImageDialog_8h.html#classes","text":"Name class shapeworks::ExportImageDialog","title":"Classes"},{"location":"api/Files/ExportImageDialog_8h.html#source-code","text":"#pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ExportUtils_8h.html","text":"Studio/Data/ExportUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportUtils Export utilities for Studio. Source code #include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#studiodataexportutilsh","text":"","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportUtils_8h.html#classes","text":"Name class shapeworks::ExportUtils Export utilities for Studio.","title":"Classes"},{"location":"api/Files/ExportUtils_8h.html#source-code","text":"#include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/FEAreaCoverage_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Namespaces Name std Classes Name class FEAreaCoverage Source code #pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#libsmeshpreviewmeshqcfeareacoverageh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#namespaces","text":"Name std","title":"Namespaces"},{"location":"api/Files/FEAreaCoverage_8h.html#classes","text":"Name class FEAreaCoverage","title":"Classes"},{"location":"api/Files/FEAreaCoverage_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEAutoMesher_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Classes Name class FEAutoMesher Source code #pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#libsmeshpreviewmeshqcfeautomesherh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#classes","text":"Name class FEAutoMesher","title":"Classes"},{"location":"api/Files/FEAutoMesher_8h.html#source-code","text":"#pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FECVDDecimationModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Classes Name class FECVDDecimationModifier Source code #pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#libsmeshpreviewmeshqcfecvddecimationmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#classes","text":"Name class FECVDDecimationModifier","title":"Classes"},{"location":"api/Files/FECVDDecimationModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FECoreMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h Classes Name class FECoreMesh Source code #pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#libsmeshpreviewmeshqcfecoremeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#classes","text":"Name class FECoreMesh","title":"Classes"},{"location":"api/Files/FECoreMesh_8h.html#source-code","text":"#pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEElement_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEElement.h Classes Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement Defines Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM Macros Documentation define FE_VISIBLE #define FE_VISIBLE 0x01 define FE_SELECTED #define FE_SELECTED 0x02 define FE_HEX8 #define FE_HEX8 1 define FE_TET4 #define FE_TET4 2 define FE_PENTA6 #define FE_PENTA6 3 define FE_QUAD4 #define FE_QUAD4 4 define FE_TRI3 #define FE_TRI3 5 define FE_BEAM2 #define FE_BEAM2 6 define FE_HEX20 #define FE_HEX20 7 define FE_QUAD8 #define FE_QUAD8 8 define FE_BEAM3 #define FE_BEAM3 9 define FE_TET10 #define FE_TET10 10 define FE_TRI6 #define FE_TRI6 11 define FE_TET15 #define FE_TET15 12 define FE_HEX27 #define FE_HEX27 13 define MAX_ELEM #define MAX_ELEM 13 Source code // FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#libsmeshpreviewmeshqcfeelementh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#classes","text":"Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement","title":"Classes"},{"location":"api/Files/FEElement_8h.html#defines","text":"Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM","title":"Defines"},{"location":"api/Files/FEElement_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/FEElement_8h.html#define-fe_visible","text":"#define FE_VISIBLE 0x01","title":"define FE_VISIBLE"},{"location":"api/Files/FEElement_8h.html#define-fe_selected","text":"#define FE_SELECTED 0x02","title":"define FE_SELECTED"},{"location":"api/Files/FEElement_8h.html#define-fe_hex8","text":"#define FE_HEX8 1","title":"define FE_HEX8"},{"location":"api/Files/FEElement_8h.html#define-fe_tet4","text":"#define FE_TET4 2","title":"define FE_TET4"},{"location":"api/Files/FEElement_8h.html#define-fe_penta6","text":"#define FE_PENTA6 3","title":"define FE_PENTA6"},{"location":"api/Files/FEElement_8h.html#define-fe_quad4","text":"#define FE_QUAD4 4","title":"define FE_QUAD4"},{"location":"api/Files/FEElement_8h.html#define-fe_tri3","text":"#define FE_TRI3 5","title":"define FE_TRI3"},{"location":"api/Files/FEElement_8h.html#define-fe_beam2","text":"#define FE_BEAM2 6","title":"define FE_BEAM2"},{"location":"api/Files/FEElement_8h.html#define-fe_hex20","text":"#define FE_HEX20 7","title":"define FE_HEX20"},{"location":"api/Files/FEElement_8h.html#define-fe_quad8","text":"#define FE_QUAD8 8","title":"define FE_QUAD8"},{"location":"api/Files/FEElement_8h.html#define-fe_beam3","text":"#define FE_BEAM3 9","title":"define FE_BEAM3"},{"location":"api/Files/FEElement_8h.html#define-fe_tet10","text":"#define FE_TET10 10","title":"define FE_TET10"},{"location":"api/Files/FEElement_8h.html#define-fe_tri6","text":"#define FE_TRI6 11","title":"define FE_TRI6"},{"location":"api/Files/FEElement_8h.html#define-fe_tet15","text":"#define FE_TET15 12","title":"define FE_TET15"},{"location":"api/Files/FEElement_8h.html#define-fe_hex27","text":"#define FE_HEX27 13","title":"define FE_HEX27"},{"location":"api/Files/FEElement_8h.html#define-max_elem","text":"#define MAX_ELEM 13","title":"define MAX_ELEM"},{"location":"api/Files/FEElement_8h.html#source-code","text":"// FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEFillHole_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFillHole.h Classes Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#libsmeshpreviewmeshqcfefillholeh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#classes","text":"Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE","title":"Classes"},{"location":"api/Files/FEFillHole_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEFixMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h Classes Name class FEFixMesh Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#libsmeshpreviewmeshqcfefixmeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#classes","text":"Name class FEFixMesh","title":"Classes"},{"location":"api/Files/FEFixMesh_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Classes Name class FEMeshSmoothingModifier Source code #pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#libsmeshpreviewmeshqcfemeshsmoothingmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#classes","text":"Name class FEMeshSmoothingModifier","title":"Classes"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMesh.h Classes Name class FEElementData class FEMesh Functions Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3]) Attributes Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15 Functions Documentation function bias double bias ( double b , double x ) function gain double gain ( double g , double x ) function area_triangle double area_triangle ( vec3d r [ 3 ] ) Attributes Documentation variable FTHEX8 int FTHEX8 ; variable FTHEX20 int FTHEX20 ; variable FTHEX27 int FTHEX27 ; variable FTPENTA int FTPENTA ; variable FTTET int FTTET ; variable FTTET10 int FTTET10 ; variable FTTET15 int FTTET15 ; Source code // FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#libsmeshpreviewmeshqcfemeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#classes","text":"Name class FEElementData class FEMesh","title":"Classes"},{"location":"api/Files/FEMesh_8h.html#functions","text":"Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3])","title":"Functions"},{"location":"api/Files/FEMesh_8h.html#attributes","text":"Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15","title":"Attributes"},{"location":"api/Files/FEMesh_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/FEMesh_8h.html#function-bias","text":"double bias ( double b , double x )","title":"function bias"},{"location":"api/Files/FEMesh_8h.html#function-gain","text":"double gain ( double g , double x )","title":"function gain"},{"location":"api/Files/FEMesh_8h.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Files/FEMesh_8h.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Files/FEMesh_8h.html#variable-fthex8","text":"int FTHEX8 ;","title":"variable FTHEX8"},{"location":"api/Files/FEMesh_8h.html#variable-fthex20","text":"int FTHEX20 ;","title":"variable FTHEX20"},{"location":"api/Files/FEMesh_8h.html#variable-fthex27","text":"int FTHEX27 ;","title":"variable FTHEX27"},{"location":"api/Files/FEMesh_8h.html#variable-ftpenta","text":"int FTPENTA ;","title":"variable FTPENTA"},{"location":"api/Files/FEMesh_8h.html#variable-fttet","text":"int FTTET ;","title":"variable FTTET"},{"location":"api/Files/FEMesh_8h.html#variable-fttet10","text":"int FTTET10 ;","title":"variable FTTET10"},{"location":"api/Files/FEMesh_8h.html#variable-fttet15","text":"int FTTET15 ;","title":"variable FTTET15"},{"location":"api/Files/FEMesh_8h.html#source-code","text":"// FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FENodeElementList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h Classes Name class FENodeElementList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#libsmeshpreviewmeshqcfenodeelementlisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#classes","text":"Name class FENodeElementList","title":"Classes"},{"location":"api/Files/FENodeElementList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FENodeFaceList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Classes Name class FENodeFaceList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#libsmeshpreviewmeshqcfenodefacelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#classes","text":"Name class FENodeFaceList","title":"Classes"},{"location":"api/Files/FENodeFaceList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FENodeNodeList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Classes Name class FENodeNodeList Source code #pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#libsmeshpreviewmeshqcfenodenodelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#classes","text":"Name class FENodeNodeList","title":"Classes"},{"location":"api/Files/FENodeNodeList_8h.html#source-code","text":"#pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEVTKExport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h Classes Name struct VTKEXPORT class FEVTKExport Source code #pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#libsmeshpreviewmeshqcfevtkexporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#classes","text":"Name struct VTKEXPORT class FEVTKExport","title":"Classes"},{"location":"api/Files/FEVTKExport_8h.html#source-code","text":"#pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FEVTKImport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h Classes Name class FEVTKimport Source code #pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#libsmeshpreviewmeshqcfevtkimporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#classes","text":"Name class FEVTKimport","title":"Classes"},{"location":"api/Files/FEVTKImport_8h.html#source-code","text":"#pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/FreeFormConstraint_8h.html","text":"Libs/Optimize/Constraints/FreeFormConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::FreeFormConstraint Source code #pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#libsoptimizeconstraintsfreeformconstrainth","text":"","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/FreeFormConstraint_8h.html#classes","text":"Name class shapeworks::FreeFormConstraint","title":"Classes"},{"location":"api/Files/FreeFormConstraint_8h.html#source-code","text":"#pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GenericContainerArray_8h.html","text":"Libs/Optimize/Container/GenericContainerArray.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Source code #pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#libsoptimizecontainergenericcontainerarrayh","text":"","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainerArray_8h.html#classes","text":"Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Classes"},{"location":"api/Files/GenericContainerArray_8h.html#source-code","text":"#pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GenericContainer_8h.html","text":"Libs/Optimize/Container/GenericContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) Source code #pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#libsoptimizecontainergenericcontainerh","text":"","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainer_8h.html#classes","text":"Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?)","title":"Classes"},{"location":"api/Files/GenericContainer_8h.html#source-code","text":"#pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GradientDescentOptimizer_8h.html","text":"Libs/Optimize/GradientDescentOptimizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GradientDescentOptimizer Source code #pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#libsoptimizegradientdescentoptimizerh","text":"","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GradientDescentOptimizer_8h.html#classes","text":"Name class shapeworks::GradientDescentOptimizer","title":"Classes"},{"location":"api/Files/GradientDescentOptimizer_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/GroomParameters_8h.html","text":"Libs/Groom/GroomParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomParameters Source code #pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#libsgroomgroomparametersh","text":"","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomParameters_8h.html#classes","text":"Name class shapeworks::GroomParameters","title":"Classes"},{"location":"api/Files/GroomParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GroomTool_8h.html","text":"Studio/Groom/GroomTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomTool Source code #pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#studiogroomgroomtoolh","text":"","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomTool_8h.html#classes","text":"Name class shapeworks::GroomTool","title":"Classes"},{"location":"api/Files/GroomTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Groom_8h.html","text":"Libs/Groom/Groom.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Groom High level groom API. Source code #pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#libsgroomgroomh","text":"","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Groom_8h.html#classes","text":"Name class shapeworks::Groom High level groom API.","title":"Classes"},{"location":"api/Files/Groom_8h.html#source-code","text":"#pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/GroupPvalueJob_8h.html","text":"Studio/Job/GroupPvalueJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroupPvalueJob Source code #pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#studiojobgrouppvaluejobh","text":"","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroupPvalueJob_8h.html#classes","text":"Name class shapeworks::GroupPvalueJob","title":"Classes"},{"location":"api/Files/GroupPvalueJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithCurvature_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithCurvature.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithCurvature Source code #pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#libsoptimizedomainimagedomainwithcurvatureh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#classes","text":"Name class shapeworks::ImageDomainWithCurvature","title":"Classes"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradN_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradN.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradN Source code #pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#libsoptimizedomainimagedomainwithgradnh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradN_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradN","title":"Classes"},{"location":"api/Files/ImageDomainWithGradN_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradients_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradients.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradients Source code #pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#libsoptimizedomainimagedomainwithgradientsh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradients_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradients","title":"Classes"},{"location":"api/Files/ImageDomainWithGradients_8h.html#source-code","text":"#pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageDomain_8h.html","text":"Libs/Optimize/Domain/ImageDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomain Source code #pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#libsoptimizedomainimagedomainh","text":"","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomain_8h.html#classes","text":"Name class shapeworks::ImageDomain","title":"Classes"},{"location":"api/Files/ImageDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImageLabel_8h.html","text":"Studio/Utils/ImageLabel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images. Source code #pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#studioutilsimagelabelh","text":"","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageLabel_8h.html#classes","text":"Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images.","title":"Classes"},{"location":"api/Files/ImageLabel_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ImageUtils_8h.html","text":"Libs/Image/ImageUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageUtils Helper functions for image. Source code #pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#libsimageimageutilsh","text":"","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageUtils_8h.html#classes","text":"Name class shapeworks::ImageUtils Helper functions for image.","title":"Classes"},{"location":"api/Files/ImageUtils_8h.html#source-code","text":"#pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Image_8h.html","text":"Libs/Image/Image.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Image Source code #pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#libsimageimageh","text":"","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Image_8h.html#classes","text":"Name class shapeworks::Image","title":"Classes"},{"location":"api/Files/Image_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html","text":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImplicitSurfaceDomain Source code #pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#libsoptimizedomainimplicitsurfacedomainh","text":"","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#classes","text":"Name class shapeworks::ImplicitSurfaceDomain","title":"Classes"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Intersect_8h.html","text":"Libs/Mesh/PreviewMeshQC/Intersect.h Classes Name struct Ray struct Intersection struct Triangle struct Quad Functions Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) Functions Documentation function IntersectTriangle bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ) function IntersectQuad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) function FastIntersectQuad bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) Source code #pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#libsmeshpreviewmeshqcintersecth","text":"","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#classes","text":"Name struct Ray struct Intersection struct Triangle struct Quad","title":"Classes"},{"location":"api/Files/Intersect_8h.html#functions","text":"Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q)","title":"Functions"},{"location":"api/Files/Intersect_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Intersect_8h.html#function-intersecttriangle","text":"bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true )","title":"function IntersectTriangle"},{"location":"api/Files/Intersect_8h.html#function-intersectquad","text":"bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function IntersectQuad"},{"location":"api/Files/Intersect_8h.html#function-fastintersectquad","text":"bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function FastIntersectQuad"},{"location":"api/Files/Intersect_8h.html#source-code","text":"#pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ItkToVtk_8h.html","text":"Libs/Analyze/ItkToVtk.h Functions Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer) Functions Documentation function ConnectPipelines template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter. Source code #pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#libsanalyzeitktovtkh","text":"","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#functions","text":"Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer)","title":"Functions"},{"location":"api/Files/ItkToVtk_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ItkToVtk_8h.html#function-connectpipelines","text":"template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter.","title":"function ConnectPipelines"},{"location":"api/Files/ItkToVtk_8h.html#source-code","text":"#pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Job_8h.html","text":"Studio/Job/Job.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Job Source code #pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#studiojobjobh","text":"","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Job_8h.html#classes","text":"Name class shapeworks::Job","title":"Classes"},{"location":"api/Files/Job_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/JsonProjectReader_8h.html","text":"Libs/Project/JsonProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectReader JSON file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#libsprojectjsonprojectreaderh","text":"","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectReader_8h.html#classes","text":"Name class shapeworks::JsonProjectReader JSON file format reader for Project .","title":"Classes"},{"location":"api/Files/JsonProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/JsonProjectWriter_8h.html","text":"Libs/Project/JsonProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectWriter JSON file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#libsprojectjsonprojectwriterh","text":"","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectWriter_8h.html#classes","text":"Name class shapeworks::JsonProjectWriter JSON file format writer for Project .","title":"Classes"},{"location":"api/Files/JsonProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/KeyboardShortcuts_8h.html","text":"Studio/Interface/KeyboardShortcuts.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::KeyboardShortcuts Source code #pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#studiointerfacekeyboardshortcutsh","text":"","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/KeyboardShortcuts_8h.html#classes","text":"Name class shapeworks::KeyboardShortcuts","title":"Classes"},{"location":"api/Files/KeyboardShortcuts_8h.html#source-code","text":"#pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LandmarkItemDelegate_8h.html","text":"Studio/Data/LandmarkItemDelegate.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkItemDelegate Source code #pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#studiodatalandmarkitemdelegateh","text":"","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkItemDelegate_8h.html#classes","text":"Name class shapeworks::LandmarkItemDelegate","title":"Classes"},{"location":"api/Files/LandmarkItemDelegate_8h.html#source-code","text":"#pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LandmarkTableModel_8h.html","text":"Studio/Data/LandmarkTableModel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkTableModel Source code #pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#studiodatalandmarktablemodelh","text":"","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkTableModel_8h.html#classes","text":"Name class shapeworks::LandmarkTableModel","title":"Classes"},{"location":"api/Files/LandmarkTableModel_8h.html#source-code","text":"#pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LandmarkWidget_8h.html","text":"Studio/Visualization/LandmarkWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkWidget LandmarkWidget . Source code #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#studiovisualizationlandmarkwidgeth","text":"","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkWidget_8h.html#classes","text":"Name class shapeworks::LandmarkWidget LandmarkWidget .","title":"Classes"},{"location":"api/Files/LandmarkWidget_8h.html#source-code","text":"#include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyCorrespondenceFunction Source code #pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#libsoptimizefunctionlegacycorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::LegacyCorrespondenceFunction","title":"Classes"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/LegacyMeshGenerator_8h.html","text":"Libs/Analyze/LegacyMeshGenerator.h Mesh generation. More... Classes Name class LegacyMeshGenerator Detailed Description Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code /* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#libsanalyzelegacymeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#classes","text":"Name class LegacyMeshGenerator","title":"Classes"},{"location":"api/Files/LegacyMeshGenerator_8h.html#detailed-description","text":"Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/LegacyMeshGenerator_8h.html#source-code","text":"/* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/LegacyShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LegacyShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyShapeMatrix Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#libsoptimizematrixlegacyshapematrixh","text":"","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyShapeMatrix_8h.html#classes","text":"Name class shapeworks::LegacyShapeMatrix","title":"Classes"},{"location":"api/Files/LegacyShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Lightbox_8h.html","text":"Studio/Visualization/Lightbox.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Lightbox Display multiple Viewers in a tiled display. Source code #pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#studiovisualizationlightboxh","text":"","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Lightbox_8h.html#classes","text":"Name class shapeworks::Lightbox Display multiple Viewers in a tiled display.","title":"Classes"},{"location":"api/Files/Lightbox_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LinearRegressionShapeMatrix Source code #pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#libsoptimizematrixlinearregressionshapematrixh","text":"","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#classes","text":"Name class shapeworks::LinearRegressionShapeMatrix","title":"Classes"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#source-code","text":"#pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/LogWindow_8h.html","text":"Studio/Interface/LogWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LogWindow Log Window. Source code #pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#studiointerfacelogwindowh","text":"","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LogWindow_8h.html#classes","text":"Name class shapeworks::LogWindow Log Window.","title":"Classes"},{"location":"api/Files/LogWindow_8h.html#source-code","text":"#pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Logging_8h.html","text":"Libs/Common/Logging.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library. Defines Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once. Macros Documentation define SW_LOG_STACK #define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro. define SW_LOG #define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro. define SW_WARN #define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro. define SW_ERROR #define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro. define SW_DEBUG #define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro. define SW_TRACE #define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = ) define SW_MESSAGE #define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro. define SW_STATUS #define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar) define SW_PROGRESS #define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ )); define SW_CLOSE_LOG #define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro. define SW_LOG_ONCE #define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once. Source code #pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#libscommonloggingh","text":"","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Logging_8h.html#classes","text":"Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library.","title":"Classes"},{"location":"api/Files/Logging_8h.html#defines","text":"Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once.","title":"Defines"},{"location":"api/Files/Logging_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Logging_8h.html#define-sw_log_stack","text":"#define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro.","title":"define SW_LOG_STACK"},{"location":"api/Files/Logging_8h.html#define-sw_log","text":"#define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro.","title":"define SW_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_warn","text":"#define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro.","title":"define SW_WARN"},{"location":"api/Files/Logging_8h.html#define-sw_error","text":"#define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro.","title":"define SW_ERROR"},{"location":"api/Files/Logging_8h.html#define-sw_debug","text":"#define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro.","title":"define SW_DEBUG"},{"location":"api/Files/Logging_8h.html#define-sw_trace","text":"#define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = )","title":"define SW_TRACE"},{"location":"api/Files/Logging_8h.html#define-sw_message","text":"#define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro.","title":"define SW_MESSAGE"},{"location":"api/Files/Logging_8h.html#define-sw_status","text":"#define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar)","title":"define SW_STATUS"},{"location":"api/Files/Logging_8h.html#define-sw_progress","text":"#define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ ));","title":"define SW_PROGRESS"},{"location":"api/Files/Logging_8h.html#define-sw_close_log","text":"#define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro.","title":"define SW_CLOSE_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_log_once","text":"#define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once.","title":"define SW_LOG_ONCE"},{"location":"api/Files/Logging_8h.html#source-code","text":"#pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeanCurvatureContainer_8h.html","text":"Libs/Optimize/Container/MeanCurvatureContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeanCurvatureContainer Source code #pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#libsoptimizecontainermeancurvaturecontainerh","text":"","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeanCurvatureContainer_8h.html#classes","text":"Name class shapeworks::MeanCurvatureContainer","title":"Classes"},{"location":"api/Files/MeanCurvatureContainer_8h.html#source-code","text":"#pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MemoryUsage_8h.html","text":"Libs/Optimize/Utils/MemoryUsage.h Functions Name void process_mem_usage (double & vm_usage, double & resident_set) Functions Documentation function process_mem_usage void process_mem_usage ( double & vm_usage , double & resident_set ) Source code #pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#libsoptimizeutilsmemoryusageh","text":"","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#functions","text":"Name void process_mem_usage (double & vm_usage, double & resident_set)","title":"Functions"},{"location":"api/Files/MemoryUsage_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MemoryUsage_8h.html#function-process_mem_usage","text":"void process_mem_usage ( double & vm_usage , double & resident_set )","title":"function process_mem_usage"},{"location":"api/Files/MemoryUsage_8h.html#source-code","text":"#pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshCache_8h.html","text":"Libs/Analyze/MeshCache.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshCache Thread safe cache for meshes index by shape. Source code #pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#libsanalyzemeshcacheh","text":"","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshCache_8h.html#classes","text":"Name class shapeworks::MeshCache Thread safe cache for meshes index by shape.","title":"Classes"},{"location":"api/Files/MeshCache_8h.html#source-code","text":"#pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshComputeThickness_8h.html","text":"Libs/Mesh/MeshComputeThickness.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::mesh Source code #pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#libsmeshmeshcomputethicknessh","text":"","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::mesh","title":"Namespaces"},{"location":"api/Files/MeshComputeThickness_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshDomain_8h.html","text":"Libs/Optimize/Domain/MeshDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshDomain Source code #pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#libsoptimizedomainmeshdomainh","text":"","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshDomain_8h.html#classes","text":"Name class shapeworks::MeshDomain","title":"Classes"},{"location":"api/Files/MeshDomain_8h.html#source-code","text":"#pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshGenerator_8h.html","text":"Libs/Analyze/MeshGenerator.h Mesh generation. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator Detailed Description Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code #pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#libsanalyzemeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGenerator_8h.html#classes","text":"Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator","title":"Classes"},{"location":"api/Files/MeshGenerator_8h.html#detailed-description","text":"Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/MeshGenerator_8h.html#source-code","text":"#pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshGeoEntry_8h.html","text":"Libs/Optimize/Domain/MeshGeoEntry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MeshGeoEntry Source code #pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#libsoptimizedomainmeshgeoentryh","text":"","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGeoEntry_8h.html#classes","text":"Name struct shapeworks::MeshGeoEntry","title":"Classes"},{"location":"api/Files/MeshGeoEntry_8h.html#source-code","text":"#pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshGroup_8h.html","text":"Libs/Analyze/MeshGroup.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshGroup Representation of a group of meshes. Source code #pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#libsanalyzemeshgrouph","text":"","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGroup_8h.html#classes","text":"Name class shapeworks::MeshGroup Representation of a group of meshes.","title":"Classes"},{"location":"api/Files/MeshGroup_8h.html#source-code","text":"#pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshManager_8h.html","text":"Libs/Analyze/MeshManager.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshManager Class to manage meshes. Source code #pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#libsanalyzemeshmanagerh","text":"","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshManager_8h.html#classes","text":"Name class shapeworks::MeshManager Class to manage meshes.","title":"Classes"},{"location":"api/Files/MeshManager_8h.html#source-code","text":"#pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshSettings_8h.html","text":"Studio/Data/MeshSettings.h Classes Name class MeshSettings Settings for creating a mesh. Types Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle Types Documentation typedef MeshSettingsHandle typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; Source code #pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#studiodatameshsettingsh","text":"","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#classes","text":"Name class MeshSettings Settings for creating a mesh.","title":"Classes"},{"location":"api/Files/MeshSettings_8h.html#types","text":"Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle","title":"Types"},{"location":"api/Files/MeshSettings_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/MeshSettings_8h.html#typedef-meshsettingshandle","text":"typedef QSharedPointer < MeshSettings > MeshSettingsHandle ;","title":"typedef MeshSettingsHandle"},{"location":"api/Files/MeshSettings_8h.html#source-code","text":"#pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/MeshSlice_8h.html","text":"Studio/Visualization/MeshSlice.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshSlice MeshSlice . Source code #pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#studiovisualizationmeshsliceh","text":"","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshSlice_8h.html#classes","text":"Name class shapeworks::MeshSlice MeshSlice .","title":"Classes"},{"location":"api/Files/MeshSlice_8h.html#source-code","text":"#pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/MeshUtils_8h.html","text":"Libs/Mesh/MeshUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshUtils Source code #pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#libsmeshmeshutilsh","text":"","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshUtils_8h.html#classes","text":"Name class shapeworks::MeshUtils","title":"Classes"},{"location":"api/Files/MeshUtils_8h.html#source-code","text":"#pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWarper_8h.html","text":"Libs/Mesh/MeshWarper.h Mesh warping capability. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWarper Detailed Description Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction Source code #pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#libsmeshmeshwarperh","text":"Mesh warping capability. More...","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWarper_8h.html#classes","text":"Name class shapeworks::MeshWarper","title":"Classes"},{"location":"api/Files/MeshWarper_8h.html#detailed-description","text":"Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction","title":"Detailed Description"},{"location":"api/Files/MeshWarper_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWorkQueue_8h.html","text":"Libs/Analyze/MeshWorkQueue.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue Functions Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ) Source code #pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#libsanalyzemeshworkqueueh","text":"","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorkQueue_8h.html#classes","text":"Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue","title":"Classes"},{"location":"api/Files/MeshWorkQueue_8h.html#functions","text":"Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem )","title":"Functions"},{"location":"api/Files/MeshWorkQueue_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorkQueue_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorkQueue_8h.html#source-code","text":"#pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWorker_8h.html","text":"Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorker Functions Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > ) Detailed Description Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ) Source code #pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#libsanalyzemeshworkerh","text":"Worker class for parallel mesh reconstruction. More...","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorker_8h.html#classes","text":"Name class shapeworks::MeshWorker","title":"Classes"},{"location":"api/Files/MeshWorker_8h.html#functions","text":"Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > )","title":"Functions"},{"location":"api/Files/MeshWorker_8h.html#detailed-description","text":"Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management","title":"Detailed Description"},{"location":"api/Files/MeshWorker_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorker_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorker_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MeshWrapper_8h.html","text":"Libs/Optimize/Domain/MeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWrapper Source code #pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#libsoptimizedomainmeshwrapperh","text":"","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWrapper_8h.html#classes","text":"Name class shapeworks::MeshWrapper","title":"Classes"},{"location":"api/Files/MeshWrapper_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Mesh_8h.html","text":"Libs/Mesh/Mesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) Source code #pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#libsmeshmeshh","text":"","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Mesh_8h.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors)","title":"Classes"},{"location":"api/Files/Mesh_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MixedEffectsShapeMatrix Source code /* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#libsoptimizematrixmixedeffectsshapematrixh","text":"","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#classes","text":"Name class shapeworks::MixedEffectsShapeMatrix","title":"Classes"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#source-code","text":"/* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Module_8dox.html","text":"Module.dox Updated on 2023-10-24 at 22:16:03 +0000","title":"Module.dox"},{"location":"api/Files/Module_8dox.html#moduledox","text":"Updated on 2023-10-24 at 22:16:03 +0000","title":"Module.dox"},{"location":"api/Files/NetworkAnalysisJob_8h.html","text":"Studio/Job/NetworkAnalysisJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::NetworkAnalysisJob Source code #pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#studiojobnetworkanalysisjobh","text":"","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/NetworkAnalysisJob_8h.html#classes","text":"Name class shapeworks::NetworkAnalysisJob","title":"Classes"},{"location":"api/Files/NetworkAnalysisJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ObjectReader_8h.html","text":"Libs/Optimize/Utils/ObjectReader.h Classes Name class ObjectReader Source code #pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#libsoptimizeutilsobjectreaderh","text":"","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#classes","text":"Name class ObjectReader","title":"Classes"},{"location":"api/Files/ObjectReader_8h.html#source-code","text":"#pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ObjectWriter_8h.html","text":"Libs/Optimize/Utils/ObjectWriter.h Classes Name class ObjectWriter Source code #pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#libsoptimizeutilsobjectwriterh","text":"","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#classes","text":"Name class ObjectWriter","title":"Classes"},{"location":"api/Files/ObjectWriter_8h.html#source-code","text":"#pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Observer_8h.html","text":"Libs/Optimize/Observer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct Source code #pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#libsoptimizeobserverh","text":"","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Observer_8h.html#classes","text":"Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct","title":"Classes"},{"location":"api/Files/Observer_8h.html#source-code","text":"#pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizationVisualizer_8h.html","text":"Libs/Optimize/Utils/OptimizationVisualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizationVisualizer Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#libsoptimizeutilsoptimizationvisualizerh","text":"","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizationVisualizer_8h.html#classes","text":"Name class shapeworks::OptimizationVisualizer","title":"Classes"},{"location":"api/Files/OptimizationVisualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameterFile_8h.html","text":"Libs/Optimize/OptimizeParameterFile.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameterFile Source code #pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#libsoptimizeoptimizeparameterfileh","text":"","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameterFile_8h.html#classes","text":"Name class shapeworks::OptimizeParameterFile","title":"Classes"},{"location":"api/Files/OptimizeParameterFile_8h.html#source-code","text":"#pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameters_8h.html","text":"Libs/Optimize/OptimizeParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameters Source code #pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#libsoptimizeoptimizeparametersh","text":"","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameters_8h.html#classes","text":"Name class shapeworks::OptimizeParameters","title":"Classes"},{"location":"api/Files/OptimizeParameters_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/OptimizeTool_8h.html","text":"Studio/Optimize/OptimizeTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeTool Source code #pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#studiooptimizeoptimizetoolh","text":"","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeTool_8h.html#classes","text":"Name class shapeworks::OptimizeTool","title":"Classes"},{"location":"api/Files/OptimizeTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Optimize_8h.html","text":"Libs/Optimize/Optimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MatrixContainer class shapeworks::Optimize Source code #pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#libsoptimizeoptimizeh","text":"","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Optimize_8h.html#classes","text":"Name class shapeworks::MatrixContainer class shapeworks::Optimize","title":"Classes"},{"location":"api/Files/Optimize_8h.html#source-code","text":"#pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PaintWidget_8h.html","text":"Studio/Visualization/PaintWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PaintWidget Source code #pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#studiovisualizationpaintwidgeth","text":"","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PaintWidget_8h.html#classes","text":"Name class shapeworks::PaintWidget","title":"Classes"},{"location":"api/Files/PaintWidget_8h.html#source-code","text":"#pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Parameters_8h.html","text":"Libs/Project/Parameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Parameters Parameter settings. Source code #pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#libsprojectparametersh","text":"","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Parameters_8h.html#classes","text":"Name class shapeworks::Parameters Parameter settings.","title":"Classes"},{"location":"api/Files/Parameters_8h.html#source-code","text":"#pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaJob_8h.html","text":"Studio/Job/ParticleAreaJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaJob Source code #pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#studiojobparticleareajobh","text":"","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaJob_8h.html#classes","text":"Name class shapeworks::ParticleAreaJob","title":"Classes"},{"location":"api/Files/ParticleAreaJob_8h.html#source-code","text":"#pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaPanel_8h.html","text":"Studio/Analysis/ParticleAreaPanel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaPanel Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#studioanalysisparticleareapanelh","text":"","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaPanel_8h.html#classes","text":"Name class shapeworks::ParticleAreaPanel","title":"Classes"},{"location":"api/Files/ParticleAreaPanel_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleArea_8h.html","text":"Libs/Analyze/ParticleArea.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleArea Source code #pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#libsanalyzeparticleareah","text":"","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleArea_8h.html#classes","text":"Name class shapeworks::ParticleArea","title":"Classes"},{"location":"api/Files/ParticleArea_8h.html#source-code","text":"#pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleColors_8h.html","text":"Studio/Visualization/ParticleColors.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleColors Supplies particle colors. Source code #pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#studiovisualizationparticlecolorsh","text":"","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleColors_8h.html#classes","text":"Name class shapeworks::ParticleColors Supplies particle colors.","title":"Classes"},{"location":"api/Files/ParticleColors_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleDomain_8h.html","text":"Libs/Optimize/Domain/ParticleDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleDomain Source code #pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#libsoptimizedomainparticledomainh","text":"","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleDomain_8h.html#classes","text":"Name class shapeworks::ParticleDomain","title":"Classes"},{"location":"api/Files/ParticleDomain_8h.html#source-code","text":"#pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleEvents_8h.html","text":"Libs/Optimize/ParticleEvents.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleEvent Source code #pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#libsoptimizeparticleeventsh","text":"","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleEvents_8h.html#classes","text":"Name class shapeworks::ParticleEvent","title":"Classes"},{"location":"api/Files/ParticleEvents_8h.html#source-code","text":"#pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleFile_8h.html","text":"Libs/Particles/ParticleFile.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::particles Source code #pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#libsparticlesparticlefileh","text":"","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::particles","title":"Namespaces"},{"location":"api/Files/ParticleFile_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html","text":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGaussianModeWriter Source code #pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#libsoptimizeutilsparticlegaussianmodewriterh","text":"","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#classes","text":"Name class shapeworks::ParticleGaussianModeWriter","title":"Classes"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html","text":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#libsoptimizeutilsparticlegoodbadassessmenth","text":"","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#classes","text":"Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system.","title":"Classes"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNeighborhood Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#libsoptimizeneighborhoodparticleneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleNeighborhood","title":"Classes"},{"location":"api/Files/ParticleNeighborhood_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html","text":"Studio/Job/ParticleNormalEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluationJob Source code #pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#studiojobparticlenormalevaluationjobh","text":"","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluationJob","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluation_8h.html","text":"Libs/Particles/ParticleNormalEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluation Source code #pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#libsparticlesparticlenormalevaluationh","text":"","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluation","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticlePointIndexPair_8h.html","text":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::ParticlePointIndexPair Source code #pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#libsoptimizeneighborhoodparticlepointindexpairh","text":"","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticlePointIndexPair_8h.html#classes","text":"Name struct shapeworks::ParticlePointIndexPair","title":"Classes"},{"location":"api/Files/ParticlePointIndexPair_8h.html#source-code","text":"#pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionDomain_8h.html","text":"Libs/Optimize/Domain/ParticleRegionDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionDomain Source code #pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#libsoptimizedomainparticleregiondomainh","text":"","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionDomain_8h.html#classes","text":"Name class shapeworks::ParticleRegionDomain","title":"Classes"},{"location":"api/Files/ParticleRegionDomain_8h.html#source-code","text":"#pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionNeighborhood Source code #pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#libsoptimizeneighborhoodparticleregionneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleRegionNeighborhood","title":"Classes"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#source-code","text":"#pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleShapeStatistics_8h.html","text":"Libs/Particles/ParticleShapeStatistics.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleShapeStatistics Source code #pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#libsparticlesparticleshapestatisticsh","text":"","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleShapeStatistics_8h.html#classes","text":"Name class shapeworks::ParticleShapeStatistics","title":"Classes"},{"location":"api/Files/ParticleShapeStatistics_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSurfaceNeighborhood Source code #pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#libsoptimizeneighborhoodparticlesurfaceneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleSurfaceNeighborhood","title":"Classes"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ParticleSystemEvaluation_8h.html","text":"Libs/Particles/ParticleSystemEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystemEvaluation Source code #pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#libsparticlesparticlesystemevaluationh","text":"","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleSystemEvaluation","title":"Classes"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ParticleSystem_8h.html","text":"Libs/Optimize/ParticleSystem.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system. Source code #pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#libsoptimizeparticlesystemh","text":"","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystem_8h.html#classes","text":"Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system.","title":"Classes"},{"location":"api/Files/ParticleSystem_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Particles_8h.html","text":"Libs/Analyze/Particles.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. Source code #pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#libsanalyzeparticlesh","text":"","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Particles_8h.html#classes","text":"Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains.","title":"Classes"},{"location":"api/Files/Particles_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/PlaneConstraint_8h.html","text":"Libs/Optimize/Constraints/PlaneConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneConstraint Source code #pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#libsoptimizeconstraintsplaneconstrainth","text":"","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneConstraint_8h.html#classes","text":"Name class shapeworks::PlaneConstraint","title":"Classes"},{"location":"api/Files/PlaneConstraint_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/PlaneWidget_8h.html","text":"Studio/Visualization/PlaneWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneWidget PlaneWidget . Source code #include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#studiovisualizationplanewidgeth","text":"","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneWidget_8h.html#classes","text":"Name class shapeworks::PlaneWidget PlaneWidget .","title":"Classes"},{"location":"api/Files/PlaneWidget_8h.html#source-code","text":"#include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PowerOfTwoPointTree_8h.html","text":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree Source code #pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#libsoptimizeneighborhoodpoweroftwopointtreeh","text":"","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#classes","text":"Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree","title":"Classes"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#source-code","text":"#pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/PreferencesWindow_8h.html","text":"Studio/Data/PreferencesWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences. Source code #pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#studiodatapreferenceswindowh","text":"","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PreferencesWindow_8h.html#classes","text":"Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences.","title":"Classes"},{"location":"api/Files/PreferencesWindow_8h.html#source-code","text":"#pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Preferences_8h.html","text":"Studio/Data/Preferences.h Classes Name class Preferences Application preferences. Source code #pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#studiodatapreferencesh","text":"","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#classes","text":"Name class Preferences Application preferences.","title":"Classes"},{"location":"api/Files/Preferences_8h.html#source-code","text":"#pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Procrustes3D_8h.html","text":"Libs/Alignment/Procrustes3D.h Classes Name struct SimilarityTransform3D class Procrustes3D Source code #pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#libsalignmentprocrustes3dh","text":"","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#classes","text":"Name struct SimilarityTransform3D class Procrustes3D","title":"Classes"},{"location":"api/Files/Procrustes3D_8h.html#source-code","text":"#pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ProcrustesRegistration_8h.html","text":"Libs/Optimize/ProcrustesRegistration.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProcrustesRegistration Source code #pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#libsoptimizeprocrustesregistrationh","text":"","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProcrustesRegistration_8h.html#classes","text":"Name class shapeworks::ProcrustesRegistration","title":"Classes"},{"location":"api/Files/ProcrustesRegistration_8h.html#source-code","text":"#pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ProjectReader_8h.html","text":"Libs/Project/ProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProjectReader Base class for Project readers. Source code #pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#libsprojectprojectreaderh","text":"","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProjectReader_8h.html#classes","text":"Name class shapeworks::ProjectReader Base class for Project readers.","title":"Classes"},{"location":"api/Files/ProjectReader_8h.html#source-code","text":"#pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ProjectUtils_8h.html","text":"Libs/Project/ProjectUtils.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types Classes Name class shapeworks::ProjectUtils Source code #pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#libsprojectprojectutilsh","text":"","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types","title":"Namespaces"},{"location":"api/Files/ProjectUtils_8h.html#classes","text":"Name class shapeworks::ProjectUtils","title":"Classes"},{"location":"api/Files/ProjectUtils_8h.html#source-code","text":"#pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Project_8h.html","text":"Libs/Project/Project.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project. Source code #pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#libsprojectprojecth","text":"","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Project_8h.html#classes","text":"Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project.","title":"Classes"},{"location":"api/Files/Project_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PythonAnalyze_8h.html","text":"Libs/Python/PythonAnalyze.h Functions Name void define_python_analyze (pybind11::module_ m) Functions Documentation function define_python_analyze void define_python_analyze ( pybind11 :: module_ m ) Source code #pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#libspythonpythonanalyzeh","text":"","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#functions","text":"Name void define_python_analyze (pybind11::module_ m)","title":"Functions"},{"location":"api/Files/PythonAnalyze_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/PythonAnalyze_8h.html#function-define_python_analyze","text":"void define_python_analyze ( pybind11 :: module_ m )","title":"function define_python_analyze"},{"location":"api/Files/PythonAnalyze_8h.html#source-code","text":"#pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/PythonWorker_8h.html","text":"Studio/Python/PythonWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PythonWorker Source code #pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#studiopythonpythonworkerh","text":"","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PythonWorker_8h.html#classes","text":"Name class shapeworks::PythonWorker","title":"Classes"},{"location":"api/Files/PythonWorker_8h.html#source-code","text":"#pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/QMeshWarper_8h.html","text":"Libs/Analyze/QMeshWarper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. Source code #pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#libsanalyzeqmeshwarperh","text":"","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QMeshWarper_8h.html#classes","text":"Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject.","title":"Classes"},{"location":"api/Files/QMeshWarper_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/QOptimize_8h.html","text":"Studio/Optimize/QOptimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QOptimize Wraps Optimize as a QObject. Source code #pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#studiooptimizeqoptimizeh","text":"","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QOptimize_8h.html#classes","text":"Name class shapeworks::QOptimize Wraps Optimize as a QObject.","title":"Classes"},{"location":"api/Files/QOptimize_8h.html#source-code","text":"#pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ReconstructSurface_8h.html","text":"Libs/Particles/ReconstructSurface.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ReconstructSurface Source code #pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#libsparticlesreconstructsurfaceh","text":"","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ReconstructSurface_8h.html#classes","text":"Name class shapeworks::ReconstructSurface","title":"Classes"},{"location":"api/Files/ReconstructSurface_8h.html#source-code","text":"#pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Reconstruction_8h.html","text":"Libs/Analyze/Reconstruction.h Namespaces Name itk Classes Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction Source code #ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#libsanalyzereconstructionh","text":"","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/Reconstruction_8h.html#classes","text":"Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction","title":"Classes"},{"location":"api/Files/Reconstruction_8h.html#source-code","text":"#ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Region_8h.html","text":"Libs/Common/Region.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space Source code #pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#libscommonregionh","text":"","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Region_8h.html#classes","text":"Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space","title":"Classes"},{"location":"api/Files/Region_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Sampler_8h.html","text":"Libs/Optimize/Sampler.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType Source code #pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#libsoptimizesamplerh","text":"","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Sampler_8h.html#classes","text":"Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType","title":"Classes"},{"location":"api/Files/Sampler_8h.html#source-code","text":"#pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/SamplingFunction_8h.html","text":"Libs/Optimize/Function/SamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#libsoptimizefunctionsamplingfunctionh","text":"","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SamplingFunction_8h.html#classes","text":"Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution.","title":"Classes"},{"location":"api/Files/SamplingFunction_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Session_8h.html","text":"Studio/Data/Session.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#studiodatasessionh","text":"","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Session_8h.html#classes","text":"Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session.","title":"Classes"},{"location":"api/Files/Session_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluationJob_8h.html","text":"Studio/Analysis/ShapeEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluationJob Functions Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( Eigen :: VectorXd ) function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ) Source code #pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#studioanalysisshapeevaluationjobh","text":"","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluationJob_8h.html#classes","text":"Name class shapeworks::ShapeEvaluationJob","title":"Classes"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions","text":"Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType )","title":"Functions"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( Eigen :: VectorXd )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype_1","text":"Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluation_8h.html","text":"Libs/Particles/ShapeEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluation Source code #pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#libsparticlesshapeevaluationh","text":"","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluation_8h.html#classes","text":"Name class shapeworks::ShapeEvaluation","title":"Classes"},{"location":"api/Files/ShapeEvaluation_8h.html#source-code","text":"#pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeGradientMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeGradientMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#libsoptimizematrixshapegradientmatrixh","text":"","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeGradientMatrix_8h.html#classes","text":"Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeGradientMatrix_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#libsoptimizematrixshapematrixh","text":"","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeMatrix_8h.html#classes","text":"Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksStudioApp_8h.html","text":"Studio/Interface/ShapeWorksStudioApp.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#studiointerfaceshapeworksstudioapph","text":"","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#classes","text":"Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window.","title":"Classes"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksWorker_8h.html","text":"Studio/Data/ShapeWorksWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksWorker Source code #pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#studiodatashapeworksworkerh","text":"","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksWorker_8h.html#classes","text":"Name class shapeworks::ShapeworksWorker","title":"Classes"},{"location":"api/Files/ShapeWorksWorker_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Shape_8h.html","text":"Libs/Analyze/Shape.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used. Source code #pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#libsanalyzeshapeh","text":"","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shape_8h.html#classes","text":"Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used.","title":"Classes"},{"location":"api/Files/Shape_8h.html#source-code","text":"#pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/ShapeworksUtils_8h.html","text":"Libs/Common/ShapeworksUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksUtils Source code #pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#libscommonshapeworksutilsh","text":"","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeworksUtils_8h.html#classes","text":"Name class shapeworks::ShapeworksUtils","title":"Classes"},{"location":"api/Files/ShapeworksUtils_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Shapeworks_8h.html","text":"Libs/Common/Shapeworks.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#libscommonshapeworksh","text":"","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shapeworks_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/SharedCommandData_8h.html","text":"Applications/shapeworks/SharedCommandData.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::SharedCommandData Source code #pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#applicationsshapeworkssharedcommanddatah","text":"","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SharedCommandData_8h.html#classes","text":"Name struct shapeworks::SharedCommandData","title":"Classes"},{"location":"api/Files/SharedCommandData_8h.html#source-code","text":"#pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/SliceView_8h.html","text":"Studio/Visualization/SliceView.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SliceView SliceView . Source code #pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#studiovisualizationsliceviewh","text":"","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SliceView_8h.html#classes","text":"Name class shapeworks::SliceView SliceView .","title":"Classes"},{"location":"api/Files/SliceView_8h.html#source-code","text":"#pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/SplashScreen_8h.html","text":"Studio/Interface/SplashScreen.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SplashScreen Source code #pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#studiointerfacesplashscreenh","text":"","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SplashScreen_8h.html#classes","text":"Name class shapeworks::SplashScreen","title":"Classes"},{"location":"api/Files/SplashScreen_8h.html#source-code","text":"#pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StackWalker_8h.html","text":"Studio/Utils/StackWalker.h Source code #ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#studioutilsstackwalkerh","text":"","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#source-code","text":"#ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StatsGroupLDAJob_8h.html","text":"Studio/Job/StatsGroupLDAJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatsGroupLDAJob Source code #pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#studiojobstatsgroupldajobh","text":"","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatsGroupLDAJob_8h.html#classes","text":"Name class shapeworks::StatsGroupLDAJob","title":"Classes"},{"location":"api/Files/StatsGroupLDAJob_8h.html#source-code","text":"#pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StatusBarWidget_8h.html","text":"Studio/Interface/StatusBarWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatusBarWidget StatusBarWidget . Source code #pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#studiointerfacestatusbarwidgeth","text":"","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatusBarWidget_8h.html#classes","text":"Name class shapeworks::StatusBarWidget StatusBarWidget .","title":"Classes"},{"location":"api/Files/StatusBarWidget_8h.html#source-code","text":"#pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StringUtils_8h.html","text":"Libs/Utils/StringUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StringUtils String utility functions. Source code #pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#libsutilsstringutilsh","text":"","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StringUtils_8h.html#classes","text":"Name class shapeworks::StringUtils String utility functions.","title":"Classes"},{"location":"api/Files/StringUtils_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioEnums_8h.html","text":"Libs/Analyze/StudioEnums.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#libsanalyzestudioenumsh","text":"","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioEnums_8h.html#source-code","text":"#pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/StudioHandleWidget_8h.html","text":"Studio/Visualization/StudioHandleWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioHandleWidget Source code #include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#studiovisualizationstudiohandlewidgeth","text":"","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioHandleWidget_8h.html#classes","text":"Name class shapeworks::StudioHandleWidget","title":"Classes"},{"location":"api/Files/StudioHandleWidget_8h.html#source-code","text":"#include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioInteractorStyle_8h.html","text":"Studio/Visualization/StudioInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#studiovisualizationstudiointeractorstyleh","text":"","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioInteractorStyle","title":"Classes"},{"location":"api/Files/StudioInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioLogger_8h.html","text":"Studio/Interface/StudioLogger.h Classes Name class StudioLogger Handle logger callbacks via Qt for thread correctness. Source code #pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#studiointerfacestudiologgerh","text":"","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#classes","text":"Name class StudioLogger Handle logger callbacks via Qt for thread correctness.","title":"Classes"},{"location":"api/Files/StudioLogger_8h.html#source-code","text":"#pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioMesh_8h.html","text":"Libs/Analyze/StudioMesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioMesh Representation of a single mesh. Types Name using float PixelType using itk::Image< PixelType, 3 > ImageType Types Documentation using PixelType using PixelType = float ; using ImageType using ImageType = itk :: Image < PixelType , 3 > ; Source code #pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#libsanalyzestudiomeshh","text":"","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioMesh_8h.html#classes","text":"Name class shapeworks::StudioMesh Representation of a single mesh.","title":"Classes"},{"location":"api/Files/StudioMesh_8h.html#types","text":"Name using float PixelType using itk::Image< PixelType, 3 > ImageType","title":"Types"},{"location":"api/Files/StudioMesh_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/StudioMesh_8h.html#using-pixeltype","text":"using PixelType = float ;","title":"using PixelType"},{"location":"api/Files/StudioMesh_8h.html#using-imagetype","text":"using ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Files/StudioMesh_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html","text":"Studio/Visualization/StudioSliceInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioSliceInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#studiovisualizationstudiosliceinteractorstyleh","text":"","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioSliceInteractorStyle","title":"Classes"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioUtils_8h.html","text":"Studio/Utils/StudioUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioUtils Utilities for Studio. Source code #pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#studioutilsstudioutilsh","text":"","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioUtils_8h.html#classes","text":"Name class shapeworks::StudioUtils Utilities for Studio.","title":"Classes"},{"location":"api/Files/StudioUtils_8h.html#source-code","text":"#pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/StudioVtkOutputWindow_8h.html","text":"Studio/Visualization/StudioVtkOutputWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. Source code #pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#studiovisualizationstudiovtkoutputwindowh","text":"","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#classes","text":"Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages.","title":"Classes"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Style_8h.html","text":"Studio/Interface/Style.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Style Source code #pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#studiointerfacestyleh","text":"","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Style_8h.html#classes","text":"Name class shapeworks::Style","title":"Classes"},{"location":"api/Files/Style_8h.html#source-code","text":"#pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Subject_8h.html","text":"Libs/Project/Subject.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Subject Representation of a single subject. Source code #pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#libsprojectsubjecth","text":"","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Subject_8h.html#classes","text":"Name class shapeworks::Subject Representation of a single subject.","title":"Classes"},{"location":"api/Files/Subject_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/SurfaceReconstructor_8h.html","text":"Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. More... Classes Name class SurfaceReconstructor Detailed Description Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method Source code #pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#libsanalyzesurfacereconstructorh","text":"Surface Reconstruction Layer. More...","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#classes","text":"Name class SurfaceReconstructor","title":"Classes"},{"location":"api/Files/SurfaceReconstructor_8h.html#detailed-description","text":"Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method","title":"Detailed Description"},{"location":"api/Files/SurfaceReconstructor_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Telemetry_8h.html","text":"Studio/Data/Telemetry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Telemetry Source code #pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#studiodatatelemetryh","text":"","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Telemetry_8h.html#classes","text":"Name class shapeworks::Telemetry","title":"Classes"},{"location":"api/Files/Telemetry_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/UpdateChecker_8h.html","text":"Studio/Interface/UpdateChecker.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::UpdateChecker Update Checker. Source code #pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#studiointerfaceupdatecheckerh","text":"","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/UpdateChecker_8h.html#classes","text":"Name class shapeworks::UpdateChecker Update Checker.","title":"Classes"},{"location":"api/Files/UpdateChecker_8h.html#source-code","text":"#pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Utils_8h.html","text":"Libs/Utils/Utils.h Namespaces Name utils Classes Name class Utils Defines Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN Macros Documentation define twopi_inv #define twopi_inv 0.5/M_PI define twopi #define twopi 2.0*M_PI define RANDU #define RANDU ((double) rand()/RAND_MAX) define RANDN2 #define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 )) define RANDN #define RANDN RANDN2(0, 1.0) Source code /*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#libsutilsutilsh","text":"","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#namespaces","text":"Name utils","title":"Namespaces"},{"location":"api/Files/Utils_8h.html#classes","text":"Name class Utils","title":"Classes"},{"location":"api/Files/Utils_8h.html#defines","text":"Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN","title":"Defines"},{"location":"api/Files/Utils_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Utils_8h.html#define-twopi_inv","text":"#define twopi_inv 0.5/M_PI","title":"define twopi_inv"},{"location":"api/Files/Utils_8h.html#define-twopi","text":"#define twopi 2.0*M_PI","title":"define twopi"},{"location":"api/Files/Utils_8h.html#define-randu","text":"#define RANDU ((double) rand()/RAND_MAX)","title":"define RANDU"},{"location":"api/Files/Utils_8h.html#define-randn2","text":"#define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 ))","title":"define RANDN2"},{"location":"api/Files/Utils_8h.html#define-randn","text":"#define RANDN RANDN2(0, 1.0)","title":"define RANDN"},{"location":"api/Files/Utils_8h.html#source-code","text":"/*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Variant_8h.html","text":"Libs/Project/Variant.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Variant Variant class to represent multiple types. Source code #pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#libsprojectvarianth","text":"","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Variant_8h.html#classes","text":"Name class shapeworks::Variant Variant class to represent multiple types.","title":"Classes"},{"location":"api/Files/Variant_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/VectorFunction_8h.html","text":"Libs/Optimize/Function/VectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorFunction Source code #pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#libsoptimizefunctionvectorfunctionh","text":"","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorFunction_8h.html#classes","text":"Name class shapeworks::VectorFunction","title":"Classes"},{"location":"api/Files/VectorFunction_8h.html#source-code","text":"#pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/VectorImage_8h.html","text":"Libs/Image/VectorImage.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorImage Gradient (vector) image. Source code #pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#libsimagevectorimageh","text":"","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorImage_8h.html#classes","text":"Name class shapeworks::VectorImage Gradient (vector) image.","title":"Classes"},{"location":"api/Files/VectorImage_8h.html#source-code","text":"#pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/Viewer_8h.html","text":"Studio/Visualization/Viewer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer Source code #pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#studiovisualizationviewerh","text":"","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Viewer_8h.html#classes","text":"Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer","title":"Classes"},{"location":"api/Files/Viewer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Visualizer_8h.html","text":"Studio/Visualization/Visualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Visualizer Controls display of objects in viewers. Source code #pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#studiovisualizationvisualizerh","text":"","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Visualizer_8h.html#classes","text":"Name class shapeworks::Visualizer Controls display of objects in viewers.","title":"Classes"},{"location":"api/Files/Visualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/VtkMeshWrapper_8h.html","text":"Libs/Optimize/Domain/VtkMeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VtkMeshWrapper Source code #pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#libsoptimizedomainvtkmeshwrapperh","text":"","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VtkMeshWrapper_8h.html#classes","text":"Name class shapeworks::VtkMeshWrapper","title":"Classes"},{"location":"api/Files/VtkMeshWrapper_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/WheelEventForwarder_8h.html","text":"Studio/Interface/WheelEventForwarder.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::WheelEventForwarder Source code #pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#studiointerfacewheeleventforwarderh","text":"","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/WheelEventForwarder_8h.html#classes","text":"Name class shapeworks::WheelEventForwarder","title":"Classes"},{"location":"api/Files/WheelEventForwarder_8h.html#source-code","text":"#pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/WindowsCrashHandler_8h.html","text":"Studio/Utils/WindowsCrashHandler.h Functions Name int init_crash_handler () Functions Documentation function init_crash_handler int init_crash_handler () Source code int init_crash_handler (); Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#studioutilswindowscrashhandlerh","text":"","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions","text":"Name int init_crash_handler ()","title":"Functions"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/WindowsCrashHandler_8h.html#function-init_crash_handler","text":"int init_crash_handler ()","title":"function init_crash_handler"},{"location":"api/Files/WindowsCrashHandler_8h.html#source-code","text":"int init_crash_handler (); Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/Worker_8h.html","text":"Studio/Data/Worker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Worker Source code #pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#studiodataworkerh","text":"","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Worker_8h.html#classes","text":"Name class shapeworks::Worker","title":"Classes"},{"location":"api/Files/Worker_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html","text":"Libs/Optimize/Function Files Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#libsoptimizefunction","text":"","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#files","text":"Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html","text":"Libs/Optimize/Matrix Files Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#libsoptimizematrix","text":"","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#files","text":"Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html","text":"Studio/Analysis Files Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#studioanalysis","text":"","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#files","text":"Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html","text":"Libs/Mesh Directories Name Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#libsmesh","text":"","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#directories","text":"Name Libs/Mesh/PreviewMeshQC","title":"Directories"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#files","text":"Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html","text":"Libs/Optimize/Neighborhood Files Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#libsoptimizeneighborhood","text":"","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#files","text":"Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html","text":"Libs/Alignment/Transforms Files Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#libsalignmenttransforms","text":"","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#files","text":"Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html","text":"Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#libsmeshpreviewmeshqc","text":"","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#files","text":"Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html","text":"Studio/Groom Files Name Studio/Groom/GroomTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#studiogroom","text":"","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#files","text":"Name Studio/Groom/GroomTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html","text":"Studio/Python Files Name Studio/Python/PythonWorker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#studiopython","text":"","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#files","text":"Name Studio/Python/PythonWorker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html","text":"Applications/shapeworks Files Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#applicationsshapeworks","text":"","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#files","text":"Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html","text":"Libs/Project Files Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#libsproject","text":"","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#files","text":"Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html","text":"Studio/Utils Files Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#studioutils","text":"","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#files","text":"Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html","text":"Libs/Python Files Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#libspython","text":"","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#files","text":"Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html","text":"Libs Directories Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#libs","text":"","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#directories","text":"Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-24 at 22:16:02 +0000","title":"Directories"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html","text":"Libs/Utils Files Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#libsutils","text":"","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#files","text":"Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html","text":"Studio/Job Files Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#studiojob","text":"","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#files","text":"Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html","text":"Libs/Optimize/Utils Files Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#libsoptimizeutils","text":"","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#files","text":"Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html","text":"Libs/Optimize/Container Files Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#libsoptimizecontainer","text":"","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#files","text":"Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html","text":"Applications Directories Name Applications/shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#applications","text":"","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#directories","text":"Name Applications/shapeworks Updated on 2023-10-24 at 22:16:02 +0000","title":"Directories"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html","text":"Libs/Image Files Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#libsimage","text":"","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#files","text":"Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html","text":"Studio/Optimize Files Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#studiooptimize","text":"","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#files","text":"Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html","text":"Studio/Resources Files Name Studio/Resources/resource.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#studioresources","text":"","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#files","text":"Name Studio/Resources/resource.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html","text":"Libs/Optimize/Constraints Files Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#libsoptimizeconstraints","text":"","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#files","text":"Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html","text":"Studio/Data Files Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#studiodata","text":"","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#files","text":"Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html","text":"Documentation/Doxygen Updated on 2023-10-24 at 22:16:02 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html#documentationdoxygen","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html","text":"Studio/Visualization Files Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#studiovisualization","text":"","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#files","text":"Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html","text":"Libs/Optimize/Domain Files Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#libsoptimizedomain","text":"","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#files","text":"Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html","text":"Studio Directories Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#studio","text":"","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#directories","text":"Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-24 at 22:16:03 +0000","title":"Directories"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html","text":"Libs/Common Files Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#libscommon","text":"","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#files","text":"Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html","text":"Libs/Alignment Directories Name Libs/Alignment/Transforms Files Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#libsalignment","text":"","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#directories","text":"Name Libs/Alignment/Transforms","title":"Directories"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#files","text":"Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html","text":"Libs/Groom Files Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#libsgroom","text":"","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#files","text":"Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html","text":"Documentation Directories Name Documentation/Doxygen Updated on 2023-10-24 at 22:16:02 +0000","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#documentation","text":"","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#directories","text":"Name Documentation/Doxygen Updated on 2023-10-24 at 22:16:02 +0000","title":"Directories"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html","text":"Libs/Analyze Files Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#libsanalyze","text":"","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#files","text":"Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html","text":"Studio/DeepSSM Files Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#studiodeepssm","text":"","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#files","text":"Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html","text":"Libs/Optimize Directories Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils Files Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#libsoptimize","text":"","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#directories","text":"Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils","title":"Directories"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#files","text":"Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-24 at 22:16:02 +0000","title":"Files"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html","text":"Studio/Interface Files Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#studiointerface","text":"","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#files","text":"Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html","text":"Libs/Particles Files Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#libsparticles","text":"","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#files","text":"Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/index_files.html","text":"Files dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/index_files.html#files","text":"dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-24 at 22:16:03 +0000","title":"Files"},{"location":"api/Files/itkAdvancedTransform_8h.html","text":"Libs/Alignment/Transforms/itkAdvancedTransform.h Namespaces Name itk Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#libsalignmenttransformsitkadvancedtransformh","text":"","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkAdvancedTransform_8h.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space.","title":"Classes"},{"location":"api/Files/itkAdvancedTransform_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Namespaces Name itk Classes Name class itk::CompactlySupportedRBFSparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#libsalignmenttransformsitkcompactlysupportedrbfsparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#classes","text":"Name class itk::CompactlySupportedRBFSparseKernelTransform","title":"Classes"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkKernelTransform2.h Namespaces Name itk Classes Name class itk::KernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#libsalignmenttransformsitkkerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkKernelTransform2_8h.html#classes","text":"Name class itk::KernelTransform2","title":"Classes"},{"location":"api/Files/itkKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html","text":"Libs/Mesh/itkMultiplyByConstantImageFilter.h Namespaces Name itk itk::Functor Classes Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#libsmeshitkmultiplybyconstantimagefilterh","text":"","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#namespaces","text":"Name itk itk::Functor","title":"Namespaces"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#classes","text":"Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant.","title":"Classes"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkSparseKernelTransform.h Namespaces Name itk Classes Name class itk::SparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#libsalignmenttransformsitksparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkSparseKernelTransform_8h.html#classes","text":"Name class itk::SparseKernelTransform","title":"Classes"},{"location":"api/Files/itkSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html","text":"Libs/Image/itkTPGACLevelSetImageFilter.h Namespaces Name itk Classes Name class itk::TPGACLevelSetImageFilter Defines Name TPGAC_EPSILON Macros Documentation define TPGAC_EPSILON #define TPGAC_EPSILON 1e-5; Source code #ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#libsimageitktpgaclevelsetimagefilterh","text":"","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#classes","text":"Name class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#defines","text":"Name TPGAC_EPSILON","title":"Defines"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#define-tpgac_epsilon","text":"#define TPGAC_EPSILON 1e-5;","title":"define TPGAC_EPSILON"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#source-code","text":"#ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Namespaces Name itk Classes Name class itk::ThinPlateSplineKernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#libsalignmenttransformsitkthinplatesplinekerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#classes","text":"Name class itk::ThinPlateSplineKernelTransform2","title":"Classes"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/math3d_8h.html","text":"Libs/Mesh/PreviewMeshQC/math3d.h Classes Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR Types Name typedef unsigned char uchar Functions Name quatd operator* (const double a, const quatd & q) Types Documentation typedef uchar typedef unsigned char uchar ; Functions Documentation function operator* inline quatd operator * ( const double a , const quatd & q ) Source code #pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#libsmeshpreviewmeshqcmath3dh","text":"","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#classes","text":"Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR","title":"Classes"},{"location":"api/Files/math3d_8h.html#types","text":"Name typedef unsigned char uchar","title":"Types"},{"location":"api/Files/math3d_8h.html#functions","text":"Name quatd operator* (const double a, const quatd & q)","title":"Functions"},{"location":"api/Files/math3d_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/math3d_8h.html#typedef-uchar","text":"typedef unsigned char uchar ;","title":"typedef uchar"},{"location":"api/Files/math3d_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/math3d_8h.html#function-operator","text":"inline quatd operator * ( const double a , const quatd & q )","title":"function operator*"},{"location":"api/Files/math3d_8h.html#source-code","text":"#pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/meshFIM_8h.html","text":"Libs/Mesh/meshFIM.h Classes Name class meshFIM Defines Name _EPS ONE CURVATURE GENERATE_GEO_FILES Macros Documentation define _EPS #define _EPS 1e-06 define ONE #define ONE 1 define CURVATURE #define CURVATURE 2 define GENERATE_GEO_FILES #define GENERATE_GEO_FILES 1 Source code #ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#libsmeshmeshfimh","text":"","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#classes","text":"Name class meshFIM","title":"Classes"},{"location":"api/Files/meshFIM_8h.html#defines","text":"Name _EPS ONE CURVATURE GENERATE_GEO_FILES","title":"Defines"},{"location":"api/Files/meshFIM_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/meshFIM_8h.html#define-_eps","text":"#define _EPS 1e-06","title":"define _EPS"},{"location":"api/Files/meshFIM_8h.html#define-one","text":"#define ONE 1","title":"define ONE"},{"location":"api/Files/meshFIM_8h.html#define-curvature","text":"#define CURVATURE 2","title":"define CURVATURE"},{"location":"api/Files/meshFIM_8h.html#define-generate_geo_files","text":"#define GENERATE_GEO_FILES 1","title":"define GENERATE_GEO_FILES"},{"location":"api/Files/meshFIM_8h.html#source-code","text":"#ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/pybind__utils_8h.html","text":"Libs/Python/pybind_utils.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#libspythonpybind_utilsh","text":"","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/pybind__utils_8h.html#source-code","text":"#pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/resource_8h.html","text":"Studio/Resources/resource.h Defines Name IDI_ICON1 Macros Documentation define IDI_ICON1 #define IDI_ICON1 101 Source code //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-24 at 22:16:03 +0000","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#studioresourcesresourceh","text":"","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#defines","text":"Name IDI_ICON1","title":"Defines"},{"location":"api/Files/resource_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/resource_8h.html#define-idi_icon1","text":"#define IDI_ICON1 101","title":"define IDI_ICON1"},{"location":"api/Files/resource_8h.html#source-code","text":"//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-24 at 22:16:03 +0000","title":"Source code"},{"location":"api/Files/stdafx_8h.html","text":"Libs/Mesh/PreviewMeshQC/stdafx.h Source code // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#libsmeshpreviewmeshqcstdafxh","text":"","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#source-code","text":"// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Files/vtkPolyDataToImageData_8h.html","text":"Libs/Analyze/vtkPolyDataToImageData.h Classes Name class vtkPolyDataToImageData Source code // This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#libsanalyzevtkpolydatatoimagedatah","text":"","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#classes","text":"Name class vtkPolyDataToImageData","title":"Classes"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#source-code","text":"// This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-24 at 22:16:02 +0000","title":"Source code"},{"location":"api/Modules/group__Group-Common.html","text":"Common Classes Classes Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-24 at 22:16:02 +0000","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#common-classes","text":"","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#classes","text":"Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-24 at 22:16:02 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Constraint.html","text":"Constraint Classes Updated on 2023-10-24 at 22:16:02 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Constraint.html#constraint-classes","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Image.html","text":"Image Classes Classes Name class shapeworks::Image Updated on 2023-10-24 at 22:16:02 +0000","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#image-classes","text":"","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#classes","text":"Name class shapeworks::Image Updated on 2023-10-24 at 22:16:02 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Mesh.html","text":"Mesh Classes Classes Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-24 at 22:16:02 +0000","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#mesh-classes","text":"","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-24 at 22:16:02 +0000","title":"Classes"},{"location":"api/Modules/index_groups.html","text":"Modules group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-24 at 22:16:03 +0000","title":"Groups"},{"location":"api/Modules/index_groups.html#modules","text":"group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-24 at 22:16:03 +0000","title":"Modules"},{"location":"api/Namespaces/index_namespaces.html","text":"Namespaces namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-24 at 22:16:03 +0000","title":"Namespaces"},{"location":"api/Namespaces/index_namespaces.html#namespaces","text":"namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-24 at 22:16:03 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceUi.html","text":"Ui Updated on 2023-10-24 at 22:16:02 +0000","title":"Ui"},{"location":"api/Namespaces/namespaceUi.html#ui","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"Ui"},{"location":"api/Namespaces/namespacefmt.html","text":"fmt Classes Name struct fmt::formatter< QString > Updated on 2023-10-24 at 22:16:01 +0000","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#fmt","text":"","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#classes","text":"Name struct fmt::formatter< QString > Updated on 2023-10-24 at 22:16:01 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html","text":"itk Namespaces Name itk::Functor Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter Functions Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc) Attributes Name int nbh6Table int nbh26Table Functions Documentation function fillLocal6Neighbours static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination. function label6Neighbours static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel. function label26Neighbours static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel. function connectedComponents static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc ) Attributes Documentation variable nbh6Table static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } }; variable nbh26Table static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-24 at 22:16:01 +0000","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#itk","text":"","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#namespaces","text":"Name itk::Functor","title":"Namespaces"},{"location":"api/Namespaces/namespaceitk.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html#functions","text":"Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc)","title":"Functions"},{"location":"api/Namespaces/namespaceitk.html#attributes","text":"Name int nbh6Table int nbh26Table","title":"Attributes"},{"location":"api/Namespaces/namespaceitk.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceitk.html#function-filllocal6neighbours","text":"static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination.","title":"function fillLocal6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label6neighbours","text":"static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel.","title":"function label6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label26neighbours","text":"static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel.","title":"function label26Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-connectedcomponents","text":"static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc )","title":"function connectedComponents"},{"location":"api/Namespaces/namespaceitk.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh6table","text":"static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } };","title":"variable nbh6Table"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh26table","text":"static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-24 at 22:16:01 +0000","title":"variable nbh26Table"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html","text":"itk::Functor Classes Name class itk::Functor::MultiplyByConstant Updated on 2023-10-24 at 22:16:01 +0000","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#itkfunctor","text":"","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#classes","text":"Name class itk::Functor::MultiplyByConstant Updated on 2023-10-24 at 22:16:01 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html","text":"shapeworks User usage reporting (telemetry) More... Namespaces Name shapeworks::mesh shapeworks::particles shapeworks::project Classes Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker Types Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle Functions Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data) Attributes Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines Detailed Description User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes Types Documentation enum DisplayMode Enumerator Value Description Original 0 Groomed 1 Reconstructed 2 enum Axis Enumerator Value Description invalid -1 X Y Z handy way to specify an axis enum ConstraintType Enumerator Value Description CuttingPlane 'C' FreeForm 'F' enum CorrespondenceMode Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8 enum DomainType Enumerator Value Description Image 'I' Mesh 'M' Contour 'C' enum ArrayTransferOptions Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E enum LandmarkVisibility Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E enum MessageType Enumerator Value Description normal warning error debug using CacheMap using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ; using CacheList using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ; using ShapeHandle using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ; using ShapeList using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ; using MeshHandle using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ; using MeshList using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ; using Coord using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework. using Dims using shapeworks :: Dims = typedef itk :: Size < 3 > ; using Point3 using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ; using Vector3 using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ; using Matrix44 using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ; using Matrix33 using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ; using IPoint3 using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ; using FPoint3 using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ; using Covariant using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ; using Vector using shapeworks :: Vector = typedef Vector3 ; using Point using shapeworks :: Point = typedef Point3 ; using Matrix using shapeworks :: Matrix = typedef Matrix33 ; using Plane using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ; using Array using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ; using Field using shapeworks :: Field = typedef Array ; using PointArray using shapeworks :: PointArray = typedef std :: vector < Point3 > ; using GenericTransform using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer. using IdentityTransform using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ; using TransformPtr using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ; using AffineTransform using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands. using AffineTransformPtr using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ; using MeshTransform using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms. using ThinPlateSplineTransform using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface . using RBFSSparseTransform using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; using ProjectHandle using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ; using VnlMatrix template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; typedef SessionHandle typedef QSharedPointer < Session > shapeworks :: SessionHandle ; using TransformType using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this. typedef LightboxHandle typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ; typedef ViewerHandle typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ; typedef ViewerList typedef QVector < ViewerHandle > shapeworks :: ViewerList ; typedef VisualizerHandle typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ; Functions Documentation function COMMAND_DECLARE COMMAND_DECLARE ( ReadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageInfo , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Antialias , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResampleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResizeImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RecenterImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( PadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Rotate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ExtractLabel , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CloseHoles , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Binarize , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeDT , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CurvatureFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GradientFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SigmoidFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( IntensityFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Blur , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageBounds , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CropImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ICPRigid , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetOrigin , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetSpacing , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( NegateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( AddImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SubtractImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MultiplyImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( DivideImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageToMesh , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetRegion , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Isolate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Compactness , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Generalization , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Specificity , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshInfo , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Coverage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Smooth , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SmoothSinc , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Remesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RemeshPercent , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( InvertNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TransformMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FillHoles , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ProbeVolume , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshBounds , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Distance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldRange , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldMean , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldStd , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldNames , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FixElement , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClosestPoint , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeanNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Curvature , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToImage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToDT , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeThickness , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Seed , ShapeworksCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ) function display_mode_to_string std :: string display_mode_to_string ( DisplayMode display_mode ) function string_to_display_mode DisplayMode string_to_display_mode ( std :: string str ) function operator<< std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ) function operator<< std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ) function makeVector Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) function makePointArray PointArray makePointArray ( int size , Point3 value ) function createTransform TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) ) function makePlane Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane. function makePlane Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ) function getOrigin Point getOrigin ( const Plane plane ) Get origin and normal of plane. function getNormal Vector3 getNormal ( const Plane plane ) function createMeshTransform MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) function toPoint Point toPoint ( const Dims & d ) For deliberate conversions between types. function toPoint Point toPoint ( const Coord & c ) function toVector Vector toVector ( const Dims & d ) function toVector Vector toVector ( const Point & p ) function toVector Vector toVector ( const itk :: CovariantVector < double , 3 > & v ) function toPoint Point toPoint ( const Vector & v ) function toCoord Coord toCoord ( const Dims & d ) function toDims Dims toDims ( const Coord & c ) function toDims Dims toDims ( const Point & p ) function toCoord Coord toCoord ( const Point & p ) function negate template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) function negate Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector) function invertValue template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector. function invertValue Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector) function dotProduct Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products. function crossProduct Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ) function length double length ( const Vector3 & v ) function toAxis Axis toAxis ( const std :: string & str ) function axisToString std :: string axisToString ( Axis axis ) function axis_is_valid bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid. function axis_is_valid bool axis_is_valid ( const Axis & axis ) function degToRad double degToRad ( const double deg ) convert degrees to radians function mean double mean ( const Field field ) incrementally compute (single-component) mean of field function stddev double stddev ( const Field field ) compute (single-component) standard deviation of field function range std :: vector < double > range ( const Field field ) compute (single-component) range of field function operator+ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q ) function operator- template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q ) function operator+= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q ) function operator-= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x ) function operator*= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x ) function operator/= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x ) function epsEqual template < typename T > bool epsEqual ( T a , T b , T epsilon ) function epsEqual template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) function epsEqual bool epsEqual ( double a , double b , double eps ) function clamp template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17. function operator<< std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image function operator* Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h] function operator/ Image operator / ( const Image & img , const double x ) function operator*= Image & operator *= ( Image & img , const double x ) function operator/= Image & operator /= ( Image & img , const double x ) function operator<< std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh function itkEventMacro itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ) function SaveReconstructions void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) function variant_to_string template < typename T > std :: string variant_to_string ( T begin , T end ) function printNumpyArrayInfo void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc) function verifyOrderAndPacking void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not function setOwnership void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns function wrapNumpyArr Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign function pyToArr Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data function arrToPy py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer function itkTransformToEigen Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ) function eigen44ToItkTransform TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ) function vtkTransformToEigen Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ) function eigen44ToVtkTransform MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ) function itkToEigen template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix. function eigenToItk template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. function vnlToEigen template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix. function wrapDataWithEigen template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location. function wrapDataWithEigen template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix. function wrapDataWithItk template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data. Attributes Documentation variable Pi const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-24 at 22:16:01 +0000","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#shapeworks","text":"User usage reporting (telemetry) More...","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#namespaces","text":"Name shapeworks::mesh shapeworks::particles shapeworks::project","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks.html#classes","text":"Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html#types","text":"Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks.html#functions","text":"Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes","text":"Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks.html#detailed-description","text":"User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes","title":"Detailed Description"},{"location":"api/Namespaces/namespaceshapeworks.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-displaymode","text":"Enumerator Value Description Original 0 Groomed 1 Reconstructed 2","title":"enum DisplayMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-axis","text":"Enumerator Value Description invalid -1 X Y Z handy way to specify an axis","title":"enum Axis"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-constrainttype","text":"Enumerator Value Description CuttingPlane 'C' FreeForm 'F'","title":"enum ConstraintType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-correspondencemode","text":"Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8","title":"enum CorrespondenceMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-domaintype","text":"Enumerator Value Description Image 'I' Mesh 'M' Contour 'C'","title":"enum DomainType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-arraytransferoptions","text":"Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative","title":"enum ArrayTransferOptions"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkcolumns","text":"Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E","title":"enum LandmarkColumns"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkvisibility","text":"Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E","title":"enum LandmarkVisibility"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-messagetype","text":"Enumerator Value Description normal warning error debug","title":"enum MessageType"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachemap","text":"using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ;","title":"using CacheMap"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachelist","text":"using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ;","title":"using CacheList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapehandle","text":"using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ;","title":"using ShapeHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapelist","text":"using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ;","title":"using ShapeList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshhandle","text":"using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ;","title":"using MeshHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshlist","text":"using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ;","title":"using MeshList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-coord","text":"using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework.","title":"using Coord"},{"location":"api/Namespaces/namespaceshapeworks.html#using-dims","text":"using shapeworks :: Dims = typedef itk :: Size < 3 > ;","title":"using Dims"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point3","text":"using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector3","text":"using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ;","title":"using Vector3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix44","text":"using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ;","title":"using Matrix44"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix33","text":"using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ;","title":"using Matrix33"},{"location":"api/Namespaces/namespaceshapeworks.html#using-ipoint3","text":"using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ;","title":"using IPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-fpoint3","text":"using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ;","title":"using FPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-covariant","text":"using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ;","title":"using Covariant"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector","text":"using shapeworks :: Vector = typedef Vector3 ;","title":"using Vector"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point","text":"using shapeworks :: Point = typedef Point3 ;","title":"using Point"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix","text":"using shapeworks :: Matrix = typedef Matrix33 ;","title":"using Matrix"},{"location":"api/Namespaces/namespaceshapeworks.html#using-plane","text":"using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ;","title":"using Plane"},{"location":"api/Namespaces/namespaceshapeworks.html#using-array","text":"using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ;","title":"using Array"},{"location":"api/Namespaces/namespaceshapeworks.html#using-field","text":"using shapeworks :: Field = typedef Array ;","title":"using Field"},{"location":"api/Namespaces/namespaceshapeworks.html#using-pointarray","text":"using shapeworks :: PointArray = typedef std :: vector < Point3 > ;","title":"using PointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#using-generictransform","text":"using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer.","title":"using GenericTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-identitytransform","text":"using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ;","title":"using IdentityTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformptr","text":"using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ;","title":"using TransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransform","text":"using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands.","title":"using AffineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransformptr","text":"using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ;","title":"using AffineTransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshtransform","text":"using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms.","title":"using MeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-thinplatesplinetransform","text":"using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface .","title":"using ThinPlateSplineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-rbfssparsetransform","text":"using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ;","title":"using RBFSSparseTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-projecthandle","text":"using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ;","title":"using ProjectHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vnlmatrix","text":"template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ;","title":"using VnlMatrix"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-sessionhandle","text":"typedef QSharedPointer < Session > shapeworks :: SessionHandle ;","title":"typedef SessionHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformtype","text":"using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this.","title":"using TransformType"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-lightboxhandle","text":"typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ;","title":"typedef LightboxHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerhandle","text":"typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ;","title":"typedef ViewerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerlist","text":"typedef QVector < ViewerHandle > shapeworks :: ViewerList ;","title":"typedef ViewerList"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-visualizerhandle","text":"typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ;","title":"typedef VisualizerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare","text":"COMMAND_DECLARE ( ReadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_1","text":"COMMAND_DECLARE ( WriteImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_2","text":"COMMAND_DECLARE ( ImageInfo , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_3","text":"COMMAND_DECLARE ( Antialias , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_4","text":"COMMAND_DECLARE ( ResampleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_5","text":"COMMAND_DECLARE ( ResizeImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_6","text":"COMMAND_DECLARE ( RecenterImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_7","text":"COMMAND_DECLARE ( PadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_8","text":"COMMAND_DECLARE ( TranslateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_9","text":"COMMAND_DECLARE ( ScaleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_10","text":"COMMAND_DECLARE ( Rotate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_11","text":"COMMAND_DECLARE ( ExtractLabel , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_12","text":"COMMAND_DECLARE ( CloseHoles , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_13","text":"COMMAND_DECLARE ( Binarize , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_14","text":"COMMAND_DECLARE ( ComputeDT , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_15","text":"COMMAND_DECLARE ( CurvatureFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_16","text":"COMMAND_DECLARE ( GradientFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_17","text":"COMMAND_DECLARE ( SigmoidFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_18","text":"COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_19","text":"COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_20","text":"COMMAND_DECLARE ( IntensityFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_21","text":"COMMAND_DECLARE ( Blur , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_22","text":"COMMAND_DECLARE ( BoundingBoxImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_23","text":"COMMAND_DECLARE ( ImageBounds , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_24","text":"COMMAND_DECLARE ( CropImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_25","text":"COMMAND_DECLARE ( ICPRigid , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_26","text":"COMMAND_DECLARE ( ClipImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_27","text":"COMMAND_DECLARE ( ReflectImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_28","text":"COMMAND_DECLARE ( SetOrigin , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_29","text":"COMMAND_DECLARE ( SetSpacing , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_30","text":"COMMAND_DECLARE ( WarpImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_31","text":"COMMAND_DECLARE ( CompareImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_32","text":"COMMAND_DECLARE ( NegateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_33","text":"COMMAND_DECLARE ( AddImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_34","text":"COMMAND_DECLARE ( SubtractImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_35","text":"COMMAND_DECLARE ( MultiplyImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_36","text":"COMMAND_DECLARE ( DivideImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_37","text":"COMMAND_DECLARE ( ImageToMesh , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_38","text":"COMMAND_DECLARE ( SetRegion , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_39","text":"COMMAND_DECLARE ( Isolate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_40","text":"COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_41","text":"COMMAND_DECLARE ( Compactness , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_42","text":"COMMAND_DECLARE ( Generalization , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_43","text":"COMMAND_DECLARE ( Specificity , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_44","text":"COMMAND_DECLARE ( ReadMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_45","text":"COMMAND_DECLARE ( WriteMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_46","text":"COMMAND_DECLARE ( MeshInfo , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_47","text":"COMMAND_DECLARE ( Coverage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_48","text":"COMMAND_DECLARE ( Smooth , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_49","text":"COMMAND_DECLARE ( SmoothSinc , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_50","text":"COMMAND_DECLARE ( Remesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_51","text":"COMMAND_DECLARE ( RemeshPercent , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_52","text":"COMMAND_DECLARE ( InvertNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_53","text":"COMMAND_DECLARE ( ReflectMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_54","text":"COMMAND_DECLARE ( TransformMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_55","text":"COMMAND_DECLARE ( FillHoles , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_56","text":"COMMAND_DECLARE ( ProbeVolume , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_57","text":"COMMAND_DECLARE ( ClipMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_58","text":"COMMAND_DECLARE ( TranslateMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_59","text":"COMMAND_DECLARE ( ScaleMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_60","text":"COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_61","text":"COMMAND_DECLARE ( MeshBounds , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_62","text":"COMMAND_DECLARE ( Distance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_63","text":"COMMAND_DECLARE ( ComputeNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_64","text":"COMMAND_DECLARE ( SetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_65","text":"COMMAND_DECLARE ( GetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_66","text":"COMMAND_DECLARE ( SetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_67","text":"COMMAND_DECLARE ( GetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_68","text":"COMMAND_DECLARE ( FieldRange , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_69","text":"COMMAND_DECLARE ( FieldMean , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_70","text":"COMMAND_DECLARE ( FieldStd , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_71","text":"COMMAND_DECLARE ( FieldNames , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_72","text":"COMMAND_DECLARE ( FixElement , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_73","text":"COMMAND_DECLARE ( ClipClosedSurface , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_74","text":"COMMAND_DECLARE ( ClosestPoint , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_75","text":"COMMAND_DECLARE ( GeodesicDistance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_76","text":"COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_77","text":"COMMAND_DECLARE ( MeanNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_78","text":"COMMAND_DECLARE ( Curvature , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_79","text":"COMMAND_DECLARE ( MeshToImage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_80","text":"COMMAND_DECLARE ( MeshToDT , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_81","text":"COMMAND_DECLARE ( CompareMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_82","text":"COMMAND_DECLARE ( WarpMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_83","text":"COMMAND_DECLARE ( ComputeThickness , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_84","text":"COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_85","text":"COMMAND_DECLARE ( Seed , ShapeworksCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_86","text":"COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_87","text":"COMMAND_DECLARE ( GroomCommand , GroomCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_88","text":"COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_89","text":"COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-display_mode_to_string","text":"std :: string display_mode_to_string ( DisplayMode display_mode )","title":"function display_mode_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-string_to_display_mode","text":"DisplayMode string_to_display_mode ( std :: string str )","title":"function string_to_display_mode"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_1","text":"std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makevector","text":"Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version)","title":"function makeVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makepointarray","text":"PointArray makePointArray ( int size , Point3 value )","title":"function makePointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createtransform","text":"TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) )","title":"function createTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane","text":"Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane.","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane_1","text":"Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 )","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getorigin","text":"Point getOrigin ( const Plane plane ) Get origin and normal of plane.","title":"function getOrigin"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getnormal","text":"Vector3 getNormal ( const Plane plane )","title":"function getNormal"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createmeshtransform","text":"MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat )","title":"function createMeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint","text":"Point toPoint ( const Dims & d ) For deliberate conversions between types.","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_1","text":"Point toPoint ( const Coord & c )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector","text":"Vector toVector ( const Dims & d )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_1","text":"Vector toVector ( const Point & p )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_2","text":"Vector toVector ( const itk :: CovariantVector < double , 3 > & v )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_2","text":"Point toPoint ( const Vector & v )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord","text":"Coord toCoord ( const Dims & d )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims","text":"Dims toDims ( const Coord & c )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims_1","text":"Dims toDims ( const Point & p )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord_1","text":"Coord toCoord ( const Point & p )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate","text":"template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate_1","text":"Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue","text":"template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector.","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue_1","text":"Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector)","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-dotproduct","text":"Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products.","title":"function dotProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-crossproduct","text":"Vector3 crossProduct ( const Vector3 & a , const Vector3 & b )","title":"function crossProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-length","text":"double length ( const Vector3 & v )","title":"function length"},{"location":"api/Namespaces/namespaceshapeworks.html#function-toaxis","text":"Axis toAxis ( const std :: string & str )","title":"function toAxis"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axistostring","text":"std :: string axisToString ( Axis axis )","title":"function axisToString"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid","text":"bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid.","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid_1","text":"bool axis_is_valid ( const Axis & axis )","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-degtorad","text":"double degToRad ( const double deg ) convert degrees to radians","title":"function degToRad"},{"location":"api/Namespaces/namespaceshapeworks.html#function-mean","text":"double mean ( const Field field ) incrementally compute (single-component) mean of field","title":"function mean"},{"location":"api/Namespaces/namespaceshapeworks.html#function-stddev","text":"double stddev ( const Field field ) compute (single-component) standard deviation of field","title":"function stddev"},{"location":"api/Namespaces/namespaceshapeworks.html#function-range","text":"std :: vector < double > range ( const Field field ) compute (single-component) range of field","title":"function range"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_2","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q )","title":"function operator+"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q )","title":"function operator-"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_3","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_4","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_5","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q )","title":"function operator+="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q )","title":"function operator-="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_6","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_7","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_8","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_9","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal","text":"template < typename T > bool epsEqual ( T a , T b , T epsilon )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_2","text":"bool epsEqual ( double a , double b , double eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-clamp","text":"template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17.","title":"function clamp"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_10","text":"std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_11","text":"Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h]","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_12","text":"Image operator / ( const Image & img , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_13","text":"Image & operator *= ( Image & img , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_14","text":"Image & operator /= ( Image & img , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_15","text":"std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro","text":"itkEventMacro ( ParticleDomainAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_1","text":"itkEventMacro ( ParticleTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_2","text":"itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_3","text":"itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_4","text":"itkEventMacro ( ParticlePositionSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_5","text":"itkEventMacro ( ParticlePositionAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_6","text":"itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-savereconstructions","text":"void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo )","title":"function SaveReconstructions"},{"location":"api/Namespaces/namespaceshapeworks.html#function-variant_to_string","text":"template < typename T > std :: string variant_to_string ( T begin , T end )","title":"function variant_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-printnumpyarrayinfo","text":"void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc)","title":"function printNumpyArrayInfo"},{"location":"api/Namespaces/namespaceshapeworks.html#function-verifyorderandpacking","text":"void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not","title":"function verifyOrderAndPacking"},{"location":"api/Namespaces/namespaceshapeworks.html#function-setownership","text":"void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns","title":"function setOwnership"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapnumpyarr","text":"Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign","title":"function wrapNumpyArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-pytoarr","text":"Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data","title":"function pyToArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-arrtopy","text":"py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer","title":"function arrToPy"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktransformtoeigen","text":"Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform )","title":"function itkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44toitktransform","text":"TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat )","title":"function eigen44ToItkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vtktransformtoeigen","text":"Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform )","title":"function vtkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44tovtktransform","text":"MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat )","title":"function eigen44ToVtkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktoeigen","text":"template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix.","title":"function itkToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigentoitk","text":"template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix.","title":"function eigenToItk"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vnltoeigen","text":"template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix.","title":"function vnlToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen","text":"template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen_1","text":"template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawithitk","text":"template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data.","title":"function wrapDataWithItk"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#variable-pi","text":"const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-24 at 22:16:01 +0000","title":"variable Pi"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html","text":"shapeworks::mesh Functions Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT) Functions Documentation function compute_thickness void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#shapeworksmesh","text":"","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions","text":"Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#function-compute_thickness","text":"void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-24 at 22:16:02 +0000","title":"function compute_thickness"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html","text":"shapeworks::particles Functions Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points) Functions Documentation function read_particles Eigen :: VectorXd read_particles ( std :: string filename ) function read_particles_as_vector std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename ) function write_particles void write_particles ( std :: string filename , const Eigen :: VectorXd & points ) function write_particles_from_vector void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#shapeworksparticles","text":"","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions","text":"Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles","text":"Eigen :: VectorXd read_particles ( std :: string filename )","title":"function read_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles_as_vector","text":"std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename )","title":"function read_particles_as_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles","text":"void write_particles ( std :: string filename , const Eigen :: VectorXd & points )","title":"function write_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles_from_vector","text":"void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-24 at 22:16:02 +0000","title":"function write_particles_from_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html","text":"shapeworks::project Namespaces Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#shapeworksproject","text":"","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#namespaces","text":"Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-24 at 22:16:02 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html","text":"shapeworks::project::prefixes Attributes Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX Attributes Documentation variable SEGMENTATION_PREFIX static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; variable LANDMARKS_FILE_PREFIX static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; variable SHAPE_PREFIX static constexpr const char * SHAPE_PREFIX = \"shape_\" ; variable MESH_PREFIX static constexpr const char * MESH_PREFIX = \"mesh_\" ; variable CONTOUR_PREFIX static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; variable GROOMED_PREFIX static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; variable GROOMED_CONTOUR_PREFIX static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; variable CONSTRAINTS_PREFIX static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; variable GROOMED_TRANSFORMS_PREFIX static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; variable PROCRUSTES_TRANSFORMS_PREFIX static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; variable IMAGE_PREFIX static constexpr const char * IMAGE_PREFIX = \"image_\" ; variable FEATURE_PREFIX static constexpr const char * FEATURE_PREFIX = \"feature_\" ; variable GROUP_PREFIX static constexpr const char * GROUP_PREFIX = \"group_\" ; variable LOCAL_PARTICLES static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; variable WORLD_PARTICLES static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; variable LOCAL_PARTICLES_PREFIX static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; variable WORLD_PARTICLES_PREFIX static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#shapeworksprojectprefixes","text":"","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes","text":"Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-segmentation_prefix","text":"static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ;","title":"variable SEGMENTATION_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-landmarks_file_prefix","text":"static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ;","title":"variable LANDMARKS_FILE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-shape_prefix","text":"static constexpr const char * SHAPE_PREFIX = \"shape_\" ;","title":"variable SHAPE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-mesh_prefix","text":"static constexpr const char * MESH_PREFIX = \"mesh_\" ;","title":"variable MESH_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-contour_prefix","text":"static constexpr const char * CONTOUR_PREFIX = \"contour_\" ;","title":"variable CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_prefix","text":"static constexpr const char * GROOMED_PREFIX = \"groomed_\" ;","title":"variable GROOMED_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_contour_prefix","text":"static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ;","title":"variable GROOMED_CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-constraints_prefix","text":"static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ;","title":"variable CONSTRAINTS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_transforms_prefix","text":"static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ;","title":"variable GROOMED_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-procrustes_transforms_prefix","text":"static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ;","title":"variable PROCRUSTES_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-image_prefix","text":"static constexpr const char * IMAGE_PREFIX = \"image_\" ;","title":"variable IMAGE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-feature_prefix","text":"static constexpr const char * FEATURE_PREFIX = \"feature_\" ;","title":"variable FEATURE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-group_prefix","text":"static constexpr const char * GROUP_PREFIX = \"group_\" ;","title":"variable GROUP_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles","text":"static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ;","title":"variable LOCAL_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles","text":"static constexpr const char * WORLD_PARTICLES = \"world_particles\" ;","title":"variable WORLD_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles_prefix","text":"static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ;","title":"variable LOCAL_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles_prefix","text":"static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-24 at 22:16:02 +0000","title":"variable WORLD_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html","text":"shapeworks::project::types Types Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap Types Documentation using StringMap using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ; using StringList using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ; using StringMapList using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ; using StringMultiMap using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-24 at 22:16:02 +0000","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#shapeworksprojecttypes","text":"","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types","text":"Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmap","text":"using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringlist","text":"using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ;","title":"using StringList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmaplist","text":"using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ;","title":"using StringMapList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmultimap","text":"using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-24 at 22:16:02 +0000","title":"using StringMultiMap"},{"location":"api/Namespaces/namespacestd.html","text":"std Updated on 2023-10-24 at 22:16:02 +0000","title":"std"},{"location":"api/Namespaces/namespacestd.html#std","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"std"},{"location":"api/Namespaces/namespaceutils.html","text":"utils Updated on 2023-10-24 at 22:16:02 +0000","title":"utils"},{"location":"api/Namespaces/namespaceutils.html#utils","text":"Updated on 2023-10-24 at 22:16:02 +0000","title":"utils"},{"location":"backlog/ShapeworksCmdTools.html","text":"ShapeWorks Tools The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below. [Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities] Image Tools Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing Read This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read. Write This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write. AntiAliasing This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims]. PadVolumeWithConstant This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels. ResampleVolumesToBeIsotropic This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image]. Binarize This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0]. Recenter This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image ReflectVolumes A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored. ClipVolume Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44 CloseHoles TODO Cropping Images This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction ExtractGivenLabelImage A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image. FastMarching A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background. FindLargestBoundingBox A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides ThresholdImages A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold TopologyPreservingSmoothing A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0]. WriteImageInfoToText A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing. Mesh Tools Mesh manipulation is used to blah blah blah... ClipClosedSurface ComputeCurvatureAndCoordFiles ComputeGeodesicDistanceToCurve ComputeGeodesicDistanceToLandmark ComputeGeodesicDistanceFromVerticesToPoints ComputeMeshGeodesics ComputeRasterizationVolumeOriginAndSize ExtractVertexFeatureFromMesh FillMeshHoles FixCuttingPlanes GenerateBinaryAndDTImagesFromMeshes GenerateFeatureGradientFiles GenerateFidsFiles GenerateFidsFilesFromMeshes GetFeatureVolume ParticleBasedSurfaceReconstruction PreviewCmd ProbeFeatureVolumesAtMeshVertices ProbeNormals ProjectPointsOntoMesh ComputeMeanNormals GenerateNormalFeaFiles Reflect Meshes RemoveFidsDTLeakage SmoothMesh ClipClosedSurface Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region ComputeCurvatureAndCoordFiles Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files ComputeGeodesicDistanceToCurve Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceToLandmark Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceFromVerticesToPoints Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName ComputeMeshGeodesics Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance ComputeRasterizationVolumeOriginAndSize Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information ExtractVertexFeatureFromMesh Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files FillMeshHoles Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced FixCuttingPlanes Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file GenerateBinaryAndDTImagesFromMeshes Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform GenerateFeatureGradientFiles Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\" GenerateFidsFiles Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GenerateFidsFilesFromMeshes Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GetFeatureVolume Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values. PreviewCmd This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5) ProbeFeatureVolumesAtMeshVertices Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced ProbeNormals Usage: ProbeNormals DTfilename pointsFilename outFileName ComputeMeanNormals Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt) GenerateNormalFeaFiles Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed Reflect Meshes A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply) RemoveFidsDTLeakage This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames SmoothMesh Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration Alignment Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape] ICPRigid3DImageRegistration A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image. ICPRigid3DMeshRegistration Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment ReflectMeshes Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis TranslateShapeToImageOrigin A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters Resize_origin_resampleShape TODO Analysis Analysis is used to blah blah blah... Optimization Optimization is used to blah blah blah... File Utilities The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT] GENERIC MESH FORMAT CONVERSION Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile fea2vtk Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. stl2ply Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply) stl2vtk Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk) vtk2ply Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply) VTKUnstructuredGridToPolyData Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles MeshFromDT TODO FeaFromVTK TODO","title":"ShapeworksCmdTools"},{"location":"backlog/ShapeworksCmdTools.html#_1","text":"","title":""},{"location":"backlog/ShapeworksCmdTools.html#shapeworks-tools","text":"","title":"ShapeWorks Tools"},{"location":"backlog/ShapeworksCmdTools.html#_2","text":"The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below.","title":""},{"location":"backlog/ShapeworksCmdTools.html#_3","text":"[Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities]","title":""},{"location":"backlog/ShapeworksCmdTools.html#image-tools","text":"Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing","title":"Image Tools"},{"location":"backlog/ShapeworksCmdTools.html#read","text":"This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read.","title":"Read"},{"location":"backlog/ShapeworksCmdTools.html#write","text":"This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write.","title":"Write"},{"location":"backlog/ShapeworksCmdTools.html#antialiasing","text":"This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims].","title":" AntiAliasing"},{"location":"backlog/ShapeworksCmdTools.html#padvolumewithconstant","text":"This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels.","title":"PadVolumeWithConstant"},{"location":"backlog/ShapeworksCmdTools.html#resamplevolumestobeisotropic","text":"This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image].","title":"ResampleVolumesToBeIsotropic"},{"location":"backlog/ShapeworksCmdTools.html#binarize","text":"This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0].","title":"Binarize"},{"location":"backlog/ShapeworksCmdTools.html#recenter","text":"This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image","title":"Recenter"},{"location":"backlog/ShapeworksCmdTools.html#reflectvolumes","text":"A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored.","title":"ReflectVolumes"},{"location":"backlog/ShapeworksCmdTools.html#clipvolume","text":"Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44","title":"ClipVolume"},{"location":"backlog/ShapeworksCmdTools.html#closeholes","text":"TODO","title":"CloseHoles"},{"location":"backlog/ShapeworksCmdTools.html#cropping-images","text":"This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction","title":"Cropping Images"},{"location":"backlog/ShapeworksCmdTools.html#extractgivenlabelimage","text":"A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image.","title":"ExtractGivenLabelImage"},{"location":"backlog/ShapeworksCmdTools.html#fastmarching","text":"A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background.","title":"FastMarching"},{"location":"backlog/ShapeworksCmdTools.html#findlargestboundingbox","text":"A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides","title":"FindLargestBoundingBox"},{"location":"backlog/ShapeworksCmdTools.html#thresholdimages","text":"A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold","title":"ThresholdImages"},{"location":"backlog/ShapeworksCmdTools.html#topologypreservingsmoothing","text":"A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0].","title":"TopologyPreservingSmoothing"},{"location":"backlog/ShapeworksCmdTools.html#writeimageinfototext","text":"A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing.","title":"WriteImageInfoToText"},{"location":"backlog/ShapeworksCmdTools.html#mesh-tools","text":"Mesh manipulation is used to blah blah blah...","title":"Mesh Tools"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface","text":"","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles","text":"","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve","text":"","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark","text":"","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints","text":"","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics","text":"","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize","text":"","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh","text":"","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes","text":"","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes","text":"","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes","text":"","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles","text":"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles","text":"","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes","text":"","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume","text":"","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#particlebasedsurfacereconstruction","text":"","title":"ParticleBasedSurfaceReconstruction"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd","text":"","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices","text":"","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals","text":"","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#projectpointsontomesh","text":"","title":"ProjectPointsOntoMesh"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals","text":"","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles","text":"","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes","text":"","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage","text":"","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh","text":"","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface_1","text":"Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles_1","text":"Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints_1","text":"Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics_1","text":"Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize_1","text":"Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh_1","text":"Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes_1","text":"Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes_1","text":"Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes_1","text":"Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles_1","text":"Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume_1","text":"Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values.","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd_1","text":"This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5)","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices_1","text":"Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals_1","text":"Usage: ProbeNormals DTfilename pointsFilename outFileName","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals_1","text":"Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt)","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles_1","text":"Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes_1","text":"A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply)","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage_1","text":"This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh_1","text":"Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#alignment","text":"Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape]","title":"Alignment"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dimageregistration","text":"A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image.","title":"ICPRigid3DImageRegistration"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dmeshregistration","text":"Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment","title":"ICPRigid3DMeshRegistration"},{"location":"backlog/ShapeworksCmdTools.html#reflectmeshes","text":"Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis","title":"ReflectMeshes"},{"location":"backlog/ShapeworksCmdTools.html#translateshapetoimageorigin","text":"A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters","title":"TranslateShapeToImageOrigin"},{"location":"backlog/ShapeworksCmdTools.html#resize_origin_resampleshape","text":"TODO","title":"Resize_origin_resampleShape"},{"location":"backlog/ShapeworksCmdTools.html#analysis","text":"Analysis is used to blah blah blah...","title":"Analysis"},{"location":"backlog/ShapeworksCmdTools.html#optimization","text":"Optimization is used to blah blah blah...","title":"Optimization"},{"location":"backlog/ShapeworksCmdTools.html#file-utilities","text":"The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT]","title":"File Utilities"},{"location":"backlog/ShapeworksCmdTools.html#generic-mesh-format-conversion","text":"Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile","title":"GENERIC MESH FORMAT CONVERSION"},{"location":"backlog/ShapeworksCmdTools.html#fea2vtk","text":"Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on.","title":"fea2vtk"},{"location":"backlog/ShapeworksCmdTools.html#stl2ply","text":"Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply)","title":"stl2ply"},{"location":"backlog/ShapeworksCmdTools.html#stl2vtk","text":"Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk)","title":"stl2vtk"},{"location":"backlog/ShapeworksCmdTools.html#vtk2ply","text":"Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply)","title":"vtk2ply"},{"location":"backlog/ShapeworksCmdTools.html#vtkunstructuredgridtopolydata","text":"Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles","title":"VTKUnstructuredGridToPolyData"},{"location":"backlog/ShapeworksCmdTools.html#meshfromdt","text":"TODO","title":"MeshFromDT"},{"location":"backlog/ShapeworksCmdTools.html#feafromvtk","text":"TODO","title":"FeaFromVTK"},{"location":"backlog/fim_v4.html","text":"FIM_V4 Library Overview TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) -- License fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Building To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables. Library Export This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#fim_v4-library","text":"","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#overview","text":"TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) --","title":"Overview"},{"location":"backlog/fim_v4.html#license","text":"fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"backlog/fim_v4.html#building","text":"To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables.","title":"Building"},{"location":"backlog/fim_v4.html#library-export","text":"This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"Library Export"},{"location":"cloud/cloud-analyze-module.html","text":"ShapeWorks Cloud Analyze Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer . View PCA The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Group Difference The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing. Charts The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view Shape Viewer While in the analyze tab, the Shape Viewer displays the mean (average) shape generated. Show Difference From Mean This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Analyze Module"},{"location":"cloud/cloud-analyze-module.html#shapeworks-cloud-analyze-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer .","title":"ShapeWorks Cloud Analyze Module"},{"location":"cloud/cloud-analyze-module.html#view-pca","text":"The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"View PCA"},{"location":"cloud/cloud-analyze-module.html#group-difference","text":"The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing.","title":"Group Difference"},{"location":"cloud/cloud-analyze-module.html#charts","text":"The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view","title":"Charts"},{"location":"cloud/cloud-analyze-module.html#shape-viewer","text":"While in the analyze tab, the Shape Viewer displays the mean (average) shape generated.","title":"Shape Viewer"},{"location":"cloud/cloud-analyze-module.html#show-difference-from-mean","text":"This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Show Difference From Mean"},{"location":"cloud/cloud-data-module.html","text":"ShapeWorks Cloud Data Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data. Anatomies Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here . Subjects Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . Landmarks Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Data Module"},{"location":"cloud/cloud-data-module.html#shapeworks-cloud-data-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data.","title":"ShapeWorks Cloud Data Module"},{"location":"cloud/cloud-data-module.html#anatomies","text":"Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here .","title":"Anatomies"},{"location":"cloud/cloud-data-module.html#subjects","text":"Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer .","title":"Subjects"},{"location":"cloud/cloud-data-module.html#landmarks","text":"Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Landmarks"},{"location":"cloud/cloud-dataset.html","text":"ShapeWorks Cloud Dataset Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations . Create Subset The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset. Thumbnail The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view. Upload Dataset Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Datasets"},{"location":"cloud/cloud-dataset.html#shapeworks-cloud-dataset","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations .","title":"ShapeWorks Cloud Dataset"},{"location":"cloud/cloud-dataset.html#create-subset","text":"The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset.","title":"Create Subset"},{"location":"cloud/cloud-dataset.html#thumbnail","text":"The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view.","title":"Thumbnail"},{"location":"cloud/cloud-dataset.html#upload-dataset","text":"Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Upload Dataset"},{"location":"cloud/cloud-groom-module.html","text":"ShapeWorks Cloud Groom Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"cloud/cloud-groom-module.html#shapeworks-cloud-groom-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Cloud Groom Module"},{"location":"cloud/cloud-optimize-module.html","text":"ShapeWorks Cloud Optimize Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"cloud/cloud-optimize-module.html#shapeworks-cloud-optimize-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Cloud Optimize Module"},{"location":"cloud/cloud-project.html","text":"ShapeWorks Cloud Project Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data. Create a Project To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client . Edit a Project To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Projects"},{"location":"cloud/cloud-project.html#shapeworks-cloud-project","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data.","title":"ShapeWorks Cloud Project"},{"location":"cloud/cloud-project.html#create-a-project","text":"To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client .","title":"Create a Project"},{"location":"cloud/cloud-project.html#edit-a-project","text":"To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Edit a Project"},{"location":"cloud/cloud-shape-viewer.html","text":"ShapeWorks Cloud Shape Viewer Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. Shape Viewer Options Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle Layers The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features Set Thumbnail Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shapeworks-cloud-shape-viewer","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean.","title":"ShapeWorks Cloud Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shape-viewer-options","text":"Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle","title":"Shape Viewer Options"},{"location":"cloud/cloud-shape-viewer.html#layers","text":"The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features","title":"Layers"},{"location":"cloud/cloud-shape-viewer.html#set-thumbnail","text":"Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Set Thumbnail"},{"location":"cloud/getting-started-with-cloud.html","text":"Getting Stared with ShapeWorks Cloud Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data. Login Screen To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ . Dataset List The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information. Project List The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information. Data Module The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information. Groom Module The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information. Optimize Module The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information. Analyze Module The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information. Shape Viewer The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Getting Started"},{"location":"cloud/getting-started-with-cloud.html#getting-stared-with-shapeworks-cloud","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data.","title":"Getting Stared with ShapeWorks Cloud"},{"location":"cloud/getting-started-with-cloud.html#login-screen","text":"To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ .","title":"Login Screen"},{"location":"cloud/getting-started-with-cloud.html#dataset-list","text":"The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information.","title":"Dataset List"},{"location":"cloud/getting-started-with-cloud.html#project-list","text":"The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information.","title":"Project List"},{"location":"cloud/getting-started-with-cloud.html#data-module","text":"The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information.","title":"Data Module"},{"location":"cloud/getting-started-with-cloud.html#groom-module","text":"The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information.","title":"Groom Module"},{"location":"cloud/getting-started-with-cloud.html#optimize-module","text":"The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information.","title":"Optimize Module"},{"location":"cloud/getting-started-with-cloud.html#analyze-module","text":"The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information.","title":"Analyze Module"},{"location":"cloud/getting-started-with-cloud.html#shape-viewer","text":"The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Shape Viewer"},{"location":"cloud/swcc.html","text":"ShapeWorks Cloud Client (SWCC) Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users. Authentication & Sessions This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out Datasets and Projects The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you. Datasets The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d ) Projects The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects The Project File The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run. Other Classes and Methods As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database Examples def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"ShapeWorks Cloud Client"},{"location":"cloud/swcc.html#shapeworks-cloud-client-swcc","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users.","title":"ShapeWorks Cloud Client (SWCC)"},{"location":"cloud/swcc.html#authentication-sessions","text":"This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out","title":"Authentication & Sessions"},{"location":"cloud/swcc.html#datasets-and-projects","text":"The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you.","title":"Datasets and Projects"},{"location":"cloud/swcc.html#datasets","text":"The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d )","title":"Datasets"},{"location":"cloud/swcc.html#projects","text":"The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects","title":"Projects"},{"location":"cloud/swcc.html#the-project-file","text":"The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run.","title":"The Project File"},{"location":"cloud/swcc.html#other-classes-and-methods","text":"As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database","title":"Other Classes and Methods"},{"location":"cloud/swcc.html#examples","text":"def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"Examples"},{"location":"deep-learning/data-augmentation.html","text":"Data Augmentation for Deep Learning ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations. Using the Data Augmentation Package The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils Running Data Augmentation To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . Visualizing Data Augmentation This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. Data Augmentation Steps 0. Collect Real Data As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM). 1. Embed Real Data First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA). 2. Fit a Parametric Distribution Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace. 3. Sample from the Distribution Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved. 4. Project Samples The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples. 5. Complete Sample Generation The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample. Sampling Distributions The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate). Multivariate Gaussian Distribution To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space. Mixture of Multivariate Gaussians Distribution A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space. Kernel Density Estimate Distribution Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#data-augmentation-for-deep-learning","text":"ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#using-the-data-augmentation-package","text":"The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils","title":"Using the Data Augmentation Package"},{"location":"deep-learning/data-augmentation.html#running-data-augmentation","text":"To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list .","title":"Running Data Augmentation"},{"location":"deep-learning/data-augmentation.html#visualizing-data-augmentation","text":"This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed.","title":"Visualizing Data Augmentation"},{"location":"deep-learning/data-augmentation.html#data-augmentation-steps","text":"","title":"Data Augmentation Steps"},{"location":"deep-learning/data-augmentation.html#0-collect-real-data","text":"As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM).","title":"0. Collect Real Data"},{"location":"deep-learning/data-augmentation.html#1-embed-real-data","text":"First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA).","title":"1. Embed Real Data"},{"location":"deep-learning/data-augmentation.html#2-fit-a-parametric-distribution","text":"Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace.","title":"2. Fit a Parametric Distribution"},{"location":"deep-learning/data-augmentation.html#3-sample-from-the-distribution","text":"Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved.","title":"3. Sample from the Distribution"},{"location":"deep-learning/data-augmentation.html#4-project-samples","text":"The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples.","title":"4. Project Samples"},{"location":"deep-learning/data-augmentation.html#5-complete-sample-generation","text":"The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample.","title":"5. Complete Sample Generation"},{"location":"deep-learning/data-augmentation.html#sampling-distributions","text":"The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate).","title":"Sampling Distributions"},{"location":"deep-learning/data-augmentation.html#multivariate-gaussian-distribution","text":"To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space.","title":"Multivariate Gaussian Distribution"},{"location":"deep-learning/data-augmentation.html#mixture-of-multivariate-gaussians-distribution","text":"A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space.","title":"Mixture of Multivariate Gaussians Distribution"},{"location":"deep-learning/data-augmentation.html#kernel-density-estimate-distribution","text":"Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Kernel Density Estimate Distribution"},{"location":"deep-learning/deep-ssm.html","text":"SSMs Directly from Images DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018. What is DeepSSM? The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning. Why DeepSSM? The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently. DeepSSM Steps 1. Data Augmentation The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction. 2. Creation of Data Loaders The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user. 3. Training PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder. 4. Testing The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image. 5. Evaluation To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate. Using the DeepSSM Python Package The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils Get train and validation torch loaders This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None . Get test torch loader This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None . Train DeepSSM This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters. Config File Parameter Descriptions model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing. Test DeepSSM This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict. Analyze Results This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset. Visualizing Error The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#ssms-directly-from-images","text":"DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#what-is-deepssm","text":"The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning.","title":"What is DeepSSM?"},{"location":"deep-learning/deep-ssm.html#why-deepssm","text":"The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently.","title":"Why DeepSSM?"},{"location":"deep-learning/deep-ssm.html#deepssm-steps","text":"","title":"DeepSSM Steps"},{"location":"deep-learning/deep-ssm.html#1-data-augmentation","text":"The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction.","title":"1. Data Augmentation"},{"location":"deep-learning/deep-ssm.html#2-creation-of-data-loaders","text":"The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user.","title":"2. Creation of Data Loaders"},{"location":"deep-learning/deep-ssm.html#3-training","text":"PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder.","title":"3. Training"},{"location":"deep-learning/deep-ssm.html#4-testing","text":"The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image.","title":"4. Testing"},{"location":"deep-learning/deep-ssm.html#5-evaluation","text":"To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate.","title":"5. Evaluation"},{"location":"deep-learning/deep-ssm.html#using-the-deepssm-python-package","text":"The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils","title":"Using the DeepSSM Python Package"},{"location":"deep-learning/deep-ssm.html#get-train-and-validation-torch-loaders","text":"This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None .","title":"Get train and validation torch loaders"},{"location":"deep-learning/deep-ssm.html#get-test-torch-loader","text":"This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None .","title":"Get test torch loader"},{"location":"deep-learning/deep-ssm.html#train-deepssm","text":"This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters.","title":"Train DeepSSM"},{"location":"deep-learning/deep-ssm.html#config-file-parameter-descriptions","text":"model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing.","title":"Config File Parameter Descriptions"},{"location":"deep-learning/deep-ssm.html#test-deepssm","text":"This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict.","title":"Test DeepSSM"},{"location":"deep-learning/deep-ssm.html#analyze-results","text":"This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset.","title":"Analyze Results"},{"location":"deep-learning/deep-ssm.html#visualizing-error","text":"The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"Visualizing Error"},{"location":"deep-learning/pytorch-gpu.html","text":"PyTorch GPU Support for ShapeWorks ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch. Checking if PyTorch installation has GPU support To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment. Reinstalling the Correct PyTorch Version If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#pytorch-gpu-support-for-shapeworks","text":"ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#checking-if-pytorch-installation-has-gpu-support","text":"To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment.","title":"Checking if PyTorch installation has GPU support"},{"location":"deep-learning/pytorch-gpu.html#reinstalling-the-correct-pytorch-version","text":"If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"Reinstalling the Correct PyTorch Version"},{"location":"dev/build.html","text":"How to Build ShapeWorks from Source? If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything. Minimum Requirements Linux CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0 Mac CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0 Windows CMake 3.11 (provided by conda below if not already installed) MSVC 2019 Clone source To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands. Install dependencies Linux and Mac Anaconda We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. VXL, VTK, ITK, Eigen and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Windows CMake Download and install [CMake] Download and install [Visual Studio 2019] Anaconda Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Configure and Build Linux & Mac Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake . Options If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables. Building Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there. Before running Examples/Python scripts and Examples/Python/notebooks Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory] Examples OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj Windows Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it. Examples An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON .. Options Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#how-to-build-shapeworks-from-source","text":"If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#minimum-requirements","text":"","title":"Minimum Requirements"},{"location":"dev/build.html#linux","text":"CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0","title":"Linux"},{"location":"dev/build.html#mac","text":"CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0","title":"Mac"},{"location":"dev/build.html#windows","text":"CMake 3.11 (provided by conda below if not already installed) MSVC 2019","title":"Windows"},{"location":"dev/build.html#clone-source","text":"To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands.","title":"Clone source"},{"location":"dev/build.html#install-dependencies","text":"","title":"Install dependencies"},{"location":"dev/build.html#linux-and-mac","text":"","title":"Linux and Mac"},{"location":"dev/build.html#anaconda","text":"We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"Anaconda"},{"location":"dev/build.html#vxl-vtk-itk-eigen-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VXL, VTK, ITK, Eigen and OpenVDB"},{"location":"dev/build.html#windows_1","text":"","title":"Windows"},{"location":"dev/build.html#cmake","text":"Download and install [CMake] Download and install [Visual Studio 2019]","title":"CMake"},{"location":"dev/build.html#anaconda_1","text":"Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments.","title":"Anaconda"},{"location":"dev/build.html#vtk-itk-eigen-xlnt-jkqtplotter-libigl-geometry-central-acvd-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB"},{"location":"dev/build.html#configure-and-build","text":"","title":"Configure and Build"},{"location":"dev/build.html#linux-mac","text":"Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake .","title":"Linux & Mac"},{"location":"dev/build.html#options","text":"If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables.","title":"Options"},{"location":"dev/build.html#building","text":"Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there.","title":"Building"},{"location":"dev/build.html#before-running-examplespython-scripts-and-examplespythonnotebooks","text":"Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory]","title":"Before running Examples/Python scripts and Examples/Python/notebooks"},{"location":"dev/build.html#examples","text":"OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj","title":"Examples"},{"location":"dev/build.html#windows_2","text":"Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it.","title":"Windows"},{"location":"dev/build.html#examples_1","text":"An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON ..","title":"Examples"},{"location":"dev/build.html#options_1","text":"Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"Options"},{"location":"dev/commands.html","text":"How to Add ShapeWorks Commands? To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/commands.html#how-to-add-shapeworks-commands","text":"To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/contribute.html","text":"How to Contribute to ShapeWorks? ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account . Source and Branches To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run] Commits Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch. Logs and diffs View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only Tags Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github. Advanced There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#how-to-contribute-to-shapeworks","text":"ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account .","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#source-and-branches","text":"To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run]","title":"Source and Branches"},{"location":"dev/contribute.html#commits","text":"Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch.","title":"Commits"},{"location":"dev/contribute.html#logs-and-diffs","text":"View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only ","title":"Logs and diffs"},{"location":"dev/contribute.html#tags","text":"Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github.","title":"Tags"},{"location":"dev/contribute.html#advanced","text":"There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"Advanced"},{"location":"dev/datasets.html","text":"How to Add New Datasets? ShapeWorks Data Portal Dataset Requirements Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory. images/ contents: 3D images of the data file types: itk supported image formats segmentations/ contents: 3D segmentations of the data file types: itk supported image formats meshes/ contents: meshes file types: ply, vtk, stl landmarks/ contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label distance_transforms/ contents: 3D distance transform volumes file types: itk supported image formats shape_models/ contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles Uploading a Dataset Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Datasets API DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure DatasetUtils.uploadNewDataset(datasetName, datasetPath) Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure DatasetUtils.getDatasetList() Returns: a list of all existing datasets on the data portal DatasetUtils.getFileList(datasetName) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#how-to-add-new-datasets","text":"ShapeWorks Data Portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#dataset-requirements","text":"Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory.","title":"Dataset Requirements"},{"location":"dev/datasets.html#images","text":"contents: 3D images of the data file types: itk supported image formats","title":"images/"},{"location":"dev/datasets.html#segmentations","text":"contents: 3D segmentations of the data file types: itk supported image formats","title":"segmentations/"},{"location":"dev/datasets.html#meshes","text":"contents: meshes file types: ply, vtk, stl","title":"meshes/"},{"location":"dev/datasets.html#landmarks","text":"contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label","title":"landmarks/"},{"location":"dev/datasets.html#distance_transforms","text":"contents: 3D distance transform volumes file types: itk supported image formats","title":"distance_transforms/"},{"location":"dev/datasets.html#shape_models","text":"contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles","title":"shape_models/"},{"location":"dev/datasets.html#uploading-a-dataset","text":"Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/","title":"Uploading a Dataset"},{"location":"dev/datasets.html#datasets-api","text":"","title":"Datasets API"},{"location":"dev/datasets.html#datasetutilsdownloaddatasetdatasetname-destinationpath-aszip-true-filelist-none","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure","title":"DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None)"},{"location":"dev/datasets.html#datasetutilsuploadnewdatasetdatasetname-datasetpath","text":"Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure","title":"DatasetUtils.uploadNewDataset(datasetName, datasetPath)"},{"location":"dev/datasets.html#datasetutilsgetdatasetlist","text":"Returns: a list of all existing datasets on the data portal","title":"DatasetUtils.getDatasetList()"},{"location":"dev/datasets.html#datasetutilsgetfilelistdatasetname","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"DatasetUtils.getFileList(datasetName)"},{"location":"dev/docs.html","text":"Getting Started with Documentation Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files Naming and Organization Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder. Adding Call-outs We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title. Locally Building Documentation To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt. Deploying on GitHub Pages As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed. Contributing to Documentation Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List . Inserting Videos in Documentation Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ . Auto-generating ShapeWorks Commands Documentation The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated Auto-generating C++ Doxygen API Documentation To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml See Also MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"Getting Started with Documentation"},{"location":"dev/docs.html#getting-started-with-documentation","text":"Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files","title":"Getting Started with Documentation"},{"location":"dev/docs.html#naming-and-organization","text":"Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder.","title":"Naming and Organization"},{"location":"dev/docs.html#adding-call-outs","text":"We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title.","title":"Adding Call-outs"},{"location":"dev/docs.html#locally-building-documentation","text":"To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt.","title":"Locally Building Documentation"},{"location":"dev/docs.html#deploying-on-github-pages","text":"As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed.","title":"Deploying on GitHub Pages"},{"location":"dev/docs.html#contributing-to-documentation","text":"Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List .","title":"Contributing to Documentation"},{"location":"dev/docs.html#inserting-videos-in-documentation","text":"Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ .","title":"Inserting Videos in Documentation"},{"location":"dev/docs.html#auto-generating-shapeworks-commands-documentation","text":"The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated","title":"Auto-generating ShapeWorks Commands Documentation"},{"location":"dev/docs.html#auto-generating-c-doxygen-api-documentation","text":"To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml","title":"Auto-generating C++ Doxygen API Documentation"},{"location":"dev/docs.html#see-also","text":"MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"See Also"},{"location":"dev/gh-actions.html","text":"Getting Started with GitHub Actions ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/gh-actions.html#getting-started-with-github-actions","text":"ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/markdown.html","text":"Getting Started with Markdown ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline. Grip To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing! Markdown Basics ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com See Also GitHub Markdown Markdown Guide Markdown Editors","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#getting-started-with-markdown","text":"ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline.","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#grip","text":"To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing!","title":"Grip"},{"location":"dev/markdown.html#markdown-basics","text":"ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com","title":"Markdown Basics"},{"location":"dev/markdown.html#see-also","text":"GitHub Markdown Markdown Guide Markdown Editors","title":"See Also"},{"location":"dev/modify-datasets.html","text":"When Modifying Existing Datasets When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/modify-datasets.html#when-modifying-existing-datasets","text":"When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/new-notebook.html","text":"How to Add a New Notebook? Adding a new use case entails the following. Creating a notebook Notebook documentation Creating a notebook To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output . Notebook documentation Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook. Adding a video to a notebook Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"How to Add New Notebooks?"},{"location":"dev/new-notebook.html#how-to-add-a-new-notebook","text":"Adding a new use case entails the following. Creating a notebook Notebook documentation","title":"How to Add a New Notebook?"},{"location":"dev/new-notebook.html#creating-a-notebook","text":"To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output .","title":"Creating a notebook"},{"location":"dev/new-notebook.html#notebook-documentation","text":"Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook.","title":"Notebook documentation"},{"location":"dev/new-notebook.html#adding-a-video-to-a-notebook","text":"Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"Adding a video to a notebook"},{"location":"dev/new-use-case.html","text":"How to Add New Use Cases? Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation Python-scripted workflow To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster. Use case dataset To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset . Use case documentation To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#how-to-add-new-use-cases","text":"Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#python-scripted-workflow","text":"To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster.","title":"Python-scripted workflow"},{"location":"dev/new-use-case.html#use-case-dataset","text":"To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset .","title":"Use case dataset"},{"location":"dev/new-use-case.html#use-case-documentation","text":"To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"Use case documentation"},{"location":"dev/onboarding.html","text":"ShapeWorks Developer Onboarding Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks. Git A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To . GitHub The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples. Coding Style Guide We adopt the Google Style Guide for C++ coding style. C++ Core Guidelines A highly recommended resource for C++ are the C++ Core Guidelines . Building ShapeWorks Please see: How to Build ShapeWorks from Source? Continuous Integration / Continuous Delivery Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Onboarding"},{"location":"dev/onboarding.html#shapeworks-developer-onboarding","text":"Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks.","title":"ShapeWorks Developer Onboarding"},{"location":"dev/onboarding.html#git","text":"A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To .","title":"Git"},{"location":"dev/onboarding.html#github","text":"The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples.","title":"GitHub"},{"location":"dev/onboarding.html#coding-style-guide","text":"We adopt the Google Style Guide for C++ coding style.","title":"Coding Style Guide"},{"location":"dev/onboarding.html#c-core-guidelines","text":"A highly recommended resource for C++ are the C++ Core Guidelines .","title":"C++ Core Guidelines"},{"location":"dev/onboarding.html#building-shapeworks","text":"Please see: How to Build ShapeWorks from Source?","title":"Building ShapeWorks"},{"location":"dev/onboarding.html#continuous-integration-continuous-delivery","text":"Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Continuous Integration / Continuous Delivery"},{"location":"dev/paths.html","text":"Adding Environment Variables for Development This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms. Using devenv script to configure developer environment The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug Manually adding paths While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths. OSX/Linux $ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH Windows $ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Adding to PATH Environment Variable"},{"location":"dev/paths.html#adding-environment-variables-for-development","text":"This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms.","title":"Adding Environment Variables for Development"},{"location":"dev/paths.html#using-devenv-script-to-configure-developer-environment","text":"The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug","title":"Using devenv script to configure developer environment"},{"location":"dev/paths.html#manually-adding-paths","text":"While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths.","title":"Manually adding paths"},{"location":"dev/paths.html#osxlinux","text":"$ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH","title":"OSX/Linux"},{"location":"dev/paths.html#windows","text":"$ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Windows"},{"location":"dev/python-apis.html","text":"How to Add Python APIs? Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/python-apis.html#how-to-add-python-apis","text":"Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/shapeworks-library.html","text":"Using ShapeWorks as a library ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=
    /lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH=
    Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"ShapeWorks as a Library"},{"location":"dev/shapeworks-library.html#using-shapeworks-as-a-library","text":"ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=/lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH= Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"Using ShapeWorks as a library"},{"location":"dev/tests.html","text":"How to Add and Run Unit Tests? Running ShapeWorks Automated Tests To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example Adding New ShapeWorks Automated Tests Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#how-to-add-and-run-unit-tests","text":"","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#running-shapeworks-automated-tests","text":"To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example","title":"Running ShapeWorks Automated Tests"},{"location":"dev/tests.html#adding-new-shapeworks-automated-tests","text":"Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"Adding New ShapeWorks Automated Tests"},{"location":"getting-started/examples.html","text":"Examples Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features. Segmentation Based Use Cases This use case set demonstrates the Shape Modeling Workflow on segmentation images. Ellipsoid: Basic Example This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process. Left Atrium: Shape Model from Segmentations This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models. Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Shape Model for Multiple Domains from Segmentations This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets. Mesh-Based Use Cases This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming. Ellipsoid Mesh: Basic Example This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms. Lumps: Shape Model directly from Mesh This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Thin Cavity Bean: Shape Model with Geodesic Distances This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation. Shape Model for Multiple Domains directly from Mesh This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms. Contour Based Use Cases Supershapes:Shape Model for Contour Domains This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop. Constraints Based Use Cases Ellipsoid: Shape Model with Cutting Planes This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data. Femur: Shape Model from Meshes with Cutting Planes This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples. Multi-Step Optimization Use Cases Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Incremental Supershapes: Building a Shape Model Incrementally This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions. Statistics Based Use Cases Femur: Group Difference Statistics in Python This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case. Ellipsoid: Shape Statistics in Python This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case. Ellipsoid: Shape Evaluation in Python This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation. Deep Learning Based Use Cases Femur Shape Model Directly from Images This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . Shared Boundary Use Cases Peanut: Shape Model of Multiple Domains with Shared Boundaries This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions. Your Use Case You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Examples"},{"location":"getting-started/examples.html#examples","text":"Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features.","title":"Examples"},{"location":"getting-started/examples.html#segmentation-based-use-cases","text":"This use case set demonstrates the Shape Modeling Workflow on segmentation images.","title":"Segmentation Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-basic-example","text":"This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process.","title":"Ellipsoid: Basic Example"},{"location":"getting-started/examples.html#left-atrium-shape-model-from-segmentations","text":"This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-from-segmentations","text":"This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"getting-started/examples.html#mesh-based-use-cases","text":"This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming.","title":"Mesh-Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-mesh-basic-example","text":"This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms.","title":"Ellipsoid Mesh: Basic Example"},{"location":"getting-started/examples.html#lumps-shape-model-directly-from-mesh","text":"This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"Lumps: Shape Model directly from Mesh"},{"location":"getting-started/examples.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-directly-from-mesh","text":"This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"getting-started/examples.html#contour-based-use-cases","text":"","title":"Contour Based Use Cases"},{"location":"getting-started/examples.html#supershapesshape-model-for-contour-domains","text":"This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop.","title":"Supershapes:Shape Model for Contour Domains"},{"location":"getting-started/examples.html#constraints-based-use-cases","text":"","title":"Constraints Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-shape-model-with-cutting-planes","text":"This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"getting-started/examples.html#femur-shape-model-from-meshes-with-cutting-planes","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples.","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"getting-started/examples.html#multi-step-optimization-use-cases","text":"","title":"Multi-Step Optimization Use Cases"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes_1","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#incremental-supershapes-building-a-shape-model-incrementally","text":"This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"getting-started/examples.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"getting-started/examples.html#statistics-based-use-cases","text":"","title":"Statistics Based Use Cases"},{"location":"getting-started/examples.html#femur-group-difference-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case.","title":"Femur: Group Difference Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-evaluation-in-python","text":"This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation.","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"getting-started/examples.html#deep-learning-based-use-cases","text":"","title":"Deep Learning Based Use Cases"},{"location":"getting-started/examples.html#femur-shape-model-directly-from-images","text":"This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images .","title":"Femur Shape Model Directly from Images"},{"location":"getting-started/examples.html#shared-boundary-use-cases","text":"","title":"Shared Boundary Use Cases"},{"location":"getting-started/examples.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions.","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"getting-started/examples.html#your-use-case","text":"You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Your Use Case"},{"location":"getting-started/how-tos.html","text":"How-Tos Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/how-tos.html#how-tos","text":"Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/interfaces.html","text":"ShapeWorks Interfaces ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds . ShapeWorks Command ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. ShapeWorks in Python We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility. ShapeWorks Studio ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here ShapeWorks in the Cloud Work in progress ... Stay tuned!","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-interfaces","text":"ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds .","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-command","text":"ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"ShapeWorks Command"},{"location":"getting-started/interfaces.html#shapeworks-in-python","text":"We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility.","title":"ShapeWorks in Python"},{"location":"getting-started/interfaces.html#shapeworks-studio","text":"ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here","title":"ShapeWorks Studio"},{"location":"getting-started/interfaces.html#shapeworks-in-the-cloud","text":"Work in progress ... Stay tuned!","title":"ShapeWorks in the Cloud"},{"location":"getting-started/shapes.html","text":"Shapes, What & From Where? What is Shape? The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class. Where Shapes Come From? In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer What surfaces are \u201dgood\u201d for shape modeling? The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow . What is Shape Modeling? Shape Parameters Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population. Discovering Shape Parameters via Optimization ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#shapes-what-from-where","text":"","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#what-is-shape","text":"The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class.","title":"What is Shape?"},{"location":"getting-started/shapes.html#where-shapes-come-from","text":"In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer","title":"Where Shapes Come From?"},{"location":"getting-started/shapes.html#what-surfaces-are-good-for-shape-modeling","text":"The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow .","title":"What surfaces are \u201dgood\u201d for shape modeling?"},{"location":"getting-started/shapes.html#what-is-shape-modeling","text":"","title":"What is Shape Modeling?"},{"location":"getting-started/shapes.html#shape-parameters","text":"Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population.","title":"Shape Parameters"},{"location":"getting-started/shapes.html#discovering-shape-parameters-via-optimization","text":"ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Discovering Shape Parameters via Optimization"},{"location":"getting-started/sw-stories.html","text":"ShapeWorks Success Stories (selected) Hip Joint FAI Pathology Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015. Pose and Shape of the Dysplastic Hip Joint Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021. Scapular Morphology in Hill-Sachs Patients Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017. Shape Changes in Atrial Fibrillation Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018. Benchmarking ShapeWorks in Clinical Applications A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878. Next Story Can be Yours!","title":"ShapeWorks Success Stories"},{"location":"getting-started/sw-stories.html#shapeworks-success-stories-selected","text":"","title":"ShapeWorks Success Stories (selected)"},{"location":"getting-started/sw-stories.html#hip-joint-fai-pathology","text":"Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015.","title":"Hip Joint FAI Pathology"},{"location":"getting-started/sw-stories.html#pose-and-shape-of-the-dysplastic-hip-joint","text":"Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021.","title":"Pose and Shape of the Dysplastic Hip Joint"},{"location":"getting-started/sw-stories.html#scapular-morphology-in-hill-sachs-patients","text":"Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017.","title":"Scapular Morphology in Hill-Sachs Patients"},{"location":"getting-started/sw-stories.html#shape-changes-in-atrial-fibrillation","text":"Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018.","title":"Shape Changes in Atrial Fibrillation"},{"location":"getting-started/sw-stories.html#benchmarking-shapeworks-in-clinical-applications","text":"A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878.","title":"Benchmarking ShapeWorks in Clinical Applications"},{"location":"getting-started/sw-stories.html#next-story-can-be-yours","text":"","title":"Next Story Can be Yours!"},{"location":"getting-started/workflow.html","text":"Shape Modeling Workflow ShapeWorks supports the typical three-stage workflow for shape modeling. Groom Stage The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping. Optimize Stage The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split. Analyze Stage The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#shape-modeling-workflow","text":"ShapeWorks supports the typical three-stage workflow for shape modeling.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#groom-stage","text":"The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping.","title":"Groom Stage"},{"location":"getting-started/workflow.html#optimize-stage","text":"The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split.","title":"Optimize Stage"},{"location":"getting-started/workflow.html#analyze-stage","text":"The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Analyze Stage"},{"location":"new/ellipsoid-joint-generation.html","text":"Ellipsoid Joint Generation About ShapeCohortGenerator ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families. What is new? We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts. Getting Started with Shape Cohort Generator Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#ellipsoid-joint-generation","text":"","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"new/ellipsoid-joint-generation.html#what-is-new","text":"We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts.","title":"What is new?"},{"location":"new/ellipsoid-joint-generation.html#getting-started-with-shape-cohort-generator","text":"Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Getting Started with Shape Cohort Generator"},{"location":"new/free-form-constraints.html","text":"Free-Form Constraints The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/free-form-constraints.html#free-form-constraints","text":"The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/new-studio.html","text":"New in ShapeWorks Studio 6.2 DeepSSM in Studio New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information. Multiple Domain Alignments New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information. Shape Evaluation Charts New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information. Usability Features Group p-value Display New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences. Scalar range controls New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values. Surface opacity controls Shape surface opacity can now be controlled on a per domain basis. Added narrow band optimization parameter The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification. New message history window A new button in the lower corner has been added that brings up the message history from the status bar. New suppressible error dialog The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages Multiple domain export options (combined + separate) When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain. Allow initial landmark points Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization. Mesh warping improvements Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved. New in ShapeWorks Studio 6.1 Multiple Domains As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information. Mesh Grooming As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information. Mesh Support As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction Improved Studio Interface As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast Surface Reconstruction ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction Dynamic Loading ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading Live Particles Movement ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters). Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"New in ShapeWorks Studio"},{"location":"new/new-studio.html#new-in-shapeworks-studio-62","text":"","title":"New in ShapeWorks Studio 6.2"},{"location":"new/new-studio.html#deepssm-in-studio","text":"New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information.","title":"DeepSSM in Studio"},{"location":"new/new-studio.html#multiple-domain-alignments","text":"New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information.","title":"Multiple Domain Alignments"},{"location":"new/new-studio.html#shape-evaluation-charts","text":"New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information.","title":"Shape Evaluation Charts"},{"location":"new/new-studio.html#usability-features","text":"","title":"Usability Features"},{"location":"new/new-studio.html#group-p-value-display","text":"New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences.","title":"Group p-value Display"},{"location":"new/new-studio.html#scalar-range-controls","text":"New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values.","title":"Scalar range controls"},{"location":"new/new-studio.html#surface-opacity-controls","text":"Shape surface opacity can now be controlled on a per domain basis.","title":"Surface opacity controls"},{"location":"new/new-studio.html#added-narrow-band-optimization-parameter","text":"The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification.","title":"Added narrow band optimization parameter"},{"location":"new/new-studio.html#new-message-history-window","text":"A new button in the lower corner has been added that brings up the message history from the status bar.","title":"New message history window"},{"location":"new/new-studio.html#new-suppressible-error-dialog","text":"The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages","title":"New suppressible error dialog"},{"location":"new/new-studio.html#multiple-domain-export-options-combined-separate","text":"When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain.","title":"Multiple domain export options (combined + separate)"},{"location":"new/new-studio.html#allow-initial-landmark-points","text":"Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization.","title":"Allow initial landmark points"},{"location":"new/new-studio.html#mesh-warping-improvements","text":"Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved.","title":"Mesh warping improvements"},{"location":"new/new-studio.html#new-in-shapeworks-studio-61","text":"","title":"New in ShapeWorks Studio 6.1"},{"location":"new/new-studio.html#multiple-domains","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information.","title":"Multiple Domains"},{"location":"new/new-studio.html#mesh-grooming","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information.","title":"Mesh Grooming"},{"location":"new/new-studio.html#mesh-support","text":"As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction","title":"Mesh Support"},{"location":"new/new-studio.html#improved-studio-interface","text":"As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast","title":"Improved Studio Interface"},{"location":"new/new-studio.html#surface-reconstruction","text":"ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction","title":"Surface Reconstruction"},{"location":"new/new-studio.html#dynamic-loading","text":"ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading","title":"Dynamic Loading"},{"location":"new/new-studio.html#live-particles-movement","text":"ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters).","title":"Live Particles Movement"},{"location":"new/new-studio.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"new/openvdb.html","text":"ShapeWorks Takes ~85% Less Memory ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/openvdb.html#shapeworks-takes-85-less-memory","text":"ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/shapeworks-command.html","text":"ShapeWorks Command ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use Example: ResampleVolumesToBeIsotropic Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool Resampling images Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > ); Resampling segmentations Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#shapeworks-command","text":"ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#example-resamplevolumestobeisotropic","text":"Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool","title":"Example: ResampleVolumesToBeIsotropic"},{"location":"new/shapeworks-command.html#resampling-images","text":"Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > );","title":"Resampling images"},{"location":"new/shapeworks-command.html#resampling-segmentations","text":"Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"Resampling segmentations"},{"location":"new/shapeworks-python.html","text":"ShapeWorks in Python ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! . Why ShapeWorks in Python? One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model. Diving into ShapeWorks' \"Clear\" Box A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server. Getting Started with Juypter Notebooks Getting Started with Segmentations Getting Started with Meshes Getting Started with Segmentations Getting Started with Exploring Segmentations Getting Started with Shape Cohort Generation Getting Started with Data Augmentation","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#shapeworks-in-python","text":"ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! .","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#why-shapeworks-in-python","text":"One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model.","title":"Why ShapeWorks in Python?"},{"location":"new/shapeworks-python.html#diving-into-shapeworks-clear-box","text":"A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server.","title":"Diving into ShapeWorks' \"Clear\" Box"},{"location":"new/shapeworks-python.html#getting-started-with-juypter-notebooks","text":"","title":"Getting Started with Juypter Notebooks"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations_1","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-shape-cohort-generation","text":"","title":"Getting Started with Shape Cohort Generation"},{"location":"new/shapeworks-python.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"new/ssm-eval.html","text":"Shape Model Evaluation ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact). ShapeWorks Commands shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1 ShapeWorks Python tools # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference Model Evaluation in Studio Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shape-model-evaluation","text":"ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact).","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shapeworks-commands","text":"shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1","title":"ShapeWorks Commands"},{"location":"new/ssm-eval.html#shapeworks-python-tools","text":"# Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference","title":"ShapeWorks Python tools"},{"location":"new/ssm-eval.html#model-evaluation-in-studio","text":"Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Model Evaluation in Studio"},{"location":"new/sw-meshes.html","text":"ShapeWorks Directly on Meshes Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"new/sw-meshes.html#shapeworks-directly-on-meshes","text":"Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"notebooks/array-passing-without-copying.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); In [ ]: Copied! import shapeworks as sw import shapeworks as sw In [ ]: Copied! import numpy as np import numpy as np shapeworks Image from numpy array \u00b6 In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean() While the numpy can still look at the memory, it no longer has ownership: \u00b6 In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean() ...so the safest thing to do now is let the array go out of scope: \u00b6 having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr Only dtype.float32 arrays can be used to initialize an image: \u00b6 In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg No unnecessary copies and no memory leaks! \u00b6 The numpy array still owns its data since a copy was passed to create the Image. \u00b6 Ownership of the copy's memory was taken by the image before it went out of scope. \u00b6 In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() Now for the other way around. \u00b6 numpy array from shapeworks Image \u00b6 In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims() The numpy array references the memory of the current Image and can change it: \u00b6 In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean() ...but it still doesn't have ownership. \u00b6 Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above. \u00b6 In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr If a copy is needed, pass copy=True to toArray() \u00b6 In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA'] This can be useful when the array is created from a temporary Image: \u00b6 In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True)) viewing the image using pyvista \u00b6 One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument: \u00b6 In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show() Finally, we can assign a numpy array to an existing Image \u00b6 This retains the Image's origin, scale, and coordsys. \u00b6 In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved) Let's use a scipy operation on the image: \u00b6 In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0) The return from this filter is the right size and type, but it's a copy: \u00b6 In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA'] Let's assign it back to Image so we can retain Image's origin, scale, and coordsys: \u00b6 In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA'] Now we can look at it again in the plotter: \u00b6 In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Array passing without copying"},{"location":"notebooks/array-passing-without-copying.html#shapeworks-image-from-numpy-array","text":"In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean()","title":"shapeworks Image from numpy array"},{"location":"notebooks/array-passing-without-copying.html#while-the-numpy-can-still-look-at-the-memory-it-no-longer-has-ownership","text":"In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean()","title":"While the numpy can still look at the memory, it no longer has ownership:"},{"location":"notebooks/array-passing-without-copying.html#so-the-safest-thing-to-do-now-is-let-the-array-go-out-of-scope","text":"having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr","title":"...so the safest thing to do now is let the array go out of scope:"},{"location":"notebooks/array-passing-without-copying.html#only-dtypefloat32-arrays-can-be-used-to-initialize-an-image","text":"In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg","title":"Only dtype.float32 arrays can be used to initialize an image:"},{"location":"notebooks/array-passing-without-copying.html#no-unnecessary-copies-and-no-memory-leaks","text":"","title":"No unnecessary copies and no memory leaks!"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-still-owns-its-data-since-a-copy-was-passed-to-create-the-image","text":"","title":"The numpy array still owns its data since a copy was passed to create the Image."},{"location":"notebooks/array-passing-without-copying.html#ownership-of-the-copys-memory-was-taken-by-the-image-before-it-went-out-of-scope","text":"In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean()","title":"Ownership of the copy's memory was taken by the image before it went out of scope."},{"location":"notebooks/array-passing-without-copying.html#now-for-the-other-way-around","text":"","title":"Now for the other way around."},{"location":"notebooks/array-passing-without-copying.html#numpy-array-from-shapeworks-image","text":"In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims()","title":"numpy array from shapeworks Image"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-references-the-memory-of-the-current-image-and-can-change-it","text":"In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean()","title":"The numpy array references the memory of the current Image and can change it:"},{"location":"notebooks/array-passing-without-copying.html#but-it-still-doesnt-have-ownership","text":"","title":"...but it still doesn't have ownership."},{"location":"notebooks/array-passing-without-copying.html#since-many-image-operations-reallocate-internally-its-still-safest-to-let-it-go-out-of-scope-as-shown-above","text":"In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr","title":"Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above."},{"location":"notebooks/array-passing-without-copying.html#if-a-copy-is-needed-pass-copytrue-to-toarray","text":"In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA']","title":"If a copy is needed, pass copy=True to toArray()"},{"location":"notebooks/array-passing-without-copying.html#this-can-be-useful-when-the-array-is-created-from-a-temporary-image","text":"In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True))","title":"This can be useful when the array is created from a temporary Image:"},{"location":"notebooks/array-passing-without-copying.html#viewing-the-image-using-pyvista","text":"","title":"viewing the image using pyvista"},{"location":"notebooks/array-passing-without-copying.html#one-common-reason-to-get-the-images-array-is-for-viewing-using-pyvista-using-the-for_viewing-argument","text":"In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument:"},{"location":"notebooks/array-passing-without-copying.html#finally-we-can-assign-a-numpy-array-to-an-existing-image","text":"","title":"Finally, we can assign a numpy array to an existing Image"},{"location":"notebooks/array-passing-without-copying.html#this-retains-the-images-origin-scale-and-coordsys","text":"In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved)","title":"This retains the Image's origin, scale, and coordsys."},{"location":"notebooks/array-passing-without-copying.html#lets-use-a-scipy-operation-on-the-image","text":"In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0)","title":"Let's use a scipy operation on the image:"},{"location":"notebooks/array-passing-without-copying.html#the-return-from-this-filter-is-the-right-size-and-type-but-its-a-copy","text":"In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA']","title":"The return from this filter is the right size and type, but it's a copy:"},{"location":"notebooks/array-passing-without-copying.html#lets-assign-it-back-to-image-so-we-can-retain-images-origin-scale-and-coordsys","text":"In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA']","title":"Let's assign it back to Image so we can retain Image's origin, scale, and coordsys:"},{"location":"notebooks/array-passing-without-copying.html#now-we-can-look-at-it-again-in-the-plotter","text":"In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Now we can look at it again in the plotter:"},{"location":"notebooks/create-and-apply-image-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can be used to center image data or to align two images \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\" Center of mass transforms \u00b6 Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() create and apply transform, noting that center of mass is now roughly in the center of the image \u00b6 In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass()) visualization of different resampling methods \u00b6 In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! Rigid registration transforms \u00b6 Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" compute distance transforms to be used to compute alignment of the segmentations \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! create distance transforms to be used to compute the images' alignment \u00b6 In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0) create image alignment transforms \u00b6 In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1) apply the transforms to the original images \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1) visualize the results \u00b6 Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#transforms-can-be-used-to-center-image-data-or-to-align-two-images","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\"","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#center-of-mass-transforms","text":"Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show()","title":"Center of mass transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#create-and-apply-transform-noting-that-center-of-mass-is-now-roughly-in-the-center-of-the-image","text":"In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass())","title":"create and apply transform, noting that center of mass is now roughly in the center of the image"},{"location":"notebooks/create-and-apply-image-transforms.html#visualization-of-different-resampling-methods","text":"In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualization of different resampling methods"},{"location":"notebooks/create-and-apply-image-transforms.html#rigid-registration-transforms","text":"Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\"","title":"Rigid registration transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#compute-distance-transforms-to-be-used-to-compute-alignment-of-the-segmentations","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"compute distance transforms to be used to compute alignment of the segmentations"},{"location":"notebooks/create-and-apply-image-transforms.html#create-distance-transforms-to-be-used-to-compute-the-images-alignment","text":"In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0)","title":"create distance transforms to be used to compute the images' alignment"},{"location":"notebooks/create-and-apply-image-transforms.html#create-image-alignment-transforms","text":"In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1)","title":"create image alignment transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#apply-the-transforms-to-the-original-images","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1)","title":"apply the transforms to the original images"},{"location":"notebooks/create-and-apply-image-transforms.html#visualize-the-results","text":"Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualize the results"},{"location":"notebooks/create-and-apply-mesh-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can also be used to align two meshes \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\" Mesh alignment \u00b6 A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" Load meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) Visualize original meshes \u00b6 In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Rigid transformation \u00b6 create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Similarity transformation \u00b6 This type of transformation is very similar to rigid transformations above. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Affine transformation \u00b6 This type of transformation warps the points of one mesh into the other as well as translating its position. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#transforms-can-also-be-used-to-align-two-meshes","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\"","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-alignment","text":"A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\"","title":"Mesh alignment"},{"location":"notebooks/create-and-apply-mesh-transforms.html#load-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Load meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-original-meshes","text":"In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Visualize original meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#rigid-transformation","text":"","title":"Rigid transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#similarity-transformation","text":"This type of transformation is very similar to rigid transformations above.","title":"Similarity transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#affine-transformation","text":"This type of transformation warps the points of one mesh into the other as well as translating its position.","title":"Affine transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/getting-started-with-data-augmentation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Data Augmentation \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data. Data Augmentation Overview \u00b6 ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning . Import shapeworks and relevant libraries \u00b6 In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks Import Data Augmentation Package \u00b6 In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils 1. Defining the original dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir) Get file lists \u00b6 Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list))) Run data augmentation using a Gaussian Distribution \u00b6 Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using a Mixture of Gaussian Distribution \u00b6 In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using Kernel Density Estimation \u00b6 In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-data-augmentation.html#in-this-notebook-you-will-learn","text":"How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-data-augmentation.html#data-augmentation-overview","text":"ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning .","title":"Data Augmentation Overview"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-shapeworks-and-relevant-libraries","text":"In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks","title":"Import shapeworks and relevant libraries"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-data-augmentation-package","text":"In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils","title":"Import Data Augmentation Package"},{"location":"notebooks/getting-started-with-data-augmentation.html#1-defining-the-original-dataset","text":"","title":"1. Defining the original dataset"},{"location":"notebooks/getting-started-with-data-augmentation.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-data-augmentation.html#get-file-lists","text":"Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list)))","title":"Get file lists"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-gaussian-distribution","text":"Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-mixture-of-gaussian-distribution","text":"In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Mixture of Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-kernel-density-estimation","text":"In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using Kernel Density Estimation"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-exploring-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Exploring Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Exploring your dataset \u00b6 We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling. Loading your dataset \u00b6 First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...') Visualizing your dataset \u00b6 Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views ) 3. Deciding the grooming pipeline needed for your dataset \u00b6 Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe? Voxel spacing \u00b6 Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk) Segmentations and image boundaries \u00b6 Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size. Shape alignment \u00b6 One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True ) Too much background \u00b6 Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) Binary segmentations \u00b6 In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform. Tentative grooming \u00b6 Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#2-exploring-your-dataset","text":"We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling.","title":"2. Exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#loading-your-dataset","text":"First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...')","title":"Loading your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#visualizing-your-dataset","text":"Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views )","title":"Visualizing your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#3-deciding-the-grooming-pipeline-needed-for-your-dataset","text":"Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe?","title":"3. Deciding the grooming pipeline needed for your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#voxel-spacing","text":"Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk)","title":"Voxel spacing"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#segmentations-and-image-boundaries","text":"Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size.","title":"Segmentations and image boundaries"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#shape-alignment","text":"One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True )","title":"Shape alignment"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#too-much-background","text":"Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk)","title":"Too much background"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#binary-segmentations","text":"In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform.","title":"Binary segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#tentative-grooming","text":"Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Tentative grooming"},{"location":"notebooks/getting-started-with-meshes.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Meshes \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single mesh \u00b6 We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh) 3. Convert to a VTK mesh \u00b6 To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) 4. Visualizing surface mesh using pyvista \u00b6 pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook) 5. Visualizing multiple meshes \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second mesh and convert it to vtk mesh \u00b6 First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-meshes.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-meshes.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-meshes.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-meshes.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-meshes.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-meshes.html#2-loading-a-single-mesh","text":"We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh)","title":"2. Loading a single mesh"},{"location":"notebooks/getting-started-with-meshes.html#3-convert-to-a-vtk-mesh","text":"To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh)","title":"3. Convert to a VTK mesh"},{"location":"notebooks/getting-started-with-meshes.html#4-visualizing-surface-mesh-using-pyvista","text":"pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook)","title":"4. Visualizing surface mesh using pyvista"},{"location":"notebooks/getting-started-with-meshes.html#5-visualizing-multiple-meshes","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing multiple meshes"},{"location":"notebooks/getting-started-with-meshes.html#loading-the-second-mesh-and-convert-it-to-vtk-mesh","text":"First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Loading the second mesh and convert it to vtk mesh"},{"location":"notebooks/getting-started-with-notebooks.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Jupyter Notebooks \u00b6 In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks ShapeWorks Jupyter Notebook Tutorials \u00b6 What is Jupyter Notebook? \u00b6 The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded. Running a Jupyter notebook tutorial \u00b6 ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks. Importing ShapeWorks \u00b6 The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us. Notebook keyboard shortcuts \u00b6 Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name Jupyter Notebook Resources \u00b6 Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#getting-started-with-jupyter-notebooks","text":"In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#shapeworks-jupyter-notebook-tutorials","text":"","title":"ShapeWorks Jupyter Notebook Tutorials"},{"location":"notebooks/getting-started-with-notebooks.html#what-is-jupyter-notebook","text":"The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded.","title":"What is Jupyter Notebook?"},{"location":"notebooks/getting-started-with-notebooks.html#running-a-jupyter-notebook-tutorial","text":"ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks.","title":"Running a Jupyter notebook tutorial"},{"location":"notebooks/getting-started-with-notebooks.html#importing-shapeworks","text":"The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us.","title":"Importing ShapeWorks"},{"location":"notebooks/getting-started-with-notebooks.html#notebook-keyboard-shortcuts","text":"Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name","title":"Notebook keyboard shortcuts"},{"location":"notebooks/getting-started-with-notebooks.html#jupyter-notebook-resources","text":"Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Jupyter Notebook Resources"},{"location":"notebooks/getting-started-with-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single segmentation \u00b6 We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg) 3. Converting shapeworks image to vtk image for visualization \u00b6 We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk) 4. Visualizing segmentation using pyvista \u00b6 pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading 5. Visualizing two segmentations side-by-side using pyvista \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second segmentation and convert it to vtk image \u00b6 First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2) Defining pyvista plotter \u00b6 Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) 6. Visualizing two segmentations in the same rendering window \u00b6 This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-segmentations.html#2-loading-a-single-segmentation","text":"We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg)","title":"2. Loading a single segmentation"},{"location":"notebooks/getting-started-with-segmentations.html#3-converting-shapeworks-image-to-vtk-image-for-visualization","text":"We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk)","title":"3. Converting shapeworks image to vtk image for visualization"},{"location":"notebooks/getting-started-with-segmentations.html#4-visualizing-segmentation-using-pyvista","text":"pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading","title":"4. Visualizing segmentation using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#5-visualizing-two-segmentations-side-by-side-using-pyvista","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing two segmentations side-by-side using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#loading-the-second-segmentation-and-convert-it-to-vtk-image","text":"First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2)","title":"Loading the second segmentation and convert it to vtk image"},{"location":"notebooks/getting-started-with-segmentations.html#defining-pyvista-plotter","text":"Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True )","title":"Defining pyvista plotter"},{"location":"notebooks/getting-started-with-segmentations.html#6-visualizing-two-segmentations-in-the-same-rendering-window","text":"This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"6. Visualizing two segmentations in the same rendering window"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Shape Cohort Generator \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes. About ShapeCohortGenerator \u00b6 ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families. What is a shape cohort ? \u00b6 A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized. Why ShapeCohortGenerator ? \u00b6 We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow. What families of shape can be generated by ShapeCohortGenerator ? \u00b6 ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes . Ellipsoids \u00b6 An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$ Supershapes \u00b6 Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below. 2D Supershapes \u00b6 2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images. Joint Ellipsoids \u00b6 Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation. Torus \u00b6 Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside). What you can do with ShapeCohortGenerator ? \u00b6 The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code. Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw Importing ShapeCohortGen library \u00b6 To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen Defining parameters for pyvista plotter \u00b6 In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges Generating an Ellipsoid Cohort \u00b6 Step 1: Initalize Ellipsoid Generator \u00b6 Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views Step 4: Generate Images - Turning segmentations into non-binary images \u00b6 For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0) Generating Supershapes Cohort \u00b6 SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$. Step 1: Initialize SuperShapes Generator \u00b6 Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views) Step 4: Generate Images \u00b6 This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#getting-started-with-shape-cohort-generator","text":"","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#in-this-notebook-you-will-learn","text":"How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-is-a-shape-cohort","text":"A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized.","title":"What is a shape cohort ?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#why-shapecohortgenerator","text":"We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow.","title":"Why ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-families-of-shape-can-be-generated-by-shapecohortgenerator","text":"ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes .","title":"What families of shape can be generated by ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#ellipsoids","text":"An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$","title":"Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#supershapes","text":"Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below.","title":"Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#2d-supershapes","text":"2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images.","title":"2D Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#joint-ellipsoids","text":"Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation.","title":"Joint Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#torus","text":"Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside).","title":"Torus"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-you-can-do-with-shapecohortgenerator","text":"The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code.","title":"What you can do with ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapecohortgen-library","text":"To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen","title":"Importing ShapeCohortGen library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#defining-parameters-for-pyvista-plotter","text":"In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges","title":"Defining parameters for pyvista plotter"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-an-ellipsoid-cohort","text":"","title":"Generating an Ellipsoid Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initalize-ellipsoid-generator","text":"Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir)","title":"Step 1: Initalize Ellipsoid Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images-turning-segmentations-into-non-binary-images","text":"For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0)","title":"Step 4: Generate Images - Turning segmentations into non-binary images"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-supershapes-cohort","text":"SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$.","title":"Generating Supershapes Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initialize-supershapes-generator","text":"Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir)","title":"Step 1: Initialize SuperShapes Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views)","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images","text":"This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Step 4: Generate Images"},{"location":"python/python-api.html","text":"ShapeWorks Python API ShapeWorks Python API ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor Pi = 3.141592653589793 Convert a string or number to a floating point number, if possible. X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z Analyze () Bases: pybind11_object create_shape_from_points () method descriptor create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape get_mean_shape () method descriptor get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh get_mean_shape_points () method descriptor get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]] get_mode_shape () method descriptor get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape get_num_modes () method descriptor get_num_modes(self: shapeworks_py.Analyze) -> int get_num_particles () method descriptor get_num_particles(self: shapeworks_py.Analyze) -> int get_num_subjects () method descriptor get_num_subjects(self: shapeworks_py.Analyze) -> int get_shape_points () method descriptor get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles get_shapes () method descriptor get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > > get_subject_features () method descriptor get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]] groups_active () method descriptor groups_active(self: shapeworks_py.Analyze) -> bool run_offline_analysis () method descriptor run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None Axis () Bases: pybind11_object Members: invalid X Y Z X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z name property name(self: handle) -> str DomainType () Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain name property name(self: handle) -> str Image () Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). antialias () method descriptor antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified) applyCurvatureFilter () method descriptor applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter applyGradientFilter () method descriptor applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter applyIntensityFilter () method descriptor applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter applySigmoidFilter () method descriptor applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter applyTPLevelSetFilter () method descriptor applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter applyTransform () method descriptor applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor) assign () method descriptor assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). binarize () method descriptor binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value center () method descriptor center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval] clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0) closeHoles () method descriptor closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value compare () method descriptor compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images computeDT () method descriptor computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue coordsys () method descriptor coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space copy () method descriptor copy(self: shapeworks_py.Image) -> shapeworks_py.Image createCenterOfMassTransform () method descriptor createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image createRigidRegistrationTransform () method descriptor createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations crop () method descriptor crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding dims () method descriptor dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image evaluate () method descriptor evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space extractLabel () method descriptor extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image gaussianBlur () method descriptor gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur isolate () method descriptor isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object logicalBoundingBox () method descriptor logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region logicalToPhysical () method descriptor logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space max () method descriptor max(self: shapeworks_py.Image) -> float maximum of image mean () method descriptor mean(self: shapeworks_py.Image) -> float mean of image min () method descriptor min(self: shapeworks_py.Image) -> float minimum of image origin () method descriptor origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin pad () method descriptor pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value physicalBoundingBox () method descriptor physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue physicalToLogical () method descriptor physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space physicalboundingBox () method descriptor physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image recenter () method descriptor recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image reflect () method descriptor reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis resample () method descriptor resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing resize () method descriptor resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing) rotate () method descriptor rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) scale () method descriptor scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin) setCoordsys () method descriptor setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image setOrigin () method descriptor setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value setSpacing () method descriptor setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel size () method descriptor size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing) spacing () method descriptor spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image std () method descriptor std(self: shapeworks_py.Image) -> float standard deviation of image toArray () method descriptor toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this). toMesh () method descriptor toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue topologyPreservingSmooth () method descriptor topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] translate () method descriptor translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image write () method descriptor write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension) ImageUtils ( args , kwargs ) Bases: pybind11_object boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images createWarpTransform () staticmethod createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points IndexRegion () Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None max property max point of region min property min point of region origin () method descriptor origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount size () method descriptor size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid InterpolationType () Bases: pybind11_object Members: Linear NearestNeighbor Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor name property name(self: handle) -> str Mesh () Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Face = < FieldType . Face : 1 > Members: Point Face Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Point = < FieldType . Point : 0 > Members: Point Face PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine AlignmentType () Bases: pybind11_object Members: Rigid Similarity Affine Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine name property name(self: handle) -> str CurvatureType () Bases: pybind11_object Members: Principal Gaussian Mean Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean name property name(self: handle) -> str DistanceMethod () Bases: pybind11_object Members: PointToPoint PointToCell PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell name property name(self: handle) -> str FieldType () Bases: pybind11_object Members: Point Face Face = < FieldType . Face : 1 > Members: Point Face Point = < FieldType . Point : 0 > Members: Point Face name property name(self: handle) -> str SubdivisionType () Bases: pybind11_object Members: Butterfly Loop Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop name property name(self: handle) -> str applySubdivisionFilter () method descriptor applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop) applyTransform () method descriptor applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh boundingBox () method descriptor boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh center () method descriptor center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clipClosedSurface () method descriptor clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface closestPoint () method descriptor closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh closestPointId () method descriptor closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space compareField () method descriptor compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields computeNormals () method descriptor computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals computeThickness () method descriptor computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness copy () method descriptor copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh coverage () method descriptor coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) createTransform () method descriptor createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10) curvature () method descriptor curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean) distance () method descriptor distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points faces () method descriptor faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed fillHoles () method descriptor fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them fixElement () method descriptor fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh geodesicDistance () method descriptor geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh getFace () method descriptor getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed getField () method descriptor getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field getFieldNames () method descriptor getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh getFieldValue () method descriptor getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field getMultiFieldValue () method descriptor getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field getPoint () method descriptor getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index invertNormals () method descriptor invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals numFaces () method descriptor numFaces(self: shapeworks_py.Mesh) -> int number of faces numPoints () method descriptor numPoints(self: shapeworks_py.Mesh) -> int number of points points () method descriptor points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point probeVolume () method descriptor probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image reflect () method descriptor reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis remesh () method descriptor remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity remeshPercent () method descriptor remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity rotate () method descriptor rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees) scale () method descriptor scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh setField () method descriptor setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array setFieldValue () method descriptor setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value smooth () method descriptor smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing smoothSinc () method descriptor smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing toDistanceTransform () method descriptor toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding) toImage () method descriptor toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing) translate () method descriptor translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh write () method descriptor write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension MeshUtils ( args , kwargs ) Bases: pybind11_object boundaryLoopExtractor () staticmethod boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes computeMeanNormals () staticmethod computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes findReferenceMesh () staticmethod findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes generateNormals () staticmethod generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes sharedBoundaryExtractor () staticmethod sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes MeshWarper () Bases: pybind11_object buildMesh () method descriptor buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3]) extractLandmarks () method descriptor extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3]) generateWarp () method descriptor generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping getGoodParticlesIndices () method descriptor getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles. getLandmarksMap () method descriptor getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices. getReferenceMesh () method descriptor getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping. getReferenceParticles () method descriptor getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping. getWarpMatrix () method descriptor getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control). hasBadParticles () method descriptor hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s). prepareMesh () staticmethod prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted). Optimize () Bases: pybind11_object GetParticleSystem () method descriptor GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]] LoadParameterFile () method descriptor LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool Run () method descriptor Run(self: shapeworks_py.Optimize) -> bool SetIterationCallbackFunction () method descriptor SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None SetUpOptimize () method descriptor SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool Parameters () Bases: pybind11_object as_map () method descriptor as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map get () method descriptor get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist key_exists () method descriptor key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not remove_entry () method descriptor remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry reset_parameters () method descriptor reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank set () method descriptor set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key ParticleShapeStatistics () Bases: pybind11_object PCA () method descriptor PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data eigenValues () method descriptor eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values eigenVectors () method descriptor eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors numDims () method descriptor numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system pcaLoadings () method descriptor pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed percentVarByMode () method descriptor percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components principalComponentProjections () method descriptor principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components sampleSize () method descriptor sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system ParticleSystem () Bases: pybind11_object D () method descriptor D(self: shapeworks_py.ParticleSystem) -> int EvaluationCompare () method descriptor EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool ExactCompare () method descriptor ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool N () method descriptor N(self: shapeworks_py.ParticleSystem) -> int Particles () method descriptor Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]] Paths () method descriptor Paths(self: shapeworks_py.ParticleSystem) -> List[str] ShapeAsPointSet () method descriptor ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape PhysicalRegion () Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None max property max point of region min property min point of region expand () method descriptor expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point origin () method descriptor origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount shrink () method descriptor shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both size () method descriptor size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid Project () Bases: pybind11_object clear_parameters () method descriptor clear_parameters(self: shapeworks_py.Project, name: str) -> None get_domain_names () method descriptor get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc) get_feature_names () method descriptor get_feature_names(self: shapeworks_py.Project) -> List[str] get_filename () method descriptor get_filename(self: shapeworks_py.Project) -> str Return the filename get_groomed_domain_types () method descriptor get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types get_groomed_present () method descriptor get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present get_group_names () method descriptor get_group_names(self: shapeworks_py.Project) -> List[str] get_group_values () method descriptor get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str] get_headers () method descriptor get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet get_images_present () method descriptor get_images_present(self: shapeworks_py.Project) -> bool get_number_of_domains_per_subject () method descriptor get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains get_number_of_subjects () method descriptor get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project get_original_domain_types () method descriptor get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types get_originals_present () method descriptor get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present get_parameters () method descriptor get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters get_particles_present () method descriptor get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present get_string_column () method descriptor get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name get_subjects () method descriptor get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects get_supported_version () method descriptor get_supported_version(self: shapeworks_py.Project) -> int get_version () method descriptor get_version(self: shapeworks_py.Project) -> int load () method descriptor load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file save () method descriptor save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file set_filename () method descriptor set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename set_groomed_domain_types () method descriptor set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types set_original_domain_types () method descriptor set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types set_parameters () method descriptor set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None set_subjects () method descriptor set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None store_subjects () method descriptor store_subjects(self: shapeworks_py.Project) -> None ReconstructSurface_RBFSSparseTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None ReconstructSurface_ThinPlateSplineTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None ShapeEvaluation ( args , kwargs ) Bases: pybind11_object ComputeCompactness () staticmethod ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system ComputeFullCompactness () staticmethod ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes ComputeFullGeneralization () staticmethod ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes ComputeFullSpecificity () staticmethod ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes ComputeGeneralization () staticmethod ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system ComputeSpecificity () staticmethod ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system Subject () Bases: pybind11_object get_constraints_filenames () method descriptor get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain) get_display_name () method descriptor get_display_name(self: shapeworks_py.Subject) -> str Get the display name get_extra_values () method descriptor get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret) get_feature_filenames () method descriptor get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames get_groomed_filenames () method descriptor get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames get_groomed_transforms () method descriptor get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain) get_group_value () method descriptor get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value get_group_values () method descriptor get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map get_landmarks_filenames () method descriptor get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain) get_local_particle_filenames () method descriptor get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames get_number_of_domains () method descriptor get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains get_original_filenames () method descriptor get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames get_procrustes_transforms () method descriptor get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain) get_world_particle_filenames () method descriptor get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames set_constraints_filenames () method descriptor set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain) set_display_name () method descriptor set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name set_extra_values () method descriptor set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values set_feature_filenames () method descriptor set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames set_groomed_filenames () method descriptor set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames set_groomed_transforms () method descriptor set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain) set_group_values () method descriptor set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None set_landmarks_filenames () method descriptor set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain) set_local_particle_filenames () method descriptor set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain) set_number_of_domains () method descriptor set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains set_original_filenames () method descriptor set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain) set_procrustes_transforms () method descriptor set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain) set_world_particle_filenames () method descriptor set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames Variant () Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None as_str () method descriptor as_str(self: shapeworks_py.Variant) -> str Return the variant string content VectorImage () Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space evaluate () method descriptor evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space WarpTransform ( args , kwargs ) Bases: pybind11_object axis_is_valid () builtin axis_is_valid(axis: List[float]) -> bool ensure an axis is valid degToRad () builtin degToRad(deg: float) -> float convert degrees to radians mean () builtin mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field range () builtin range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field seed () builtin seed(seed: int = 1698185790239257) -> None sets the seed for random number generation (internal use) stddev () builtin stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field toAxis () builtin toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"Python API Reference"},{"location":"python/python-api.html#shapeworks-python-api","text":"ShapeWorks Python API","title":"ShapeWorks Python API"},{"location":"python/python-api.html#shapeworks_py.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.Pi","text":"Convert a string or number to a floating point number, if possible.","title":"Pi"},{"location":"python/python-api.html#shapeworks_py.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Analyze","text":"Bases: pybind11_object","title":"Analyze"},{"location":"python/python-api.html#shapeworks_py.Analyze.create_shape_from_points","text":"create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape","title":"create_shape_from_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape","text":"get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh","title":"get_mean_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape_points","text":"get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]]","title":"get_mean_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mode_shape","text":"get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape","title":"get_mode_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_modes","text":"get_num_modes(self: shapeworks_py.Analyze) -> int","title":"get_num_modes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_particles","text":"get_num_particles(self: shapeworks_py.Analyze) -> int","title":"get_num_particles()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_subjects","text":"get_num_subjects(self: shapeworks_py.Analyze) -> int","title":"get_num_subjects()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shape_points","text":"get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles","title":"get_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shapes","text":"get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > >","title":"get_shapes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_subject_features","text":"get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]]","title":"get_subject_features()"},{"location":"python/python-api.html#shapeworks_py.Analyze.groups_active","text":"groups_active(self: shapeworks_py.Analyze) -> bool","title":"groups_active()"},{"location":"python/python-api.html#shapeworks_py.Analyze.run_offline_analysis","text":"run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None","title":"run_offline_analysis()"},{"location":"python/python-api.html#shapeworks_py.Axis","text":"Bases: pybind11_object Members: invalid X Y Z","title":"Axis"},{"location":"python/python-api.html#shapeworks_py.Axis.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Axis.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Axis.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.Axis.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Axis.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.DomainType","text":"Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain","title":"DomainType"},{"location":"python/python-api.html#shapeworks_py.DomainType.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Image","text":"Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"Image"},{"location":"python/python-api.html#shapeworks_py.Image.antialias","text":"antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified)","title":"antialias()"},{"location":"python/python-api.html#shapeworks_py.Image.applyCurvatureFilter","text":"applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter","title":"applyCurvatureFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyGradientFilter","text":"applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter","title":"applyGradientFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyIntensityFilter","text":"applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter","title":"applyIntensityFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applySigmoidFilter","text":"applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter","title":"applySigmoidFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTPLevelSetFilter","text":"applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter","title":"applyTPLevelSetFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTransform","text":"applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor)","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.assign","text":"assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"assign()"},{"location":"python/python-api.html#shapeworks_py.Image.binarize","text":"binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value","title":"binarize()"},{"location":"python/python-api.html#shapeworks_py.Image.center","text":"center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Image.centerOfMass","text":"centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval]","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Image.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0)","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Image.closeHoles","text":"closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value","title":"closeHoles()"},{"location":"python/python-api.html#shapeworks_py.Image.compare","text":"compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images","title":"compare()"},{"location":"python/python-api.html#shapeworks_py.Image.computeDT","text":"computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue","title":"computeDT()"},{"location":"python/python-api.html#shapeworks_py.Image.coordsys","text":"coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space","title":"coordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.copy","text":"copy(self: shapeworks_py.Image) -> shapeworks_py.Image","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Image.createCenterOfMassTransform","text":"createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image","title":"createCenterOfMassTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.createRigidRegistrationTransform","text":"createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"createRigidRegistrationTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.crop","text":"crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding","title":"crop()"},{"location":"python/python-api.html#shapeworks_py.Image.dims","text":"dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image","title":"dims()"},{"location":"python/python-api.html#shapeworks_py.Image.evaluate","text":"evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.Image.extractLabel","text":"extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image","title":"extractLabel()"},{"location":"python/python-api.html#shapeworks_py.Image.gaussianBlur","text":"gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur","title":"gaussianBlur()"},{"location":"python/python-api.html#shapeworks_py.Image.isolate","text":"isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object","title":"isolate()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalBoundingBox","text":"logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region","title":"logicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalToPhysical","text":"logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space","title":"logicalToPhysical()"},{"location":"python/python-api.html#shapeworks_py.Image.max","text":"max(self: shapeworks_py.Image) -> float maximum of image","title":"max()"},{"location":"python/python-api.html#shapeworks_py.Image.mean","text":"mean(self: shapeworks_py.Image) -> float mean of image","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.Image.min","text":"min(self: shapeworks_py.Image) -> float minimum of image","title":"min()"},{"location":"python/python-api.html#shapeworks_py.Image.origin","text":"origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.Image.pad","text":"pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalBoundingBox","text":"physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue","title":"physicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalToLogical","text":"physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space","title":"physicalToLogical()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalboundingBox","text":"physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image","title":"physicalboundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.recenter","text":"recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image","title":"recenter()"},{"location":"python/python-api.html#shapeworks_py.Image.reflect","text":"reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Image.resample","text":"resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing","title":"resample()"},{"location":"python/python-api.html#shapeworks_py.Image.resize","text":"resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing)","title":"resize()"},{"location":"python/python-api.html#shapeworks_py.Image.rotate","text":"rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Image.scale","text":"scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin)","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Image.setCoordsys","text":"setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image","title":"setCoordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.setOrigin","text":"setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value","title":"setOrigin()"},{"location":"python/python-api.html#shapeworks_py.Image.setSpacing","text":"setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel","title":"setSpacing()"},{"location":"python/python-api.html#shapeworks_py.Image.size","text":"size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing)","title":"size()"},{"location":"python/python-api.html#shapeworks_py.Image.spacing","text":"spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image","title":"spacing()"},{"location":"python/python-api.html#shapeworks_py.Image.std","text":"std(self: shapeworks_py.Image) -> float standard deviation of image","title":"std()"},{"location":"python/python-api.html#shapeworks_py.Image.toArray","text":"toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this).","title":"toArray()"},{"location":"python/python-api.html#shapeworks_py.Image.toMesh","text":"toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue","title":"toMesh()"},{"location":"python/python-api.html#shapeworks_py.Image.topologyPreservingSmooth","text":"topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"topologyPreservingSmooth()"},{"location":"python/python-api.html#shapeworks_py.Image.translate","text":"translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Image.write","text":"write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension)","title":"write()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils","text":"Bases: pybind11_object","title":"ImageUtils"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.createWarpTransform","text":"createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points","title":"createWarpTransform()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion","text":"Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None","title":"IndexRegion"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.origin","text":"origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.pad","text":"pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.size","text":"size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.valid","text":"valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.InterpolationType","text":"Bases: pybind11_object Members: Linear NearestNeighbor","title":"InterpolationType"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh","text":"Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None","title":"Mesh"},{"location":"python/python-api.html#shapeworks_py.Mesh.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType","text":"Bases: pybind11_object Members: Rigid Similarity Affine","title":"AlignmentType"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType","text":"Bases: pybind11_object Members: Principal Gaussian Mean","title":"CurvatureType"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod","text":"Bases: pybind11_object Members: PointToPoint PointToCell","title":"DistanceMethod"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType","text":"Bases: pybind11_object Members: Point Face","title":"FieldType"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType","text":"Bases: pybind11_object Members: Butterfly Loop","title":"SubdivisionType"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.applySubdivisionFilter","text":"applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop)","title":"applySubdivisionFilter()"},{"location":"python/python-api.html#shapeworks_py.Mesh.applyTransform","text":"applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.boundingBox","text":"boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.Mesh.center","text":"center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Mesh.centerOfMass","text":"centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clipClosedSurface","text":"clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface","title":"clipClosedSurface()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPoint","text":"closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh","title":"closestPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPointId","text":"closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space","title":"closestPointId()"},{"location":"python/python-api.html#shapeworks_py.Mesh.compareField","text":"compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields","title":"compareField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeNormals","text":"computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals","title":"computeNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeThickness","text":"computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness","title":"computeThickness()"},{"location":"python/python-api.html#shapeworks_py.Mesh.copy","text":"copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Mesh.coverage","text":"coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"coverage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.createTransform","text":"createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10)","title":"createTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.curvature","text":"curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean)","title":"curvature()"},{"location":"python/python-api.html#shapeworks_py.Mesh.distance","text":"distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points","title":"distance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.faces","text":"faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed","title":"faces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fillHoles","text":"fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them","title":"fillHoles()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fixElement","text":"fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh","title":"fixElement()"},{"location":"python/python-api.html#shapeworks_py.Mesh.geodesicDistance","text":"geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh","title":"geodesicDistance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFace","text":"getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed","title":"getFace()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getField","text":"getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field","title":"getField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldNames","text":"getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh","title":"getFieldNames()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldValue","text":"getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field","title":"getFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getMultiFieldValue","text":"getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field","title":"getMultiFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getPoint","text":"getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index","title":"getPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.invertNormals","text":"invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals","title":"invertNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numFaces","text":"numFaces(self: shapeworks_py.Mesh) -> int number of faces","title":"numFaces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numPoints","text":"numPoints(self: shapeworks_py.Mesh) -> int number of points","title":"numPoints()"},{"location":"python/python-api.html#shapeworks_py.Mesh.points","text":"points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point","title":"points()"},{"location":"python/python-api.html#shapeworks_py.Mesh.probeVolume","text":"probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image","title":"probeVolume()"},{"location":"python/python-api.html#shapeworks_py.Mesh.reflect","text":"reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remesh","text":"remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"remesh()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remeshPercent","text":"remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"remeshPercent()"},{"location":"python/python-api.html#shapeworks_py.Mesh.rotate","text":"rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.scale","text":"scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setField","text":"setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array","title":"setField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setFieldValue","text":"setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value","title":"setFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smooth","text":"smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing","title":"smooth()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smoothSinc","text":"smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing","title":"smoothSinc()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toDistanceTransform","text":"toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding)","title":"toDistanceTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toImage","text":"toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"toImage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.translate","text":"translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.write","text":"write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension","title":"write()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils","text":"Bases: pybind11_object","title":"MeshUtils"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundaryLoopExtractor","text":"boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file","title":"boundaryLoopExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.computeMeanNormals","text":"computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes","title":"computeMeanNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.findReferenceMesh","text":"findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes","title":"findReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.generateNormals","text":"generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes","title":"generateNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.sharedBoundaryExtractor","text":"sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes","title":"sharedBoundaryExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper","text":"Bases: pybind11_object","title":"MeshWarper"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.buildMesh","text":"buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3])","title":"buildMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.extractLandmarks","text":"extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3])","title":"extractLandmarks()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.generateWarp","text":"generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping","title":"generateWarp()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getGoodParticlesIndices","text":"getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles.","title":"getGoodParticlesIndices()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getLandmarksMap","text":"getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices.","title":"getLandmarksMap()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceMesh","text":"getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping.","title":"getReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceParticles","text":"getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping.","title":"getReferenceParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getWarpMatrix","text":"getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control).","title":"getWarpMatrix()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.hasBadParticles","text":"hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s).","title":"hasBadParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.prepareMesh","text":"prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted).","title":"prepareMesh()"},{"location":"python/python-api.html#shapeworks_py.Optimize","text":"Bases: pybind11_object","title":"Optimize"},{"location":"python/python-api.html#shapeworks_py.Optimize.GetParticleSystem","text":"GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]]","title":"GetParticleSystem()"},{"location":"python/python-api.html#shapeworks_py.Optimize.LoadParameterFile","text":"LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool","title":"LoadParameterFile()"},{"location":"python/python-api.html#shapeworks_py.Optimize.Run","text":"Run(self: shapeworks_py.Optimize) -> bool","title":"Run()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetIterationCallbackFunction","text":"SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None","title":"SetIterationCallbackFunction()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetUpOptimize","text":"SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool","title":"SetUpOptimize()"},{"location":"python/python-api.html#shapeworks_py.Parameters","text":"Bases: pybind11_object","title":"Parameters"},{"location":"python/python-api.html#shapeworks_py.Parameters.as_map","text":"as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map","title":"as_map()"},{"location":"python/python-api.html#shapeworks_py.Parameters.get","text":"get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist","title":"get()"},{"location":"python/python-api.html#shapeworks_py.Parameters.key_exists","text":"key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not","title":"key_exists()"},{"location":"python/python-api.html#shapeworks_py.Parameters.remove_entry","text":"remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry","title":"remove_entry()"},{"location":"python/python-api.html#shapeworks_py.Parameters.reset_parameters","text":"reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank","title":"reset_parameters()"},{"location":"python/python-api.html#shapeworks_py.Parameters.set","text":"set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key","title":"set()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics","text":"Bases: pybind11_object","title":"ParticleShapeStatistics"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.PCA","text":"PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data","title":"PCA()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenValues","text":"eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values","title":"eigenValues()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenVectors","text":"eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors","title":"eigenVectors()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.numDims","text":"numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system","title":"numDims()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.pcaLoadings","text":"pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed","title":"pcaLoadings()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.percentVarByMode","text":"percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components","title":"percentVarByMode()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.principalComponentProjections","text":"principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components","title":"principalComponentProjections()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.sampleSize","text":"sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system","title":"sampleSize()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem","text":"Bases: pybind11_object","title":"ParticleSystem"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.D","text":"D(self: shapeworks_py.ParticleSystem) -> int","title":"D()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.EvaluationCompare","text":"EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"EvaluationCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ExactCompare","text":"ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"ExactCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.N","text":"N(self: shapeworks_py.ParticleSystem) -> int","title":"N()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Particles","text":"Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]]","title":"Particles()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Paths","text":"Paths(self: shapeworks_py.ParticleSystem) -> List[str]","title":"Paths()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ShapeAsPointSet","text":"ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape","title":"ShapeAsPointSet()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion","text":"Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None","title":"PhysicalRegion"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.expand","text":"expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point","title":"expand()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.origin","text":"origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.pad","text":"pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.shrink","text":"shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both","title":"shrink()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.size","text":"size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.valid","text":"valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.Project","text":"Bases: pybind11_object","title":"Project"},{"location":"python/python-api.html#shapeworks_py.Project.clear_parameters","text":"clear_parameters(self: shapeworks_py.Project, name: str) -> None","title":"clear_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_domain_names","text":"get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc)","title":"get_domain_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_feature_names","text":"get_feature_names(self: shapeworks_py.Project) -> List[str]","title":"get_feature_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_filename","text":"get_filename(self: shapeworks_py.Project) -> str Return the filename","title":"get_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_domain_types","text":"get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types","title":"get_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_present","text":"get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present","title":"get_groomed_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_names","text":"get_group_names(self: shapeworks_py.Project) -> List[str]","title":"get_group_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_values","text":"get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str]","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Project.get_headers","text":"get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet","title":"get_headers()"},{"location":"python/python-api.html#shapeworks_py.Project.get_images_present","text":"get_images_present(self: shapeworks_py.Project) -> bool","title":"get_images_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_domains_per_subject","text":"get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains","title":"get_number_of_domains_per_subject()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_subjects","text":"get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project","title":"get_number_of_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_original_domain_types","text":"get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types","title":"get_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_originals_present","text":"get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present","title":"get_originals_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_parameters","text":"get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters","title":"get_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_particles_present","text":"get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present","title":"get_particles_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_string_column","text":"get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name","title":"get_string_column()"},{"location":"python/python-api.html#shapeworks_py.Project.get_subjects","text":"get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects","title":"get_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_supported_version","text":"get_supported_version(self: shapeworks_py.Project) -> int","title":"get_supported_version()"},{"location":"python/python-api.html#shapeworks_py.Project.get_version","text":"get_version(self: shapeworks_py.Project) -> int","title":"get_version()"},{"location":"python/python-api.html#shapeworks_py.Project.load","text":"load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file","title":"load()"},{"location":"python/python-api.html#shapeworks_py.Project.save","text":"save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file","title":"save()"},{"location":"python/python-api.html#shapeworks_py.Project.set_filename","text":"set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename","title":"set_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.set_groomed_domain_types","text":"set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types","title":"set_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_original_domain_types","text":"set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types","title":"set_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_parameters","text":"set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None","title":"set_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.set_subjects","text":"set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None","title":"set_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.store_subjects","text":"store_subjects(self: shapeworks_py.Project) -> None","title":"store_subjects()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_RBFSSparseTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_ThinPlateSplineTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation","text":"Bases: pybind11_object","title":"ShapeEvaluation"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeCompactness","text":"ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system","title":"ComputeCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullCompactness","text":"ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes","title":"ComputeFullCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullGeneralization","text":"ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes","title":"ComputeFullGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullSpecificity","text":"ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes","title":"ComputeFullSpecificity()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeGeneralization","text":"ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system","title":"ComputeGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeSpecificity","text":"ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system","title":"ComputeSpecificity()"},{"location":"python/python-api.html#shapeworks_py.Subject","text":"Bases: pybind11_object","title":"Subject"},{"location":"python/python-api.html#shapeworks_py.Subject.get_constraints_filenames","text":"get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain)","title":"get_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_display_name","text":"get_display_name(self: shapeworks_py.Subject) -> str Get the display name","title":"get_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_extra_values","text":"get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret)","title":"get_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_feature_filenames","text":"get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames","title":"get_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_filenames","text":"get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames","title":"get_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_transforms","text":"get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain)","title":"get_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_value","text":"get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value","title":"get_group_value()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_values","text":"get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_landmarks_filenames","text":"get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain)","title":"get_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_local_particle_filenames","text":"get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames","title":"get_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_number_of_domains","text":"get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains","title":"get_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_original_filenames","text":"get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames","title":"get_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_procrustes_transforms","text":"get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain)","title":"get_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_world_particle_filenames","text":"get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames","title":"get_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_constraints_filenames","text":"set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain)","title":"set_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_display_name","text":"set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name","title":"set_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_extra_values","text":"set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values","title":"set_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_feature_filenames","text":"set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames","title":"set_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_filenames","text":"set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames","title":"set_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_transforms","text":"set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain)","title":"set_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_group_values","text":"set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None","title":"set_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_landmarks_filenames","text":"set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain)","title":"set_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_local_particle_filenames","text":"set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain)","title":"set_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_number_of_domains","text":"set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains","title":"set_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_original_filenames","text":"set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain)","title":"set_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_procrustes_transforms","text":"set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain)","title":"set_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_world_particle_filenames","text":"set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames","title":"set_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Variant","text":"Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None","title":"Variant"},{"location":"python/python-api.html#shapeworks_py.Variant.as_str","text":"as_str(self: shapeworks_py.Variant) -> str Return the variant string content","title":"as_str()"},{"location":"python/python-api.html#shapeworks_py.VectorImage","text":"Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space","title":"VectorImage"},{"location":"python/python-api.html#shapeworks_py.VectorImage.evaluate","text":"evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.WarpTransform","text":"Bases: pybind11_object","title":"WarpTransform"},{"location":"python/python-api.html#shapeworks_py.axis_is_valid","text":"axis_is_valid(axis: List[float]) -> bool ensure an axis is valid","title":"axis_is_valid()"},{"location":"python/python-api.html#shapeworks_py.degToRad","text":"degToRad(deg: float) -> float convert degrees to radians","title":"degToRad()"},{"location":"python/python-api.html#shapeworks_py.mean","text":"mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.range","text":"range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field","title":"range()"},{"location":"python/python-api.html#shapeworks_py.seed","text":"seed(seed: int = 1698185790239257) -> None sets the seed for random number generation (internal use)","title":"seed()"},{"location":"python/python-api.html#shapeworks_py.stddev","text":"stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field","title":"stddev()"},{"location":"python/python-api.html#shapeworks_py.toAxis","text":"toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"toAxis()"},{"location":"studio/deepssm-in-studio.html","text":"DeepSSM in Studio ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps. Importing Data for DeepSSM In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see: Defining Data Split The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10. Data Augmentation The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data. Training The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains. Testing In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"DeepSSM Module"},{"location":"studio/deepssm-in-studio.html#deepssm-in-studio","text":"ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps.","title":"DeepSSM in Studio"},{"location":"studio/deepssm-in-studio.html#importing-data-for-deepssm","text":"In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see:","title":"Importing Data for DeepSSM"},{"location":"studio/deepssm-in-studio.html#defining-data-split","text":"The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10.","title":"Defining Data Split"},{"location":"studio/deepssm-in-studio.html#data-augmentation","text":"The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data.","title":"Data Augmentation"},{"location":"studio/deepssm-in-studio.html#training","text":"The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains.","title":"Training"},{"location":"studio/deepssm-in-studio.html#testing","text":"In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"Testing"},{"location":"studio/getting-started-with-studio.html","text":"Getting Started With ShapeWorks Studio ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface. Splash Screen The splash screen provides access to recent projects and an option to create a new blank project. Data Module The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information. Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information. Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information. Analysis Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information. Preferences Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software Data Collection ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run). Viewer Controls See Studio Viewer Controls for details on viewer controls. Menus File Menu New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom Export Menu See Studio Export Options for details on export options. Project setup ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Getting Started"},{"location":"studio/getting-started-with-studio.html#getting-started-with-shapeworks-studio","text":"ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface.","title":"Getting Started With ShapeWorks Studio"},{"location":"studio/getting-started-with-studio.html#splash-screen","text":"The splash screen provides access to recent projects and an option to create a new blank project.","title":"Splash Screen"},{"location":"studio/getting-started-with-studio.html#data-module","text":"The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information.","title":"Data Module"},{"location":"studio/getting-started-with-studio.html#groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information.","title":"Groom Module"},{"location":"studio/getting-started-with-studio.html#optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information.","title":"Optimize Module"},{"location":"studio/getting-started-with-studio.html#analysis-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information.","title":"Analysis Module"},{"location":"studio/getting-started-with-studio.html#preferences","text":"Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software","title":"Preferences"},{"location":"studio/getting-started-with-studio.html#data-collection","text":"ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run).","title":"Data Collection"},{"location":"studio/getting-started-with-studio.html#viewer-controls","text":"See Studio Viewer Controls for details on viewer controls.","title":"Viewer Controls"},{"location":"studio/getting-started-with-studio.html#menus","text":"","title":"Menus"},{"location":"studio/getting-started-with-studio.html#file-menu","text":"New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom","title":"File Menu"},{"location":"studio/getting-started-with-studio.html#export-menu","text":"See Studio Export Options for details on export options.","title":"Export Menu"},{"location":"studio/getting-started-with-studio.html#project-setup","text":"ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Project setup"},{"location":"studio/multiple-domains.html","text":"Multiple Domains SSM ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet: Importing Data for Multiple Domains In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see: Grooming Multiple Domains When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox. Optimizing Multi-Domain SSM For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process. Analyzing Multi-Domain SSM Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow. Mixed-type Domains Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation. Multiple Domain Alignments In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#multiple-domains-ssm","text":"ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet:","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#importing-data-for-multiple-domains","text":"In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see:","title":"Importing Data for Multiple Domains"},{"location":"studio/multiple-domains.html#grooming-multiple-domains","text":"When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox.","title":"Grooming Multiple Domains"},{"location":"studio/multiple-domains.html#optimizing-multi-domain-ssm","text":"For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process.","title":"Optimizing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#analyzing-multi-domain-ssm","text":"Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow.","title":"Analyzing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#mixed-type-domains","text":"Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation.","title":"Mixed-type Domains"},{"location":"studio/multiple-domains.html#multiple-domain-alignments","text":"In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domain Alignments"},{"location":"studio/studio-analyze.html","text":"ShapeWorks Studio Analyze Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. View Panel The View panel contains all of the options for controlling the analyis viewer options. Group The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences: Network Analysis The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D Samples The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample. PCA The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Multi-Level PCA The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure. Show Difference to Mean This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well. Metrics Panel The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation. Surface Reconstruction Panel The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option. Particles Panel The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Analyze Module"},{"location":"studio/studio-analyze.html#shapeworks-studio-analyze-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module.","title":"ShapeWorks Studio Analyze Module"},{"location":"studio/studio-analyze.html#view-panel","text":"The View panel contains all of the options for controlling the analyis viewer options.","title":"View Panel"},{"location":"studio/studio-analyze.html#group","text":"The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences:","title":"Group"},{"location":"studio/studio-analyze.html#network-analysis","text":"The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D","title":"Network Analysis"},{"location":"studio/studio-analyze.html#samples","text":"The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample.","title":"Samples"},{"location":"studio/studio-analyze.html#pca","text":"The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"PCA"},{"location":"studio/studio-analyze.html#multi-level-pca","text":"The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure.","title":"Multi-Level PCA"},{"location":"studio/studio-analyze.html#show-difference-to-mean","text":"This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well.","title":"Show Difference to Mean"},{"location":"studio/studio-analyze.html#metrics-panel","text":"The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation.","title":"Metrics Panel"},{"location":"studio/studio-analyze.html#surface-reconstruction-panel","text":"The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option.","title":"Surface Reconstruction Panel"},{"location":"studio/studio-analyze.html#particles-panel","text":"The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Particles Panel"},{"location":"studio/studio-data.html","text":"ShapeWorks Studio Data Module Importing data There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window Landmarks Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality. Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Data Module"},{"location":"studio/studio-data.html#shapeworks-studio-data-module","text":"","title":"ShapeWorks Studio Data Module"},{"location":"studio/studio-data.html#importing-data","text":"There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window","title":"Importing data"},{"location":"studio/studio-data.html#landmarks","text":"Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality.","title":"Landmarks"},{"location":"studio/studio-data.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/studio-data.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/studio-data.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/studio-data.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Removing a Constraint"},{"location":"studio/studio-export.html","text":"ShapeWorks Studio Export Options The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display Export Screenshot Dialog The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export Export PCA Montage The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export Creating Videos The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Export Options"},{"location":"studio/studio-export.html#shapeworks-studio-export-options","text":"The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display","title":"ShapeWorks Studio Export Options"},{"location":"studio/studio-export.html#export-screenshot-dialog","text":"The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export","title":"Export Screenshot Dialog"},{"location":"studio/studio-export.html#export-pca-montage","text":"The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export","title":"Export PCA Montage"},{"location":"studio/studio-export.html#creating-videos","text":"The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Creating Videos"},{"location":"studio/studio-groom.html","text":"ShapeWorks Studio Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"studio/studio-groom.html#shapeworks-studio-groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Studio Groom Module"},{"location":"studio/studio-optimize.html","text":"ShapeWorks Studio Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"studio/studio-optimize.html#shapeworks-studio-optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Studio Optimize Module"},{"location":"studio/studio-viewer.html","text":"ShapeWorks Studio Viewer Controls At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64) Comparing mesh types The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance: Feature maps and scalars controls When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set. Image volume support When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers Keyboard Shortcuts The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item. Point selection As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Viewer Controls"},{"location":"studio/studio-viewer.html#shapeworks-studio-viewer-controls","text":"At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64)","title":"ShapeWorks Studio Viewer Controls"},{"location":"studio/studio-viewer.html#comparing-mesh-types","text":"The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance:","title":"Comparing mesh types"},{"location":"studio/studio-viewer.html#feature-maps-and-scalars-controls","text":"When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set.","title":"Feature maps and scalars controls"},{"location":"studio/studio-viewer.html#image-volume-support","text":"When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers","title":"Image volume support"},{"location":"studio/studio-viewer.html#keyboard-shortcuts","text":"The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item.","title":"Keyboard Shortcuts"},{"location":"studio/studio-viewer.html#point-selection","text":"As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Point selection"},{"location":"studio/using-constraints.html","text":"Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/using-constraints.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/using-constraints.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Removing a Constraint"},{"location":"tools/ShapeWorksCommands.html","text":"ShapeWorks Commands shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable . shapeworks Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top Analyze Commands analyze Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands Groom Commands groom Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands Image Commands add Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands antialias Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands binarize Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands blur Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands bounding-box-image Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands clip-image Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands close-holes Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands compare-image Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands compute-dt Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands crop Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands curvature Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands divide Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands extract-label Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands gradient Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands icp-image Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands image-bounds Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands image-info Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands image-to-mesh Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands intensity Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands isolate Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands multiply Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands negate Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands pad Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands read-image Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands recenter Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands reflect-image Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands resample Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands resize Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands rotate Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands scale-image Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands set-origin Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands set-region Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands set-spacing Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands sigmoid Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands subtract Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands topo-preserving-smooth Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands tp-levelset Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands translate-image Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands warp-image Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands write-image Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands Mesh Commands bounding-box-mesh Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands clip-closed-surface Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands clip-mesh Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands closest-point Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands compare-mesh Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands compute-normals Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands compute-thickness Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands coverage Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands distance Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands field-mean Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-names Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands field-range Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-std Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands fill-holes Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands fix-element Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands geodesic-distance Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands geodesic-distance-landmark Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands get-field Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands get-field-value Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands invert-normal Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands landmark-geodesics Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands mean-normals Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands mesh-bounds Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands mesh-curvature Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands mesh-info Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands mesh-to-dt Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands mesh-to-image Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands probe-volume Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands read-mesh Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands reflect-mesh Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands remesh Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands remesh-percent Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands scale-mesh Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands set-field Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands set-field-value Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands smooth Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands smooth-sinc Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands transform-mesh Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands translate-mesh Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands warp-mesh Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands write-mesh Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands Optimize Commands optimize Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands ParticleSystem Commands compactness Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands generalization Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands read-particle-system Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands specificity Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands Project Commands convert-project Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands Shapeworks Commands seed Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands","text":"shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable .","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks","text":"Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top","title":"shapeworks"},{"location":"tools/ShapeWorksCommands.html#analyze-commands","text":"","title":"Analyze Commands"},{"location":"tools/ShapeWorksCommands.html#analyze","text":"Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands","title":"analyze"},{"location":"tools/ShapeWorksCommands.html#groom-commands","text":"","title":"Groom Commands"},{"location":"tools/ShapeWorksCommands.html#groom","text":"Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands","title":"groom"},{"location":"tools/ShapeWorksCommands.html#image-commands","text":"","title":"Image Commands"},{"location":"tools/ShapeWorksCommands.html#add","text":"Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands","title":"add"},{"location":"tools/ShapeWorksCommands.html#antialias","text":"Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands","title":"antialias"},{"location":"tools/ShapeWorksCommands.html#binarize","text":"Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands","title":"binarize"},{"location":"tools/ShapeWorksCommands.html#blur","text":"Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands","title":"blur"},{"location":"tools/ShapeWorksCommands.html#bounding-box-image","text":"Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands","title":"bounding-box-image"},{"location":"tools/ShapeWorksCommands.html#clip-image","text":"Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands","title":"clip-image"},{"location":"tools/ShapeWorksCommands.html#close-holes","text":"Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands","title":"close-holes"},{"location":"tools/ShapeWorksCommands.html#compare-image","text":"Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands","title":"compare-image"},{"location":"tools/ShapeWorksCommands.html#compute-dt","text":"Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands","title":"compute-dt"},{"location":"tools/ShapeWorksCommands.html#crop","text":"Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"crop"},{"location":"tools/ShapeWorksCommands.html#curvature","text":"Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands","title":"curvature"},{"location":"tools/ShapeWorksCommands.html#divide","text":"Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands","title":"divide"},{"location":"tools/ShapeWorksCommands.html#extract-label","text":"Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands","title":"extract-label"},{"location":"tools/ShapeWorksCommands.html#gradient","text":"Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"gradient"},{"location":"tools/ShapeWorksCommands.html#icp-image","text":"Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands","title":"icp-image"},{"location":"tools/ShapeWorksCommands.html#image-bounds","text":"Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands","title":"image-bounds"},{"location":"tools/ShapeWorksCommands.html#image-info","text":"Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands","title":"image-info"},{"location":"tools/ShapeWorksCommands.html#image-to-mesh","text":"Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands","title":"image-to-mesh"},{"location":"tools/ShapeWorksCommands.html#intensity","text":"Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands","title":"intensity"},{"location":"tools/ShapeWorksCommands.html#isolate","text":"Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"isolate"},{"location":"tools/ShapeWorksCommands.html#multiply","text":"Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands","title":"multiply"},{"location":"tools/ShapeWorksCommands.html#negate","text":"Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"negate"},{"location":"tools/ShapeWorksCommands.html#pad","text":"Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands","title":"pad"},{"location":"tools/ShapeWorksCommands.html#read-image","text":"Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands","title":"read-image"},{"location":"tools/ShapeWorksCommands.html#recenter","text":"Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"recenter"},{"location":"tools/ShapeWorksCommands.html#reflect-image","text":"Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands","title":"reflect-image"},{"location":"tools/ShapeWorksCommands.html#resample","text":"Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands","title":"resample"},{"location":"tools/ShapeWorksCommands.html#resize","text":"Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands","title":"resize"},{"location":"tools/ShapeWorksCommands.html#rotate","text":"Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands","title":"rotate"},{"location":"tools/ShapeWorksCommands.html#scale-image","text":"Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands","title":"scale-image"},{"location":"tools/ShapeWorksCommands.html#set-origin","text":"Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands","title":"set-origin"},{"location":"tools/ShapeWorksCommands.html#set-region","text":"Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands","title":"set-region"},{"location":"tools/ShapeWorksCommands.html#set-spacing","text":"Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands","title":"set-spacing"},{"location":"tools/ShapeWorksCommands.html#sigmoid","text":"Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands","title":"sigmoid"},{"location":"tools/ShapeWorksCommands.html#subtract","text":"Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands","title":"subtract"},{"location":"tools/ShapeWorksCommands.html#topo-preserving-smooth","text":"Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands","title":"topo-preserving-smooth"},{"location":"tools/ShapeWorksCommands.html#tp-levelset","text":"Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands","title":"tp-levelset"},{"location":"tools/ShapeWorksCommands.html#translate-image","text":"Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands","title":"translate-image"},{"location":"tools/ShapeWorksCommands.html#warp-image","text":"Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands","title":"warp-image"},{"location":"tools/ShapeWorksCommands.html#write-image","text":"Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands","title":"write-image"},{"location":"tools/ShapeWorksCommands.html#mesh-commands","text":"","title":"Mesh Commands"},{"location":"tools/ShapeWorksCommands.html#bounding-box-mesh","text":"Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands","title":"bounding-box-mesh"},{"location":"tools/ShapeWorksCommands.html#clip-closed-surface","text":"Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-closed-surface"},{"location":"tools/ShapeWorksCommands.html#clip-mesh","text":"Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-mesh"},{"location":"tools/ShapeWorksCommands.html#closest-point","text":"Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands","title":"closest-point"},{"location":"tools/ShapeWorksCommands.html#compare-mesh","text":"Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands","title":"compare-mesh"},{"location":"tools/ShapeWorksCommands.html#compute-normals","text":"Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"compute-normals"},{"location":"tools/ShapeWorksCommands.html#compute-thickness","text":"Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands","title":"compute-thickness"},{"location":"tools/ShapeWorksCommands.html#coverage","text":"Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands","title":"coverage"},{"location":"tools/ShapeWorksCommands.html#distance","text":"Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands","title":"distance"},{"location":"tools/ShapeWorksCommands.html#field-mean","text":"Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-mean"},{"location":"tools/ShapeWorksCommands.html#field-names","text":"Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"field-names"},{"location":"tools/ShapeWorksCommands.html#field-range","text":"Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-range"},{"location":"tools/ShapeWorksCommands.html#field-std","text":"Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-std"},{"location":"tools/ShapeWorksCommands.html#fill-holes","text":"Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fill-holes"},{"location":"tools/ShapeWorksCommands.html#fix-element","text":"Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fix-element"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance","text":"Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands","title":"geodesic-distance"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance-landmark","text":"Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands","title":"geodesic-distance-landmark"},{"location":"tools/ShapeWorksCommands.html#get-field","text":"Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"get-field"},{"location":"tools/ShapeWorksCommands.html#get-field-value","text":"Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands","title":"get-field-value"},{"location":"tools/ShapeWorksCommands.html#invert-normal","text":"Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"invert-normal"},{"location":"tools/ShapeWorksCommands.html#landmark-geodesics","text":"Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands","title":"landmark-geodesics"},{"location":"tools/ShapeWorksCommands.html#mean-normals","text":"Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands","title":"mean-normals"},{"location":"tools/ShapeWorksCommands.html#mesh-bounds","text":"Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"mesh-bounds"},{"location":"tools/ShapeWorksCommands.html#mesh-curvature","text":"Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands","title":"mesh-curvature"},{"location":"tools/ShapeWorksCommands.html#mesh-info","text":"Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands","title":"mesh-info"},{"location":"tools/ShapeWorksCommands.html#mesh-to-dt","text":"Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands","title":"mesh-to-dt"},{"location":"tools/ShapeWorksCommands.html#mesh-to-image","text":"Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands","title":"mesh-to-image"},{"location":"tools/ShapeWorksCommands.html#probe-volume","text":"Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands","title":"probe-volume"},{"location":"tools/ShapeWorksCommands.html#read-mesh","text":"Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands","title":"read-mesh"},{"location":"tools/ShapeWorksCommands.html#reflect-mesh","text":"Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands","title":"reflect-mesh"},{"location":"tools/ShapeWorksCommands.html#remesh","text":"Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh"},{"location":"tools/ShapeWorksCommands.html#remesh-percent","text":"Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh-percent"},{"location":"tools/ShapeWorksCommands.html#scale-mesh","text":"Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands","title":"scale-mesh"},{"location":"tools/ShapeWorksCommands.html#set-field","text":"Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"set-field"},{"location":"tools/ShapeWorksCommands.html#set-field-value","text":"Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands","title":"set-field-value"},{"location":"tools/ShapeWorksCommands.html#smooth","text":"Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands","title":"smooth"},{"location":"tools/ShapeWorksCommands.html#smooth-sinc","text":"Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands","title":"smooth-sinc"},{"location":"tools/ShapeWorksCommands.html#transform-mesh","text":"Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands","title":"transform-mesh"},{"location":"tools/ShapeWorksCommands.html#translate-mesh","text":"Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands","title":"translate-mesh"},{"location":"tools/ShapeWorksCommands.html#warp-mesh","text":"Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands","title":"warp-mesh"},{"location":"tools/ShapeWorksCommands.html#write-mesh","text":"Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands","title":"write-mesh"},{"location":"tools/ShapeWorksCommands.html#optimize-commands","text":"","title":"Optimize Commands"},{"location":"tools/ShapeWorksCommands.html#optimize","text":"Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands","title":"optimize"},{"location":"tools/ShapeWorksCommands.html#particlesystem-commands","text":"","title":"ParticleSystem Commands"},{"location":"tools/ShapeWorksCommands.html#compactness","text":"Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands","title":"compactness"},{"location":"tools/ShapeWorksCommands.html#generalization","text":"Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"generalization"},{"location":"tools/ShapeWorksCommands.html#read-particle-system","text":"Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands","title":"read-particle-system"},{"location":"tools/ShapeWorksCommands.html#specificity","text":"Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"specificity"},{"location":"tools/ShapeWorksCommands.html#project-commands","text":"","title":"Project Commands"},{"location":"tools/ShapeWorksCommands.html#convert-project","text":"Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands","title":"convert-project"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands_1","text":"","title":"Shapeworks Commands"},{"location":"tools/ShapeWorksCommands.html#seed","text":"Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"seed"},{"location":"use-cases/right-ventricle.html","text":"Right Ventricle: Highly Variable Shapes What is the Use Case? This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released! Grooming Steps For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Supported Tags --use_subsample --num_subsample --skip_grooming --tiny_test Optimizing Parameters Analyzing Shape Model","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#right-ventricle-highly-variable-shapes","text":"","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#what-is-the-use-case","text":"This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released!","title":"What is the Use Case?"},{"location":"use-cases/right-ventricle.html#grooming-steps","text":"For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase.","title":"Grooming Steps"},{"location":"use-cases/right-ventricle.html#supported-tags","text":"--use_subsample --num_subsample --skip_grooming --tiny_test","title":"Supported Tags"},{"location":"use-cases/right-ventricle.html#optimizing-parameters","text":"","title":"Optimizing Parameters"},{"location":"use-cases/right-ventricle.html#analyzing-shape-model","text":"","title":"Analyzing Shape Model"},{"location":"use-cases/use-cases.html","text":"Getting Started with Use Cases What is a Use Case? Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples . Running A Use Case The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case. Uploading a Dataset Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite) Downloading a Dataset Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory] Use Case Data When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj Use Cases Arguments When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below. --use_subsample Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10 --use_single_scale Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale --mesh_mode Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode --tiny_test Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test --verify Use Case Workflow Overview The use cases which demomstrate the Shape Modeling Workflow follow this general outline: Grooming Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet. Optimization Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters . Analysis of Results The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#getting-started-with-use-cases","text":"","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#what-is-a-use-case","text":"Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples .","title":"What is a Use Case?"},{"location":"use-cases/use-cases.html#running-a-use-case","text":"The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case.","title":"Running A Use Case"},{"location":"use-cases/use-cases.html#uploading-a-dataset","text":"Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite)","title":"Uploading a Dataset"},{"location":"use-cases/use-cases.html#downloading-a-dataset","text":"Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory]","title":"Downloading a Dataset"},{"location":"use-cases/use-cases.html#use-case-data","text":"When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj","title":"Use Case Data"},{"location":"use-cases/use-cases.html#use-cases-arguments","text":"When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below.","title":"Use Cases Arguments"},{"location":"use-cases/use-cases.html#-use_subsample","text":"Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10","title":"--use_subsample"},{"location":"use-cases/use-cases.html#-use_single_scale","text":"Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale","title":"--use_single_scale"},{"location":"use-cases/use-cases.html#-mesh_mode","text":"Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode","title":"--mesh_mode"},{"location":"use-cases/use-cases.html#-tiny_test","text":"Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test","title":"--tiny_test"},{"location":"use-cases/use-cases.html#-verify","text":"","title":"--verify"},{"location":"use-cases/use-cases.html#use-case-workflow-overview","text":"The use cases which demomstrate the Shape Modeling Workflow follow this general outline:","title":"Use Case Workflow Overview"},{"location":"use-cases/use-cases.html#grooming","text":"Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet.","title":"Grooming"},{"location":"use-cases/use-cases.html#optimization","text":"Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters .","title":"Optimization"},{"location":"use-cases/use-cases.html#analysis-of-results","text":"The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Analysis of Results"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html","text":"Ellipsoid: Cutting Planes What is the Use Case? The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid: Grooming Steps This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15. Analyzing Shape Models Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#ellipsoid-cutting-planes","text":"","title":"Ellipsoid: Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#what-is-the-use-case","text":"The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid:","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#grooming-steps","text":"This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation.","title":"Grooming Steps"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#analyzing-shape-models","text":"Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Analyzing Shape Models"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html","text":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP) What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results. Starting a New Project with Constraints Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs. Grooming Steps You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs: Optimization Parameters We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure: Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio-wip","text":"","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP)"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#starting-a-new-project-with-constraints","text":"Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs.","title":"Starting a New Project with Constraints"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#grooming-steps","text":"You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#optimization-parameters","text":"We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure:","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Analyzing Shape Model"},{"location":"use-cases/constraint-based/femur-cutting-planes.html","text":"Femur: Shape Model from Meshes with Cutting Planes What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case. Grooming Steps Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur. Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Femur:Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#femur-shape-model-from-meshes-with-cutting-planes","text":"","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#grooming-steps","text":"Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Analyzing Shape Model"},{"location":"use-cases/contour-based/supershapes-contour.html","text":"Supershapes:Shape Model for Contour Domains What is the Use Case? The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data: Grooming Steps In this use case, we download pre-groomed data. The input contours are: Relevant Arguments This use case does not support any arguments Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#supershapesshape-model-for-contour-domains","text":"","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#what-is-the-use-case","text":"The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data:","title":"What is the Use Case?"},{"location":"use-cases/contour-based/supershapes-contour.html#grooming-steps","text":"In this use case, we download pre-groomed data. The input contours are:","title":"Grooming Steps"},{"location":"use-cases/contour-based/supershapes-contour.html#relevant-arguments","text":"This use case does not support any arguments","title":"Relevant Arguments"},{"location":"use-cases/contour-based/supershapes-contour.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , }","title":"Optimization Parameters"},{"location":"use-cases/contour-based/supershapes-contour.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Analyzing Shape Model"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html","text":"Femur Shape Model Directly from Images What is the Use Case? The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU. Relevant Arguments --tiny_test Use Case Pipeline The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below. Step 1: Getting the original data The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green). Step 2: Define the data split The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing. Step 3: Find training alignment transforms Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed. Step 4: Optimize training particles Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model. Step 5: Groom training images Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4. Step 6: Data augmentation Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots. Step 7: Find validation and test alignment transforms and groom images To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images. Step 8: Optimize validation particles with fixed domains In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs. Step 9: Create PyTorch loaders from data The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased. Step 10: Training DeepSSM A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch. Step 11: Predict validation particles and analyze accuracy The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults . Step 12: Predict test particles and analyze accuracy Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Femur SSM Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#femur-shape-model-directly-from-images","text":"","title":"Femur Shape Model Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#what-is-the-use-case","text":"The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU.","title":"What is the Use Case?"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#use-case-pipeline","text":"The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below.","title":"Use Case Pipeline"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-1-getting-the-original-data","text":"The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green).","title":"Step 1: Getting the original data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-2-define-the-data-split","text":"The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing.","title":"Step 2: Define the data split"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-3-find-training-alignment-transforms","text":"Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed.","title":"Step 3: Find training alignment transforms"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-4-optimize-training-particles","text":"Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model.","title":"Step 4: Optimize training particles"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-5-groom-training-images","text":"Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4.","title":"Step 5: Groom training images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-6-data-augmentation","text":"Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots.","title":"Step 6: Data augmentation"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-7-find-validation-and-test-alignment-transforms-and-groom-images","text":"To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images.","title":"Step 7: Find validation and test alignment transforms and groom images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-8-optimize-validation-particles-with-fixed-domains","text":"In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs.","title":"Step 8: Optimize validation particles with fixed domains"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-9-create-pytorch-loaders-from-data","text":"The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased.","title":"Step 9: Create PyTorch loaders from data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-10-training-deepssm","text":"A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch.","title":"Step 10: Training DeepSSM"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-11-predict-validation-particles-and-analyze-accuracy","text":"The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults .","title":"Step 11: Predict validation particles and analyze accuracy"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-12-predict-test-particles-and-analyze-accuracy","text":"Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Step 12: Predict test particles and analyze accuracy"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Data This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#grooming-data","text":"This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Data"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html","text":"Ellipsoid Mesh: Basic Example What is the Use Case? The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks. Grooming Steps This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#ellipsoid-mesh-basic-example","text":"","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#what-is-the-use-case","text":"The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#analyzing-shape-model","text":"Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/hip.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones. Grooming Data This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Hip: Multiple Domains Alignment"},{"location":"use-cases/mesh-based/hip.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/hip.html#what-is-the-use-case","text":"The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/hip.html#grooming-data","text":"This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint:","title":"Grooming Data"},{"location":"use-cases/mesh-based/hip.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/hip.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/hip.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/lumps.html","text":"Lumps: Shape Model directly from Mesh What is the Use Case? The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Grooming Steps This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#lumps-shape-model-directly-from-mesh","text":"","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#what-is-the-use-case","text":"The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/lumps.html#grooming-steps","text":"This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/lumps.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/lumps.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/lumps.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/thin-cavity-bean.html","text":"Thin Cavity Bean: Shape Model with Geodesic Distances What is the Use Case? The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation. Grooming Steps In this use case, we download pre-groomed data. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on. Analyzing Shape Model Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#what-is-the-use-case","text":"The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#grooming-steps","text":"In this use case, we download pre-groomed data. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on.","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#analyzing-shape-model","text":"Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html","text":"Fixed Domains Ellipsoid: Shape Model on New Shapes What is the Use Case? The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids. Grooming Steps This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms. Relevant Arguments --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" } Analyzing Shape Model Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#what-is-the-use-case","text":"The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids.","title":"What is the Use Case?"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#grooming-steps","text":"This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms.","title":"Grooming Steps"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" }","title":"Optimization Parameters"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#analyzing-shape-model","text":"Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html","text":"Incremental Supershapes: Building a Shape Model Incrementally What is the Use Case? The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script. Use Case Options When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size. Sorting Method The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median. Initial Model Size The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed. Incremental Batch Size The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization. Grooming Steps In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --tiny_test --interactive Incremental Optimization In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized. Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch. Analyzing Shape Model The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes. Evaluation of the Benefits of Incremental Optimization To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model. Subsample of Dataset The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-supershapes-building-a-shape-model-incrementally","text":"","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#what-is-the-use-case","text":"The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script.","title":"What is the Use Case?"},{"location":"use-cases/multistep/incremental_supershapes.html#use-case-options","text":"When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size.","title":"Use Case Options"},{"location":"use-cases/multistep/incremental_supershapes.html#sorting-method","text":"The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median.","title":"Sorting Method"},{"location":"use-cases/multistep/incremental_supershapes.html#initial-model-size","text":"The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed.","title":"Initial Model Size"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-batch-size","text":"The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization.","title":"Incremental Batch Size"},{"location":"use-cases/multistep/incremental_supershapes.html#grooming-steps","text":"In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/multistep/incremental_supershapes.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test --interactive","title":"Relevant Arguments"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-optimization","text":"In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized.","title":"Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch.","title":"Optimization Parameters"},{"location":"use-cases/multistep/incremental_supershapes.html#analyzing-shape-model","text":"The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html#evaluation-of-the-benefits-of-incremental-optimization","text":"To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model.","title":"Evaluation of the Benefits of Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#subsample-of-dataset","text":"The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Subsample of Dataset"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html","text":"Shape Model for Multiple Domains from Segmentations What is the Use Case? The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#shape-model-for-multiple-domains-from-segmentations","text":"","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/ellipsoid.html","text":"Ellipsoid: Basic Example What is the Use Case? The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#ellipsoid-basic-example","text":"","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#what-is-the-use-case","text":"The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid.html#relevant-arguments","text":"--use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/left-atrium.html","text":"Left Atrium: Shape Model from Segmentations What is the Use Case? The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#left-atrium-shape-model-from-segmentations","text":"","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#what-is-the-use-case","text":"The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/left-atrium.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/left-atrium.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/left-atrium.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/left-atrium.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Analyzing Shape Model"},{"location":"use-cases/shared-boundary-based/peanut.html","text":"Peanut: Shape Model of Multiple Domains with Shared Boundaries What is the Use Case? The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller. Grooming Steps This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset. Relevant Arguments --use_subsample --num_subsample --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Peanut:Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#what-is-the-use-case","text":"The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller.","title":"What is the Use Case?"},{"location":"use-cases/shared-boundary-based/peanut.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset.","title":"Grooming Steps"},{"location":"use-cases/shared-boundary-based/peanut.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/shared-boundary-based/peanut.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/shared-boundary-based/peanut.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Analyzing Shape Model"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html","text":"Ellipsoid: Shape Evaluation in Python What is the Use Case? The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#ellipsoid-shape-evaluation-in-python","text":"","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#what-is-the-use-case","text":"The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#analyzing-shape-model-using-python-apis","text":"The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/ellipsoid-pca.html","text":"Ellipsoid: Shape Statistics in Python What is the Use Case? The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#ellipsoid-shape-statistics-in-python","text":"","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#what-is-the-use-case","text":"The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-pca.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-pca.html#analyzing-shape-model-using-python-apis","text":"The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/femur-pvalues.html","text":"Femur: Group Difference Statistics in Python What and Where is the Use Case? This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution. Relevant Arguments --tiny_test Analyzing Shape Model For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#femur-group-difference-statistics-in-python","text":"","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#what-and-where-is-the-use-case","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution.","title":"What and Where is the Use Case?"},{"location":"use-cases/stats-based/femur-pvalues.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/femur-pvalues.html#analyzing-shape-model","text":"For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Analyzing Shape Model"},{"location":"users/citation.html","text":"How to Cite ShapeWorks? Acknowledgements If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\" Citation When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#how-to-cite-shapeworks","text":"","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#acknowledgements","text":"If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\"","title":"Acknowledgements"},{"location":"users/citation.html#citation","text":"When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"Citation"},{"location":"users/install.html","text":"How to Install ShapeWorks? First, download ShapeWorks Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases. Next, follow the instructions for your platform. Windows Mac Linux Installing ShapeWorks on Windows Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\ Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid ShapeWorks also includes interactive Jupyter Python notebook examples. Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Mac Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Linux Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"How to Install ShapeWorks?"},{"location":"users/install.html#how-to-install-shapeworks","text":"","title":"How to Install ShapeWorks?"},{"location":"users/install.html#first-download-shapeworks","text":"Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases.","title":"First, download ShapeWorks"},{"location":"users/install.html#next-follow-the-instructions-for-your-platform","text":"Windows Mac Linux","title":"Next, follow the instructions for your platform."},{"location":"users/install.html#installing-shapeworks-on-windows","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Windows"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started","text":"Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-mac","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Mac"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_1","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_1","text":"Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-linux","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Linux"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_2","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_2","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/papers.html","text":"Relevant Papers Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Revelant Papers"},{"location":"users/papers.html#relevant-papers","text":"Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Relevant Papers"},{"location":"workflow/analyze.html","text":"How to Analyze Your Shape Model? Surface Correspondences ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out Running ShapeWorks Studio When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen Using XML Files You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml Using Spreadsheets ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets Surface Reconstruction For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... . Statistical Analysis Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis. Group Differences If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups) Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#how-to-analyze-your-shape-model","text":"","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#surface-correspondences","text":"ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out","title":"Surface Correspondences"},{"location":"workflow/analyze.html#running-shapeworks-studio","text":"When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen","title":"Running ShapeWorks Studio"},{"location":"workflow/analyze.html#using-xml-files","text":"You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml","title":"Using XML Files"},{"location":"workflow/analyze.html#using-spreadsheets","text":"ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets","title":"Using Spreadsheets"},{"location":"workflow/analyze.html#surface-reconstruction","text":"For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... .","title":"Surface Reconstruction"},{"location":"workflow/analyze.html#statistical-analysis","text":"Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis.","title":"Statistical Analysis"},{"location":"workflow/analyze.html#group-differences","text":"If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups)","title":"Group Differences"},{"location":"workflow/analyze.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"workflow/groom.html","text":"How to Groom Your Dataset? ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands . Common Pre-Processing Steps for Segmentations Resampling images and segmentations This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing. Aligning segmentations Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Clip segmentations In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename ) Cropping and padding segmentations In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename ) Converting segmentations to smooth signed distance transforms For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon. Common Pre-Processing Steps for Meshes Reflect meshes It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename ) Meshes to volumes Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands Remesh Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 ) Aligning meshes Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform ) Extract Shared Boundary In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol ) Input shapes with shared surface Output extracted surfaces Extract Contour The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes ) Smoothing Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#how-to-groom-your-dataset","text":"ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands .","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#common-pre-processing-steps-for-segmentations","text":"","title":"Common Pre-Processing Steps for Segmentations"},{"location":"workflow/groom.html#resampling-images-and-segmentations","text":"This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing.","title":"Resampling images and segmentations"},{"location":"workflow/groom.html#aligning-segmentations","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename )","title":"Aligning segmentations"},{"location":"workflow/groom.html#clip-segmentations","text":"In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename )","title":"Clip segmentations"},{"location":"workflow/groom.html#cropping-and-padding-segmentations","text":"In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename )","title":"Cropping and padding segmentations"},{"location":"workflow/groom.html#converting-segmentations-to-smooth-signed-distance-transforms","text":"For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon.","title":"Converting segmentations to smooth signed distance transforms"},{"location":"workflow/groom.html#common-pre-processing-steps-for-meshes","text":"","title":"Common Pre-Processing Steps for Meshes"},{"location":"workflow/groom.html#reflect-meshes","text":"It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename )","title":"Reflect meshes"},{"location":"workflow/groom.html#meshes-to-volumes","text":"Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands","title":"Meshes to volumes"},{"location":"workflow/groom.html#remesh","text":"Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 )","title":"Remesh"},{"location":"workflow/groom.html#aligning-meshes","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform )","title":"Aligning meshes"},{"location":"workflow/groom.html#extract-shared-boundary","text":"In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol )","title":"Extract Shared Boundary"},{"location":"workflow/groom.html#input-shapes-with-shared-surface","text":"","title":"Input shapes with shared surface"},{"location":"workflow/groom.html#output-extracted-surfaces","text":"","title":"Output extracted surfaces"},{"location":"workflow/groom.html#extract-contour","text":"The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes )","title":"Extract Contour"},{"location":"workflow/groom.html#smoothing","text":"Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"Smoothing"},{"location":"workflow/optimize.html","text":"How to Optimize Your Shape Model? Particle-based Shape Modeling ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term) Particle-based Representation More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration . Shape vs. Configuration Spaces This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization. World vs. Local Coordinates For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) . Optimization Cost Function Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces. Particles Initialization & Optimization ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes. On Algorithmic Parameters Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand. Correspondence Relative Weighting One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape) Shape Statistics in Initialization and Optimization Steps At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles Starting and Ending Regularization Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure. Optimizing Correspondences You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format. Parameter Tuning General Process The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model. Qualitative Assessment To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors. Tips and Tricks Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this. Correspondences on New Samples ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#how-to-optimize-your-shape-model","text":"","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#particle-based-shape-modeling","text":"ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term)","title":"Particle-based Shape Modeling"},{"location":"workflow/optimize.html#particle-based-representation","text":"More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration .","title":"Particle-based Representation"},{"location":"workflow/optimize.html#shape-vs-configuration-spaces","text":"This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization.","title":"Shape vs. Configuration Spaces"},{"location":"workflow/optimize.html#world-vs-local-coordinates","text":"For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) .","title":"World vs. Local Coordinates"},{"location":"workflow/optimize.html#optimization-cost-function","text":"Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces.","title":"Optimization Cost Function"},{"location":"workflow/optimize.html#particles-initialization-optimization","text":"ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes.","title":"Particles Initialization & Optimization"},{"location":"workflow/optimize.html#on-algorithmic-parameters","text":"Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand.","title":"On Algorithmic Parameters"},{"location":"workflow/optimize.html#correspondence-relative-weighting","text":"One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape)","title":"Correspondence Relative Weighting"},{"location":"workflow/optimize.html#shape-statistics-in-initialization-and-optimization-steps","text":"At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles","title":"Shape Statistics in Initialization and Optimization Steps"},{"location":"workflow/optimize.html#starting-and-ending-regularization","text":"Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure.","title":"Starting and Ending Regularization"},{"location":"workflow/optimize.html#optimizing-correspondences","text":"You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format.","title":"Optimizing Correspondences"},{"location":"workflow/optimize.html#parameter-tuning","text":"","title":"Parameter Tuning"},{"location":"workflow/optimize.html#general-process","text":"The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model.","title":"General Process"},{"location":"workflow/optimize.html#qualitative-assessment","text":"To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors.","title":"Qualitative Assessment"},{"location":"workflow/optimize.html#tips-and-tricks","text":"Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this.","title":"Tips and Tricks"},{"location":"workflow/optimize.html#correspondences-on-new-samples","text":"ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"Correspondences on New Samples"},{"location":"workflow/parameters.html","text":"ShapeWorks supports two formats for handling the data for performing grooming and optimization via the python interface and ShapeWorksStudio : XML Parameter file Project excel file Project JSON file (swproj) The project excel/json file formats are the current standard project file format. The older XML format is deprecated and will not have newer features added to it. Users are encouraged to use the project excel/json file. XML Parameter File (deprecated) Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed. Parameter Dictionary in Python Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , } Project Excel File ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings. Project JSON File ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ... Python API for Generation Project Sheet The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Optimization Parameters"},{"location":"workflow/parameters.html#xml-parameter-file-deprecated","text":"Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed.","title":"XML Parameter File (deprecated)"},{"location":"workflow/parameters.html#parameter-dictionary-in-python","text":"Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , }","title":"Parameter Dictionary in Python"},{"location":"workflow/parameters.html#project-excel-file","text":"ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings.","title":"Project Excel File"},{"location":"workflow/parameters.html#project-json-file","text":"ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ...","title":"Project JSON File"},{"location":"workflow/parameters.html#python-api-for-generation-project-sheet","text":"The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Python API for Generation Project Sheet"}]} \ No newline at end of file +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"Welcome to ShapeWorks! What is ShapeWorks? ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results. Latest & Greatest Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements. Why use ShapeWorks? ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages ShapeWorks Get-Togethers Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu . ShapeWorks Workshops & Webinars ShapeWorks @SB3C 2021 Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia ShapeWorks in Action! The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"Home"},{"location":"index.html#welcome-to-shapeworks","text":"","title":"Welcome to ShapeWorks!"},{"location":"index.html#what-is-shapeworks","text":"ShapeWorks is a free, open-source suite of software tools that uses a flexible method for automated construction of compact statistical landmark-based shape models of ensembles of anatomical shapes that do not rely on any specific surface parameterization. The method requires very little preprocessing or parameter tuning and applies to a wide range of shape analysis problems, including nonmanifold surfaces and arbitrary topology objects. ShapeWorks includes tools for preprocessing data, computing landmark-based shape models, and visualizing the results.","title":"What is ShapeWorks?"},{"location":"index.html#latest-greatest","text":"Release Notes Please visit Release Notes to know about the ShapeWorks' cutting-edge features and improvements.","title":"Latest & Greatest"},{"location":"index.html#why-use-shapeworks","text":"ShapeWorks is the only publicly available tool that learns a population-specific anatomical mapping in a way that respects population variability without relying on a user-defined template/atlas. It produces more detailed surface-to-surface correspondences than traditional landmark-based approaches. Its optimized approach offers increased power for testing biological hypotheses of shape and shape differences, captures subtle shape variations, and decreases observer bias for reproducible scientific results. ShapeWorks can discover the underlying mode of variation in the box-bump ensemble in comparison to existing publicly available shape modeling software packages","title":"Why use ShapeWorks?"},{"location":"index.html#shapeworks-get-togethers","text":"Where to start? What are the latest features? How to customize existing workflows? A monthly virtual get-together meeting for ShapeWorks users is organized to demonstrate new features, discuss the customization of the shape modeling workflow to users' own use cases, and get suggestions to improve the software and documentation. If you would like to be added to the invitation list, please send an email to shireen-at-sci-dot-utah-dot-edu .","title":"ShapeWorks Get-Togethers"},{"location":"index.html#shapeworks-workshops-webinars","text":"","title":"ShapeWorks Workshops & Webinars"},{"location":"index.html#shapeworks-sb3c-2021","text":"Part 1: Statistical Shape Modeling & ShapeWorks Speakers: Shireen Elhabian and Alan Morris Part 2: ShapeWorks Success Stories in Orthopedics Speakers: Heath Henninger, Andrew Anderson, and Amy Lenz Part 3: Next Generation of ShapeWorks Speakers: Shireen Elhabian, Andrew Anderson, Penny Atkins, and Riddhish Bhalodia","title":"ShapeWorks @SB3C 2021"},{"location":"index.html#shapeworks-in-action","text":"The underlying scientific premise of ShapeWorks, particle-based shape modeling, is a groupwise approach to placing landmarks (i.e., correspondences) that consider variability in the entire cohort of images. ShapeWorks uses a set of interacting particle systems, one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover and, therefore, describe surface geometry optimally. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. In particular, ShapeWorks explicitly models the inherent trade-off between the model's statistical simplicity (i.e., compactness) in the shape space and the accuracy of the shape representations (i.e., good surface samplings) in the configuration space. ShapeWorks has been effective in various applications, including psychology, biological phenotyping, cardiology, and orthopedics. See relevant papers and ShapeWorks Success Stories . Now enjoy some tour videos for different recent software releases. ShapeWorks 6.4 tour - Multi-level PCA, Improved Constraints, Python Docs, and more ... ShapeWorks 6.3 tour - Landmarks, cutting planes, free form constraints in Studio, and more ... ShapeWorks 6.2 tour - DeepSSM in Studio, multi-domain alignments, shape evaluation charts, scalar and opacity controls, and more ... ShapeWorks 6.1 tour - multi-domain support, mesh grooming, improved models for complex anatomies, and more ... ShapeWorks 6.0 tour - mesh support and more in ShapeWorks Studio ShapeWorks 5.5 tour - feature support in ShapeWorks Studio Grooming segmentations, optimizing correspondences, and analyzing shape models in ShapeWorks Studio","title":"ShapeWorks in Action!"},{"location":"todo.html","text":"Documentation ToDo List To add/edit for docs index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal. To investigate for docs How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics? For ShapeWorks repo Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case Misc Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Documentation ToDo List"},{"location":"todo.html#documentation-todo-list","text":"","title":"Documentation ToDo List"},{"location":"todo.html#to-addedit-for-docs","text":"index.md#shapeworks-in-action : Add the box bump examples and reference our benchmark study. index.md#shapeworks-in-action : Add video for illustration index.md#with-shapeworks-you-can : show case ShapeWorks in different studies (e.g., ortho and cardilogy) and cite relevant papers index.md and repo readme: Showcase our SSM benchmark study users/papers.md : Add links to the papers and update the list of papers with recent ones about/release-notes.md : Fix links in release notes about/team.md : May be some pics dev/autodoc.md : Which dir to use for autodoc for commands? Spell and grammar check all markdown files use-cases/ellipsoid.md : Add a figure showing some samples of the dataset that highlight the mode of variation Be consistent: multi-scale vs multiscale in the md files Be consistent: we vs you (e.g., in use cases) Add illustrating images to the groom steps in groom and specific use cases Update md files for groom/optimize and use cases to reflect the new workflow (icp, bounding box, crop) that does not apply explicitly resample images/segmentations beyond the isoresample step and use transforamtions as input to the optimization For groom and use cases, update the reference selection documentation to reflect any recent updates in this process (e.g., meshes, pairwise distance matrix ... etc) workflow/XX.md : Review and edit the workflow md files. Add/update the decription of single vs multiscale. use-cases/ellipsoid.md : Add video/snapshots for the optimized model and groomed data use-cases/XX.md : Update optimization parameters based on Examples/Python use-cases/XX.md : Update use cases to reflect multi-scale being integrated into the optimizer Add documentation for femur_mesh and lumps use cases use-cases/left-atrium.md :Check the left atrium use case for saving txt files to carry over images to reflect recent changes (consolidation) Consolidate docs/pdfs Consolidate docs/backlog Add to use cases how to run with prepped data Add mean and PCA visuals for ellipsoid and fixed domain ellipsoid use cases Review and edit ellipsoid use cases Review and edit femur use case Review and edit right ventricle use case Once meshes work, update the femur use case to indicate that this is optional and add femur_mesh use case Instructions on how to add videos to the documentation (thumbnails that link to youtube) Instructions to add a new use case Revise the right ventricle use case after release it. Might need more results to illustrate group differences. Instructions for Doxygen and building doxygen. dev/commands.md :How to add shapeworks commands? dev/gh-actions.md : getting started with github actions dev/python-apis.md : How to Add Python APIs? dev/tests.md : How to Add and Run Unit Tests? Remove all hard-coded links outside docs (relative paths) except for (1) web links (e.g. segmentation softwares, markdown edits ... etc) and (2) shapeworks releases, and shapeworks data portal.","title":"To add/edit for docs"},{"location":"todo.html#to-investigate-for-docs","text":"How can we use repo_url in markdown files to link to repo files? -- not needed any more, we won't include any links outside docs except for weblinks, shapeworks releases and data portal. How to use google_analytics?","title":"To investigate for docs"},{"location":"todo.html#for-shapeworks-repo","text":"Change the autodoc dir for commands in github action and release, see 'dev/autodoc.md' Update DocumentationUtilsPackage to generate md for mkdocs (ShapeworksCommand.md) Add mkdocs build for autodoc (deploy) to github actions and release When a use case launches Studio, does it load groomed data? It does, based on the launch function that takes in distance transforms, local, and world point files. Review and edit comments in the .py A fixed domain use case that include grooming the new samples Revisit the fixed domain use case, why do we need the path for the mean shape? why not use the mean of the fixed domains? Release and update the right ventricle use case","title":"For ShapeWorks repo"},{"location":"todo.html#misc","text":"Add link to documentation http://sciinstitute.github.io/ShapeWorks/ to shapeworks.sci.utah.edu Prepped vs groomed? Be consistent in documentation, tags for RunUseCase, and output folders from running use cases","title":"Misc"},{"location":"about/contact.html","text":"Contact Us Users Forum Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Users Mailing List Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu. Developers Mailing List You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Contact Us"},{"location":"about/contact.html#contact-us","text":"","title":"Contact Us"},{"location":"about/contact.html#users-forum","text":"Our user forum is located here: ShapeWorks Discourse Group . This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community.","title":"Users Forum"},{"location":"about/contact.html#users-mailing-list","text":"Please join our mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-users and an empty body. You can also email any questions, bugs, or feature requests to shapeworks-users@sci.utah.edu.","title":"Users Mailing List"},{"location":"about/contact.html#developers-mailing-list","text":"You can join our developer support mailing list by sending a message to sympa@sci.utah.edu with the subject subscribe shapeworks-dev-support and an empty body. As a developer, if you encounter any problems or bugs, please report them using the issue tracker on GitHub . This includes feature requests. Feel free to add improvements using git pull requests. You can also email ShapeWorkers at shapeworks-dev-support@sci.utah.edu.","title":"Developers Mailing List"},{"location":"about/license.html","text":"ShapeWorks License ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"about/license.html#shapeworks-license","text":"ShapeWorks is available for free and is open source under the MIT License. The MIT License Copyright (c) 2012 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"ShapeWorks License"},{"location":"about/release-notes.html","text":"Release Notes ShapeWorks 6.4.2 - 2023-07-05 Fixes Fix python module versions preventing python import from working (#2104) ShapeWorks 6.4.1 - 2023-05-10 Fixes Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079) ShapeWorks 6.4.0 - 2023-05-05 What is new? ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944) ShapeWorks 6.3.2 - 2022-10-04 Fixes Fix install_shapeworks.sh on Linux (#1883) ShapeWorks 6.3.1 - 2022-07-22 Fixes Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) ShapeWorks 6.3.0 - 2022-06-09 What is new? ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation. Fixes Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank ShapeWorks 6.2.1 - 2022-01-07 What is new? ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint. Fixes Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes ShapeWorks 6.2 - 2021-11-16 What is new? ShapeWorks Back-end New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details. ShapeWorks Front-end Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details. User's Support Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details. Deep Learning DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details. Improvements ShapeWorks Back-end Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary. User's Support Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details. Fixes ShapeWorks Back-end Memory leak: Fixed memory leak issues in FEMesh operations ShapeWorks Front-end Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools. ShapeWorks 6.1 - 2021-06-28 What is new? ShapeWorks Back-end Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings. ShapeWorks Front-end Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example. User's Support Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively. Improvements ShapeWorks Back-end Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality. ShapeWorks Front-end Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers. Deep Learning & Shape Modeling Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU. User's Support Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import. Fixes ShapeWorks Back-end Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image. ShapeWorks Front-end Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved. Deep Learning & Shape Modeling DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command. ShapeWorks 6.0 - 2021-03-30 What's New User's Support New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort. ShapeWorks Back-end Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests. All-in-one Studio Front-end Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step. Deep Learning & Shape Modeling DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually. Improvements User's Support Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools. ShapeWorks Back-end Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups. All-in-one Studio Front-end Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems. Deep Learning & Shape Modeling More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding. Fixes ShapeWorks Back-end Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks. All-in-one Studio Front-end Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation. ShapeWorks 5.5.0 - 2020-10-15 What's New User's Support Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models. ShapeWorks Back-end ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details. All-in-one Studio Front-end Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet. Deep Learning & Shape Modeling New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details. Improvements User's Support Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming. ShapeWorks Back-end Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases. All-in-one Studio Front-end Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects. Fixes ShapeWorks Back-end Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints. ShapeWorks 5.4.1 - 2020-06-15 Fixes ShapeWorks Studio: Fixed crash when importing data on a new/blank project. ShapeWorks 5.4.0 - 2020-06-10 What's New New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases. Improvements Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models. Fixes Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare ShapeWorks 5.3.0 - 2020-02-20 What's New Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md) Improvements Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart ShapeWorks 5.2.2 - 2020-01-09 Fixes Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes ShapeWorks 5.2.1 - 2019-11-09 Fixes Fix examples, binaries ShapeWorks 5.2.0 - 2019-11-07 What's New Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically Improvements Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun Fixes Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Release Notes"},{"location":"about/release-notes.html#release-notes","text":"","title":"Release Notes"},{"location":"about/release-notes.html#shapeworks-642-2023-07-05","text":"","title":"ShapeWorks 6.4.2 - 2023-07-05"},{"location":"about/release-notes.html#fixes","text":"Fix python module versions preventing python import from working (#2104)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-641-2023-05-10","text":"","title":"ShapeWorks 6.4.1 - 2023-05-10"},{"location":"about/release-notes.html#fixes_1","text":"Fix grooming crash when there are free form constraints in an untitled/unsaved project (#2078) Fix update checker potentially crashing (#2079)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-640-2023-05-05","text":"","title":"ShapeWorks 6.4.0 - 2023-05-05"},{"location":"about/release-notes.html#what-is-new","text":"ShapeWorks Back-end New shapeworks 'analyze' command for offline analysis of shape models Improved free form constraints that now support doubly connected areas (e.g. donut-like) Data Portal migrated to new ShapeWorks Cloud and swcc (ShapeWorks Cloud Client) tool ShapeWorks can now be used as a 3rd party library ( details here ) Added support for 'save_init_splits' and 'checkpointing_interval' parameters in the project spreadsheet formats Added new JSON based file format for storing ShapeWorks projects (swproj) Added a unified logging library for ShapeWorks (spdlog) Uniform numerical computation of specificity across platforms Updated dependencies. Python now at 3.9, PyTorch 1.11.0, VTK 9.1, ITK 5.2.1 ShapeWorks Front-end Studio can now automatically check for updates and prompt the user to download them Improved progress bar in Studio is more representative and also estimates time remaining Added ability to arbitrarily scale difference arrows in Studio Added file association support for swproj file extension on Windows and Mac New multi-level analysis feature in Studio ( details here ) Added ability to hide/show particles per domain User's Support Hip Use Case: The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domain correlations and interactions directly on triangular surface meshes. The use case showcases calculating the alignment options available for multiple organ anatomies. ( details here ) Added options to the incremental use case when run in --interactive mode, including sorting method, initial model size, and incremental batch size. The sorting method determines how the shapes are sorted to be added incrementally. There are three options: random, median, distribution. ( details here ) Python API documentation has been added to the ShapeWorks documentation site","title":"What is new?"},{"location":"about/release-notes.html#fixes_2","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815) Fix procrustes with multi-domain models (#1755) Fixed crashes in groom due to multi-threading (#1944)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-632-2022-10-04","text":"","title":"ShapeWorks 6.3.2 - 2022-10-04"},{"location":"about/release-notes.html#fixes_3","text":"Fix install_shapeworks.sh on Linux (#1883)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-631-2022-07-22","text":"","title":"ShapeWorks 6.3.1 - 2022-07-22"},{"location":"about/release-notes.html#fixes_4","text":"Fix Studio python problem causing crash on group differences (#1781) Fix Studio slow/hanging on certain free form constraints (#1817, #1801) Fix crashes on certain projects (#1800, #1815)","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-630-2022-06-09","text":"","title":"ShapeWorks 6.3.0 - 2022-06-09"},{"location":"about/release-notes.html#what-is-new_1","text":"ShapeWorks Back-end Added constraints functionality for the mesh domain both clipping and augmented lagrangian together with a flag to flip between the two options. Group Difference Statistics in Python can now perform LDA. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups. ShapeWorks Front-end New selectable and configurable colormap support Added new support for showing the difference to the mean for any given mesh (subjects or generated PCA mode positions) Added new support for displaying multiple image types (e.g. original vs groomed) with individual opacity settings. Also ability to show surface to surface distance. The multiple domains groom section has been upgraded to its own panel for better UI consistency. A new checkbox for applying grooming steps to all domains has been added to assist when many domains are in use A new image export dialog as been added with various export options PCA Montage and Fringe plot export. Building on the image export dialog, the PCA Montage exporter allows you to create a multi-image montage across PCA modes. Export scalar values: Addition export options have been added to export mesh scalars, particle scalars, and all subjects particle scalars. Image volume support: New support has been added for displaying 2D slices from image volumes (e.g. CT/MRI) Landmark placement UI in Studio, landmark registration, landmarks as initializers Cutting planes UI in Studio: Added new support for defining and manipulating cutting planes Free form constraints UI in Studio: Added new support for defining free form constraints Procrustes scaling only mode: New support for running procrustes in a scaling-only mode has been added. Good/bad particle display: The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. Group LDA chart in Studio: Support for the group LDA chart has been added in Studio User's Support Added grooming steps to mesh-based use cases using the mesh Python API Alignment transforms are now passed to the optimizer and used in optimization instead of being applied before optimization. This results in local particles in the original data's coordinate system, allowing for easier subsequent analysis The use cases now use project spreadsheets in optimizations instead of XML files. This format is more interpretable and allows of better integration with Studio. The project sheets support multiple domains, fixed domains, constraints The femur use case has been refactored into a single use case where alignment transforms and cutting plane constraints are passed in optimization. Grooming added for multiple domain use cases. The pipeline demonstrates alignment w.r.t domain 1 ellipsoids. DeepSSM Use Case: The DeepSSM use case has been updated to demonstrate the full pipeline, including training data generation instead of relying on the femur use case to create a training shape model. The use case now demonstrates how to optimize validation particles via fixed domain optimization where the training particles are unchanged. Image-to-image registration tools have been added to prepare DeepSSM input images without requiring corresponding segmentations or meshes. This allows for true inference with DeepSSM. Incremental Use Case: A new use case has been added, demonstrating how a shape model can be optimized incrementally on 3D supershapes. This approach is beneficial when the cohort of shapes is very large, and single optimization would be slow, and when the dataset is small but contains a large amount of shape variation. Functionality has been added to select the order of shape optimization based on the distance of each shape to all others in the cohort. This allows for particles to be fit to inlier shapes first, then outliers. Documentation has been added that explains the use case and quantitatively demonstrates the benefit of incremental optimization. Added a Studio use case for constraints and a pseudo-tutorial for it in the documentation.","title":"What is new?"},{"location":"about/release-notes.html#fixes_5","text":"Studio: TabWidget rendering on MacOS 11/12 fixed Mesh::toDistanceTransform fixed Studio: Fixed optimization abort not always aborting Optimize: Fixed particle splitting for use with input transforms Studio: Fix clamping of glyph size Studio: Fix bug when groom output path is blank","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-621-2022-01-07","text":"","title":"ShapeWorks 6.2.1 - 2022-01-07"},{"location":"about/release-notes.html#what-is-new_2","text":"ShapeWorks Back-end Added new isolate functionality that isolates the largest object in a segmentation Added remeshing using ACVD library Added option to save mesh file as binary (default is ASCII) Uniform transform interface added: ITK transforms can be applied to meshes and VTK transforms can be applied to images. ShapeWorks Front-end Studio: Added convert to mesh pipeline for segmentation inputs (can run both image and mesh pipelines) Studio: Added reflection, remeshing, image cropping, image resampling to grooming Studio: New UI for grooming User's Support Updated ellipsoid_mesh use case to demonstrate mesh grooming Combined the functionality of the three femur use cases - femur , femur_mesh , femur_cut into one use case. The femur_cut use case now demonstrates the process of grooming meshes and the associated images , optimization on meshes with a single cutting plane as a constraint.","title":"What is new?"},{"location":"about/release-notes.html#fixes_6","text":"Studio: Fixed display names in the corner (removing long paths) Studio: Fixed recomputation of shape statistics upon re-running shape model and removing shapes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-62-2021-11-16","text":"","title":"ShapeWorks 6.2 - 2021-11-16"},{"location":"about/release-notes.html#what-is-new_3","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end","text":"New Mesh grooming tools: The following grooming tools are supported from all three different interfaces - command line, C++ and Python: curvature : computes curvature (types include principal, gaussian, and mean curvature) of a given triangular mesh and returns a field that contains a scalar value for each mesh vertex. See mesh-curvature to know about function parameters. fixElement : fixes element winding of a given triangular mesh as a quality control step for preparing meshes for shape modeling. See fix-element to know about function parameters. geodesicDistance : the computation of geodesic distances enables feature-based correspondences. Read this paper for more details. Below are exemplar usage scenarios. geodesicDistance (pointA, pointB) : computes geodesic distance between 2 points on a triangular mesh. See geodesic-distance to know about function parameters. geodesicDistance (landmark) : computes geodesic distances between all points on a triangular mesh to a given point (landmark). See geodesic-distance-landmark to know about function parameters. geodesicDistance (curve) : computes geodesic distances between all points on mesh and set of points (curve) computeMeanNormals : computes the average surface normal for each mesh vertex in a given set of triangular meshes with vertex-wise correspondences and returns a field containing a normal vector for each mesh vertex. See mean-normals to know about function parameters. New Mesh query/operator tools: The following tools are supported from all three different interfaces - command line, C++ and Python: operator+= : appends a mesh to an existing mesh. The result of this operator is a single mesh with a single vertex and face lists. closestPoint : returns the closest point on a face in the mesh to a given point in space. See closest-point to know about function parameters. closestPointId : returns closest point id in the mesh to a given point in space points : returns matrix with number of points with (x,y,z) coordinates of each point faces : returns matrix with number of faces with indices of the three points from which each face is composed getFace : return indices of the three points with which the face at the given index is composed Mesh fields: Added support for passing multi-valued fields in addition to scalar fields. Previously field operations such as getField , setField supported only single-value components. Now, these operations can be used for multi-valued components as well. This is useful for associated surface meshes with positional (i.e., spatially varying) features, e.g., application-specific features such as cortical thickness and bone density, and computationally driven features such as geodesics to anatomical landmarks, curvatures, and surface normals. Free-form constraints (FFCs): FFCs support has been added. Added a unit test for FFCs, a typical sphere unit test with a constraint that cuts the sphere like a tennis ball grove. Also added a unit test with two domains, both spheres in different locations. The first sphere has one cutting plane and 25 sphere constraints, and the second sphere has one cutting plane and one free form constraint. See Free-Form Constraints for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end","text":"Multiple domains in Studio: Support for multiple alignment strategies is now present in Studio. It allows analysis with and without articulation with a choice of reference domain or global alignment. See Multiple Domain Alignments New analysis features in Studio: Shape evaluation charts for compactness, specificity, and generalization have been added. See for Metrics Panel more details. Usability features in Studio: New usability features such as group p-value display, feature map scalar control, surface opacity controls on a per doamin basis, message history window, suppressible error dialog, narrow band optimization parameter, multiple domain expore options (combined and support) and allow initial landmark points. See New in ShapeWorks Studio 6.2 for more details.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support","text":"Shape cohort generation: Added segmentation and image generation for 2D contour supershapes. See this Jupyter Notebook for more details. Analyzing the group differences: A new use case has been added, demonstrating the functionality of shape statistics tools to perform hypothesis testing of group shape differences. See Femur: Group Difference Statistics in Python for more details. Sub-sampling for multiple domains: We can now perform subsampling for multiple domains data by combining the individual shapes from all the domains and generating combined shapes. We perform a clustering-based subset selection on the combined shapes so that the subset is representative of the entire dataset and all domains. The representative subset of the specified sample size will be helpful to run through the SSM pipeline so that the use case runs faster and uses less memory. API reference in Documentation: Information about different classes (e.g Image), functions (e.g Image::antialias), function parameters, function return types in C++ API has been added. Check out Groups , Classes , Namespaces , Files for more details.","title":"User's Support"},{"location":"about/release-notes.html#deep-learning","text":"DeepSSM in Studio: The ability to run DeepSSM has been added to Studio. See DeepSSM in Studio for more details.","title":"Deep Learning"},{"location":"about/release-notes.html#improvements","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_1","text":"Safe construction of Image instances in Python: Images can now be safely constructed without copying and passed without copying from/to Python. In particular, passing Images for rendering using pyvista is now transparent and copy-free (note: copying is still supported if necessary). A Jupyter Notebook was added to demonstrate Image initialization and passing. Efficient data sharing between Python and C++: Added efficient sharing of large data between Python and C++ (for both Mesh fields and Image data) that enables Python tools which access Mesh fields or Image data for visualization and analysis, or wish to create an Image or add fields from NumPy to a Mesh , to do so with optimal efficiency without fear of memory leak due to mishandled transfers. Improved Python APIs: Coordsys of images in Python can now be set using setCoordsys . Fixed Python bindings and improved interactive help where necessary. More efficient conversion of shapeworks Mesh in Python to vtk mesh by creating a PolyData instead of performing IO operations. Transforms in Image and Mesh API: Separate transforms such as center of mass, rigid registration and thin plate spiline can be created. They are passed efficiently and transparently between Python and C++. These transform functions create and accept numpy arrays instead of using proprietary transform type in the Python API. A jupyter notebook was to demonstrate this for images and meshes . Optimizer exports alignment transforms: Write individual procrustes transforms. The ShapeWorks Optimizer can now export individual procrustes transform files if requested. Use the xml tag 1 to enable it. Additionally, for project spreadsheets (e.g., Studio), individual procrustes transforms will be added as additional columns in the data sheet. See Optimize for more details. Improved testing: More robust testing of Python tests was achieved by adding code to ensure that all tests are performed for all functions, whereas before the test failure was reported immediately without testing if any related functions failed. Concrete seeding of random number generators (only for testing) is utilized to ensure objective comparison of results across all platforms. Improved verification of use case testing by comparing shape statistics compactness, generalization, and specificity against a good shape model instead of checking for a file. A log file ( verify.log ) is written that contains the use case outputs and summary.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#users-support_1","text":"Use cases: Added --mesh_mode option to image-based use cases. When running in mesh mode, after grooming segmentations, distance transforms are converted to meshes, and optimization is done directly on meshes, saving memory footprint and allowing the usage of geodesic distances for particle repulsion. This enables improved modeling for thin structures and high curvature regions. See Use Case Documentation for more details. Improved use cases documentation: Restructured use cases documentation to reduce repetition and better highlight the focus and differences of each demonstration. Added relevant documentation links for every step and parameter in use case descriptions. Reorganized use case documentation based on category (i.e., mesh-based, constraint-based, etc.). See Getting Started with Use Cases for information on running use cases and Examples for an overview of released use cases. More explanation of interpreting modes of variation in Shapes. What & From Where? . Restructured ellipsoid_evaluate use case: The computation time for calculating specificity, compactness, and generalization metrics have been dramatically reduced. A 50X speedup was experienced when calculating evaluation metrics for all modes for a dataset with 75 shapes, each with 1024 particles. We can now calculate the evaluation metrics for all the modes or query the values for a specified mode. The use case has been modified to demonstrate these functionalities. See Ellipsoid: Shape Evaluation in Python for more details.","title":"User's Support"},{"location":"about/release-notes.html#fixes_7","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_2","text":"Memory leak: Fixed memory leak issues in FEMesh operations","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_1","text":"Fix processing of all orientation images: We have fixed ShapeWorks to handle all orientations of images. Previously, only a subset (such as RAI) was fully compatible with all tools.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#shapeworks-61-2021-06-28","text":"","title":"ShapeWorks 6.1 - 2021-06-28"},{"location":"about/release-notes.html#what-is-new_4","text":"","title":"What is new?"},{"location":"about/release-notes.html#shapeworks-back-end_3","text":"Improved shape models for convoluted structures: Geodesic distance-based repulsion is now supported for mesh domains. This improves results on structures with thin and/or convoluted features at the cost of increased memory and runtime. Refer to the thin_cavity_bean use case for an example. Optimizing shape models on contours: N-dimensional contour domains are now supported in ShapeWorks. Refer to the supershapes_1mode_contour use case for an example. Robust and scalable primitive-based constrained surface sampling: Constraints are now implemented by turning the problem into an unconstrained optimization using the augmented lagrangian inequality formulation. The new implementation supports both cutting planes and spheres. It also supports multiple constraints per domain/shape with different types. Consolidated library for shape statistics: The shapeworks computational library is updated to include refactored code for shape statistics, including functions to read particle files and compute eigenvectors, eigenvalues, and PCA loadings.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_2","text":"Grooming support for meshes in Studio: Multiple grooming features for mesh domains are added to Studio, including two methods for mesh smoothing, hole filling, mesh centering, and iterative closest point for rigid pre-alignment with automated reference shape selection. Multiple domains support in Studio: Multiple domains are added to Studio where shape models are optimized in the given domains' shared/joint shape spaces to capture inter-domains correlations and interactions. The way multiple domains are implemented allows for an arbitrary number of domains as long as all shape samples in a given cohort have the same domains. Furthermore, the multiple domain support enables modeling scenarios with mixed-type domains (e.g., meshes and contours). Python APIs for shape statistics: Python APIs for principal component analysis (PCA) are added for shape statistics. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. See ellipsoid_pca for a demonstrating example.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#users-support_2","text":"Multi-domain shape cohort generation: Ellipsoid joint generation is added to ShapeWorks' cohort generator python module. Shape cohorts with multiple domains can be generated with options to control the distance separating the domains and modes of variations (size/rotation). These cohorts can be used for troubleshooting multiple domain shape modeling workflows. New use cases: A new use case ( ellipsoid_pca ) demonstrating the usage of the new PCA tools is added. The thin_cavity_bean use case is added to demonstrate geodesic distance-based particle-to-particle interactions to demonstrate improved shape statistics and surface sampling for thin and convoluted structures. The supershapes_1mode_contour use case is added to demonstrate shape modeling using contour domains. Another two new use cases, ellipsoid_multiple_domain and ellipsoid_multiple_domain_mesh , are added to demonstrate a typical shape modeling workflow for multiple domains using binary segmentations and surface meshes, respectively.","title":"User's Support"},{"location":"about/release-notes.html#improvements_1","text":"","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-back-end_4","text":"Particle splitting is agnostic to constraints: Particle splitting and constraints will no longer require that no particle violates constraints. It will work even if a particle violates a constraint. Multiple unit tests are added. Mesh reconstruction for multiple meshes: The warp-mesh command is extended to work with multiple meshes at the same time with the same reference mesh and points. Improvements to the Image and Mesh libraries: Exact specification of crop regions and clip plane for both images and meshes are enabled. Better error detection and handling. More robust automated testing to ensure improvements do not break existing functionality.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_3","text":"Multiple domain support: OptimizeUtils and AnalyzeUtils are updated to handle multiple domain datasets. Restructured use cases: Depreciated GroomUtils , CommonUtils , and EvaluationUtils . All use cases are restructured to make the grooming steps more transparent and demonstrate the usage of Python APIs with inline documentation. Improved ShapeWorks Python module library coverage: The entire ShapeWorks library framework now accessible via Python bindings. Python types support in ShapeWorks Python module: ShapeWorks Python module uses generic Python types (e.g., numpy, arrays, lists) rather than opaque wrappers for parameters to/from ShapeWorks objects. It is now possible to instantiate shapeworks.Image from a numpy array. One can now request raw image data as a numpy array. Safe dot-chain operations in ShapeWorks Python module: The \u201cdot chain\u201d operations are now safely enabled (e.g., img.translate([tx, ty, tz]).rotate(45, shapeworks::Z).scale([sx, sy, sz)) ) RunUseCase improvements: RunUseCase no longer requires --use_case before the use case name. This makes it simpler to use since omitting a use case name immediately prints help, which itself shows the list of use cases as a required argument rather than listing them with the other optional args. RunUseCase no longer accepts paths to shapeworks executables or Python modules. All of these are in the user's conda environment, or set using the devenv for testing by developers.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling","text":"Refactored DeepSSM: Defined a config file for DeepSSM parameters that are used in training and testing. This will be helpful for parameter tuning, model comparison, and adding additional functionality and parameters to DeepSSM. DeepSSM with fine-tuning: A fine-tuning option has been added to DeepSSM. This allows the model to learn the mapping between the PCA space to the correspondence point space, improving accuracy. Improved DeepSSM evaluation: DeepSSM evaluation has been adapted to use ShapeWorks mesh warp function and Python binding mesh distance function. DeepSSM on both GPU and CPU: The DeepSSM use case has been adapted to run on both GPU and CPU. It is considerably faster on GPU but no longer exits when running on CPU.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#users-support_3","text":"Improved documentation: More clear documentation both from Python, the command line, and online are added. Improved notebooks: Notebooks are significantly simplified by moving helper functions into the ShapeWorks Python module, reducing redundant information, and using only the PyVista library for visualization. Improved installation: Users no longer are required to modify PATHs or pass parameters to find executables or import the ShapeWorks Python module. Installation works even if non-standard installation directories are used and it works on all platforms. New shapeworks environments can now be created using install_shapeworks [name] : This supports multiple installations on the same platform, where users can change installation just by activating a different conda environment. Clean installation for ShapeWorks Python module: ShapeWorks Python module is now seamlessly installed as part of ShapeWorks suite installation on all platforms. The Python module no longer requires any special path modifications to import.","title":"User's Support"},{"location":"about/release-notes.html#fixes_8","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_5","text":"Image to Array: ShapeWorks image functionality is fixed such that an image can be successfully converted to a numpy array and back to a ShapeWorks image.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-front-end_4","text":"Notebook visualization: Volume renderings using ITK Widgets were causing notebooks to crash on some platforms. The notebooks are now updated to no longer use ITK Widgets for visualization and instead use the more robust and stable PyVista library. Use case file writing: RunUseCase.py has been updated to check that the current folder is writable before proceeding so that use case output can be saved.","title":"ShapeWorks Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_1","text":"DeepSSM evaluation: The DeepSSM evaluation step in the use case is updated to use ShapeWorks mesh distance rather than the deprecated SurfaceToSurfaceDistance command.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#shapeworks-60-2021-03-30","text":"","title":"ShapeWorks 6.0 - 2021-03-30"},{"location":"about/release-notes.html#whats-new","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_4","text":"New discussion forum: We started an online discussion forum ( shapeworks.discourse.group ). This forum is a place for ShapeWorks users to discuss how to customize shape modeling workflows for their own use cases, troubleshoot issues end-users facing when using ShapeWorks, keep track of suggestions to improve the software and documentation, and ensure awareness of the latest ShapeWorks tools within the research community. Tiny tests for use cases: All use cases now have a tiny test that can be run using the --tiny_test option. When the tiny test is run, only the data necessary for the test is downloaded rather than all of the data. Running use cases on subsets: All of the use cases (mesh or segmentation based) can now be run on a subset of the data using the --use_subsample option. Note that the entire dataset is downloaded in this case so that a subset that is representative of the entire dataset can be selected. Generating shape cohorts: Example shape cohorts with analytic correspondences can now be generated using the ShapeWorks package GenerateShapeCohort . Currently, cohorts of parameterized ellipsoids or supershapes can be generated. Options are available to specify the degree to which the cohort is groomed (i.e., a cohort can be generated to be in alignment or misaligned in various ways). These cohorts can help with troubleshooting the shape modeling workflow. Notebook demonstrating cohort generation: A Jupyter notebook was added that demonstrates how to use GenerateShapeCohort.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_6","text":"Support for use_normals with meshes: Added support for surface normals when optimizing directly on meshes. This results in improved shape models on thin domains. See ShapeWorks Directly on Meshes for more details. Consolidation of mesh-based grooming tools: Updated the shapeworks API to include mesh-based grooming tools (smooth, decimate, invert normals, reflect, alignment, fill holes, probe volume at mesh vertices, clip, translate, scale, bounding box, quality control, surface to surface distance, to image and to distance transform). Added mesh-based query tools (center, center of mass, number of points, number of faces, get field names, set field, get field, set field value, get field value, get field range, get field mean, get field std and comparison). This includes a full complement of unit tests.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end","text":"Mesh support in Studio: Added support for mesh inputs with minimal grooming. See New in ShapeWorks Studio for more details. New and faster surface reconstruction: Added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. See New in ShapeWorks Studio for more details. Feature maps support for meshes: Added support for loading and displaying scalar values from mesh inputs. See New in ShapeWorks Studio for more details. User help in Studio: Added user interface tooltips and Help->Keyboard shortcuts. Detailed optimization progress: Added particle count, initialization/optimization phase, and iteration count on the status bar in addition to the progress bar. (user feature request) Enabled aborting grooming: Added ability to abort grooming step.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_2","text":"DeepSSM now saves both the \"best\" and \"final\" model: The final model is saved after all training epochs have run. The best model is saved after the epoch that had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. Visualization of DeepSSM errors: The error meshes that are output from running the DeepSSM use case can now be visualized in Studio. These meshes have a distance scalar field that captures the distance between the true and predicted mesh. To view in Studio simply run: ShapeWorksStudio path/to/error/mesh.vtk . Data augmentation handles modeling scenarios that need Procrustes alignment: Data augmentation can now be run on a dataset for which Procrustes was used in optimization. When both the local and world .particle files are passed as arguments for data augmentation, the translation is accounted for in the augmented data. Visualizing data augmentation: Parallel violin plots are used to compare the distribution of real and augmented data visually. Demonstrating data augmentation: A Jupyter notebook that demonstrates the data augmentation process has been added. In this notebook, parallel violin plots are used to compare the distribution of real and augmented data visually.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_2","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_5","text":"Improved Python grooming utils: GroomUtils.py now uses Python binding rather than calling command-line tools.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_7","text":"Enable multi-threading on Mac platforms: Switched from OpenMP to TBB (thread building blocks), allowing multithreading on Mac. Performance improvements include a ~4x speedup on Mac laptop and same speed or better on Linux/Windows. Performance improvements in shapeworks optimize : ~20% faster optimization in mesh and image domains by replacing specific data structures (that were initially in place to allow interactive removal of particles during the optimization). ~50% faster optimization in mesh domain by caching nearest-triangle lookups.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_1","text":"Improved Studio viewer: Added ability to use 2 viewers (in between 1 and 4). Added ability to choose orientation marker (medical, triad) and location (corner). Improved Studio interface: Added new checkbox for automatic glyph sizing. Added support for drag and drop of images and meshes. Scalar bar color is now opposite of background color (e.g., when the background is white, the text should be dark) (user request). Improved responsiveness: Improved particle shape statistics computation speed. Improved user interface responsiveness during optimization. Improved distance transform loading for surface reconstruction. Improved error handling: Enhanced error handling and graceful reporting of errors such as attempts to write/save to read-only directories and filesystems.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_3","text":"More control on data augmentation: In data augmentation, the user can now either specify how many PCA components to retain in embedding OR what percentage of population variability to retain. For example, suppose the user specifies that 95% of population variability should be kept. In that case, the number of components will be automatically selected such that less than 5% of shape variation is lost in embedding.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#fixes_9","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_8","text":"Replaced mesh library: Replaced backend mesh library to fix bugs that caused optimizer crashing when optimizing particles directly on meshes. Gradient of normals for image domain: Corrected a long-standing bug where we used the hessian in place of the gradient of the normal. If you have an existing use case with use_normals enabled, the normal weighting may have to be adjusted. Cutting planes constraints for mesh domains: Fixed a bug in the integration of mesh domains with cutting planes constraints, where the optimization gets stuck due to the fact that constraints get violated when not being considered by geodesic walks.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_2","text":"Fixed bugs in Data: Fixed a bug when adding and removing shapes. Studio now appends .xlsx when saving a project file. Fixed bugs in Optimize: Studio optimize default for initial relative weighting is smaller than relative weighting to enable a better surface sampling during initialization. Enable file menu when the optimization is aborted. Fixed bugs in Analyze: Limit PCA modes to the number of samples - 1. Surface reconstruction for spheres is fixed. Fixed a bug that produced blank screens and error messages on the consoles when switching out of analysis while PCA animation is running. Fixed a sample display bug that occurred when loading XML project for analysis and exploring individual samples after switching to PCA animation.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#shapeworks-550-2020-10-15","text":"","title":"ShapeWorks 5.5.0 - 2020-10-15"},{"location":"about/release-notes.html#whats-new_1","text":"","title":"What's New"},{"location":"about/release-notes.html#users-support_6","text":"Revamped documentation: New documentation to support both end-users and open-source developer community in one easily navigable place. This documentation includes background information about statistical shape modeling, the scientific premise of ShapeWorks, and how to get started. It also demonstrates the latest software features, exemplar use cases, and instructions to build/install ShapeWorks. Optimized shape models for use cases: All datasets on the ShapeWorks Data Portal now have the shape model output from running the use cases with a corresponding analyze.xml for launching Studio. Users can cd to where the data is extracted and call ShapeWorksStudio analyze.xml to visualize these shape models.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_9","text":"ShapeWorks directly on meshes: ShapeWorks now supports particle optimization directly on triangular surface meshes. This mesh support also enables working with open meshes without additional user inputs. See ShapeWorks Directly on Meshes for more details. For exemplar use cases, see Femur Mesh: SSM directly from meshes and Lumps: SSM directly from meshes to learn how to get started. This mesh support allows for significant memory savings (9.2GB to 53MB in the femur use case) . New ShapeWorks API: Consolidation of image-based and segmentation-based grooming tools that creates a stable and reusable API making it much easier and more flexible for users to groom their datasets. This includes a full complement of unit tests. See ShapeWorks API for more details.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_3","text":"Feature maps support: Studio supports the integration of 3d volume feature maps to map imaging data to the optimized shape model. See New in ShapeWorks Studio for more details. New interface for group analysis: Studio supports group definitions from spreadsheets. The new interface supports multiple group sets within the same project file and categorical groups compared to the old binary groups (i.e., yes/no) setting. See New in ShapeWorks Studio for more details. User notes in Studio: Studio stores/loads a rich text notes section in the spreadsheet.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#deep-learning-shape-modeling_4","text":"New Python package for model-based data augmentation: A Python package for data augmentation has been added. See Data Augmentation for Deep Learning for more details. DeepSSM Python package: A Python package has been added for a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. See SSMs Directly from Images for more details. New DeepSSM use case: We added a new use case called deep_ssm that demonstrates data augmentation and deep learning on the femur data. See Femur SSM Directly from Images for more details.","title":"Deep Learning & Shape Modeling"},{"location":"about/release-notes.html#improvements_3","text":"","title":"Improvements"},{"location":"about/release-notes.html#users-support_7","text":"Improved data/output organization for use cases: Use case organization has been updated such that downloaded data goes into one folder ( ShapeWorks/Examples/Python/Data/ ) and use case output goes into another ( ShapeWorks/Examples/Python/Output/ ). This organization will avoid re-downloading use case datasets if the user deleted the output folder. Enable only-shape data for the femur use case: Femur use case demonstrates the processing workflow starting from surface meshes and can now be run without grooming images (in case they are not available). To groom with images, use the --start_with_image_and_segmentation_data tag. If this tag is not included, images will not be used in grooming.","title":"User's Support"},{"location":"about/release-notes.html#shapeworks-back-end_10","text":"Improved constrained particle optimization: An improved implementation for cutting planes that support single and multiple cutting planes per sample has been added. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. See Ellipsoid: Cutting Planes and Femur with Cutting Planes for exemplar use cases.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#all-in-one-studio-front-end_4","text":"Improved interface design for Studio: User interface improvements to Studio have been added. These improvements include collapsable analysis panels to improve screen usability, a cleaner file menu, an about box that shows website information and software version, and a splash screen that enables the opening of new/recent projects.","title":"All-in-one Studio Front-end"},{"location":"about/release-notes.html#fixes_10","text":"","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-back-end_11","text":"Constraint-aware particles initialization and optimization: The initialization and optimization steps now respect the user-defined constraints when using signed distance transforms. Hence, at no point, particles will violate the constraints, allowing for arbitrarily defined cutting planes. Constraint-aware particles splitting: Added constraint aware particle splitting for signed distance transforms. The particle splitting only occurred towards a single quadrant. This is fixed by allowing particle splits to shift in a different direction for each particle in every domain. Constraint-aware particle projection: Projecting particles on the surface while manipulating/optimizing particle position now respects the user-defined constraints.","title":"ShapeWorks Back-end"},{"location":"about/release-notes.html#shapeworks-541-2020-06-15","text":"","title":"ShapeWorks 5.4.1 - 2020-06-15"},{"location":"about/release-notes.html#fixes_11","text":"ShapeWorks Studio: Fixed crash when importing data on a new/blank project.","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-540-2020-06-10","text":"","title":"ShapeWorks 5.4.0 - 2020-06-10"},{"location":"about/release-notes.html#whats-new_2","text":"New, flexible ShapeWorks project file format: New spreadsheet (XLSX) based project file format that can easily handle multiple shape modeling scenarios. It is now fully integrated into Studio. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. Exporting shape parameters: Added PCA Raw Component Score Export to Studio. New Getting Started documentation: New Getting started documentation goes over shape modeling workflow documentation, different ShapeWorks interfaces with a video illustration for Studio. Lower memory footprint and faster optimization: ShapeWorks is now using OpenVDB , a more memory-efficient data structure, for signed distance transforms. Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . Automated development builds: We now offer up-to-date development binary builds that track the master branch, available here . Please understand that these are in-progress development builds, not official releases.","title":"What's New"},{"location":"about/release-notes.html#improvements_4","text":"Improved scalability for Studio: Files now loaded on-demand as necessary. Restructured datasets portal: Better and more consistent directory structure for use cases datasets. See datasets guidelines for more details. Visit our ShapeWorks Portal to register and download datasets to run use cases . Lower memory footprint for estimating correspondences for new shapes on existing shape models: For usage, only distance transforms for the new shapes will be loaded. Improved use case documentation: Better documentation for the RunUseCase input arguments. Documentation for running existing shape models: Added instructions on how to load a pre-trained shape model without running the full pipeline. Consistent cross-platform splitting direction: Correspondence point splits take a random direction, but are now consistent and repeatable across platforms for reproducible shape models.","title":"Improvements"},{"location":"about/release-notes.html#fixes_12","text":"Mesh export in Studio: Changed exported meshes to be compatible with CloudCompare","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-530-2020-02-20","text":"","title":"ShapeWorks 5.3.0 - 2020-02-20"},{"location":"about/release-notes.html#whats-new_3","text":"Use cases: Added fixed domains use case that demonstrates adding a single shape to an existing shape model Use cases: Added ellipsoid evaluation use that demonstrates the quantitative evaluation of the ellipsoid New commands: Added commands to the shapeworks executable to quantitatively evaluate shape models: read-particle-system, compactness, generalization, specificity New shapeworks executables commands: read-image, write-image, antialias, isoresample, binarize, recenter-image, pad. New build method: Separate build_dependencies script (see Documentation/Build/BUILD.md)","title":"What's New"},{"location":"about/release-notes.html#improvements_5","text":"Use cases: Updated femur use case with an interactive cutting plane selection Studio: Replaced bar chart with explained variance chart","title":"Improvements"},{"location":"about/release-notes.html#shapeworks-522-2020-01-09","text":"","title":"ShapeWorks 5.2.2 - 2020-01-09"},{"location":"about/release-notes.html#fixes_13","text":"Returned to superbuild.sh build process Fixed non-Qt build Fixed Windows conda_installs.bat Studio: Fixed import and processing of non-RAI image volumes Studio: Fix centering of groomed and reconstructed volumes","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-521-2019-11-09","text":"","title":"ShapeWorks 5.2.1 - 2019-11-09"},{"location":"about/release-notes.html#fixes_14","text":"Fix examples, binaries","title":"Fixes"},{"location":"about/release-notes.html#shapeworks-520-2019-11-07","text":"","title":"ShapeWorks 5.2.0 - 2019-11-07"},{"location":"about/release-notes.html#whats-new_4","text":"Studio: Added live particle optimization updates Studio: Added \"Stop optimization\" button Use cases: Added a femur use case that demonstrates grooming surface meshes along with imaging data for shape modeling Use cases: Added a left atrium use case that demonstrates grooming images data along with shape data and build multi-scale shape models Use cases: New portal downloadable example data (ellipsoid, left atrium, and femurs) Windows installer and binary releases for Mac and Linux CMake-based superbuild with all dependencies built automatically","title":"What's New"},{"location":"about/release-notes.html#improvements_6","text":"Studio: Added support for reading View2 parameter files Studio: Added legacy (View2) surface reconstructor Studio: Replaced optimization library with same used by ShapeWorksRun","title":"Improvements"},{"location":"about/release-notes.html#fixes_15","text":"Studio: Fixes crashes on exit during optimizations (clean shutdown of threads)","title":"Fixes"},{"location":"about/team.html","text":"Meet ShapeWorkers! Principal Investigators Shireen Elhabian Ross Whitaker Software Developers Alan Morris Cameron Christensen Archanasri Subramanian Researchers Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria Past Contributors Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Meet ShapeWorkers!"},{"location":"about/team.html#meet-shapeworkers","text":"","title":"Meet ShapeWorkers!"},{"location":"about/team.html#principal-investigators","text":"Shireen Elhabian Ross Whitaker","title":"Principal Investigators"},{"location":"about/team.html#software-developers","text":"Alan Morris Cameron Christensen Archanasri Subramanian","title":"Software Developers"},{"location":"about/team.html#researchers","text":"Riddhish Bhalodia Jadie Adams Hong Xu Krithika Iyer Tushar Kataria","title":"Researchers"},{"location":"about/team.html#past-contributors","text":"Joshua Cates (now @Orthogrid Inc.) Manasi Datar (now @Siemens) Brig Bagley Praful Agrawal (now @Amazon Inc.) Oleks Korshak (now @Microsoft) Anupama Goparaju (now @ Galileo Financial Technologies) Atefeh Ghanaatikashani (now @ Tesla Inc.) Karthik Karanth (now @ Adobe)","title":"Past Contributors"},{"location":"api/Classes/classColorScheme.html","text":"ColorScheme Public Classes Name struct rgb Public Functions Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme () Public Attributes Name rgb foreground rgb background rgb alt Public Functions Documentation function background_qcolor inline QColor background_qcolor ( int alpha ) function foreground_qcolor inline QColor foreground_qcolor () function get_text_color inline QColor get_text_color () function get_text_intensity inline double get_text_intensity () function ColorScheme inline ColorScheme () function ~ColorScheme inline ~ ColorScheme () Public Attributes Documentation variable foreground rgb foreground ; variable background rgb background ; variable alt rgb alt ; Updated on 2023-10-25 at 15:40:27 +0000","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#colorscheme","text":"","title":"ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-classes","text":"Name struct rgb","title":"Public Classes"},{"location":"api/Classes/classColorScheme.html#public-functions","text":"Name QColor background_qcolor (int alpha) QColor foreground_qcolor () QColor get_text_color () double get_text_intensity () ColorScheme () ~ColorScheme ()","title":"Public Functions"},{"location":"api/Classes/classColorScheme.html#public-attributes","text":"Name rgb foreground rgb background rgb alt","title":"Public Attributes"},{"location":"api/Classes/classColorScheme.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorScheme.html#function-background_qcolor","text":"inline QColor background_qcolor ( int alpha )","title":"function background_qcolor"},{"location":"api/Classes/classColorScheme.html#function-foreground_qcolor","text":"inline QColor foreground_qcolor ()","title":"function foreground_qcolor"},{"location":"api/Classes/classColorScheme.html#function-get_text_color","text":"inline QColor get_text_color ()","title":"function get_text_color"},{"location":"api/Classes/classColorScheme.html#function-get_text_intensity","text":"inline double get_text_intensity ()","title":"function get_text_intensity"},{"location":"api/Classes/classColorScheme.html#function-colorscheme","text":"inline ColorScheme ()","title":"function ColorScheme"},{"location":"api/Classes/classColorScheme.html#function-colorscheme_1","text":"inline ~ ColorScheme ()","title":"function ~ColorScheme"},{"location":"api/Classes/classColorScheme.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classColorScheme.html#variable-foreground","text":"rgb foreground ;","title":"variable foreground"},{"location":"api/Classes/classColorScheme.html#variable-background","text":"rgb background ;","title":"variable background"},{"location":"api/Classes/classColorScheme.html#variable-alt","text":"rgb alt ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable alt"},{"location":"api/Classes/classColorSchemes.html","text":"ColorSchemes Inherits from std::vector< ColorScheme > Public Functions Name ColorSchemes () ~ColorSchemes () Public Functions Documentation function ColorSchemes inline ColorSchemes () function ~ColorSchemes inline ~ ColorSchemes () Updated on 2023-10-25 at 15:40:27 +0000","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#colorschemes","text":"Inherits from std::vector< ColorScheme >","title":"ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#public-functions","text":"Name ColorSchemes () ~ColorSchemes ()","title":"Public Functions"},{"location":"api/Classes/classColorSchemes.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes","text":"inline ColorSchemes ()","title":"function ColorSchemes"},{"location":"api/Classes/classColorSchemes.html#function-colorschemes_1","text":"inline ~ ColorSchemes () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ColorSchemes"},{"location":"api/Classes/classCustomSlider.html","text":"CustomSlider Inherits from QSlider Public Functions Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr) Protected Functions Name virtual void paintEvent (QPaintEvent * ev) Public Functions Documentation function CustomSlider inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) function CustomSlider explicit CustomSlider ( QWidget * parent = nullptr ) Protected Functions Documentation function paintEvent virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-25 at 15:40:27 +0000","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#customslider","text":"Inherits from QSlider","title":"CustomSlider"},{"location":"api/Classes/classCustomSlider.html#public-functions","text":"Name CustomSlider (Qt::Orientation orientation, QWidget * parent =nullptr) CustomSlider (QWidget * parent =nullptr)","title":"Public Functions"},{"location":"api/Classes/classCustomSlider.html#protected-functions","text":"Name virtual void paintEvent (QPaintEvent * ev)","title":"Protected Functions"},{"location":"api/Classes/classCustomSlider.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-customslider","text":"inline explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#function-customslider_1","text":"explicit CustomSlider ( QWidget * parent = nullptr )","title":"function CustomSlider"},{"location":"api/Classes/classCustomSlider.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSlider.html#function-paintevent","text":"virtual void paintEvent ( QPaintEvent * ev ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function paintEvent"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html","text":"CustomSurfaceReconstructionFilter Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New () Protected Functions Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * ) Protected Attributes Name int NeighborhoodSize double SampleSpacing Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkGetMacro vtkGetMacro ( NeighborhoodSize , int ) function vtkSetMacro vtkSetMacro ( NeighborhoodSize , int ) function vtkGetMacro vtkGetMacro ( SampleSpacing , double ) function vtkSetMacro vtkSetMacro ( SampleSpacing , double ) function New static CustomSurfaceReconstructionFilter * New () Protected Functions Documentation function CustomSurfaceReconstructionFilter CustomSurfaceReconstructionFilter () function ~CustomSurfaceReconstructionFilter inline ~ CustomSurfaceReconstructionFilter () function RequestInformation virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function RequestData virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) function FillInputPortInformation virtual int FillInputPortInformation ( int , vtkInformation * ) Protected Attributes Documentation variable NeighborhoodSize int NeighborhoodSize ; variable SampleSpacing double SampleSpacing ; Updated on 2023-10-25 at 15:40:27 +0000","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#customsurfacereconstructionfilter","text":"Inherits from vtkImageAlgorithm","title":"CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions","text":"Name vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkGetMacro (NeighborhoodSize , int ) vtkSetMacro (NeighborhoodSize , int ) vtkGetMacro (SampleSpacing , double ) vtkSetMacro (SampleSpacing , double ) CustomSurfaceReconstructionFilter * New ()","title":"Public Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions","text":"Name CustomSurfaceReconstructionFilter () ~CustomSurfaceReconstructionFilter () virtual int RequestInformation (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int RequestData (vtkInformation * , vtkInformationVector ** , vtkInformationVector * ) virtual int FillInputPortInformation (int , vtkInformation * )","title":"Protected Functions"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes","text":"Name int NeighborhoodSize double SampleSpacing","title":"Protected Attributes"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtktypemacro","text":"vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro","text":"vtkGetMacro ( NeighborhoodSize , int )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro","text":"vtkSetMacro ( NeighborhoodSize , int )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtkgetmacro_1","text":"vtkGetMacro ( SampleSpacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-vtksetmacro_1","text":"vtkSetMacro ( SampleSpacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-new","text":"static CustomSurfaceReconstructionFilter * New ()","title":"function New"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter","text":"CustomSurfaceReconstructionFilter ()","title":"function CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-customsurfacereconstructionfilter_1","text":"inline ~ CustomSurfaceReconstructionFilter ()","title":"function ~CustomSurfaceReconstructionFilter"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * )","title":"function RequestData"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int , vtkInformation * )","title":"function FillInputPortInformation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-neighborhoodsize","text":"int NeighborhoodSize ;","title":"variable NeighborhoodSize"},{"location":"api/Classes/classCustomSurfaceReconstructionFilter.html#variable-samplespacing","text":"double SampleSpacing ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable SampleSpacing"},{"location":"api/Classes/classFEAreaCoverage.html","text":"FEAreaCoverage Public Functions Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const Protected Functions Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q) Protected Attributes Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius Public Functions Documentation function FEAreaCoverage FEAreaCoverage () function SetSelection1 inline void SetSelection1 ( vector < int > & s ) function SetSelection2 inline void SetSelection2 ( vector < int > & s ) function Apply vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ) function AllowBackIntersection void AllowBackIntersection ( bool b ) function AllowBackIntersection bool AllowBackIntersection () const function SetAngleThreshold void SetAngleThreshold ( double w ) function GetAngleThreshold double GetAngleThreshold () const function SetBackSearchRadius void SetBackSearchRadius ( double R ) function GetBackSearchRadius double GetBackSearchRadius () const Protected Functions Documentation function UpdateSurface void UpdateSurface ( FEAreaCoverage :: Surface & s ) function intersect bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ) function faceIntersect bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ) Protected Attributes Documentation variable m_surf1 Surface m_surf1 ; variable m_surf2 Surface m_surf2 ; variable m_ballowBackIntersections bool m_ballowBackIntersections ; variable m_angleThreshold double m_angleThreshold ; variable m_backSearchRadius double m_backSearchRadius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#feareacoverage","text":"","title":"FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions","text":"Name FEAreaCoverage () void SetSelection1 (vector< int > & s) void SetSelection2 (vector< int > & s) vector< double > Apply (std::shared_ptr< FEMesh > mesh1, std::shared_ptr< FEMesh > mesh2) void AllowBackIntersection (bool b) bool AllowBackIntersection () const void SetAngleThreshold (double w) double GetAngleThreshold () const void SetBackSearchRadius (double R) double GetBackSearchRadius () const","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions","text":"Name void UpdateSurface (FEAreaCoverage::Surface & s) bool intersect (const vec3d & r, const vec3d & N, FEAreaCoverage::Surface & surf, Intersection & q) bool faceIntersect (FEAreaCoverage::Surface & surf, const Ray & ray, int nface, Intersection & q)","title":"Protected Functions"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes","text":"Name Surface m_surf1 Surface m_surf2 bool m_ballowBackIntersections double m_angleThreshold double m_backSearchRadius","title":"Protected Attributes"},{"location":"api/Classes/classFEAreaCoverage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-feareacoverage","text":"FEAreaCoverage ()","title":"function FEAreaCoverage"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection1","text":"inline void SetSelection1 ( vector < int > & s )","title":"function SetSelection1"},{"location":"api/Classes/classFEAreaCoverage.html#function-setselection2","text":"inline void SetSelection2 ( vector < int > & s )","title":"function SetSelection2"},{"location":"api/Classes/classFEAreaCoverage.html#function-apply","text":"vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 )","title":"function Apply"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection","text":"void AllowBackIntersection ( bool b )","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-allowbackintersection_1","text":"bool AllowBackIntersection () const","title":"function AllowBackIntersection"},{"location":"api/Classes/classFEAreaCoverage.html#function-setanglethreshold","text":"void SetAngleThreshold ( double w )","title":"function SetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-getanglethreshold","text":"double GetAngleThreshold () const","title":"function GetAngleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#function-setbacksearchradius","text":"void SetBackSearchRadius ( double R )","title":"function SetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#function-getbacksearchradius","text":"double GetBackSearchRadius () const","title":"function GetBackSearchRadius"},{"location":"api/Classes/classFEAreaCoverage.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#function-updatesurface","text":"void UpdateSurface ( FEAreaCoverage :: Surface & s )","title":"function UpdateSurface"},{"location":"api/Classes/classFEAreaCoverage.html#function-intersect","text":"bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q )","title":"function intersect"},{"location":"api/Classes/classFEAreaCoverage.html#function-faceintersect","text":"bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q )","title":"function faceIntersect"},{"location":"api/Classes/classFEAreaCoverage.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf1","text":"Surface m_surf1 ;","title":"variable m_surf1"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_surf2","text":"Surface m_surf2 ;","title":"variable m_surf2"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_ballowbackintersections","text":"bool m_ballowBackIntersections ;","title":"variable m_ballowBackIntersections"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_anglethreshold","text":"double m_angleThreshold ;","title":"variable m_angleThreshold"},{"location":"api/Classes/classFEAreaCoverage.html#variable-m_backsearchradius","text":"double m_backSearchRadius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_backSearchRadius"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html","text":"FEAreaCoverage::Surface Public Functions Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes () Public Attributes Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT Public Functions Documentation function Surface inline Surface () function Faces inline int Faces () function Create void Create ( std :: shared_ptr < FEMesh > m ) function Nodes inline int Nodes () Public Attributes Documentation variable m_mesh std :: shared_ptr < FEMesh > m_mesh ; variable m_face vector < int > m_face ; variable m_node vector < int > m_node ; variable m_pos vector < vec3d > m_pos ; variable m_lnode vector < int > m_lnode ; variable m_norm vector < vec3d > m_norm ; variable m_fnorm vector < vec3d > m_fnorm ; variable m_NLT vector < vector < int > > m_NLT ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#feareacoveragesurface","text":"","title":"FEAreaCoverage::Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions","text":"Name Surface () int Faces () void Create (std::shared_ptr< FEMesh > m) int Nodes ()","title":"Public Functions"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes","text":"Name std::shared_ptr< FEMesh > m_mesh vector< int > m_face vector< int > m_node vector< vec3d > m_pos vector< int > m_lnode vector< vec3d > m_norm vector< vec3d > m_fnorm vector< vector< int > > m_NLT","title":"Public Attributes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-surface","text":"inline Surface ()","title":"function Surface"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-faces","text":"inline int Faces ()","title":"function Faces"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-create","text":"void Create ( std :: shared_ptr < FEMesh > m )","title":"function Create"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_mesh","text":"std :: shared_ptr < FEMesh > m_mesh ;","title":"variable m_mesh"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_face","text":"vector < int > m_face ;","title":"variable m_face"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_pos","text":"vector < vec3d > m_pos ;","title":"variable m_pos"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_lnode","text":"vector < int > m_lnode ;","title":"variable m_lnode"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_norm","text":"vector < vec3d > m_norm ;","title":"variable m_norm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_fnorm","text":"vector < vec3d > m_fnorm ;","title":"variable m_fnorm"},{"location":"api/Classes/classFEAreaCoverage_1_1Surface.html#variable-m_nlt","text":"vector < vector < int > > m_NLT ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_NLT"},{"location":"api/Classes/classFEAutoMesher.html","text":"FEAutoMesher Public Functions Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle () Protected Functions Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m) Protected Attributes Name FEMesh * m_pm double m_wsmooth Public Functions Documentation function FEAutoMesher FEAutoMesher () function BuildMesh void BuildMesh ( FEMesh * pm ) function AutoPartitionSurface void AutoPartitionSurface ( FEMesh & m ) function AutoPartitionEdges void AutoPartitionEdges ( FEMesh & m ) function AutoPartitionNodes void AutoPartitionNodes ( FEMesh & m ) function Repartition void Repartition ( FEMesh & m ) function SetSmoothingAngle inline void SetSmoothingAngle ( double w ) function GetSmoothingAngle inline double GetSmoothingAngle () Protected Functions Documentation function BuildFaces void BuildFaces ( FEMesh & m ) function BuildEdges void BuildEdges ( FEMesh & m ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_wsmooth double m_wsmooth ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#feautomesher","text":"","title":"FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#public-functions","text":"Name FEAutoMesher () void BuildMesh ( FEMesh * pm) void AutoPartitionSurface ( FEMesh & m) void AutoPartitionEdges ( FEMesh & m) void AutoPartitionNodes ( FEMesh & m) void Repartition ( FEMesh & m) void SetSmoothingAngle (double w) double GetSmoothingAngle ()","title":"Public Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions","text":"Name void BuildFaces ( FEMesh & m) void BuildEdges ( FEMesh & m)","title":"Protected Functions"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes","text":"Name FEMesh * m_pm double m_wsmooth","title":"Protected Attributes"},{"location":"api/Classes/classFEAutoMesher.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-feautomesher","text":"FEAutoMesher ()","title":"function FEAutoMesher"},{"location":"api/Classes/classFEAutoMesher.html#function-buildmesh","text":"void BuildMesh ( FEMesh * pm )","title":"function BuildMesh"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionsurface","text":"void AutoPartitionSurface ( FEMesh & m )","title":"function AutoPartitionSurface"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionedges","text":"void AutoPartitionEdges ( FEMesh & m )","title":"function AutoPartitionEdges"},{"location":"api/Classes/classFEAutoMesher.html#function-autopartitionnodes","text":"void AutoPartitionNodes ( FEMesh & m )","title":"function AutoPartitionNodes"},{"location":"api/Classes/classFEAutoMesher.html#function-repartition","text":"void Repartition ( FEMesh & m )","title":"function Repartition"},{"location":"api/Classes/classFEAutoMesher.html#function-setsmoothingangle","text":"inline void SetSmoothingAngle ( double w )","title":"function SetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#function-getsmoothingangle","text":"inline double GetSmoothingAngle ()","title":"function GetSmoothingAngle"},{"location":"api/Classes/classFEAutoMesher.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEAutoMesher.html#function-buildfaces","text":"void BuildFaces ( FEMesh & m )","title":"function BuildFaces"},{"location":"api/Classes/classFEAutoMesher.html#function-buildedges","text":"void BuildEdges ( FEMesh & m )","title":"function BuildEdges"},{"location":"api/Classes/classFEAutoMesher.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFEAutoMesher.html#variable-m_wsmooth","text":"double m_wsmooth ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_wsmooth"},{"location":"api/Classes/classFECVDDecimationModifier.html","text":"FECVDDecimationModifier More... #include Public Functions Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier. Public Attributes Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient Detailed Description class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FECVDDecimationModifier FECVDDecimationModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier. Public Attributes Documentation variable m_pct double m_pct ; percentage of target number of clusters/vertices variable m_bcvd bool m_bcvd ; variable m_sel_pct double m_sel_pct ; variable m_gradient double m_gradient ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#fecvddecimationmodifier","text":"More... #include ","title":"FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions","text":"Name FECVDDecimationModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the decimation modifier.","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes","text":"Name double m_pct percentage of target number of clusters/vertices bool m_bcvd double m_sel_pct double m_gradient","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier.html#detailed-description","text":"class FECVDDecimationModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-fecvddecimationmodifier","text":"FECVDDecimationModifier () Constructor.","title":"function FECVDDecimationModifier"},{"location":"api/Classes/classFECVDDecimationModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the decimation modifier.","title":"function Apply"},{"location":"api/Classes/classFECVDDecimationModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_pct","text":"double m_pct ; percentage of target number of clusters/vertices","title":"variable m_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_bcvd","text":"bool m_bcvd ;","title":"variable m_bcvd"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_sel_pct","text":"double m_sel_pct ;","title":"variable m_sel_pct"},{"location":"api/Classes/classFECVDDecimationModifier.html#variable-m_gradient","text":"double m_gradient ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_gradient"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html","text":"FECVDDecimationModifier::Cluster Public Functions Name Cluster () int faces () const Public Attributes Name vec3d m_sgamma double m_srho vector< int > m_fid Public Functions Documentation function Cluster inline Cluster () function faces inline int faces () const Public Attributes Documentation variable m_sgamma vec3d m_sgamma ; variable m_srho double m_srho ; variable m_fid vector < int > m_fid ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#fecvddecimationmodifiercluster","text":"","title":"FECVDDecimationModifier::Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions","text":"Name Cluster () int faces () const","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes","text":"Name vec3d m_sgamma double m_srho vector< int > m_fid","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-cluster","text":"inline Cluster ()","title":"function Cluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#function-faces","text":"inline int faces () const","title":"function faces"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_sgamma","text":"vec3d m_sgamma ;","title":"variable m_sgamma"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_srho","text":"double m_srho ;","title":"variable m_srho"},{"location":"api/Classes/classFECVDDecimationModifier_1_1Cluster.html#variable-m_fid","text":"vector < int > m_fid ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_fid"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html","text":"FECVDDecimationModifier::NODE Public Types Name enum @0 Public Functions Name NODE () bool AttachToCluster (int n) Public Attributes Name int c int nc Public Types Documentation enum @0 Enumerator Value Description MAX_CLUSTERS =23 Public Functions Documentation function NODE inline NODE () function AttachToCluster bool AttachToCluster ( int n ) Public Attributes Documentation variable c int c ; variable nc int nc ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#fecvddecimationmodifiernode","text":"","title":"FECVDDecimationModifier::NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types","text":"Name enum @0","title":"Public Types"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions","text":"Name NODE () bool AttachToCluster (int n)","title":"Public Functions"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes","text":"Name int c int nc","title":"Public Attributes"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#enum-0","text":"Enumerator Value Description MAX_CLUSTERS =23","title":"enum @0"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-node","text":"inline NODE ()","title":"function NODE"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#function-attachtocluster","text":"bool AttachToCluster ( int n )","title":"function AttachToCluster"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-c","text":"int c ;","title":"variable c"},{"location":"api/Classes/classFECVDDecimationModifier_1_1NODE.html#variable-nc","text":"int nc ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable nc"},{"location":"api/Classes/classFECoreMesh.html","text":"FECoreMesh More... #include Inherited by FEMesh Public Functions Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Detailed Description class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data. Public Functions Documentation function FECoreMesh FECoreMesh () constructor function ~FECoreMesh virtual ~ FECoreMesh () destructor function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create function IsType bool IsType ( int ntype ) check the type of the mesh function Elements virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements function ElementRef virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef function ElementPtr virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr function Nodes inline int Nodes () const function Edges inline int Edges () const function Faces inline int Faces () const function Node inline FENode & Node ( int n ) function Edge inline FEEdge & Edge ( int n ) function Face inline FEFace & Face ( int n ) function NodePtr inline FENode * NodePtr ( int n = 0 ) function EdgePtr inline FEEdge * EdgePtr ( int n = 0 ) function FacePtr inline FEFace * FacePtr ( int n = 0 ) Protected Attributes Documentation variable m_Node std :: vector < FENode > m_Node ; FE nodes. variable m_Edge std :: vector < FEEdge > m_Edge ; FE edges. variable m_Face std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-25 at 15:40:27 +0000","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#fecoremesh","text":"More... #include Inherited by FEMesh","title":"FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#public-functions","text":"Name FECoreMesh () constructor virtual ~FECoreMesh () destructor virtual void Create (int nodes, int elems, int faces =0, int edges =0) =0 allocate space for mesh bool IsType (int ntype) check the type of the mesh virtual int Elements () const =0 total number of elements virtual FEElement_ & ElementRef (int n) =0 return reference to element virtual FEElement * ElementPtr (int n =0) =0 return pointer to element int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0)","title":"Public Functions"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes","text":"Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Protected Attributes"},{"location":"api/Classes/classFECoreMesh.html#detailed-description","text":"class FECoreMesh ; This class defines a simple mesh structure that provides basic container services for storing mesh data.","title":"Detailed Description"},{"location":"api/Classes/classFECoreMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh","text":"FECoreMesh () constructor","title":"function FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-fecoremesh_1","text":"virtual ~ FECoreMesh () destructor","title":"function ~FECoreMesh"},{"location":"api/Classes/classFECoreMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 allocate space for mesh Reimplemented by : FEMesh::Create","title":"function Create"},{"location":"api/Classes/classFECoreMesh.html#function-istype","text":"bool IsType ( int ntype ) check the type of the mesh","title":"function IsType"},{"location":"api/Classes/classFECoreMesh.html#function-elements","text":"virtual int Elements () const = 0 total number of elements Reimplemented by : FEMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFECoreMesh.html#function-elementref","text":"virtual FEElement_ & ElementRef ( int n ) = 0 return reference to element Reimplemented by : FEMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFECoreMesh.html#function-elementptr","text":"virtual FEElement * ElementPtr ( int n = 0 ) = 0 return pointer to element Reimplemented by : FEMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFECoreMesh.html#function-nodes","text":"inline int Nodes () const","title":"function Nodes"},{"location":"api/Classes/classFECoreMesh.html#function-edges","text":"inline int Edges () const","title":"function Edges"},{"location":"api/Classes/classFECoreMesh.html#function-faces","text":"inline int Faces () const","title":"function Faces"},{"location":"api/Classes/classFECoreMesh.html#function-node","text":"inline FENode & Node ( int n )","title":"function Node"},{"location":"api/Classes/classFECoreMesh.html#function-edge","text":"inline FEEdge & Edge ( int n )","title":"function Edge"},{"location":"api/Classes/classFECoreMesh.html#function-face","text":"inline FEFace & Face ( int n )","title":"function Face"},{"location":"api/Classes/classFECoreMesh.html#function-nodeptr","text":"inline FENode * NodePtr ( int n = 0 )","title":"function NodePtr"},{"location":"api/Classes/classFECoreMesh.html#function-edgeptr","text":"inline FEEdge * EdgePtr ( int n = 0 )","title":"function EdgePtr"},{"location":"api/Classes/classFECoreMesh.html#function-faceptr","text":"inline FEFace * FacePtr ( int n = 0 )","title":"function FacePtr"},{"location":"api/Classes/classFECoreMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFECoreMesh.html#variable-m_node","text":"std :: vector < FENode > m_Node ; FE nodes.","title":"variable m_Node"},{"location":"api/Classes/classFECoreMesh.html#variable-m_edge","text":"std :: vector < FEEdge > m_Edge ; FE edges.","title":"variable m_Edge"},{"location":"api/Classes/classFECoreMesh.html#variable-m_face","text":"std :: vector < FEFace > m_Face ; FE faces. Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_Face"},{"location":"api/Classes/classFEEdge.html","text":"FEEdge Inherits from FEItem Public Types Name enum @1 Public Functions Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node Public Attributes Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @1 Enumerator Value Description MAX_NODES 3 Public Functions Documentation function FEEdge FEEdge () constructor function operator== bool operator == ( const FEEdge & e ) edge comparison function Nodes inline int Nodes () return number of nodes function FindNode int FindNode ( int node ) find a node Public Attributes Documentation variable n int n ; edge nodes variable m_elem int m_elem ; the element to which this edge belongs (used only by beams) variable m_nbr int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-25 at 15:40:27 +0000","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#feedge","text":"Inherits from FEItem","title":"FEEdge"},{"location":"api/Classes/classFEEdge.html#public-types","text":"Name enum @1","title":"Public Types"},{"location":"api/Classes/classFEEdge.html#public-functions","text":"Name FEEdge () constructor bool operator== (const FEEdge & e) edge comparison int Nodes () return number of nodes int FindNode (int node) find a node","title":"Public Functions"},{"location":"api/Classes/classFEEdge.html#public-attributes","text":"Name int n edge nodes int m_elem the element to which this edge belongs (used only by beams) int m_nbr the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1)","title":"Public Attributes"},{"location":"api/Classes/classFEEdge.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEEdge.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEEdge.html#enum-1","text":"Enumerator Value Description MAX_NODES 3","title":"enum @1"},{"location":"api/Classes/classFEEdge.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEEdge.html#function-feedge","text":"FEEdge () constructor","title":"function FEEdge"},{"location":"api/Classes/classFEEdge.html#function-operator","text":"bool operator == ( const FEEdge & e ) edge comparison","title":"function operator=="},{"location":"api/Classes/classFEEdge.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEEdge.html#function-findnode","text":"int FindNode ( int node ) find a node","title":"function FindNode"},{"location":"api/Classes/classFEEdge.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEEdge.html#variable-n","text":"int n ; edge nodes","title":"variable n"},{"location":"api/Classes/classFEEdge.html#variable-m_elem","text":"int m_elem ; the element to which this edge belongs (used only by beams)","title":"variable m_elem"},{"location":"api/Classes/classFEEdge.html#variable-m_nbr","text":"int m_nbr ; the two adjacent edges (if there are more edges incident to a node, the neighbour is set to -1) Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_nbr"},{"location":"api/Classes/classFEElement.html","text":"FEElement Inherits from FEElement_ , FEItem Public Types Name enum @3 Public Functions Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type. Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @3 Enumerator Value Description MAX_NODES 27 Public Functions Documentation function FEElement FEElement () constructor function FEElement FEElement ( const FEElement & el ) copy constructor function operator= FEElement & operator = ( const FEElement & el ) assignment operator function SetType void SetType ( int ntype ) Set the element type. Updated on 2023-10-25 at 15:40:27 +0000","title":"FEElement"},{"location":"api/Classes/classFEElement.html#feelement","text":"Inherits from FEElement_ , FEItem","title":"FEElement"},{"location":"api/Classes/classFEElement.html#public-types","text":"Name enum @3","title":"Public Types"},{"location":"api/Classes/classFEElement.html#public-functions","text":"Name FEElement () constructor FEElement (const FEElement & el) copy constructor FEElement & operator= (const FEElement & el) assignment operator void SetType (int ntype) Set the element type.","title":"Public Functions"},{"location":"api/Classes/classFEElement.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEElement.html#enum-3","text":"Enumerator Value Description MAX_NODES 27","title":"enum @3"},{"location":"api/Classes/classFEElement.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement.html#function-feelement","text":"FEElement () constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-feelement_1","text":"FEElement ( const FEElement & el ) copy constructor","title":"function FEElement"},{"location":"api/Classes/classFEElement.html#function-operator","text":"FEElement & operator = ( const FEElement & el ) assignment operator","title":"function operator="},{"location":"api/Classes/classFEElement.html#function-settype","text":"void SetType ( int ntype ) Set the element type. Updated on 2023-10-25 at 15:40:27 +0000","title":"function SetType"},{"location":"api/Classes/classFEElementData.html","text":"FEElementData Public Functions Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax) Public Functions Documentation function FEElementData FEElementData () function FEElementData FEElementData ( const FEElementData & d ) function operator= FEElementData & operator = ( const FEElementData & d ) function Create void Create ( FEMesh * pm , double v = 0.0 ) function Size inline int Size () function get inline double get ( int i ) function set inline void set ( int i , double v ) function operator[] inline double & operator []( int i ) function SetName void SetName ( const char * sz ) function GetName inline const char * GetName () function FillRandomBox void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#feelementdata","text":"","title":"FEElementData"},{"location":"api/Classes/classFEElementData.html#public-functions","text":"Name FEElementData () FEElementData (const FEElementData & d) FEElementData & operator= (const FEElementData & d) void Create ( FEMesh * pm, double v =0.0) int Size () double get (int i) void set (int i, double v) double & operator[] (int i) void SetName (const char * sz) const char * GetName () void FillRandomBox (double fmin, double fmax)","title":"Public Functions"},{"location":"api/Classes/classFEElementData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElementData.html#function-feelementdata","text":"FEElementData ()","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-feelementdata_1","text":"FEElementData ( const FEElementData & d )","title":"function FEElementData"},{"location":"api/Classes/classFEElementData.html#function-operator","text":"FEElementData & operator = ( const FEElementData & d )","title":"function operator="},{"location":"api/Classes/classFEElementData.html#function-create","text":"void Create ( FEMesh * pm , double v = 0.0 )","title":"function Create"},{"location":"api/Classes/classFEElementData.html#function-size","text":"inline int Size ()","title":"function Size"},{"location":"api/Classes/classFEElementData.html#function-get","text":"inline double get ( int i )","title":"function get"},{"location":"api/Classes/classFEElementData.html#function-set","text":"inline void set ( int i , double v )","title":"function set"},{"location":"api/Classes/classFEElementData.html#function-operator_1","text":"inline double & operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEElementData.html#function-setname","text":"void SetName ( const char * sz )","title":"function SetName"},{"location":"api/Classes/classFEElementData.html#function-getname","text":"inline const char * GetName ()","title":"function GetName"},{"location":"api/Classes/classFEElementData.html#function-fillrandombox","text":"void FillRandomBox ( double fmin , double fmax ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function FillRandomBox"},{"location":"api/Classes/classFEElement__.html","text":"FEElement_ Inherits from FEItem Inherited by FEElement , FETri3 Public Functions Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions Name void copy (const FEElement_ & el) Public Attributes Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEElement_ FEElement_ () constructor function is_equal bool is_equal ( FEElement_ & e ) function GetType inline int GetType () const return the element type function IsType inline bool IsType ( int ntype ) const Is the element of this type. function Nodes inline int Nodes () const number of nodes function Faces inline int Faces () const Number of faces (shells have no faces) function Edges inline int Edges () const Number of edges (solids have no edges) function GetFace int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces) function GetFace FEFace GetFace ( int i ) Get the face i (only solids have faces) function GetShellFace FEFace GetShellFace () Get the face of a shell. function GetEdge FEEdge GetEdge ( int i ) Get the edge. function IsExterior bool IsExterior () Is this an exterior element. function IsSolid inline bool IsSolid () function IsShell inline bool IsShell () function IsBeam inline bool IsBeam () Protected Functions Documentation function copy void copy ( const FEElement_ & el ) Public Attributes Documentation variable m_node int * m_node ; pointer to node data variable m_nbr int * m_nbr ; neighbour elements variable m_face int * m_face ; faces (-1 for interior faces) variable m_h double * m_h ; element thickness (only used by shells) variable m_fiber vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section variable m_Q mat3d m_Q ; local material orientation variable m_Qactive bool m_Qactive ; active local material orientation variable m_a0 double m_a0 ; cross-sectional area (only used by truss elements) Protected Attributes Documentation variable m_ntype int m_ntype ; type of element variable m_nodes int m_nodes ; nr of nodes variable m_nfaces int m_nfaces ; nr of faces ( 0 for shells) variable m_nedges int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#feelement_","text":"Inherits from FEItem Inherited by FEElement , FETri3","title":"FEElement_"},{"location":"api/Classes/classFEElement__.html#public-functions","text":"Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam ()","title":"Public Functions"},{"location":"api/Classes/classFEElement__.html#protected-functions","text":"Name void copy (const FEElement_ & el)","title":"Protected Functions"},{"location":"api/Classes/classFEElement__.html#public-attributes","text":"Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements)","title":"Public Attributes"},{"location":"api/Classes/classFEElement__.html#protected-attributes","text":"Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids)","title":"Protected Attributes"},{"location":"api/Classes/classFEElement__.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEElement__.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-feelement_","text":"FEElement_ () constructor","title":"function FEElement_"},{"location":"api/Classes/classFEElement__.html#function-is_equal","text":"bool is_equal ( FEElement_ & e )","title":"function is_equal"},{"location":"api/Classes/classFEElement__.html#function-gettype","text":"inline int GetType () const return the element type","title":"function GetType"},{"location":"api/Classes/classFEElement__.html#function-istype","text":"inline bool IsType ( int ntype ) const Is the element of this type.","title":"function IsType"},{"location":"api/Classes/classFEElement__.html#function-nodes","text":"inline int Nodes () const number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEElement__.html#function-faces","text":"inline int Faces () const Number of faces (shells have no faces)","title":"function Faces"},{"location":"api/Classes/classFEElement__.html#function-edges","text":"inline int Edges () const Number of edges (solids have no edges)","title":"function Edges"},{"location":"api/Classes/classFEElement__.html#function-getface","text":"int GetFace ( int i , int * n ) Get only the nodes of face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getface_1","text":"FEFace GetFace ( int i ) Get the face i (only solids have faces)","title":"function GetFace"},{"location":"api/Classes/classFEElement__.html#function-getshellface","text":"FEFace GetShellFace () Get the face of a shell.","title":"function GetShellFace"},{"location":"api/Classes/classFEElement__.html#function-getedge","text":"FEEdge GetEdge ( int i ) Get the edge.","title":"function GetEdge"},{"location":"api/Classes/classFEElement__.html#function-isexterior","text":"bool IsExterior () Is this an exterior element.","title":"function IsExterior"},{"location":"api/Classes/classFEElement__.html#function-issolid","text":"inline bool IsSolid ()","title":"function IsSolid"},{"location":"api/Classes/classFEElement__.html#function-isshell","text":"inline bool IsShell ()","title":"function IsShell"},{"location":"api/Classes/classFEElement__.html#function-isbeam","text":"inline bool IsBeam ()","title":"function IsBeam"},{"location":"api/Classes/classFEElement__.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEElement__.html#function-copy","text":"void copy ( const FEElement_ & el )","title":"function copy"},{"location":"api/Classes/classFEElement__.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_node","text":"int * m_node ; pointer to node data","title":"variable m_node"},{"location":"api/Classes/classFEElement__.html#variable-m_nbr","text":"int * m_nbr ; neighbour elements","title":"variable m_nbr"},{"location":"api/Classes/classFEElement__.html#variable-m_face","text":"int * m_face ; faces (-1 for interior faces)","title":"variable m_face"},{"location":"api/Classes/classFEElement__.html#variable-m_h","text":"double * m_h ; element thickness (only used by shells)","title":"variable m_h"},{"location":"api/Classes/classFEElement__.html#variable-m_fiber","text":"vec3d m_fiber ; fiber orientation Todo : maybe I can add an element attribute section","title":"variable m_fiber"},{"location":"api/Classes/classFEElement__.html#variable-m_q","text":"mat3d m_Q ; local material orientation","title":"variable m_Q"},{"location":"api/Classes/classFEElement__.html#variable-m_qactive","text":"bool m_Qactive ; active local material orientation","title":"variable m_Qactive"},{"location":"api/Classes/classFEElement__.html#variable-m_a0","text":"double m_a0 ; cross-sectional area (only used by truss elements)","title":"variable m_a0"},{"location":"api/Classes/classFEElement__.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEElement__.html#variable-m_ntype","text":"int m_ntype ; type of element","title":"variable m_ntype"},{"location":"api/Classes/classFEElement__.html#variable-m_nodes","text":"int m_nodes ; nr of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEElement__.html#variable-m_nfaces","text":"int m_nfaces ; nr of faces ( 0 for shells)","title":"variable m_nfaces"},{"location":"api/Classes/classFEElement__.html#variable-m_nedges","text":"int m_nedges ; nr of edges ( 0 for solids) Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_nedges"},{"location":"api/Classes/classFEFace.html","text":"FEFace Inherits from FEItem Public Types Name enum @2 Public Functions Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external. Public Attributes Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Types Documentation enum @2 Enumerator Value Description MAX_NODES 9 Public Functions Documentation function FEFace FEFace () constructor function operator== bool operator == ( const FEFace & f ) comparison operator function Nodes inline int Nodes () return number of nodes function Edges int Edges () return number of edges function GetEdgeNodes void GetEdgeNodes ( int i , int * n ) get the edge node numbers function HasEdge bool HasEdge ( int n1 , int n2 ) See if this face has an edge. function HasNode bool HasNode ( int i ) See if this face has node with ID i. function FindNode int FindNode ( int i ) Fine the array index of node with ID i. function IsExternal inline bool IsExternal () Is this face internal or external. Public Attributes Documentation variable n int n ; nodal ID's variable m_nodes int m_nodes ; number of nodes variable m_nbr int m_nbr ; neighbour faces variable m_fn vec3d m_fn ; face normal variable m_nn vec3d m_nn ; node normals variable m_sid int m_sid ; smoothing ID variable m_elem int m_elem ; the elements to which this face belongs Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFace"},{"location":"api/Classes/classFEFace.html#feface","text":"Inherits from FEItem","title":"FEFace"},{"location":"api/Classes/classFEFace.html#public-types","text":"Name enum @2","title":"Public Types"},{"location":"api/Classes/classFEFace.html#public-functions","text":"Name FEFace () constructor bool operator== (const FEFace & f) comparison operator int Nodes () return number of nodes int Edges () return number of edges void GetEdgeNodes (int i, int * n) get the edge node numbers bool HasEdge (int n1, int n2) See if this face has an edge. bool HasNode (int i) See if this face has node with ID i. int FindNode (int i) Fine the array index of node with ID i. bool IsExternal () Is this face internal or external.","title":"Public Functions"},{"location":"api/Classes/classFEFace.html#public-attributes","text":"Name int n nodal ID's int m_nodes number of nodes int m_nbr neighbour faces vec3d m_fn face normal vec3d m_nn node normals int m_sid smoothing ID int m_elem the elements to which this face belongs","title":"Public Attributes"},{"location":"api/Classes/classFEFace.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFEFace.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classFEFace.html#enum-2","text":"Enumerator Value Description MAX_NODES 9","title":"enum @2"},{"location":"api/Classes/classFEFace.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFace.html#function-feface","text":"FEFace () constructor","title":"function FEFace"},{"location":"api/Classes/classFEFace.html#function-operator","text":"bool operator == ( const FEFace & f ) comparison operator","title":"function operator=="},{"location":"api/Classes/classFEFace.html#function-nodes","text":"inline int Nodes () return number of nodes","title":"function Nodes"},{"location":"api/Classes/classFEFace.html#function-edges","text":"int Edges () return number of edges","title":"function Edges"},{"location":"api/Classes/classFEFace.html#function-getedgenodes","text":"void GetEdgeNodes ( int i , int * n ) get the edge node numbers","title":"function GetEdgeNodes"},{"location":"api/Classes/classFEFace.html#function-hasedge","text":"bool HasEdge ( int n1 , int n2 ) See if this face has an edge.","title":"function HasEdge"},{"location":"api/Classes/classFEFace.html#function-hasnode","text":"bool HasNode ( int i ) See if this face has node with ID i.","title":"function HasNode"},{"location":"api/Classes/classFEFace.html#function-findnode","text":"int FindNode ( int i ) Fine the array index of node with ID i.","title":"function FindNode"},{"location":"api/Classes/classFEFace.html#function-isexternal","text":"inline bool IsExternal () Is this face internal or external.","title":"function IsExternal"},{"location":"api/Classes/classFEFace.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFace.html#variable-n","text":"int n ; nodal ID's","title":"variable n"},{"location":"api/Classes/classFEFace.html#variable-m_nodes","text":"int m_nodes ; number of nodes","title":"variable m_nodes"},{"location":"api/Classes/classFEFace.html#variable-m_nbr","text":"int m_nbr ; neighbour faces","title":"variable m_nbr"},{"location":"api/Classes/classFEFace.html#variable-m_fn","text":"vec3d m_fn ; face normal","title":"variable m_fn"},{"location":"api/Classes/classFEFace.html#variable-m_nn","text":"vec3d m_nn ; node normals","title":"variable m_nn"},{"location":"api/Classes/classFEFace.html#variable-m_sid","text":"int m_sid ; smoothing ID","title":"variable m_sid"},{"location":"api/Classes/classFEFace.html#variable-m_elem","text":"int m_elem ; the elements to which this face belongs Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_elem"},{"location":"api/Classes/classFEFillHole.html","text":"FEFillHole Public Classes Name class EdgeRing struct FACE Public Functions Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm) Public Attributes Name bool optimize bool insertNodes Public Functions Documentation function FEFillHole inline FEFillHole () function Apply FEMesh * Apply ( FEMesh * pm ) function AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list ) function newNode vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ) function DivideRing bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list ) function DivideRing1 bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list ) function FillAllHoles void FillAllHoles ( FEMesh * pm ) Public Attributes Documentation variable optimize bool optimize ; variable insertNodes bool insertNodes ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#fefillhole","text":"","title":"FEFillHole"},{"location":"api/Classes/classFEFillHole.html#public-classes","text":"Name class EdgeRing struct FACE","title":"Public Classes"},{"location":"api/Classes/classFEFillHole.html#public-functions","text":"Name FEFillHole () FEMesh * Apply ( FEMesh * pm) bool AFM ( FEMesh & mesh, EdgeRing & ring, vector< FACE > & tri_list, vector< vec3d > & node_list) vec3d newNode ( vec3d current_node, vec3d next_node, vec3d prev_node, vec3d node_normal, double scale, bool concave) bool DivideRing ( EdgeRing & ring, vector< FACE > & tri_list) bool DivideRing1 ( EdgeRing & ring, vector< FACE > & tri_list) void FillAllHoles ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole.html#public-attributes","text":"Name bool optimize bool insertNodes","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole.html#function-fefillhole","text":"inline FEFillHole ()","title":"function FEFillHole"},{"location":"api/Classes/classFEFillHole.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFillHole.html#function-afm","text":"bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE > & tri_list , vector < vec3d > & node_list )","title":"function AFM"},{"location":"api/Classes/classFEFillHole.html#function-newnode","text":"vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave )","title":"function newNode"},{"location":"api/Classes/classFEFillHole.html#function-dividering","text":"bool DivideRing ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing"},{"location":"api/Classes/classFEFillHole.html#function-dividering1","text":"bool DivideRing1 ( EdgeRing & ring , vector < FACE > & tri_list )","title":"function DivideRing1"},{"location":"api/Classes/classFEFillHole.html#function-fillallholes","text":"void FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFillHole.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole.html#variable-optimize","text":"bool optimize ;","title":"variable optimize"},{"location":"api/Classes/classFEFillHole.html#variable-insertnodes","text":"bool insertNodes ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable insertNodes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html","text":"FEFillHole::EdgeRing Public Functions Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear) Public Attributes Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal Public Functions Documentation function EdgeRing inline EdgeRing () function EdgeRing inline EdgeRing ( const EdgeRing & ring ) function operator= inline void operator = ( const EdgeRing & ring ) function empty inline bool empty () function add inline void add ( int n , const vec3d & r , const vec3d & nn ) function clear inline void clear () function size inline int size () function operator[] inline int operator []( int i ) function GetLeftEar void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ) function GetRightEar void GetRightEar ( int n0 , int n1 , EdgeRing & ear ) Public Attributes Documentation variable m_r vector < vec3d > m_r ; variable m_node vector < int > m_node ; variable m_winding int m_winding ; variable m_normal vector < vec3d > m_normal ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#fefillholeedgering","text":"","title":"FEFillHole::EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions","text":"Name EdgeRing () EdgeRing (const EdgeRing & ring) void operator= (const EdgeRing & ring) bool empty () void add (int n, const vec3d & r, const vec3d & nn) void clear () int size () int operator[] (int i) void GetLeftEar (int n0, int n1, EdgeRing & ear) void GetRightEar (int n0, int n1, EdgeRing & ear)","title":"Public Functions"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes","text":"Name vector< vec3d > m_r vector< int > m_node int m_winding vector< vec3d > m_normal","title":"Public Attributes"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering","text":"inline EdgeRing ()","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-edgering_1","text":"inline EdgeRing ( const EdgeRing & ring )","title":"function EdgeRing"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator","text":"inline void operator = ( const EdgeRing & ring )","title":"function operator="},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-empty","text":"inline bool empty ()","title":"function empty"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-add","text":"inline void add ( int n , const vec3d & r , const vec3d & nn )","title":"function add"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-size","text":"inline int size ()","title":"function size"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-operator_1","text":"inline int operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getleftear","text":"void GetLeftEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetLeftEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#function-getrightear","text":"void GetRightEar ( int n0 , int n1 , EdgeRing & ear )","title":"function GetRightEar"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_r","text":"vector < vec3d > m_r ;","title":"variable m_r"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_winding","text":"int m_winding ;","title":"variable m_winding"},{"location":"api/Classes/classFEFillHole_1_1EdgeRing.html#variable-m_normal","text":"vector < vec3d > m_normal ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_normal"},{"location":"api/Classes/classFEFixMesh.html","text":"FEFixMesh Public Functions Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm) Public Functions Documentation function FEFixMesh inline FEFixMesh () function Apply FEMesh * Apply ( FEMesh * pm ) function SetTask void SetTask ( int n ) function SetThickness void SetThickness ( double m ) function RemoveDuplicateElements FEMesh * RemoveDuplicateElements ( FEMesh * pm ) function RemoveNonManifoldElements FEMesh * RemoveNonManifoldElements ( FEMesh * pm ) function FixElementWinding FEMesh * FixElementWinding ( FEMesh * pm ) function FillAllHoles FEMesh * FillAllHoles ( FEMesh * pm ) function FixinvertedElements FEMesh * FixinvertedElements ( FEMesh * pm ) function FixReferenceSurface FEMesh * FixReferenceSurface ( FEMesh * pm ) function InterpolateShellThickness FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#fefixmesh","text":"","title":"FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#public-functions","text":"Name FEFixMesh () FEMesh * Apply ( FEMesh * pm) void SetTask (int n) void SetThickness (double m) FEMesh * RemoveDuplicateElements ( FEMesh * pm) FEMesh * RemoveNonManifoldElements ( FEMesh * pm) FEMesh * FixElementWinding ( FEMesh * pm) FEMesh * FillAllHoles ( FEMesh * pm) FEMesh * FixinvertedElements ( FEMesh * pm) FEMesh * FixReferenceSurface ( FEMesh * pm) FEMesh * InterpolateShellThickness ( FEMesh * pm)","title":"Public Functions"},{"location":"api/Classes/classFEFixMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEFixMesh.html#function-fefixmesh","text":"inline FEFixMesh ()","title":"function FEFixMesh"},{"location":"api/Classes/classFEFixMesh.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm )","title":"function Apply"},{"location":"api/Classes/classFEFixMesh.html#function-settask","text":"void SetTask ( int n )","title":"function SetTask"},{"location":"api/Classes/classFEFixMesh.html#function-setthickness","text":"void SetThickness ( double m )","title":"function SetThickness"},{"location":"api/Classes/classFEFixMesh.html#function-removeduplicateelements","text":"FEMesh * RemoveDuplicateElements ( FEMesh * pm )","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEFixMesh.html#function-removenonmanifoldelements","text":"FEMesh * RemoveNonManifoldElements ( FEMesh * pm )","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixelementwinding","text":"FEMesh * FixElementWinding ( FEMesh * pm )","title":"function FixElementWinding"},{"location":"api/Classes/classFEFixMesh.html#function-fillallholes","text":"FEMesh * FillAllHoles ( FEMesh * pm )","title":"function FillAllHoles"},{"location":"api/Classes/classFEFixMesh.html#function-fixinvertedelements","text":"FEMesh * FixinvertedElements ( FEMesh * pm )","title":"function FixinvertedElements"},{"location":"api/Classes/classFEFixMesh.html#function-fixreferencesurface","text":"FEMesh * FixReferenceSurface ( FEMesh * pm )","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEFixMesh.html#function-interpolateshellthickness","text":"FEMesh * InterpolateShellThickness ( FEMesh * pm ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEItem.html","text":"FEItem Inherited by FEEdge , FEElement_ , FEFace , FENode Public Functions Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes Name int m_ntag int m_gid int m_nid Public Functions Documentation function FEItem inline FEItem () function IsVisible inline bool IsVisible () const function IsSelected inline bool IsSelected () const function Select inline void Select () function UnSelect inline void UnSelect () function Show inline void Show () function Hide inline void Hide () function GetFEState inline unsigned int GetFEState () const function SetFEState inline void SetFEState ( unsigned int state ) Public Attributes Documentation variable m_ntag int m_ntag ; variable m_gid int m_gid ; variable m_nid int m_nid ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEItem"},{"location":"api/Classes/classFEItem.html#feitem","text":"Inherited by FEEdge , FEElement_ , FEFace , FENode","title":"FEItem"},{"location":"api/Classes/classFEItem.html#public-functions","text":"Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state)","title":"Public Functions"},{"location":"api/Classes/classFEItem.html#public-attributes","text":"Name int m_ntag int m_gid int m_nid","title":"Public Attributes"},{"location":"api/Classes/classFEItem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEItem.html#function-feitem","text":"inline FEItem ()","title":"function FEItem"},{"location":"api/Classes/classFEItem.html#function-isvisible","text":"inline bool IsVisible () const","title":"function IsVisible"},{"location":"api/Classes/classFEItem.html#function-isselected","text":"inline bool IsSelected () const","title":"function IsSelected"},{"location":"api/Classes/classFEItem.html#function-select","text":"inline void Select ()","title":"function Select"},{"location":"api/Classes/classFEItem.html#function-unselect","text":"inline void UnSelect ()","title":"function UnSelect"},{"location":"api/Classes/classFEItem.html#function-show","text":"inline void Show ()","title":"function Show"},{"location":"api/Classes/classFEItem.html#function-hide","text":"inline void Hide ()","title":"function Hide"},{"location":"api/Classes/classFEItem.html#function-getfestate","text":"inline unsigned int GetFEState () const","title":"function GetFEState"},{"location":"api/Classes/classFEItem.html#function-setfestate","text":"inline void SetFEState ( unsigned int state )","title":"function SetFEState"},{"location":"api/Classes/classFEItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEItem.html#variable-m_ntag","text":"int m_ntag ;","title":"variable m_ntag"},{"location":"api/Classes/classFEItem.html#variable-m_gid","text":"int m_gid ;","title":"variable m_gid"},{"location":"api/Classes/classFEItem.html#variable-m_nid","text":"int m_nid ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_nid"},{"location":"api/Classes/classFEMesh.html","text":"FEMesh Inherits from FECoreMesh Public Functions Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET) Protected Functions Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) Protected Attributes Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map Additional inherited members Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces. Public Functions Documentation function FEMesh FEMesh () function FEMesh FEMesh ( FEMesh & m ) function ~FEMesh virtual ~ FEMesh () function Create virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create function ShallowCopy void ShallowCopy ( FEMesh * pm ) function Clear void Clear () \u2014 C L E A N U P \u2014 function DeleteEdges inline void DeleteEdges () function Elements inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements function Element inline FEElement & Element ( int n ) return element function ElementRef inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef function ElementPtr inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr function FindFace int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ) function FindNodesFromPart void FindNodesFromPart ( int gid , vector < int > & node ) function NodeArray inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array function FaceArray inline std :: vector < FEFace > & FaceArray () function ElementArray inline std :: vector < FEElement > & ElementArray () function GetElementValue inline double GetElementValue ( int n ) function SetElementValue inline void SetElementValue ( int n , double v ) function UpdateValueRange void UpdateValueRange () function GetValueRange void GetValueRange ( double & vmin , double & vmax ) function ProjectToSurface vec3d ProjectToSurface ( vec3d r , vec3d t ) function ProjectToFace vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ) function ProjectToEdge vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ) function FindIntersection bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ) function Update void Update () function UpdateElementNeighbors void UpdateElementNeighbors () function UpdateFaces void UpdateFaces () function UpdateEdges void UpdateEdges () function UpdateNodes void UpdateNodes () function AutoSmooth void AutoSmooth ( double w ) function UpdateNormals void UpdateNormals () function PartitionSelection void PartitionSelection () function RemoveIsolatedNodes void RemoveIsolatedNodes () function AddNode inline void AddNode ( FENode & n ) function DetachSelectedMesh FEMesh * DetachSelectedMesh () function DetachSelectedPart void DetachSelectedPart () function ExtractSelectedFaces FEMesh * ExtractSelectedFaces () function DeleteTaggedElements void DeleteTaggedElements ( int tag ) function DeleteTaggedFaces void DeleteTaggedFaces ( int tag ) function DeleteTaggedEdges void DeleteTaggedEdges ( int tag ) function FindDuplicateFaces void FindDuplicateFaces ( vector < int > & l ) function FindDuplicateEdges void FindDuplicateEdges ( vector < int > & l ) function DeleteSelectedElements void DeleteSelectedElements () function DeleteSelectedFaces void DeleteSelectedFaces () function DeleteSelectedNodes void DeleteSelectedNodes () function InvertTaggedElements void InvertTaggedElements ( int ntag ) function InvertSelectedElements void InvertSelectedElements () function ShellJacobian double ShellJacobian ( FEElement & el ) function RemoveDuplicateElements void RemoveDuplicateElements () function FixinvertedElements void FixinvertedElements () function FixReferenceSurface void FixReferenceSurface () function InterpolateShellThickness void InterpolateShellThickness ( double ) function RemoveNonManifoldElements void RemoveNonManifoldElements () function FixElementWinding void FixElementWinding () function FixElementWinding2 void FixElementWinding2 () function TagAllElements void TagAllElements ( int ntag ) function DataFields inline int DataFields () function AddDataField FEElementData * AddDataField ( const char * szname , double v = 0.0 ) function GetDataField inline FEElementData & GetDataField ( int i ) function ShortestEdge double ShortestEdge () function BuildNodeElementTable void BuildNodeElementTable ( vector < vector < int > > & NET ) function BuildNodeFaceTable void BuildNodeFaceTable ( vector < vector < int > > & NFT ) function BuildNodeEdgeTable void BuildNodeEdgeTable ( vector < vector < int > > & NET ) function BuildEdgeTable void BuildEdgeTable ( vector < pair < int , int > > & ET ) function BuildNodeNodeTable void BuildNodeNodeTable ( vector < set < int > > & NNT ) function BuildSurfaceNodeNodeTable void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT ) function BuildElementEdgeTable void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET ) function BuildFaceTable void BuildFaceTable ( vector < FEFace > & FT ) function BuildElementFaceTable void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT ) function BuildFaceEdgeTable void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET ) function BuildFaceFaceTable void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT ) function BuildEdgeEdgeTable void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET ) Protected Functions Documentation function IntersectTri bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) function IntersectQuad bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ) Protected Attributes Documentation variable m_Elem std :: vector < FEElement > m_Elem ; FE elements. variable m_data std :: vector < double > m_data ; element values variable m_min double m_min ; variable m_max double m_max ; value range of element data variable m_map vector < FEElementData > m_map ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#femesh","text":"Inherits from FECoreMesh","title":"FEMesh"},{"location":"api/Classes/classFEMesh.html#public-functions","text":"Name FEMesh () FEMesh ( FEMesh & m) virtual ~FEMesh () virtual void Create (int nodes, int elems, int faces =0, int edges =0) allocate space for mesh void ShallowCopy ( FEMesh * pm) void Clear () \u2014 C L E A N U P \u2014 void DeleteEdges () virtual int Elements () const return number of elements FEElement & Element (int n) return element virtual FEElement_ & ElementRef (int n) return reference to element virtual FEElement * ElementPtr (int n =0) return pointer to element int FindFace ( FEElement * pe, FEFace & f, FEFace & fe) void FindNodesFromPart (int gid, vector< int > & node) std::vector< FENode > & NodeArray () std::vector< FEFace > & FaceArray () std::vector< FEElement > & ElementArray () double GetElementValue (int n) void SetElementValue (int n, double v) void UpdateValueRange () void GetValueRange (double & vmin, double & vmax) vec3d ProjectToSurface ( vec3d r, vec3d t) vec3d ProjectToFace ( vec3d p, FEFace & f, double & r, double & s) vec3d ProjectToEdge ( vec3d e1, vec3d e2, vec3d p, double & r) bool FindIntersection ( FEFace & f, vec3d x, vec3d n, vec3d & q, double & g) void Update () void UpdateElementNeighbors () void UpdateFaces () void UpdateEdges () void UpdateNodes () void AutoSmooth (double w) void UpdateNormals () void PartitionSelection () void RemoveIsolatedNodes () void AddNode ( FENode & n) FEMesh * DetachSelectedMesh () void DetachSelectedPart () FEMesh * ExtractSelectedFaces () void DeleteTaggedElements (int tag) void DeleteTaggedFaces (int tag) void DeleteTaggedEdges (int tag) void FindDuplicateFaces (vector< int > & l) void FindDuplicateEdges (vector< int > & l) void DeleteSelectedElements () void DeleteSelectedFaces () void DeleteSelectedNodes () void InvertTaggedElements (int ntag) void InvertSelectedElements () double ShellJacobian ( FEElement & el) void RemoveDuplicateElements () void FixinvertedElements () void FixReferenceSurface () void InterpolateShellThickness (double ) void RemoveNonManifoldElements () void FixElementWinding () void FixElementWinding2 () void TagAllElements (int ntag) int DataFields () FEElementData * AddDataField (const char * szname, double v =0.0) FEElementData & GetDataField (int i) double ShortestEdge () void BuildNodeElementTable (vector< vector< int > > & NET) void BuildNodeFaceTable (vector< vector< int > > & NFT) void BuildNodeEdgeTable (vector< vector< int > > & NET) void BuildEdgeTable (vector< pair< int, int > > & ET) void BuildNodeNodeTable (vector< set< int > > & NNT) void BuildSurfaceNodeNodeTable (vector< set< int > > & NNT) void BuildElementEdgeTable (vector< vector< int > > & EET, vector< pair< int, int > > & ET) void BuildFaceTable (vector< FEFace > & FT) void BuildElementFaceTable (vector< vector< int > > & EFT, vector< FEFace > & FT) void BuildFaceEdgeTable (vector< vector< int > > & FET, vector< pair< int, int > > & ET) void BuildFaceFaceTable (vector< int > & FFT, vector< FEFace > & FT) void BuildEdgeEdgeTable (vector< int > & EET, vector< pair< int, int > > & ET)","title":"Public Functions"},{"location":"api/Classes/classFEMesh.html#protected-functions","text":"Name bool IntersectTri ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g) bool IntersectQuad ( vec3d * y, vec3d x, vec3d n, vec3d & q, double & g)","title":"Protected Functions"},{"location":"api/Classes/classFEMesh.html#protected-attributes","text":"Name std::vector< FEElement > m_Elem FE elements. std::vector< double > m_data element values double m_min double m_max value range of element data vector< FEElementData > m_map","title":"Protected Attributes"},{"location":"api/Classes/classFEMesh.html#additional-inherited-members","text":"Public Functions inherited from FECoreMesh Name FECoreMesh () constructor virtual ~FECoreMesh () destructor bool IsType (int ntype) check the type of the mesh int Nodes () const int Edges () const int Faces () const FENode & Node (int n) FEEdge & Edge (int n) FEFace & Face (int n) FENode * NodePtr (int n =0) FEEdge * EdgePtr (int n =0) FEFace * FacePtr (int n =0) Protected Attributes inherited from FECoreMesh Name std::vector< FENode > m_Node FE nodes. std::vector< FEEdge > m_Edge FE edges. std::vector< FEFace > m_Face FE faces.","title":"Additional inherited members"},{"location":"api/Classes/classFEMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-femesh","text":"FEMesh ()","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_1","text":"FEMesh ( FEMesh & m )","title":"function FEMesh"},{"location":"api/Classes/classFEMesh.html#function-femesh_2","text":"virtual ~ FEMesh ()","title":"function ~FEMesh"},{"location":"api/Classes/classFEMesh.html#function-create","text":"virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) allocate space for mesh Reimplements : FECoreMesh::Create","title":"function Create"},{"location":"api/Classes/classFEMesh.html#function-shallowcopy","text":"void ShallowCopy ( FEMesh * pm )","title":"function ShallowCopy"},{"location":"api/Classes/classFEMesh.html#function-clear","text":"void Clear () \u2014 C L E A N U P \u2014","title":"function Clear"},{"location":"api/Classes/classFEMesh.html#function-deleteedges","text":"inline void DeleteEdges ()","title":"function DeleteEdges"},{"location":"api/Classes/classFEMesh.html#function-elements","text":"inline virtual int Elements () const return number of elements Reimplements : FECoreMesh::Elements","title":"function Elements"},{"location":"api/Classes/classFEMesh.html#function-element","text":"inline FEElement & Element ( int n ) return element","title":"function Element"},{"location":"api/Classes/classFEMesh.html#function-elementref","text":"inline virtual FEElement_ & ElementRef ( int n ) return reference to element Reimplements : FECoreMesh::ElementRef","title":"function ElementRef"},{"location":"api/Classes/classFEMesh.html#function-elementptr","text":"inline virtual FEElement * ElementPtr ( int n = 0 ) return pointer to element Reimplements : FECoreMesh::ElementPtr","title":"function ElementPtr"},{"location":"api/Classes/classFEMesh.html#function-findface","text":"int FindFace ( FEElement * pe , FEFace & f , FEFace & fe )","title":"function FindFace"},{"location":"api/Classes/classFEMesh.html#function-findnodesfrompart","text":"void FindNodesFromPart ( int gid , vector < int > & node )","title":"function FindNodesFromPart"},{"location":"api/Classes/classFEMesh.html#function-nodearray","text":"inline std :: vector < FENode > & NodeArray () Todo : Maybe I should delete these Get the node array","title":"function NodeArray"},{"location":"api/Classes/classFEMesh.html#function-facearray","text":"inline std :: vector < FEFace > & FaceArray ()","title":"function FaceArray"},{"location":"api/Classes/classFEMesh.html#function-elementarray","text":"inline std :: vector < FEElement > & ElementArray ()","title":"function ElementArray"},{"location":"api/Classes/classFEMesh.html#function-getelementvalue","text":"inline double GetElementValue ( int n )","title":"function GetElementValue"},{"location":"api/Classes/classFEMesh.html#function-setelementvalue","text":"inline void SetElementValue ( int n , double v )","title":"function SetElementValue"},{"location":"api/Classes/classFEMesh.html#function-updatevaluerange","text":"void UpdateValueRange ()","title":"function UpdateValueRange"},{"location":"api/Classes/classFEMesh.html#function-getvaluerange","text":"void GetValueRange ( double & vmin , double & vmax )","title":"function GetValueRange"},{"location":"api/Classes/classFEMesh.html#function-projecttosurface","text":"vec3d ProjectToSurface ( vec3d r , vec3d t )","title":"function ProjectToSurface"},{"location":"api/Classes/classFEMesh.html#function-projecttoface","text":"vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s )","title":"function ProjectToFace"},{"location":"api/Classes/classFEMesh.html#function-projecttoedge","text":"vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r )","title":"function ProjectToEdge"},{"location":"api/Classes/classFEMesh.html#function-findintersection","text":"bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g )","title":"function FindIntersection"},{"location":"api/Classes/classFEMesh.html#function-update","text":"void Update ()","title":"function Update"},{"location":"api/Classes/classFEMesh.html#function-updateelementneighbors","text":"void UpdateElementNeighbors ()","title":"function UpdateElementNeighbors"},{"location":"api/Classes/classFEMesh.html#function-updatefaces","text":"void UpdateFaces ()","title":"function UpdateFaces"},{"location":"api/Classes/classFEMesh.html#function-updateedges","text":"void UpdateEdges ()","title":"function UpdateEdges"},{"location":"api/Classes/classFEMesh.html#function-updatenodes","text":"void UpdateNodes ()","title":"function UpdateNodes"},{"location":"api/Classes/classFEMesh.html#function-autosmooth","text":"void AutoSmooth ( double w )","title":"function AutoSmooth"},{"location":"api/Classes/classFEMesh.html#function-updatenormals","text":"void UpdateNormals ()","title":"function UpdateNormals"},{"location":"api/Classes/classFEMesh.html#function-partitionselection","text":"void PartitionSelection ()","title":"function PartitionSelection"},{"location":"api/Classes/classFEMesh.html#function-removeisolatednodes","text":"void RemoveIsolatedNodes ()","title":"function RemoveIsolatedNodes"},{"location":"api/Classes/classFEMesh.html#function-addnode","text":"inline void AddNode ( FENode & n )","title":"function AddNode"},{"location":"api/Classes/classFEMesh.html#function-detachselectedmesh","text":"FEMesh * DetachSelectedMesh ()","title":"function DetachSelectedMesh"},{"location":"api/Classes/classFEMesh.html#function-detachselectedpart","text":"void DetachSelectedPart ()","title":"function DetachSelectedPart"},{"location":"api/Classes/classFEMesh.html#function-extractselectedfaces","text":"FEMesh * ExtractSelectedFaces ()","title":"function ExtractSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedelements","text":"void DeleteTaggedElements ( int tag )","title":"function DeleteTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-deletetaggedfaces","text":"void DeleteTaggedFaces ( int tag )","title":"function DeleteTaggedFaces"},{"location":"api/Classes/classFEMesh.html#function-deletetaggededges","text":"void DeleteTaggedEdges ( int tag )","title":"function DeleteTaggedEdges"},{"location":"api/Classes/classFEMesh.html#function-findduplicatefaces","text":"void FindDuplicateFaces ( vector < int > & l )","title":"function FindDuplicateFaces"},{"location":"api/Classes/classFEMesh.html#function-findduplicateedges","text":"void FindDuplicateEdges ( vector < int > & l )","title":"function FindDuplicateEdges"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedelements","text":"void DeleteSelectedElements ()","title":"function DeleteSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-deleteselectedfaces","text":"void DeleteSelectedFaces ()","title":"function DeleteSelectedFaces"},{"location":"api/Classes/classFEMesh.html#function-deleteselectednodes","text":"void DeleteSelectedNodes ()","title":"function DeleteSelectedNodes"},{"location":"api/Classes/classFEMesh.html#function-inverttaggedelements","text":"void InvertTaggedElements ( int ntag )","title":"function InvertTaggedElements"},{"location":"api/Classes/classFEMesh.html#function-invertselectedelements","text":"void InvertSelectedElements ()","title":"function InvertSelectedElements"},{"location":"api/Classes/classFEMesh.html#function-shelljacobian","text":"double ShellJacobian ( FEElement & el )","title":"function ShellJacobian"},{"location":"api/Classes/classFEMesh.html#function-removeduplicateelements","text":"void RemoveDuplicateElements ()","title":"function RemoveDuplicateElements"},{"location":"api/Classes/classFEMesh.html#function-fixinvertedelements","text":"void FixinvertedElements ()","title":"function FixinvertedElements"},{"location":"api/Classes/classFEMesh.html#function-fixreferencesurface","text":"void FixReferenceSurface ()","title":"function FixReferenceSurface"},{"location":"api/Classes/classFEMesh.html#function-interpolateshellthickness","text":"void InterpolateShellThickness ( double )","title":"function InterpolateShellThickness"},{"location":"api/Classes/classFEMesh.html#function-removenonmanifoldelements","text":"void RemoveNonManifoldElements ()","title":"function RemoveNonManifoldElements"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding","text":"void FixElementWinding ()","title":"function FixElementWinding"},{"location":"api/Classes/classFEMesh.html#function-fixelementwinding2","text":"void FixElementWinding2 ()","title":"function FixElementWinding2"},{"location":"api/Classes/classFEMesh.html#function-tagallelements","text":"void TagAllElements ( int ntag )","title":"function TagAllElements"},{"location":"api/Classes/classFEMesh.html#function-datafields","text":"inline int DataFields ()","title":"function DataFields"},{"location":"api/Classes/classFEMesh.html#function-adddatafield","text":"FEElementData * AddDataField ( const char * szname , double v = 0.0 )","title":"function AddDataField"},{"location":"api/Classes/classFEMesh.html#function-getdatafield","text":"inline FEElementData & GetDataField ( int i )","title":"function GetDataField"},{"location":"api/Classes/classFEMesh.html#function-shortestedge","text":"double ShortestEdge ()","title":"function ShortestEdge"},{"location":"api/Classes/classFEMesh.html#function-buildnodeelementtable","text":"void BuildNodeElementTable ( vector < vector < int > > & NET )","title":"function BuildNodeElementTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodefacetable","text":"void BuildNodeFaceTable ( vector < vector < int > > & NFT )","title":"function BuildNodeFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodeedgetable","text":"void BuildNodeEdgeTable ( vector < vector < int > > & NET )","title":"function BuildNodeEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgetable","text":"void BuildEdgeTable ( vector < pair < int , int > > & ET )","title":"function BuildEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildnodenodetable","text":"void BuildNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildsurfacenodenodetable","text":"void BuildSurfaceNodeNodeTable ( vector < set < int > > & NNT )","title":"function BuildSurfaceNodeNodeTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementedgetable","text":"void BuildElementEdgeTable ( vector < vector < int > > & EET , vector < pair < int , int > > & ET )","title":"function BuildElementEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacetable","text":"void BuildFaceTable ( vector < FEFace > & FT )","title":"function BuildFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildelementfacetable","text":"void BuildElementFaceTable ( vector < vector < int > > & EFT , vector < FEFace > & FT )","title":"function BuildElementFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildfaceedgetable","text":"void BuildFaceEdgeTable ( vector < vector < int > > & FET , vector < pair < int , int > > & ET )","title":"function BuildFaceEdgeTable"},{"location":"api/Classes/classFEMesh.html#function-buildfacefacetable","text":"void BuildFaceFaceTable ( vector < int > & FFT , vector < FEFace > & FT )","title":"function BuildFaceFaceTable"},{"location":"api/Classes/classFEMesh.html#function-buildedgeedgetable","text":"void BuildEdgeEdgeTable ( vector < int > & EET , vector < pair < int , int > > & ET )","title":"function BuildEdgeEdgeTable"},{"location":"api/Classes/classFEMesh.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMesh.html#function-intersecttri","text":"bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectTri"},{"location":"api/Classes/classFEMesh.html#function-intersectquad","text":"bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g )","title":"function IntersectQuad"},{"location":"api/Classes/classFEMesh.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFEMesh.html#variable-m_elem","text":"std :: vector < FEElement > m_Elem ; FE elements.","title":"variable m_Elem"},{"location":"api/Classes/classFEMesh.html#variable-m_data","text":"std :: vector < double > m_data ; element values","title":"variable m_data"},{"location":"api/Classes/classFEMesh.html#variable-m_min","text":"double m_min ;","title":"variable m_min"},{"location":"api/Classes/classFEMesh.html#variable-m_max","text":"double m_max ; value range of element data","title":"variable m_max"},{"location":"api/Classes/classFEMesh.html#variable-m_map","text":"vector < FEElementData > m_map ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_map"},{"location":"api/Classes/classFEMeshSmoothingModifier.html","text":"FEMeshSmoothingModifier More... #include Public Functions Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier. Protected Functions Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap) Public Attributes Name double m_threshold1 double m_threshold2 double m_iteration int m_method Detailed Description class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram. Public Functions Documentation function FEMeshSmoothingModifier FEMeshSmoothingModifier () Constructor. function Apply FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier. Protected Functions Documentation function area_triangle double area_triangle ( vec3d r [ 3 ] ) function distance double distance ( vec3d x , vec3d y ) function random double random () function Laplacian_Smoothing void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Laplacian_Smoothing2 void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ) function Taubin_Smoothing void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ) function Crease_Enhancing_Diffusion void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ) function Add_Noise void Add_Noise ( FEMesh * pm , vector < int > hashmap ) Public Attributes Documentation variable m_threshold1 double m_threshold1 ; variable m_threshold2 double m_threshold2 ; variable m_iteration double m_iteration ; variable m_method int m_method ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#femeshsmoothingmodifier","text":"More... #include ","title":"FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions","text":"Name FEMeshSmoothingModifier () Constructor. FEMesh * Apply ( FEMesh * pm) Apply the smoothing modifier.","title":"Public Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions","text":"Name double area_triangle ( vec3d r[3]) double distance ( vec3d x, vec3d y) double random () void Laplacian_Smoothing ( FEMesh * pm, vector< int > hashmap) void Laplacian_Smoothing2 ( FEMesh * pm, vector< int > hashmap) void Taubin_Smoothing ( FEMesh * pm, vector< int > hashmap) void Crease_Enhancing_Diffusion ( FEMesh * pm, vector< int > hashmap) void Add_Noise ( FEMesh * pm, vector< int > hashmap)","title":"Protected Functions"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes","text":"Name double m_threshold1 double m_threshold2 double m_iteration int m_method","title":"Public Attributes"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#detailed-description","text":"class FEMeshSmoothingModifier ; This class implements a modifier that coarses a plygonal mesh using an approximated centroidal voronoi diagram.","title":"Detailed Description"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-femeshsmoothingmodifier","text":"FEMeshSmoothingModifier () Constructor.","title":"function FEMeshSmoothingModifier"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-apply","text":"FEMesh * Apply ( FEMesh * pm ) Apply the smoothing modifier.","title":"function Apply"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-distance","text":"double distance ( vec3d x , vec3d y )","title":"function distance"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-random","text":"double random ()","title":"function random"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing","text":"void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-laplacian_smoothing2","text":"void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap )","title":"function Laplacian_Smoothing2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-taubin_smoothing","text":"void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap )","title":"function Taubin_Smoothing"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-crease_enhancing_diffusion","text":"void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap )","title":"function Crease_Enhancing_Diffusion"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#function-add_noise","text":"void Add_Noise ( FEMesh * pm , vector < int > hashmap )","title":"function Add_Noise"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold1","text":"double m_threshold1 ;","title":"variable m_threshold1"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_threshold2","text":"double m_threshold2 ;","title":"variable m_threshold2"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_iteration","text":"double m_iteration ;","title":"variable m_iteration"},{"location":"api/Classes/classFEMeshSmoothingModifier.html#variable-m_method","text":"int m_method ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_method"},{"location":"api/Classes/classFENode.html","text":"FENode Inherits from FEItem Public Functions Name FENode () Public Attributes Name vec3d r bool m_bext double m_ndata Additional inherited members Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FENode inline FENode () Public Attributes Documentation variable r vec3d r ; variable m_bext bool m_bext ; variable m_ndata double m_ndata ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENode"},{"location":"api/Classes/classFENode.html#fenode","text":"Inherits from FEItem","title":"FENode"},{"location":"api/Classes/classFENode.html#public-functions","text":"Name FENode ()","title":"Public Functions"},{"location":"api/Classes/classFENode.html#public-attributes","text":"Name vec3d r bool m_bext double m_ndata","title":"Public Attributes"},{"location":"api/Classes/classFENode.html#additional-inherited-members","text":"Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFENode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENode.html#function-fenode","text":"inline FENode ()","title":"function FENode"},{"location":"api/Classes/classFENode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classFENode.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/classFENode.html#variable-m_bext","text":"bool m_bext ;","title":"variable m_bext"},{"location":"api/Classes/classFENode.html#variable-m_ndata","text":"double m_ndata ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_ndata"},{"location":"api/Classes/classFENodeElementList.html","text":"FENodeElementList Public Functions Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem Public Functions Documentation function FENodeElementList FENodeElementList ( FEMesh * pm ) function ~FENodeElementList ~ FENodeElementList () function Build void Build () function Valence inline int Valence ( int n ) function Element inline FEElement * Element ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_pelem vector < FEElement * > m_pelem ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#fenodeelementlist","text":"","title":"FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#public-functions","text":"Name FENodeElementList ( FEMesh * pm) ~FENodeElementList () void Build () int Valence (int n) FEElement * Element (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< FEElement * > m_pelem","title":"Protected Attributes"},{"location":"api/Classes/classFENodeElementList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist","text":"FENodeElementList ( FEMesh * pm )","title":"function FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-fenodeelementlist_1","text":"~ FENodeElementList ()","title":"function ~FENodeElementList"},{"location":"api/Classes/classFENodeElementList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeElementList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeElementList.html#function-element","text":"inline FEElement * Element ( int n , int j )","title":"function Element"},{"location":"api/Classes/classFENodeElementList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeElementList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeElementList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeElementList.html#variable-m_pelem","text":"vector < FEElement * > m_pelem ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_pelem"},{"location":"api/Classes/classFENodeFaceList.html","text":"FENodeFaceList Public Functions Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf) Protected Functions Name void Sort (int node) Protected Attributes Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off Public Functions Documentation function FENodeFaceList FENodeFaceList ( FEMesh * pm ) function ~FENodeFaceList ~ FENodeFaceList ( void ) function Build void Build () function BuildSorted void BuildSorted () function Nodes inline int Nodes () function Node inline FENode & Node ( int i ) function Valence inline int Valence ( int i ) function Face inline FEFace * Face ( int n , int i ) function HasFace bool HasFace ( int n , FEFace * pf ) Protected Functions Documentation function Sort void Sort ( int node ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_node vector < int > m_node ; variable m_val vector < int > m_val ; variable m_pface vector < FEFace * > m_pface ; variable m_off vector < int > m_off ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#fenodefacelist","text":"","title":"FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#public-functions","text":"Name FENodeFaceList ( FEMesh * pm) ~FENodeFaceList (void ) void Build () void BuildSorted () int Nodes () FENode & Node (int i) int Valence (int i) FEFace * Face (int n, int i) bool HasFace (int n, FEFace * pf)","title":"Public Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions","text":"Name void Sort (int node)","title":"Protected Functions"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_node vector< int > m_val vector< FEFace * > m_pface vector< int > m_off","title":"Protected Attributes"},{"location":"api/Classes/classFENodeFaceList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist","text":"FENodeFaceList ( FEMesh * pm )","title":"function FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-fenodefacelist_1","text":"~ FENodeFaceList ( void )","title":"function ~FENodeFaceList"},{"location":"api/Classes/classFENodeFaceList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeFaceList.html#function-buildsorted","text":"void BuildSorted ()","title":"function BuildSorted"},{"location":"api/Classes/classFENodeFaceList.html#function-nodes","text":"inline int Nodes ()","title":"function Nodes"},{"location":"api/Classes/classFENodeFaceList.html#function-node","text":"inline FENode & Node ( int i )","title":"function Node"},{"location":"api/Classes/classFENodeFaceList.html#function-valence","text":"inline int Valence ( int i )","title":"function Valence"},{"location":"api/Classes/classFENodeFaceList.html#function-face","text":"inline FEFace * Face ( int n , int i )","title":"function Face"},{"location":"api/Classes/classFENodeFaceList.html#function-hasface","text":"bool HasFace ( int n , FEFace * pf )","title":"function HasFace"},{"location":"api/Classes/classFENodeFaceList.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFENodeFaceList.html#function-sort","text":"void Sort ( int node )","title":"function Sort"},{"location":"api/Classes/classFENodeFaceList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_node","text":"vector < int > m_node ;","title":"variable m_node"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_pface","text":"vector < FEFace * > m_pface ;","title":"variable m_pface"},{"location":"api/Classes/classFENodeFaceList.html#variable-m_off","text":"vector < int > m_off ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html","text":"FENodeNodeList Public Functions Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j) Protected Attributes Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node Public Functions Documentation function FENodeNodeList FENodeNodeList ( FEMesh * pm ) function ~FENodeNodeList ~ FENodeNodeList () function Build void Build () function Valence inline int Valence ( int n ) function Node inline int Node ( int n , int j ) Protected Attributes Documentation variable m_pm FEMesh * m_pm ; variable m_val vector < int > m_val ; variable m_off vector < int > m_off ; variable m_node vector < int > m_node ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#fenodenodelist","text":"","title":"FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#public-functions","text":"Name FENodeNodeList ( FEMesh * pm) ~FENodeNodeList () void Build () int Valence (int n) int Node (int n, int j)","title":"Public Functions"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes","text":"Name FEMesh * m_pm vector< int > m_val vector< int > m_off vector< int > m_node","title":"Protected Attributes"},{"location":"api/Classes/classFENodeNodeList.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist","text":"FENodeNodeList ( FEMesh * pm )","title":"function FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-fenodenodelist_1","text":"~ FENodeNodeList ()","title":"function ~FENodeNodeList"},{"location":"api/Classes/classFENodeNodeList.html#function-build","text":"void Build ()","title":"function Build"},{"location":"api/Classes/classFENodeNodeList.html#function-valence","text":"inline int Valence ( int n )","title":"function Valence"},{"location":"api/Classes/classFENodeNodeList.html#function-node","text":"inline int Node ( int n , int j )","title":"function Node"},{"location":"api/Classes/classFENodeNodeList.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_pm","text":"FEMesh * m_pm ;","title":"variable m_pm"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_val","text":"vector < int > m_val ;","title":"variable m_val"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_off","text":"vector < int > m_off ;","title":"variable m_off"},{"location":"api/Classes/classFENodeNodeList.html#variable-m_node","text":"vector < int > m_node ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_node"},{"location":"api/Classes/classFETri3.html","text":"FETri3 Inherits from FEElement_ , FEItem Public Functions Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator Additional inherited members Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid Public Functions Documentation function FETri3 FETri3 () Constructor. function FETri3 FETri3 ( FETri3 & el ) copy constructor function operator= FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-25 at 15:40:28 +0000","title":"FETri3"},{"location":"api/Classes/classFETri3.html#fetri3","text":"Inherits from FEElement_ , FEItem","title":"FETri3"},{"location":"api/Classes/classFETri3.html#public-functions","text":"Name FETri3 () Constructor. FETri3 ( FETri3 & el) copy constructor FETri3 & operator= ( FETri3 & el) assignment operator","title":"Public Functions"},{"location":"api/Classes/classFETri3.html#additional-inherited-members","text":"Public Functions inherited from FEElement_ Name FEElement_ () constructor bool is_equal ( FEElement_ & e) int GetType () const return the element type bool IsType (int ntype) const Is the element of this type. int Nodes () const number of nodes int Faces () const Number of faces (shells have no faces) int Edges () const Number of edges (solids have no edges) int GetFace (int i, int * n) Get only the nodes of face i (only solids have faces) FEFace GetFace (int i) Get the face i (only solids have faces) FEFace GetShellFace () Get the face of a shell. FEEdge GetEdge (int i) Get the edge. bool IsExterior () Is this an exterior element. bool IsSolid () bool IsShell () bool IsBeam () Protected Functions inherited from FEElement_ Name void copy (const FEElement_ & el) Public Attributes inherited from FEElement_ Name int * m_node pointer to node data int * m_nbr neighbour elements int * m_face faces (-1 for interior faces) double * m_h element thickness (only used by shells) vec3d m_fiber fiber orientation mat3d m_Q local material orientation bool m_Qactive active local material orientation double m_a0 cross-sectional area (only used by truss elements) Protected Attributes inherited from FEElement_ Name int m_ntype type of element int m_nodes nr of nodes int m_nfaces nr of faces ( 0 for shells) int m_nedges nr of edges ( 0 for solids) Public Functions inherited from FEItem Name FEItem () bool IsVisible () const bool IsSelected () const void Select () void UnSelect () void Show () void Hide () unsigned int GetFEState () const void SetFEState (unsigned int state) Public Attributes inherited from FEItem Name int m_ntag int m_gid int m_nid","title":"Additional inherited members"},{"location":"api/Classes/classFETri3.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFETri3.html#function-fetri3","text":"FETri3 () Constructor.","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-fetri3_1","text":"FETri3 ( FETri3 & el ) copy constructor","title":"function FETri3"},{"location":"api/Classes/classFETri3.html#function-operator","text":"FETri3 & operator = ( FETri3 & el ) assignment operator Updated on 2023-10-25 at 15:40:28 +0000","title":"function operator="},{"location":"api/Classes/classFEVTKExport.html","text":"FEVTKExport Public Functions Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh) Public Functions Documentation function FEVTKExport FEVTKExport () function ~FEVTKExport ~ FEVTKExport () = default function Export bool Export ( FEMesh & mesh , const char * szfile ) function ExportToString std :: string ExportToString ( FEMesh & mesh ) function ExportToStream bool ExportToStream ( FEMesh & mesh , std :: ostream & out ) function SetOptions inline void SetOptions ( VTKEXPORT o ) function ExportToVTK vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-25 at 15:40:28 +0000","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#fevtkexport","text":"","title":"FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#public-functions","text":"Name FEVTKExport () ~FEVTKExport () =default bool Export ( FEMesh & mesh, const char * szfile) std::string ExportToString ( FEMesh & mesh) bool ExportToStream ( FEMesh & mesh, std::ostream & out) void SetOptions ( VTKEXPORT o) vtkSmartPointer< vtkPolyData > ExportToVTK ( FEMesh & mesh)","title":"Public Functions"},{"location":"api/Classes/classFEVTKExport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport","text":"FEVTKExport ()","title":"function FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-fevtkexport_1","text":"~ FEVTKExport () = default","title":"function ~FEVTKExport"},{"location":"api/Classes/classFEVTKExport.html#function-export","text":"bool Export ( FEMesh & mesh , const char * szfile )","title":"function Export"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostring","text":"std :: string ExportToString ( FEMesh & mesh )","title":"function ExportToString"},{"location":"api/Classes/classFEVTKExport.html#function-exporttostream","text":"bool ExportToStream ( FEMesh & mesh , std :: ostream & out )","title":"function ExportToStream"},{"location":"api/Classes/classFEVTKExport.html#function-setoptions","text":"inline void SetOptions ( VTKEXPORT o )","title":"function SetOptions"},{"location":"api/Classes/classFEVTKExport.html#function-exporttovtk","text":"vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function ExportToVTK"},{"location":"api/Classes/classFEVTKimport.html","text":"FEVTKimport Public Functions Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata) Protected Functions Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close () Public Functions Documentation function FEVTKimport FEVTKimport () function ~FEVTKimport ~ FEVTKimport ( void ) function Load FEMesh * Load ( const char * szfile ) function Load FEMesh * Load ( istream & stream ) function Load FEMesh * Load ( vtkPolyData * polydata ) Protected Functions Documentation function BuildMesh bool BuildMesh () function errf FEMesh * errf ( const char * sz , ... ) function Close void Close () Updated on 2023-10-25 at 15:40:28 +0000","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#fevtkimport","text":"","title":"FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#public-functions","text":"Name FEVTKimport () ~FEVTKimport (void ) FEMesh * Load (const char * szfile) FEMesh * Load (istream & stream) FEMesh * Load (vtkPolyData * polydata)","title":"Public Functions"},{"location":"api/Classes/classFEVTKimport.html#protected-functions","text":"Name bool BuildMesh () FEMesh * errf (const char * sz, ... ) void Close ()","title":"Protected Functions"},{"location":"api/Classes/classFEVTKimport.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport","text":"FEVTKimport ()","title":"function FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-fevtkimport_1","text":"~ FEVTKimport ( void )","title":"function ~FEVTKimport"},{"location":"api/Classes/classFEVTKimport.html#function-load","text":"FEMesh * Load ( const char * szfile )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_1","text":"FEMesh * Load ( istream & stream )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#function-load_2","text":"FEMesh * Load ( vtkPolyData * polydata )","title":"function Load"},{"location":"api/Classes/classFEVTKimport.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classFEVTKimport.html#function-buildmesh","text":"bool BuildMesh ()","title":"function BuildMesh"},{"location":"api/Classes/classFEVTKimport.html#function-errf","text":"FEMesh * errf ( const char * sz , ... )","title":"function errf"},{"location":"api/Classes/classFEVTKimport.html#function-close","text":"void Close () Updated on 2023-10-25 at 15:40:28 +0000","title":"function Close"},{"location":"api/Classes/classGLCOLOR.html","text":"GLCOLOR Public Functions Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c) Public Attributes Name uchar a uchar b uchar g uchar r Public Functions Documentation function GLCOLOR inline GLCOLOR () function GLCOLOR inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) function operator* inline GLCOLOR operator * ( double f ) function operator+ inline GLCOLOR operator + ( GLCOLOR & c ) Public Attributes Documentation variable a uchar a ; variable b uchar b ; variable g uchar g ; variable r uchar r ; Updated on 2023-10-25 at 15:40:28 +0000","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#glcolor","text":"","title":"GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#public-functions","text":"Name GLCOLOR () GLCOLOR (uchar ur, uchar ug, uchar ub, uchar ua =255) GLCOLOR operator* (double f) GLCOLOR operator+ ( GLCOLOR & c)","title":"Public Functions"},{"location":"api/Classes/classGLCOLOR.html#public-attributes","text":"Name uchar a uchar b uchar g uchar r","title":"Public Attributes"},{"location":"api/Classes/classGLCOLOR.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor","text":"inline GLCOLOR ()","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-glcolor_1","text":"inline GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 )","title":"function GLCOLOR"},{"location":"api/Classes/classGLCOLOR.html#function-operator","text":"inline GLCOLOR operator * ( double f )","title":"function operator*"},{"location":"api/Classes/classGLCOLOR.html#function-operator_1","text":"inline GLCOLOR operator + ( GLCOLOR & c )","title":"function operator+"},{"location":"api/Classes/classGLCOLOR.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classGLCOLOR.html#variable-a","text":"uchar a ;","title":"variable a"},{"location":"api/Classes/classGLCOLOR.html#variable-b","text":"uchar b ;","title":"variable b"},{"location":"api/Classes/classGLCOLOR.html#variable-g","text":"uchar g ;","title":"variable g"},{"location":"api/Classes/classGLCOLOR.html#variable-r","text":"uchar r ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable r"},{"location":"api/Classes/classLegacyMeshGenerator.html","text":"LegacyMeshGenerator Public Functions Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape) Public Functions Documentation function LegacyMeshGenerator LegacyMeshGenerator () function ~LegacyMeshGenerator ~ LegacyMeshGenerator () function setNeighborhoodSize void setNeighborhoodSize ( int size ) function setSampleSpacing void setSampleSpacing ( double spacing ) function setUsePowerCrust void setUsePowerCrust ( bool enabled ) function setSmoothingAmount void setSmoothingAmount ( float amount ) function buildMesh vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#legacymeshgenerator","text":"","title":"LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions","text":"Name LegacyMeshGenerator () ~LegacyMeshGenerator () void setNeighborhoodSize (int size) void setSampleSpacing (double spacing) void setUsePowerCrust (bool enabled) void setSmoothingAmount (float amount) vtkSmartPointer< vtkPolyData > buildMesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classLegacyMeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator","text":"LegacyMeshGenerator ()","title":"function LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-legacymeshgenerator_1","text":"~ LegacyMeshGenerator ()","title":"function ~LegacyMeshGenerator"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setneighborhoodsize","text":"void setNeighborhoodSize ( int size )","title":"function setNeighborhoodSize"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsamplespacing","text":"void setSampleSpacing ( double spacing )","title":"function setSampleSpacing"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setusepowercrust","text":"void setUsePowerCrust ( bool enabled )","title":"function setUsePowerCrust"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-setsmoothingamount","text":"void setSmoothingAmount ( float amount )","title":"function setSmoothingAmount"},{"location":"api/Classes/classLegacyMeshGenerator.html#function-buildmesh","text":"vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function buildMesh"},{"location":"api/Classes/classMeshSettings.html","text":"MeshSettings Settings for creating a mesh. More... #include Public Functions Name MeshSettings () Constructor. ~MeshSettings () Destructor. Detailed Description class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh. Public Functions Documentation function MeshSettings MeshSettings () Constructor. function ~MeshSettings ~ MeshSettings () Destructor. Updated on 2023-10-25 at 15:40:28 +0000","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#meshsettings","text":"Settings for creating a mesh. More... #include ","title":"MeshSettings"},{"location":"api/Classes/classMeshSettings.html#public-functions","text":"Name MeshSettings () Constructor. ~MeshSettings () Destructor.","title":"Public Functions"},{"location":"api/Classes/classMeshSettings.html#detailed-description","text":"class MeshSettings ; Settings for creating a mesh. The MeshSettings class represents a set of settings used it creating a mesh.","title":"Detailed Description"},{"location":"api/Classes/classMeshSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings","text":"MeshSettings () Constructor.","title":"function MeshSettings"},{"location":"api/Classes/classMeshSettings.html#function-meshsettings_1","text":"~ MeshSettings () Destructor. Updated on 2023-10-25 at 15:40:28 +0000","title":"function ~MeshSettings"},{"location":"api/Classes/classObjectReader.html","text":"ObjectReader More... Public Types Name typedef ObjectReader Self typedef T ObjectType Public Functions Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader () Detailed Description template < class T > class ObjectReader ; Public Types Documentation typedef Self typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectReader < T >:: ObjectType ; Public Functions Documentation function GetOutput inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType. function GetOutput inline std :: vector < ObjectType > & GetOutput () function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Read inline void Read () Read the file. function Update inline void Update () function ObjectReader inline ObjectReader () function ~ObjectReader inline virtual ~ ObjectReader () Updated on 2023-10-25 at 15:40:28 +0000","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#objectreader","text":"More...","title":"ObjectReader"},{"location":"api/Classes/classObjectReader.html#public-types","text":"Name typedef ObjectReader Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectReader.html#public-functions","text":"Name const std::vector< ObjectType > & GetOutput () const std::vector< ObjectType > & GetOutput () void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Read () void Update () ObjectReader () virtual ~ObjectReader ()","title":"Public Functions"},{"location":"api/Classes/classObjectReader.html#detailed-description","text":"template < class T > class ObjectReader ;","title":"Detailed Description"},{"location":"api/Classes/classObjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectReader.html#typedef-self","text":"typedef ObjectReader ObjectReader < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectReader.html#typedef-objecttype","text":"typedef T ObjectReader < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectReader.html#function-getoutput","text":"inline const std :: vector < ObjectType > & GetOutput () const Get the output of the reader. The output is a std::vector of TransformType.","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-getoutput_1","text":"inline std :: vector < ObjectType > & GetOutput ()","title":"function GetOutput"},{"location":"api/Classes/classObjectReader.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectReader.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectReader.html#function-read","text":"inline void Read () Read the file.","title":"function Read"},{"location":"api/Classes/classObjectReader.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectReader.html#function-objectreader","text":"inline ObjectReader ()","title":"function ObjectReader"},{"location":"api/Classes/classObjectReader.html#function-objectreader_1","text":"inline virtual ~ ObjectReader () Updated on 2023-10-25 at 15:40:28 +0000","title":"function ~ObjectReader"},{"location":"api/Classes/classObjectWriter.html","text":"ObjectWriter More... Public Types Name typedef ObjectWriter Self typedef T ObjectType Public Functions Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter () Detailed Description template < class T > class ObjectWriter ; Public Types Documentation typedef Self typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs typedef ObjectType typedef T ObjectWriter < T >:: ObjectType ; Public Functions Documentation function SetInput inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType. function SetFileName inline void SetFileName ( const char * fn ) function SetFileName inline void SetFileName ( const std :: string & fn ) function GetFileName inline const std :: string & GetFileName () const function Write inline void Write () Write the file. function Update inline void Update () function ObjectWriter inline ObjectWriter () function ~ObjectWriter inline virtual ~ ObjectWriter () Updated on 2023-10-25 at 15:40:28 +0000","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#objectwriter","text":"More...","title":"ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#public-types","text":"Name typedef ObjectWriter Self typedef T ObjectType","title":"Public Types"},{"location":"api/Classes/classObjectWriter.html#public-functions","text":"Name void SetInput (const std::vector< ObjectType > & p) void SetFileName (const char * fn) void SetFileName (const std::string & fn) const std::string & GetFileName () const void Write () void Update () ObjectWriter () virtual ~ObjectWriter ()","title":"Public Functions"},{"location":"api/Classes/classObjectWriter.html#detailed-description","text":"template < class T > class ObjectWriter ;","title":"Detailed Description"},{"location":"api/Classes/classObjectWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classObjectWriter.html#typedef-self","text":"typedef ObjectWriter ObjectWriter < T >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classObjectWriter.html#typedef-objecttype","text":"typedef T ObjectWriter < T >:: ObjectType ;","title":"typedef ObjectType"},{"location":"api/Classes/classObjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classObjectWriter.html#function-setinput","text":"inline void SetInput ( const std :: vector < ObjectType > & p ) Set the input vector. The input is a reference to a std::vector of ObjectType.","title":"function SetInput"},{"location":"api/Classes/classObjectWriter.html#function-setfilename","text":"inline void SetFileName ( const char * fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-setfilename_1","text":"inline void SetFileName ( const std :: string & fn )","title":"function SetFileName"},{"location":"api/Classes/classObjectWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classObjectWriter.html#function-write","text":"inline void Write () Write the file.","title":"function Write"},{"location":"api/Classes/classObjectWriter.html#function-update","text":"inline void Update ()","title":"function Update"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter","text":"inline ObjectWriter ()","title":"function ObjectWriter"},{"location":"api/Classes/classObjectWriter.html#function-objectwriter_1","text":"inline virtual ~ ObjectWriter () Updated on 2023-10-25 at 15:40:28 +0000","title":"function ~ObjectWriter"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html","text":"title: ParticleEvent:: Parent ParticleEvent:: Parent More... Detailed Description class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-25 at 15:40:27 +0000","title":"classParticleEvent 1 1 01Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#particleevent-parent","text":"More...","title":"ParticleEvent:: Parent"},{"location":"api/Classes/classParticleEvent_1_1_01Parent.html#detailed-description","text":"class ParticleEvent :: Parent ; all Particle events. Event that carries Position index and a Domain index information. This is used, for example to indicate which position has changed in the particle system on InvokeEvent. Updated on 2023-10-25 at 15:40:27 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html","text":"ParticleGradientDescentPositionOptimizer More... #include Detailed Description class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#particlegradientdescentpositionoptimizer","text":"More... #include ","title":"ParticleGradientDescentPositionOptimizer"},{"location":"api/Classes/classParticleGradientDescentPositionOptimizer.html#detailed-description","text":"class ParticleGradientDescentPositionOptimizer ; This class optimizes a list of particle system positions with respect to a specified energy function using a simple gradient descent strategy. A function which computes the gradient of the function with respect to particle position must be specified. The optimization performs Jacobi updates (each particle position is changed as soon as its new position is computed). Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomain.html","text":"ParticleImageDomain More... #include Detailed Description class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#particleimagedomain","text":"More... #include ","title":"ParticleImageDomain"},{"location":"api/Classes/classParticleImageDomain.html#detailed-description","text":"class ParticleImageDomain ; A bounding-box region domain that sets its bounding box according to the origin, spacing, and RequestedRegion of a specified itk::Image. This Domain object may be sampled for interpolated image values using the Sample(Point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html","text":"ParticleImageDomainWithCurvature More... #include Detailed Description class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#particleimagedomainwithcurvature","text":"More... #include ","title":"ParticleImageDomainWithCurvature"},{"location":"api/Classes/classParticleImageDomainWithCurvature.html#detailed-description","text":"class ParticleImageDomainWithCurvature ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradN with curvature information. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradN.html","text":"ParticleImageDomainWithGradN More... #include Detailed Description class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#particleimagedomainwithgradn","text":"More... #include ","title":"ParticleImageDomainWithGradN"},{"location":"api/Classes/classParticleImageDomainWithGradN.html#detailed-description","text":"class ParticleImageDomainWithGradN ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with gradient of normals information. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImageDomainWithGradients.html","text":"ParticleImageDomainWithGradients More... #include Detailed Description class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#particleimagedomainwithgradients","text":"More... #include ","title":"ParticleImageDomainWithGradients"},{"location":"api/Classes/classParticleImageDomainWithGradients.html#detailed-description","text":"class ParticleImageDomainWithGradients ; See : ParticleImageDomain ParticleClipRegionDomain ParticleDomain An image domain that extends ParticleImageDomainWithGradients with image gradient information. Gradient values are interpolated with the SampleGradients(point) method. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html","text":"ParticleImplicitSurfaceDomain More... #include Detailed Description class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#particleimplicitsurfacedomain","text":"More... #include ","title":"ParticleImplicitSurfaceDomain"},{"location":"api/Classes/classParticleImplicitSurfaceDomain.html#detailed-description","text":"class ParticleImplicitSurfaceDomain ; A 3D cartesian domain that constrains points so that they always lie an implicit surface. The implicit surface is defined as the zero isosurface of the given image. Constraints are applied using a Newton-Raphson iteration, and this class assumes it has a distance transform as an image. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html","text":"ParticleMeanCurvatureAttribute Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleMeanCurvatureAttribute.html#particlemeancurvatureattribute","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleMeanCurvatureAttribute"},{"location":"api/Classes/classParticleProcrustesRegistration.html","text":"ParticleProcrustesRegistration Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleProcrustesRegistration.html#particleprocrustesregistration","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleProcrustesRegistration"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html","text":"ParticleShapeLinearRegressionMatrixAttribute Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html#particleshapelinearregressionmatrixattribute","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeLinearRegressionMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html","text":"ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Detailed Description class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#particleshapematrixattribute","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include ","title":"ParticleShapeMatrixAttribute"},{"location":"api/Classes/classParticleShapeMatrixAttribute.html#detailed-description","text":"class ParticleShapeMatrixAttribute ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html","text":"ParticleShapeMixedEffectsMatrixAttribute Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html#particleshapemixedeffectsmatrixattribute","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"ParticleShapeMixedEffectsMatrixAttribute"},{"location":"api/Classes/classPreferences.html","text":"Preferences Application preferences. More... #include Inherits from QObject Public Types Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4 Public Signals Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal () Public Functions Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events) Detailed Description class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class. Public Types Documentation enum OrientationMarkerType Enumerator Value Description medical 0 triad 1 none 2 enum OrientationMarkerCorner Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3 enum @4 Enumerator Value Description MAX_RECENT_FILES 64 Public Signals Documentation signal color_scheme_changed void color_scheme_changed ( int newIndex ) signal glyph_properties_changed void glyph_properties_changed () signal threading_changed_signal void threading_changed_signal () signal sliders_changed_signal void sliders_changed_signal () Public Functions Documentation function Preferences Preferences () function restore_defaults void restore_defaults () function add_recent_file void add_recent_file ( QString file , QString path ) function get_recent_files QStringList get_recent_files () function get_recent_paths QStringList get_recent_paths () function not_saved bool not_saved () function set_saved void set_saved ( bool saved = true ) function get_window_geometry QByteArray get_window_geometry () function set_window_geometry void set_window_geometry ( QByteArray geometry ) function get_window_state QByteArray get_window_state () function set_window_state void set_window_state ( QByteArray state ) function get_last_directory QString get_last_directory () function set_last_directory void set_last_directory ( QString value ) function get_cache_enabled bool get_cache_enabled () function set_cache_enabled void set_cache_enabled ( bool value ) function get_parallel_enabled bool get_parallel_enabled () function set_parallel_enabled void set_parallel_enabled ( bool value ) function get_memory_cache_percent int get_memory_cache_percent () function set_memory_cache_percent void set_memory_cache_percent ( int value ) function get_num_threads int get_num_threads () function set_num_threads void set_num_threads ( int num_threads ) function get_glyph_size float get_glyph_size () function set_glyph_size void set_glyph_size ( float value ) function get_glyph_quality float get_glyph_quality () function set_glyph_quality void set_glyph_quality ( float value ) function get_glyph_auto_size bool get_glyph_auto_size () function set_glyph_auto_size void set_glyph_auto_size ( bool value ) function get_glyph_scale_arrows bool get_glyph_scale_arrows () function set_glyph_scale_arrows void set_glyph_scale_arrows ( bool value ) function get_pca_range float get_pca_range () function set_pca_range void set_pca_range ( float value ) function get_pca_steps int get_pca_steps () function set_pca_steps void set_pca_steps ( int value ) function set_color_scheme void set_color_scheme ( int value ) function get_color_scheme int get_color_scheme () function set_particle_colors void set_particle_colors ( int value ) function get_particle_colors int get_particle_colors () function set_color_map void set_color_map ( int value ) function get_color_map int get_color_map () function set_discrete_color_mode void set_discrete_color_mode ( bool value ) function get_discrete_color_mode bool get_discrete_color_mode () function set_reverse_color_map void set_reverse_color_map ( bool value ) function get_reverse_color_map bool get_reverse_color_map () function get_center_checked bool get_center_checked () function set_center_checked void set_center_checked ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_orientation_marker_type OrientationMarkerType get_orientation_marker_type () function set_orientation_marker_type void set_orientation_marker_type ( OrientationMarkerType type ) function get_orientation_marker_corner OrientationMarkerCorner get_orientation_marker_corner () function set_orientation_marker_corner void set_orientation_marker_corner ( OrientationMarkerCorner corner ) function get_groom_file_template QString get_groom_file_template () function set_groom_file_template void set_groom_file_template ( QString groom_file_template ) function get_optimize_file_template QString get_optimize_file_template () function set_optimize_file_template void set_optimize_file_template ( QString optimize_file_template ) function get_export_override_size QSize get_export_override_size () function set_export_override_size void set_export_override_size ( QSize size ) function get_export_override_size_enabled bool get_export_override_size_enabled () function set_export_override_size_enabled void set_export_override_size_enabled ( bool enabled ) function get_export_show_orientation_marker bool get_export_show_orientation_marker () function set_export_show_orientation_marker void set_export_show_orientation_marker ( bool value ) function get_export_show_color_scale bool get_export_show_color_scale () function set_export_show_color_scale void set_export_show_color_scale ( bool value ) function get_export_num_pca_images int get_export_num_pca_images () function set_export_num_pca_images void set_export_num_pca_images ( int number ) function get_export_pca_range double get_export_pca_range () function set_export_pca_range void set_export_pca_range ( double range ) function set_export_pca_modes void set_export_pca_modes ( QString string ) function get_export_pca_modes QString get_export_pca_modes () function get_auto_update_check bool get_auto_update_check () function set_auto_update_check void set_auto_update_check ( bool enabled ) function get_update_snooze_until QDateTime get_update_snooze_until () function set_update_snooze_until void set_update_snooze_until ( QDateTime date ) function get_device_id QString get_device_id () function get_telemetry_enabled bool get_telemetry_enabled () function set_telemetry_enabled void set_telemetry_enabled ( bool enabled ) function get_telemetry_asked bool get_telemetry_asked () function set_telemetry_asked void set_telemetry_asked ( bool asked ) function get_pending_telemetry_events QStringList get_pending_telemetry_events () function set_pending_telemetry_events void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-25 at 15:40:28 +0000","title":"Preferences"},{"location":"api/Classes/classPreferences.html#preferences","text":"Application preferences. More... #include Inherits from QObject","title":"Preferences"},{"location":"api/Classes/classPreferences.html#public-types","text":"Name enum OrientationMarkerType enum OrientationMarkerCorner enum @4","title":"Public Types"},{"location":"api/Classes/classPreferences.html#public-signals","text":"Name void color_scheme_changed (int newIndex) void glyph_properties_changed () void threading_changed_signal () void sliders_changed_signal ()","title":"Public Signals"},{"location":"api/Classes/classPreferences.html#public-functions","text":"Name Preferences () void restore_defaults () void add_recent_file (QString file, QString path) QStringList get_recent_files () QStringList get_recent_paths () bool not_saved () void set_saved (bool saved =true) QByteArray get_window_geometry () void set_window_geometry (QByteArray geometry) QByteArray get_window_state () void set_window_state (QByteArray state) QString get_last_directory () void set_last_directory (QString value) bool get_cache_enabled () void set_cache_enabled (bool value) bool get_parallel_enabled () void set_parallel_enabled (bool value) int get_memory_cache_percent () void set_memory_cache_percent (int value) int get_num_threads () void set_num_threads (int num_threads) float get_glyph_size () void set_glyph_size (float value) float get_glyph_quality () void set_glyph_quality (float value) bool get_glyph_auto_size () void set_glyph_auto_size (bool value) bool get_glyph_scale_arrows () void set_glyph_scale_arrows (bool value) float get_pca_range () void set_pca_range (float value) int get_pca_steps () void set_pca_steps (int value) void set_color_scheme (int value) int get_color_scheme () void set_particle_colors (int value) int get_particle_colors () void set_color_map (int value) int get_color_map () void set_discrete_color_mode (bool value) bool get_discrete_color_mode () void set_reverse_color_map (bool value) bool get_reverse_color_map () bool get_center_checked () void set_center_checked (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) OrientationMarkerType get_orientation_marker_type () void set_orientation_marker_type (OrientationMarkerType type) OrientationMarkerCorner get_orientation_marker_corner () void set_orientation_marker_corner (OrientationMarkerCorner corner) QString get_groom_file_template () void set_groom_file_template (QString groom_file_template) QString get_optimize_file_template () void set_optimize_file_template (QString optimize_file_template) QSize get_export_override_size () void set_export_override_size (QSize size) bool get_export_override_size_enabled () void set_export_override_size_enabled (bool enabled) bool get_export_show_orientation_marker () void set_export_show_orientation_marker (bool value) bool get_export_show_color_scale () void set_export_show_color_scale (bool value) int get_export_num_pca_images () void set_export_num_pca_images (int number) double get_export_pca_range () void set_export_pca_range (double range) void set_export_pca_modes (QString string) QString get_export_pca_modes () bool get_auto_update_check () void set_auto_update_check (bool enabled) QDateTime get_update_snooze_until () void set_update_snooze_until (QDateTime date) QString get_device_id () bool get_telemetry_enabled () void set_telemetry_enabled (bool enabled) bool get_telemetry_asked () void set_telemetry_asked (bool asked) QStringList get_pending_telemetry_events () void set_pending_telemetry_events (QStringList events)","title":"Public Functions"},{"location":"api/Classes/classPreferences.html#detailed-description","text":"class Preferences ; Application preferences. The Preferences singleton controls all preferences for the application. Values persist via the QSettings class.","title":"Detailed Description"},{"location":"api/Classes/classPreferences.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkertype","text":"Enumerator Value Description medical 0 triad 1 none 2","title":"enum OrientationMarkerType"},{"location":"api/Classes/classPreferences.html#enum-orientationmarkercorner","text":"Enumerator Value Description upper_right 0 lower_right 1 lower_left 2 upper_left 3","title":"enum OrientationMarkerCorner"},{"location":"api/Classes/classPreferences.html#enum-4","text":"Enumerator Value Description MAX_RECENT_FILES 64","title":"enum @4"},{"location":"api/Classes/classPreferences.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classPreferences.html#signal-color_scheme_changed","text":"void color_scheme_changed ( int newIndex )","title":"signal color_scheme_changed"},{"location":"api/Classes/classPreferences.html#signal-glyph_properties_changed","text":"void glyph_properties_changed ()","title":"signal glyph_properties_changed"},{"location":"api/Classes/classPreferences.html#signal-threading_changed_signal","text":"void threading_changed_signal ()","title":"signal threading_changed_signal"},{"location":"api/Classes/classPreferences.html#signal-sliders_changed_signal","text":"void sliders_changed_signal ()","title":"signal sliders_changed_signal"},{"location":"api/Classes/classPreferences.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classPreferences.html#function-preferences","text":"Preferences ()","title":"function Preferences"},{"location":"api/Classes/classPreferences.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classPreferences.html#function-add_recent_file","text":"void add_recent_file ( QString file , QString path )","title":"function add_recent_file"},{"location":"api/Classes/classPreferences.html#function-get_recent_files","text":"QStringList get_recent_files ()","title":"function get_recent_files"},{"location":"api/Classes/classPreferences.html#function-get_recent_paths","text":"QStringList get_recent_paths ()","title":"function get_recent_paths"},{"location":"api/Classes/classPreferences.html#function-not_saved","text":"bool not_saved ()","title":"function not_saved"},{"location":"api/Classes/classPreferences.html#function-set_saved","text":"void set_saved ( bool saved = true )","title":"function set_saved"},{"location":"api/Classes/classPreferences.html#function-get_window_geometry","text":"QByteArray get_window_geometry ()","title":"function get_window_geometry"},{"location":"api/Classes/classPreferences.html#function-set_window_geometry","text":"void set_window_geometry ( QByteArray geometry )","title":"function set_window_geometry"},{"location":"api/Classes/classPreferences.html#function-get_window_state","text":"QByteArray get_window_state ()","title":"function get_window_state"},{"location":"api/Classes/classPreferences.html#function-set_window_state","text":"void set_window_state ( QByteArray state )","title":"function set_window_state"},{"location":"api/Classes/classPreferences.html#function-get_last_directory","text":"QString get_last_directory ()","title":"function get_last_directory"},{"location":"api/Classes/classPreferences.html#function-set_last_directory","text":"void set_last_directory ( QString value )","title":"function set_last_directory"},{"location":"api/Classes/classPreferences.html#function-get_cache_enabled","text":"bool get_cache_enabled ()","title":"function get_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool value )","title":"function set_cache_enabled"},{"location":"api/Classes/classPreferences.html#function-get_parallel_enabled","text":"bool get_parallel_enabled ()","title":"function get_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-set_parallel_enabled","text":"void set_parallel_enabled ( bool value )","title":"function set_parallel_enabled"},{"location":"api/Classes/classPreferences.html#function-get_memory_cache_percent","text":"int get_memory_cache_percent ()","title":"function get_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-set_memory_cache_percent","text":"void set_memory_cache_percent ( int value )","title":"function set_memory_cache_percent"},{"location":"api/Classes/classPreferences.html#function-get_num_threads","text":"int get_num_threads ()","title":"function get_num_threads"},{"location":"api/Classes/classPreferences.html#function-set_num_threads","text":"void set_num_threads ( int num_threads )","title":"function set_num_threads"},{"location":"api/Classes/classPreferences.html#function-get_glyph_size","text":"float get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_size","text":"void set_glyph_size ( float value )","title":"function set_glyph_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_quality","text":"float get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-set_glyph_quality","text":"void set_glyph_quality ( float value )","title":"function set_glyph_quality"},{"location":"api/Classes/classPreferences.html#function-get_glyph_auto_size","text":"bool get_glyph_auto_size ()","title":"function get_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-set_glyph_auto_size","text":"void set_glyph_auto_size ( bool value )","title":"function set_glyph_auto_size"},{"location":"api/Classes/classPreferences.html#function-get_glyph_scale_arrows","text":"bool get_glyph_scale_arrows ()","title":"function get_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-set_glyph_scale_arrows","text":"void set_glyph_scale_arrows ( bool value )","title":"function set_glyph_scale_arrows"},{"location":"api/Classes/classPreferences.html#function-get_pca_range","text":"float get_pca_range ()","title":"function get_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_pca_range","text":"void set_pca_range ( float value )","title":"function set_pca_range"},{"location":"api/Classes/classPreferences.html#function-get_pca_steps","text":"int get_pca_steps ()","title":"function get_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_pca_steps","text":"void set_pca_steps ( int value )","title":"function set_pca_steps"},{"location":"api/Classes/classPreferences.html#function-set_color_scheme","text":"void set_color_scheme ( int value )","title":"function set_color_scheme"},{"location":"api/Classes/classPreferences.html#function-get_color_scheme","text":"int get_color_scheme ()","title":"function get_color_scheme"},{"location":"api/Classes/classPreferences.html#function-set_particle_colors","text":"void set_particle_colors ( int value )","title":"function set_particle_colors"},{"location":"api/Classes/classPreferences.html#function-get_particle_colors","text":"int get_particle_colors ()","title":"function get_particle_colors"},{"location":"api/Classes/classPreferences.html#function-set_color_map","text":"void set_color_map ( int value )","title":"function set_color_map"},{"location":"api/Classes/classPreferences.html#function-get_color_map","text":"int get_color_map ()","title":"function get_color_map"},{"location":"api/Classes/classPreferences.html#function-set_discrete_color_mode","text":"void set_discrete_color_mode ( bool value )","title":"function set_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-get_discrete_color_mode","text":"bool get_discrete_color_mode ()","title":"function get_discrete_color_mode"},{"location":"api/Classes/classPreferences.html#function-set_reverse_color_map","text":"void set_reverse_color_map ( bool value )","title":"function set_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_reverse_color_map","text":"bool get_reverse_color_map ()","title":"function get_reverse_color_map"},{"location":"api/Classes/classPreferences.html#function-get_center_checked","text":"bool get_center_checked ()","title":"function get_center_checked"},{"location":"api/Classes/classPreferences.html#function-set_center_checked","text":"void set_center_checked ( bool value )","title":"function set_center_checked"},{"location":"api/Classes/classPreferences.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_type","text":"OrientationMarkerType get_orientation_marker_type ()","title":"function get_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_type","text":"void set_orientation_marker_type ( OrientationMarkerType type )","title":"function set_orientation_marker_type"},{"location":"api/Classes/classPreferences.html#function-get_orientation_marker_corner","text":"OrientationMarkerCorner get_orientation_marker_corner ()","title":"function get_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-set_orientation_marker_corner","text":"void set_orientation_marker_corner ( OrientationMarkerCorner corner )","title":"function set_orientation_marker_corner"},{"location":"api/Classes/classPreferences.html#function-get_groom_file_template","text":"QString get_groom_file_template ()","title":"function get_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-set_groom_file_template","text":"void set_groom_file_template ( QString groom_file_template )","title":"function set_groom_file_template"},{"location":"api/Classes/classPreferences.html#function-get_optimize_file_template","text":"QString get_optimize_file_template ()","title":"function get_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-set_optimize_file_template","text":"void set_optimize_file_template ( QString optimize_file_template )","title":"function set_optimize_file_template"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size","text":"QSize get_export_override_size ()","title":"function get_export_override_size"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size","text":"void set_export_override_size ( QSize size )","title":"function set_export_override_size"},{"location":"api/Classes/classPreferences.html#function-get_export_override_size_enabled","text":"bool get_export_override_size_enabled ()","title":"function get_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-set_export_override_size_enabled","text":"void set_export_override_size_enabled ( bool enabled )","title":"function set_export_override_size_enabled"},{"location":"api/Classes/classPreferences.html#function-get_export_show_orientation_marker","text":"bool get_export_show_orientation_marker ()","title":"function get_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-set_export_show_orientation_marker","text":"void set_export_show_orientation_marker ( bool value )","title":"function set_export_show_orientation_marker"},{"location":"api/Classes/classPreferences.html#function-get_export_show_color_scale","text":"bool get_export_show_color_scale ()","title":"function get_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-set_export_show_color_scale","text":"void set_export_show_color_scale ( bool value )","title":"function set_export_show_color_scale"},{"location":"api/Classes/classPreferences.html#function-get_export_num_pca_images","text":"int get_export_num_pca_images ()","title":"function get_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-set_export_num_pca_images","text":"void set_export_num_pca_images ( int number )","title":"function set_export_num_pca_images"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_range","text":"double get_export_pca_range ()","title":"function get_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_range","text":"void set_export_pca_range ( double range )","title":"function set_export_pca_range"},{"location":"api/Classes/classPreferences.html#function-set_export_pca_modes","text":"void set_export_pca_modes ( QString string )","title":"function set_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_export_pca_modes","text":"QString get_export_pca_modes ()","title":"function get_export_pca_modes"},{"location":"api/Classes/classPreferences.html#function-get_auto_update_check","text":"bool get_auto_update_check ()","title":"function get_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-set_auto_update_check","text":"void set_auto_update_check ( bool enabled )","title":"function set_auto_update_check"},{"location":"api/Classes/classPreferences.html#function-get_update_snooze_until","text":"QDateTime get_update_snooze_until ()","title":"function get_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-set_update_snooze_until","text":"void set_update_snooze_until ( QDateTime date )","title":"function set_update_snooze_until"},{"location":"api/Classes/classPreferences.html#function-get_device_id","text":"QString get_device_id ()","title":"function get_device_id"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_enabled","text":"bool get_telemetry_enabled ()","title":"function get_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_enabled","text":"void set_telemetry_enabled ( bool enabled )","title":"function set_telemetry_enabled"},{"location":"api/Classes/classPreferences.html#function-get_telemetry_asked","text":"bool get_telemetry_asked ()","title":"function get_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-set_telemetry_asked","text":"void set_telemetry_asked ( bool asked )","title":"function set_telemetry_asked"},{"location":"api/Classes/classPreferences.html#function-get_pending_telemetry_events","text":"QStringList get_pending_telemetry_events ()","title":"function get_pending_telemetry_events"},{"location":"api/Classes/classPreferences.html#function-set_pending_telemetry_events","text":"void set_pending_telemetry_events ( QStringList events ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function set_pending_telemetry_events"},{"location":"api/Classes/classProcrustes3D.html","text":"Procrustes3D Public Types Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType Public Functions Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes) Public Types Documentation typedef RealType typedef double Procrustes3D :: RealType ; typedef PointType typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ; typedef ShapeType typedef std :: vector < PointType > Procrustes3D :: ShapeType ; typedef ShapeIteratorType typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ; typedef ShapeListType typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ; typedef ShapeListIteratorType typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ; typedef SimilarityTransformListType typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ; typedef SimilarityTransformListIteratorType typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ; typedef TransformMatrixType typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ; typedef TransformMatrixListType typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ; typedef TransformMatrixIteratorType typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ; Public Functions Documentation function Procrustes3D inline Procrustes3D () function Procrustes3D inline Procrustes3D ( bool do_scaling , bool do_rotation_translation ) function GetScaling inline bool GetScaling () const function ScalingOn inline void ScalingOn () function ScalingOff inline void ScalingOff () function GetRotationTranslation inline bool GetRotationTranslation () const function RotationTranslationOn inline void RotationTranslationOn () function RotationTranslationOff inline void RotationTranslationOff () function AlignShapes void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function RemoveTranslation void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ) function ConstructTransformMatrices void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ) function ConstructTransformMatrix void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ) function ComputeMeanShape void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ) function ComputeCenterOfMass void ComputeCenterOfMass ( ShapeType & shape , PointType & center ) function CenterShape void CenterShape ( ShapeType & shape ) function ComputeCommonCenter void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ) function AlignSourceToTarget void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ) function ComputeMedianShape int ComputeMedianShape ( ShapeListType & shapeList ) function TransformShape static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ) function TransformShapes static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ) function ComputeSumOfSquares static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-25 at 15:40:28 +0000","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#procrustes3d","text":"","title":"Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#public-types","text":"Name typedef double RealType typedef vnl_vector_fixed< double, 3 > PointType typedef std::vector< PointType > ShapeType typedef ShapeType::iterator ShapeIteratorType typedef std::vector< ShapeType > ShapeListType typedef ShapeListType::iterator ShapeListIteratorType typedef std::vector< SimilarityTransform3D > SimilarityTransformListType typedef SimilarityTransformListType::iterator SimilarityTransformListIteratorType typedef vnl_matrix_fixed< double, 3+1, 3+1 > TransformMatrixType typedef std::vector< TransformMatrixType > TransformMatrixListType typedef TransformMatrixListType::iterator TransformMatrixIteratorType","title":"Public Types"},{"location":"api/Classes/classProcrustes3D.html#public-functions","text":"Name Procrustes3D () Procrustes3D (bool do_scaling, bool do_rotation_translation) bool GetScaling () const void ScalingOn () void ScalingOff () bool GetRotationTranslation () const void RotationTranslationOn () void RotationTranslationOff () void AlignShapes (SimilarityTransformListType & transforms, ShapeListType & shapes) void RemoveTranslation (SimilarityTransformListType & transforms, ShapeListType & shapes) void ConstructTransformMatrices (SimilarityTransformListType & transforms, TransformMatrixListType & transformMatrices) void ConstructTransformMatrix ( SimilarityTransform3D & transform, TransformMatrixType & transformMatrix) void ComputeMeanShape (ShapeType & mean, ShapeListType & shapeList) void ComputeCenterOfMass (ShapeType & shape, PointType & center) void CenterShape (ShapeType & shape) void ComputeCommonCenter (SimilarityTransformListType & transforms, PointType & center) void AlignSourceToTarget ( SimilarityTransform3D & transform, ShapeType & target, ShapeType & source) int ComputeMedianShape (ShapeListType & shapeList) void TransformShape (ShapeType & shape, SimilarityTransform3D & transform) void TransformShapes (ShapeListType & shapes, SimilarityTransformListType & transforms) RealType ComputeSumOfSquares (ShapeListType & shapes)","title":"Public Functions"},{"location":"api/Classes/classProcrustes3D.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classProcrustes3D.html#typedef-realtype","text":"typedef double Procrustes3D :: RealType ;","title":"typedef RealType"},{"location":"api/Classes/classProcrustes3D.html#typedef-pointtype","text":"typedef vnl_vector_fixed < double , 3 > Procrustes3D :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapetype","text":"typedef std :: vector < PointType > Procrustes3D :: ShapeType ;","title":"typedef ShapeType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapeiteratortype","text":"typedef ShapeType :: iterator Procrustes3D :: ShapeIteratorType ;","title":"typedef ShapeIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelisttype","text":"typedef std :: vector < ShapeType > Procrustes3D :: ShapeListType ;","title":"typedef ShapeListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-shapelistiteratortype","text":"typedef ShapeListType :: iterator Procrustes3D :: ShapeListIteratorType ;","title":"typedef ShapeListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlisttype","text":"typedef std :: vector < SimilarityTransform3D > Procrustes3D :: SimilarityTransformListType ;","title":"typedef SimilarityTransformListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-similaritytransformlistiteratortype","text":"typedef SimilarityTransformListType :: iterator Procrustes3D :: SimilarityTransformListIteratorType ;","title":"typedef SimilarityTransformListIteratorType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixtype","text":"typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > Procrustes3D :: TransformMatrixType ;","title":"typedef TransformMatrixType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixlisttype","text":"typedef std :: vector < TransformMatrixType > Procrustes3D :: TransformMatrixListType ;","title":"typedef TransformMatrixListType"},{"location":"api/Classes/classProcrustes3D.html#typedef-transformmatrixiteratortype","text":"typedef TransformMatrixListType :: iterator Procrustes3D :: TransformMatrixIteratorType ;","title":"typedef TransformMatrixIteratorType"},{"location":"api/Classes/classProcrustes3D.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d","text":"inline Procrustes3D ()","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-procrustes3d_1","text":"inline Procrustes3D ( bool do_scaling , bool do_rotation_translation )","title":"function Procrustes3D"},{"location":"api/Classes/classProcrustes3D.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classProcrustes3D.html#function-scalingon","text":"inline void ScalingOn ()","title":"function ScalingOn"},{"location":"api/Classes/classProcrustes3D.html#function-scalingoff","text":"inline void ScalingOff ()","title":"function ScalingOff"},{"location":"api/Classes/classProcrustes3D.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationon","text":"inline void RotationTranslationOn ()","title":"function RotationTranslationOn"},{"location":"api/Classes/classProcrustes3D.html#function-rotationtranslationoff","text":"inline void RotationTranslationOff ()","title":"function RotationTranslationOff"},{"location":"api/Classes/classProcrustes3D.html#function-alignshapes","text":"void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function AlignShapes"},{"location":"api/Classes/classProcrustes3D.html#function-removetranslation","text":"void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes )","title":"function RemoveTranslation"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrices","text":"void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices )","title":"function ConstructTransformMatrices"},{"location":"api/Classes/classProcrustes3D.html#function-constructtransformmatrix","text":"void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix )","title":"function ConstructTransformMatrix"},{"location":"api/Classes/classProcrustes3D.html#function-computemeanshape","text":"void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList )","title":"function ComputeMeanShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecenterofmass","text":"void ComputeCenterOfMass ( ShapeType & shape , PointType & center )","title":"function ComputeCenterOfMass"},{"location":"api/Classes/classProcrustes3D.html#function-centershape","text":"void CenterShape ( ShapeType & shape )","title":"function CenterShape"},{"location":"api/Classes/classProcrustes3D.html#function-computecommoncenter","text":"void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center )","title":"function ComputeCommonCenter"},{"location":"api/Classes/classProcrustes3D.html#function-alignsourcetotarget","text":"void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source )","title":"function AlignSourceToTarget"},{"location":"api/Classes/classProcrustes3D.html#function-computemedianshape","text":"int ComputeMedianShape ( ShapeListType & shapeList )","title":"function ComputeMedianShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshape","text":"static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform )","title":"function TransformShape"},{"location":"api/Classes/classProcrustes3D.html#function-transformshapes","text":"static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms )","title":"function TransformShapes"},{"location":"api/Classes/classProcrustes3D.html#function-computesumofsquares","text":"static RealType ComputeSumOfSquares ( ShapeListType & shapes ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function ComputeSumOfSquares"},{"location":"api/Classes/classReconstruction.html","text":"Reconstruction More... Public Types Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType Public Functions Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad () Detailed Description template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ; Public Types Documentation typedef GradientFilterType typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ; typedef GradientMagnitudeFilterType typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ; typedef GradientImageType typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ; typedef GradientImageIteratorType typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ; typedef ImageIteratorType typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ; typedef WriterType typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ; typedef ITK2VTKConnectorType typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ; typedef AddImageFilterType typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ; typedef ResampleFilterType typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ; typedef InterpolatorType typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ; typedef MultiplyByConstantImageFilterType typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ; typedef DuplicatorType typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ; typedef TransformType typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ; typedef PointType typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ; typedef PointArrayType typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ; typedef PointSetType typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ; typedef PointIdType typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ; Public Functions Documentation function Reconstruction Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ) function ~Reconstruction ~ Reconstruction () function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ) function reset void reset () function setDecimation void setDecimation ( float dec ) function setNumClusters void setNumClusters ( int num ) function setMaxAngle void setMaxAngle ( double angleDegrees ) function setFixWinding void setFixWinding ( bool fixWinding ) function setLaplacianSmoothingBeforeDecimation void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ) function setLaplacianSmoothingAfterDecimation void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ) function setSmoothingLambda void setSmoothingLambda ( float smoothingLambda ) function setSmoothingIterations void setSmoothingIterations ( int smoothingIterations ) function setOutputEnabled void setOutputEnabled ( bool enabled ) function setMeanBeforeWarpEnabled void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins function getMesh vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function sparseDone bool sparseDone () function denseDone bool denseDone () function writeMeanInfo void writeMeanInfo ( std :: string nameBase ) function SparseMean inline vtkSmartPointer < vtkPoints > SparseMean () function DenseMean inline vtkSmartPointer < vtkPolyData > DenseMean () function GoodPoints inline std :: vector < bool > GoodPoints () function OutPrefix inline std :: string OutPrefix () function setOutPrefix inline void setOutPrefix ( std :: string out_prefix ) function computeSparseMean std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ) function setOrigin inline void setOrigin ( typename ImageType :: PointType origin ) function EnablePairwiseNormalsDifferencesForGoodBad inline void EnablePairwiseNormalsDifferencesForGoodBad () function DisablePairwiseNormalsDifferencesForGoodBad inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-25 at 15:40:28 +0000","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#reconstruction","text":"More...","title":"Reconstruction"},{"location":"api/Classes/classReconstruction.html#public-types","text":"Name typedef itk::GradientImageFilter< ImageType, PixelType > GradientFilterType typedef itk::GradientMagnitudeImageFilter< ImageType, ImageType > GradientMagnitudeFilterType typedef itk::Image< itk::CovariantVector< PixelType, 3 >, 3 > GradientImageType typedef itk::ImageRegionIterator< GradientImageType > GradientImageIteratorType typedef itk::ImageRegionIterator< ImageType > ImageIteratorType typedef itk::ImageFileWriter< ImageType > WriterType typedef itk::ImageToVTKImageFilter< ImageType > ITK2VTKConnectorType typedef itk::AddImageFilter< ImageType, ImageType > AddImageFilterType typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType typedef TInterpolatorType< ImageType, TCoordRep > InterpolatorType typedef itk::MultiplyImageFilter< ImageType, ImageType, ImageType > MultiplyByConstantImageFilterType typedef itk::ImageDuplicator< ImageType > DuplicatorType typedef TTransformType< TCoordRep, 3 > TransformType typedef itk::Point< TCoordRep, 3 > PointType typedef std::vector< PointType > PointArrayType typedef TransformType::PointSetType PointSetType typedef PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classReconstruction.html#public-functions","text":"Name Reconstruction (std::string out_prefix =\"\", float decimationPercent =0.3f, double angleThresh =45.0f, size_t numClusters =5, bool fixWinding =true, bool doLaplacianSmoothingBeforeDecimation =true, bool doLaplacianSmoothingAfterDecimation =true, float smoothingLambda =0.5f, int smoothingIterations =1, bool usePairwiseNormalsDifferencesForGoodBad =false) ~Reconstruction () vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArrayType > local_pts =std::vector< PointArrayType >(), std::vector< PointArrayType > global_pts =std::vector< PointArrayType >(), std::vector< std::string > distance_transform =std::vector< std::string >()) void reset () void setDecimation (float dec) void setNumClusters (int num) void setMaxAngle (double angleDegrees) void setFixWinding (bool fixWinding) void setLaplacianSmoothingBeforeDecimation (bool doLaplacianSmoothingBeforeDecimation) void setLaplacianSmoothingAfterDecimation (bool doLaplacianSmoothingAfterDecimation) void setSmoothingLambda (float smoothingLambda) void setSmoothingIterations (int smoothingIterations) void setOutputEnabled (bool enabled) void setMeanBeforeWarpEnabled (bool enabled) vtkSmartPointer< vtkPolyData > getMesh (PointArrayType local_pts) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) bool sparseDone () bool denseDone () void writeMeanInfo (std::string nameBase) vtkSmartPointer< vtkPoints > SparseMean () vtkSmartPointer< vtkPolyData > DenseMean () std::vector< bool > GoodPoints () std::string OutPrefix () void setOutPrefix (std::string out_prefix) std::vector< PointArrayType > computeSparseMean (std::vector< PointArrayType > local_pts, itk::Point< TCoordRep > & common_center, bool do_procrustes =true, bool do_procrustes_scaling =false) void setOrigin (typename ImageType::PointType origin) void EnablePairwiseNormalsDifferencesForGoodBad () void DisablePairwiseNormalsDifferencesForGoodBad ()","title":"Public Functions"},{"location":"api/Classes/classReconstruction.html#detailed-description","text":"template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction ;","title":"Detailed Description"},{"location":"api/Classes/classReconstruction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classReconstruction.html#typedef-gradientfiltertype","text":"typedef itk :: GradientImageFilter < ImageType , PixelType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientFilterType ;","title":"typedef GradientFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientmagnitudefiltertype","text":"typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientMagnitudeFilterType ;","title":"typedef GradientMagnitudeFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimagetype","text":"typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageType ;","title":"typedef GradientImageType"},{"location":"api/Classes/classReconstruction.html#typedef-gradientimageiteratortype","text":"typedef itk :: ImageRegionIterator < GradientImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: GradientImageIteratorType ;","title":"typedef GradientImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-imageiteratortype","text":"typedef itk :: ImageRegionIterator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ImageIteratorType ;","title":"typedef ImageIteratorType"},{"location":"api/Classes/classReconstruction.html#typedef-writertype","text":"typedef itk :: ImageFileWriter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: WriterType ;","title":"typedef WriterType"},{"location":"api/Classes/classReconstruction.html#typedef-itk2vtkconnectortype","text":"typedef itk :: ImageToVTKImageFilter < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ITK2VTKConnectorType ;","title":"typedef ITK2VTKConnectorType"},{"location":"api/Classes/classReconstruction.html#typedef-addimagefiltertype","text":"typedef itk :: AddImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: AddImageFilterType ;","title":"typedef AddImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-resamplefiltertype","text":"typedef itk :: ResampleImageFilter < ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: ResampleFilterType ;","title":"typedef ResampleFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-interpolatortype","text":"typedef TInterpolatorType < ImageType , TCoordRep > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: InterpolatorType ;","title":"typedef InterpolatorType"},{"location":"api/Classes/classReconstruction.html#typedef-multiplybyconstantimagefiltertype","text":"typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: MultiplyByConstantImageFilterType ;","title":"typedef MultiplyByConstantImageFilterType"},{"location":"api/Classes/classReconstruction.html#typedef-duplicatortype","text":"typedef itk :: ImageDuplicator < ImageType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: DuplicatorType ;","title":"typedef DuplicatorType"},{"location":"api/Classes/classReconstruction.html#typedef-transformtype","text":"typedef TTransformType < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: TransformType ;","title":"typedef TransformType"},{"location":"api/Classes/classReconstruction.html#typedef-pointtype","text":"typedef itk :: Point < TCoordRep , 3 > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classReconstruction.html#typedef-pointarraytype","text":"typedef std :: vector < PointType > Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointArrayType ;","title":"typedef PointArrayType"},{"location":"api/Classes/classReconstruction.html#typedef-pointsettype","text":"typedef TransformType :: PointSetType Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classReconstruction.html#typedef-pointidtype","text":"typedef PointSetType :: PointIdentifier Reconstruction < TTransformType , TInterpolatorType , TCoordRep , PixelType , ImageType >:: PointIdType ;","title":"typedef PointIdType"},{"location":"api/Classes/classReconstruction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classReconstruction.html#function-reconstruction","text":"Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false )","title":"function Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-reconstruction_1","text":"~ Reconstruction ()","title":"function ~Reconstruction"},{"location":"api/Classes/classReconstruction.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () )","title":"function getDenseMean"},{"location":"api/Classes/classReconstruction.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classReconstruction.html#function-setdecimation","text":"void setDecimation ( float dec )","title":"function setDecimation"},{"location":"api/Classes/classReconstruction.html#function-setnumclusters","text":"void setNumClusters ( int num )","title":"function setNumClusters"},{"location":"api/Classes/classReconstruction.html#function-setmaxangle","text":"void setMaxAngle ( double angleDegrees )","title":"function setMaxAngle"},{"location":"api/Classes/classReconstruction.html#function-setfixwinding","text":"void setFixWinding ( bool fixWinding )","title":"function setFixWinding"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingbeforedecimation","text":"void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation )","title":"function setLaplacianSmoothingBeforeDecimation"},{"location":"api/Classes/classReconstruction.html#function-setlaplaciansmoothingafterdecimation","text":"void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation )","title":"function setLaplacianSmoothingAfterDecimation"},{"location":"api/Classes/classReconstruction.html#function-setsmoothinglambda","text":"void setSmoothingLambda ( float smoothingLambda )","title":"function setSmoothingLambda"},{"location":"api/Classes/classReconstruction.html#function-setsmoothingiterations","text":"void setSmoothingIterations ( int smoothingIterations )","title":"function setSmoothingIterations"},{"location":"api/Classes/classReconstruction.html#function-setoutputenabled","text":"void setOutputEnabled ( bool enabled )","title":"function setOutputEnabled"},{"location":"api/Classes/classReconstruction.html#function-setmeanbeforewarpenabled","text":"void setMeanBeforeWarpEnabled ( bool enabled ) Set if the mean DT before warp is enabled or not Disabling this allows Reconstruction to use DTs that are of different sizes and with different origins","title":"function setMeanBeforeWarpEnabled"},{"location":"api/Classes/classReconstruction.html#function-getmesh","text":"vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts )","title":"function getMesh"},{"location":"api/Classes/classReconstruction.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsedone","text":"bool sparseDone ()","title":"function sparseDone"},{"location":"api/Classes/classReconstruction.html#function-densedone","text":"bool denseDone ()","title":"function denseDone"},{"location":"api/Classes/classReconstruction.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string nameBase )","title":"function writeMeanInfo"},{"location":"api/Classes/classReconstruction.html#function-sparsemean","text":"inline vtkSmartPointer < vtkPoints > SparseMean ()","title":"function SparseMean"},{"location":"api/Classes/classReconstruction.html#function-densemean","text":"inline vtkSmartPointer < vtkPolyData > DenseMean ()","title":"function DenseMean"},{"location":"api/Classes/classReconstruction.html#function-goodpoints","text":"inline std :: vector < bool > GoodPoints ()","title":"function GoodPoints"},{"location":"api/Classes/classReconstruction.html#function-outprefix","text":"inline std :: string OutPrefix ()","title":"function OutPrefix"},{"location":"api/Classes/classReconstruction.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string out_prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classReconstruction.html#function-computesparsemean","text":"std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep > & common_center , bool do_procrustes = true , bool do_procrustes_scaling = false )","title":"function computeSparseMean"},{"location":"api/Classes/classReconstruction.html#function-setorigin","text":"inline void setOrigin ( typename ImageType :: PointType origin )","title":"function setOrigin"},{"location":"api/Classes/classReconstruction.html#function-enablepairwisenormalsdifferencesforgoodbad","text":"inline void EnablePairwiseNormalsDifferencesForGoodBad ()","title":"function EnablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classReconstruction.html#function-disablepairwisenormalsdifferencesforgoodbad","text":"inline void DisablePairwiseNormalsDifferencesForGoodBad () Updated on 2023-10-25 at 15:40:28 +0000","title":"function DisablePairwiseNormalsDifferencesForGoodBad"},{"location":"api/Classes/classStudioLogger.html","text":"StudioLogger Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject Public Signals Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str) Public Functions Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str) Public Signals Documentation signal message void message ( std :: string str ) signal error void error ( std :: string str ) signal warning void warning ( std :: string str ) signal debug void debug ( std :: string str ) signal status void status ( std :: string str ) signal progress void progress ( int value , std :: string str ) Public Functions Documentation function StudioLogger inline StudioLogger () function ~StudioLogger inline virtual ~ StudioLogger () function register_callbacks void register_callbacks () function handle_message void handle_message ( std :: string str ) function handle_error void handle_error ( std :: string str ) function handle_warning void handle_warning ( std :: string str ) function handle_debug void handle_debug ( std :: string str ) function handle_status void handle_status ( std :: string str ) function handle_progress void handle_progress ( double value , std :: string str ) Updated on 2023-10-25 at 15:40:28 +0000","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#studiologger","text":"Handle logger callbacks via Qt for thread correctness. #include Inherits from QObject","title":"StudioLogger"},{"location":"api/Classes/classStudioLogger.html#public-signals","text":"Name void message (std::string str) void error (std::string str) void warning (std::string str) void debug (std::string str) void status (std::string str) void progress (int value, std::string str)","title":"Public Signals"},{"location":"api/Classes/classStudioLogger.html#public-functions","text":"Name StudioLogger () virtual ~StudioLogger () void register_callbacks () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress (double value, std::string str)","title":"Public Functions"},{"location":"api/Classes/classStudioLogger.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classStudioLogger.html#signal-message","text":"void message ( std :: string str )","title":"signal message"},{"location":"api/Classes/classStudioLogger.html#signal-error","text":"void error ( std :: string str )","title":"signal error"},{"location":"api/Classes/classStudioLogger.html#signal-warning","text":"void warning ( std :: string str )","title":"signal warning"},{"location":"api/Classes/classStudioLogger.html#signal-debug","text":"void debug ( std :: string str )","title":"signal debug"},{"location":"api/Classes/classStudioLogger.html#signal-status","text":"void status ( std :: string str )","title":"signal status"},{"location":"api/Classes/classStudioLogger.html#signal-progress","text":"void progress ( int value , std :: string str )","title":"signal progress"},{"location":"api/Classes/classStudioLogger.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classStudioLogger.html#function-studiologger","text":"inline StudioLogger ()","title":"function StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-studiologger_1","text":"inline virtual ~ StudioLogger ()","title":"function ~StudioLogger"},{"location":"api/Classes/classStudioLogger.html#function-register_callbacks","text":"void register_callbacks ()","title":"function register_callbacks"},{"location":"api/Classes/classStudioLogger.html#function-handle_message","text":"void handle_message ( std :: string str )","title":"function handle_message"},{"location":"api/Classes/classStudioLogger.html#function-handle_error","text":"void handle_error ( std :: string str )","title":"function handle_error"},{"location":"api/Classes/classStudioLogger.html#function-handle_warning","text":"void handle_warning ( std :: string str )","title":"function handle_warning"},{"location":"api/Classes/classStudioLogger.html#function-handle_debug","text":"void handle_debug ( std :: string str )","title":"function handle_debug"},{"location":"api/Classes/classStudioLogger.html#function-handle_status","text":"void handle_status ( std :: string str )","title":"function handle_status"},{"location":"api/Classes/classStudioLogger.html#function-handle_progress","text":"void handle_progress ( double value , std :: string str ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function handle_progress"},{"location":"api/Classes/classSurfaceReconstructor.html","text":"SurfaceReconstructor Public Functions Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape) Public Functions Documentation function SurfaceReconstructor SurfaceReconstructor () function ~SurfaceReconstructor ~ SurfaceReconstructor () function initializeReconstruction void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ) function hasDenseMean bool hasDenseMean () function setMean void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ) function writeMeanInfo void writeMeanInfo ( std :: string baseName ) function readMeanInfo void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ) function resetReconstruct void resetReconstruct () function set_number_of_clusters void set_number_of_clusters ( int num_clusters ) function set_normal_angle void set_normal_angle ( double angle ) function set_decimation_percent void set_decimation_percent ( double decimation ) function get_surface_reconstruction_available bool get_surface_reconstruction_available () function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#surfacereconstructor","text":"","title":"SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions","text":"Name SurfaceReconstructor () ~SurfaceReconstructor () void initializeReconstruction (std::vector< std::vector< itk::Point< double > > > local_pts, std::vector< std::vector< itk::Point< double > > > global_pts, std::vector< std::string > distance_transforms, double maxAngle, float decimationPercent, int numClusters) bool hasDenseMean () void setMean (vtkSmartPointer< vtkPoints > sparseMean, vtkSmartPointer< vtkPolyData > denseMean, std::vector< bool > goodPoints) void writeMeanInfo (std::string baseName) void readMeanInfo (std::string dense, std::string sparse, std::string goodPoints) void resetReconstruct () void set_number_of_clusters (int num_clusters) void set_normal_angle (double angle) void set_decimation_percent (double decimation) bool get_surface_reconstruction_available () vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::VectorXd & shape)","title":"Public Functions"},{"location":"api/Classes/classSurfaceReconstructor.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor","text":"SurfaceReconstructor ()","title":"function SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-surfacereconstructor_1","text":"~ SurfaceReconstructor ()","title":"function ~SurfaceReconstructor"},{"location":"api/Classes/classSurfaceReconstructor.html#function-initializereconstruction","text":"void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double > > > local_pts , std :: vector < std :: vector < itk :: Point < double > > > global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters )","title":"function initializeReconstruction"},{"location":"api/Classes/classSurfaceReconstructor.html#function-hasdensemean","text":"bool hasDenseMean ()","title":"function hasDenseMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-setmean","text":"void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints )","title":"function setMean"},{"location":"api/Classes/classSurfaceReconstructor.html#function-writemeaninfo","text":"void writeMeanInfo ( std :: string baseName )","title":"function writeMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-readmeaninfo","text":"void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints )","title":"function readMeanInfo"},{"location":"api/Classes/classSurfaceReconstructor.html#function-resetreconstruct","text":"void resetReconstruct ()","title":"function resetReconstruct"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_number_of_clusters","text":"void set_number_of_clusters ( int num_clusters )","title":"function set_number_of_clusters"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_normal_angle","text":"void set_normal_angle ( double angle )","title":"function set_normal_angle"},{"location":"api/Classes/classSurfaceReconstructor.html#function-set_decimation_percent","text":"void set_decimation_percent ( double decimation )","title":"function set_decimation_percent"},{"location":"api/Classes/classSurfaceReconstructor.html#function-get_surface_reconstruction_available","text":"bool get_surface_reconstruction_available ()","title":"function get_surface_reconstruction_available"},{"location":"api/Classes/classSurfaceReconstructor.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function build_mesh"},{"location":"api/Classes/classUtils.html","text":"Utils Public Functions Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas) Public Functions Documentation function randperm static std :: vector < int > randperm ( int n ) function readSparseShape static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ) function readSparseShape static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ) function writeSparseShape static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ) function readParticleIds static std :: vector < int > readParticleIds ( char * filename ) function writeParticleIds static void writeParticleIds ( char * filename , std :: vector < int > ids ) function computeCenterOfMassForShapeEnsemble static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ) function computeCenterOfMassForShape static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ) function updateMin static void updateMin ( double curVal , double & minVal ) function updateMax static void updateMax ( double curVal , double & maxVal ) function getBoundingBoxForShapeEnsemble static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function getBoundingBoxForShape static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ) function spherical2cartesian static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function cartesian2spherical static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] ) function convertToPhysicalCoordinates static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function convertToImageCoordinates static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ) function num2str static std :: string num2str ( float num ) function num2str static std :: string num2str ( int num ) function linspace static std :: vector < double > linspace ( double a , double b , size_t N ) function int2str static std :: string int2str ( int n , int number_of_zeros ) function multiply_into template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ) function averageThetaBruteForce static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle. APPROXIMATE CHORD SOLUTION This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x ) EXACT SOLUTION This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted. SUMMARY method runtime memory notes brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah function averageThetaChord static double averageThetaChord ( std :: vector < double > thetas ) function averageThetaArc static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-25 at 15:40:28 +0000","title":"Utils"},{"location":"api/Classes/classUtils.html#utils","text":"","title":"Utils"},{"location":"api/Classes/classUtils.html#public-functions","text":"Name std::vector< int > randperm (int n) void readSparseShape (vtkSmartPointer< vtkPoints > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, vtkSmartPointer< vtkPoints > particles) void readSparseShape (std::vector< itk::Point< double > > & points, char * filename, int number_of_particles =-1) void writeSparseShape (char * filename, std::vector< itk::Point< double, 3 > > points) std::vector< int > readParticleIds (char * filename) void writeParticleIds (char * filename, std::vector< int > ids) void computeCenterOfMassForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, itk::Point< double, 3 > & center) void computeCenterOfMassForShape (std::vector< itk::Point< double, 3 > > points, itk::Point< double, 3 > & center) void updateMin (double curVal, double & minVal) void updateMax (double curVal, double & maxVal) void getBoundingBoxForShapeEnsemble (std::vector< std::vector< itk::Point< double, 3 > > > points_list, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void getBoundingBoxForShape (std::vector< itk::Point< double, 3 > > points, double & min_x, double & min_y, double & min_z, double & max_x, double & max_y, double & max_z) void spherical2cartesian (const double inPoint[3], double outPoint[3]) void cartesian2spherical (const double inPoint[3], double outPoint[3]) vtkSmartPointer< vtkPoints > convertToPhysicalCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) vtkSmartPointer< vtkPoints > convertToImageCoordinates (vtkSmartPointer< vtkPoints > particles, int number_of_particles, const itk::Image< float, 3 >::SpacingType & spacing, const itk::Image< float, 3 >::PointType & origin) std::string num2str (float num) std::string num2str (int num) std::vector< double > linspace (double a, double b, size_t N) std::string int2str (int n, int number_of_zeros) template void multiply_into (Eigen::MatrixXd & out, const vnl_matrix< T > & lhs, const vnl_matrix< T > & rhs) double averageThetaBruteForce (std::vector< double > thetas, double dtheta) double averageThetaChord (std::vector< double > thetas) double averageThetaArc (std::vector< double > thetas)","title":"Public Functions"},{"location":"api/Classes/classUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classUtils.html#function-randperm","text":"static std :: vector < int > randperm ( int n )","title":"function randperm"},{"location":"api/Classes/classUtils.html#function-readsparseshape","text":"static void readSparseShape ( vtkSmartPointer < vtkPoints > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape","text":"static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readsparseshape_1","text":"static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 )","title":"function readSparseShape"},{"location":"api/Classes/classUtils.html#function-writesparseshape_1","text":"static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points )","title":"function writeSparseShape"},{"location":"api/Classes/classUtils.html#function-readparticleids","text":"static std :: vector < int > readParticleIds ( char * filename )","title":"function readParticleIds"},{"location":"api/Classes/classUtils.html#function-writeparticleids","text":"static void writeParticleIds ( char * filename , std :: vector < int > ids )","title":"function writeParticleIds"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshapeensemble","text":"static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-computecenterofmassforshape","text":"static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center )","title":"function computeCenterOfMassForShape"},{"location":"api/Classes/classUtils.html#function-updatemin","text":"static void updateMin ( double curVal , double & minVal )","title":"function updateMin"},{"location":"api/Classes/classUtils.html#function-updatemax","text":"static void updateMax ( double curVal , double & maxVal )","title":"function updateMax"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshapeensemble","text":"static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShapeEnsemble"},{"location":"api/Classes/classUtils.html#function-getboundingboxforshape","text":"static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z )","title":"function getBoundingBoxForShape"},{"location":"api/Classes/classUtils.html#function-spherical2cartesian","text":"static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function spherical2cartesian"},{"location":"api/Classes/classUtils.html#function-cartesian2spherical","text":"static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ] )","title":"function cartesian2spherical"},{"location":"api/Classes/classUtils.html#function-converttophysicalcoordinates","text":"static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToPhysicalCoordinates"},{"location":"api/Classes/classUtils.html#function-converttoimagecoordinates","text":"static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classUtils.html#function-num2str","text":"static std :: string num2str ( float num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-num2str_1","text":"static std :: string num2str ( int num )","title":"function num2str"},{"location":"api/Classes/classUtils.html#function-linspace","text":"static std :: vector < double > linspace ( double a , double b , size_t N )","title":"function linspace"},{"location":"api/Classes/classUtils.html#function-int2str","text":"static std :: string int2str ( int n , int number_of_zeros )","title":"function int2str"},{"location":"api/Classes/classUtils.html#function-multiply_into","text":"template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs )","title":"function multiply_into"},{"location":"api/Classes/classUtils.html#function-averagethetabruteforce","text":"static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ) Given a set of theta measurements, pick the \"average\" (approximately). More formally, given a set of orientations, we wish to identify a \"reference theta\" such that the sum of the squared differences between each theta and the reference theta is minimized. This can be visualized: each theta (including the reference theta) can be mapped onto the unit circle): we wish to minimize the distance between the reference point and every other points by traveling along the circumference of the unit circle.","title":"function averageThetaBruteForce"},{"location":"api/Classes/classUtils.html#approximate-chord-solution","text":"This is hard, however, so instead of computing the distance along the circumference, we compute the distance along the chord. This method is by ebolson@umich.edu , inspired by a similar problem in Horn's \"closed-form solution of absolute orientation using unit quaternions\". Let a be the set of input points, and R(a_i) represent a rotation of point a_i around the origin: R(x) = [ cos(theta) a_x - sin(theta) a_y,] [ sin(theta) a_x + cos(theta) a_y ] The error is: X^2 = SUM ( R(a_i) - [1 0]' )' * (R(a_i) - [1 0]') = SUM R'R - 2[1 0]R(a) + [1 0][1 0]' Note that R'R is constant, because R and R' are orthogonal. (R'R = I). Dropping constant terms: X^2 = SUM 2[1 0]R(a) Differentiating with respect to theta: dX^2/dtheta = SUM cos(theta)a_x - sin(theta)a_y = 0 Collecting cos and sin terms: cos(theta) SUM a_x = sin(theta) SUM a_y e.g.,: theta = atan2( SUM a_y , SUM a_x )","title":"APPROXIMATE CHORD SOLUTION"},{"location":"api/Classes/classUtils.html#exact-solution","text":"This solution runs in O(n log n). Let us suppose that all of the input angles are mapped to [-PI, PI]. All the input points can be shifted to be within PI degrees of the reference angle by adding a multiple of 2PI degrees. If all the input angles are constrained to [-PI, PI], then we can find a reference angle [-PI, 2PI] such that all input points are within PI degrees by either adding 0 or exactly 2PI to individual input points. More so, the input points that we must add 2PI to are the M points with the smallest theta, but we do not know M. This is necessary when the correct reference angle is large: the smallest points will be more than PI degrees away, so they need to be moved to the right side of the reference angle. If we knew M, computing the reference angle is easy: it is simply the average of the (possibly shifted) input points. Let x[i] be the input point [-PI,PI] and y[i] be the possibly shifted version of that point, y[i] = x[i] + 2PI if i < M, otherwise y[i] = x[i]. r = reference angle = (1 / N) * SUM_i y[i] error = SUM_i (y[i] - r)^2 We simply search over each value of M (from 0 to N), and recompute the error. Both the reference angle and error can be written in terms of the first and second moments of y[i], which gives us the following strategy: 1) Compute A1 and A2, the first and second moments of y[i], assuming M = 0. (This is just the first and second moments of x[i]). This involves iterating over each of the input points. 2) Considering the points in x[i] in sorted order, update A1 and A2 such that they reflect y[i] = x[i] + 2PI. Compute the new reference theta and error after every point (an O(1) operation) and report the theta whose error was the smallest. Total run time is O(N log N) due to the sort operation. The other two passes are O(N). Memory usage is O(N), since all points must be stored so they can be sorted.","title":"EXACT SOLUTION"},{"location":"api/Classes/classUtils.html#summary","text":"","title":"SUMMARY"},{"location":"api/Classes/classUtils.html#method-runtime-memory-notes","text":"brute O(2PI*N / eps) O(N) worst-case error is eps/2 exact O(N log N) O(N) chord O(N) O(1) minimizes squared chord length, not squared arc length. Real-world performance: the exact method is typically faster than the chord method, presumably because of the high cost of computing trigonometric functions used in the Chord method. This advantage decreases with larger number of points (due to the super-linear cost of sorting), but even at 50000 points, the optimal method is (a bit) faster than the chord method. Reference: Olson, Edwin. \"On computing the average orientation of vectors and lines.\" In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 3869-3874. IEEE, 2011. Code is written in C++ from author's java implmentation by Shireen Elhabian - SCI institute, University of Utah","title":"method runtime memory notes"},{"location":"api/Classes/classUtils.html#function-averagethetachord","text":"static double averageThetaChord ( std :: vector < double > thetas )","title":"function averageThetaChord"},{"location":"api/Classes/classUtils.html#function-averagethetaarc","text":"static double averageThetaArc ( std :: vector < double > thetas ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function averageThetaArc"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html","text":"itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 > Public Types Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() . Public Types Documentation typedef Self typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass. typedef ParametersType typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ; typedef ParametersValueType typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ; typedef DerivativeType typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ; typedef JacobianType typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ; typedef InputPointType typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ; typedef InverseTransformBaseType typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ; typedef InverseTransformBasePointer typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ; typedef TransformType typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass. typedef TransformTypePointer typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ; typedef TransformTypeConstPointer typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ; typedef NonZeroJacobianIndicesType typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType. typedef SpatialJacobianType typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ; typedef MovingImageGradientType typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical. typedef MovingImageGradientValueType typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space. function itkStaticConstMacro itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ) function GetNumberOfNonZeroJacobianIndices virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all. function itkGetConstMacro itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices. function itkGetConstMacro itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ) function GetJacobian virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function EvaluateJacobianWithImageGradientProduct virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned. function GetSpatialJacobian virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image. function ComputeJacobianWithRespectToParameters inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions. function ComputeJacobianWithRespectToPosition inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const function GetSpatialHessian virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function AdvancedTransform AdvancedTransform () function AdvancedTransform AdvancedTransform ( NumberOfParametersType numberOfParameters ) function ~AdvancedTransform inline virtual ~ AdvancedTransform () Protected Attributes Documentation variable m_HasNonZeroSpatialHessian bool m_HasNonZeroSpatialHessian ; variable m_HasNonZeroJacobianOfSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#itkadvancedtransform","text":"Transform maps points, vectors and covariant vectors from an input space to an output space. More... #include Inherits from Transform< TScalarType, 3, 3 >","title":"itk::AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types","text":"Name typedef AdvancedTransform Self typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::JacobianType JacobianType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType","title":"Public Types"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions","text":"Name itkTypeMacro ( AdvancedTransform , Transform ) itkStaticConstMacro (InputSpaceDimension , unsigned int , NInputDimensions ) itkStaticConstMacro (OutputSpaceDimension , unsigned int , NOutputDimensions ) virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0","title":"Public Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions","text":"Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform ()","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes","text":"Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class itk :: AdvancedTransform ; Transform maps points, vectors and covariant vectors from an input space to an output space. Par : Registration Framework Support Typically a Transform class has several methods for setting its parameters. For use in the registration framework, the parameters must also be represented by an array of doubles to allow communication with generic optimizers. The Array of transformation parameters is set using the SetParameters() method. This abstract class define the generic interface for a geometrical transformation from one space to another. The class provides methods for mapping points, vectors and covariant vectors from the input space to the output space. Given that transformation are not necessarily invertible, this basic class does not provide the methods for back transformation. Back transform methods are implemented in derived classes where appropriate. Another requirement of the registration framework is the computation of the Jacobian of the transform T. In general, an ImageToImageMetric requires the knowledge of this Jacobian in order to compute the metric derivatives. The Jacobian is a matrix whose element are the partial derivatives of the transformation with respect to the array of parameters mu that defines the transform, evaluated at a point p: dT/dmu(p). If penalty terms are included in the registration, the transforms also need to implement other derivatives of T. Often, penalty terms are functions of the spatial derivatives of T. Therefore, e.g. the SpatialJacobian dT/dx and the SpatialHessian d^2T/dx_idx_j require implementation. The GetValueAndDerivative() requires the d/dmu of those terms. Therefore, we additionally define GetJacobianOfSpatialJacobian() and GetJacobianOfSpatialHessian() .","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-self","text":"typedef AdvancedTransform itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ScalarType ; Typedefs from the Superclass.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-parametersvaluetype","text":"typedef Superclass :: ParametersValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: ParametersValueType ;","title":"typedef ParametersValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-derivativetype","text":"typedef Superclass :: DerivativeType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: DerivativeType ;","title":"typedef DerivativeType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasetype","text":"typedef Superclass :: InverseTransformBaseType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBaseType ;","title":"typedef InverseTransformBaseType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-inversetransformbasepointer","text":"typedef Superclass :: InverseTransformBasePointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InverseTransformBasePointer ;","title":"typedef InverseTransformBasePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtype","text":"typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformType ; Transform typedefs for the from Superclass.","title":"typedef TransformType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypepointer","text":"typedef TransformType :: Pointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypePointer ;","title":"typedef TransformTypePointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-transformtypeconstpointer","text":"typedef TransformType :: ConstPointer itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: TransformTypeConstPointer ;","title":"typedef TransformTypeConstPointer"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-nonzerojacobianindicestype","text":"typedef std :: vector < unsigned long > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: NonZeroJacobianIndicesType ; Types for the (Spatial)Jacobian/Hessian. Using an itk::FixedArray instead of an std::vector gives a performance gain for the SpatialHessianType.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialjacobiantype","text":"typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialjacobiantype","text":"typedef std :: vector < SpatialJacobianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-spatialhessiantype","text":"typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-jacobianofspatialhessiantype","text":"typedef std :: vector < SpatialHessianType > itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-internalmatrixtype","text":"typedef SpatialJacobianType :: InternalMatrixType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradienttype","text":"typedef OutputCovariantVectorType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientType ; Typedef for the moving image gradient type. This type is defined by the B-spline interpolator as typedef CovariantVector< RealType, ImageDimension > As we cannot access this type we simply re-construct it to be identical.","title":"typedef MovingImageGradientType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#typedef-movingimagegradientvaluetype","text":"typedef MovingImageGradientType :: ValueType itk :: AdvancedTransform < TScalarType , NInputDimensions , NOutputDimensions >:: MovingImageGradientValueType ;","title":"typedef MovingImageGradientValueType"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itktypemacro","text":"itkTypeMacro ( AdvancedTransform , Transform ) New method for creating an object using a factory. Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions )","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getnumberofnonzerojacobianindices","text":"virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const Get the number of nonzero Jacobian indices. By default all.","title":"function GetNumberOfNonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro","text":"itkGetConstMacro ( HasNonZeroSpatialHessian , bool ) Whether the advanced transform has nonzero matrices.","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-itkgetconstmacro_1","text":"itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool )","title":"function itkGetConstMacro"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobian , itk::KernelTransform2::GetJacobian This returns a sparse version of the Jacobian of the transformation. The Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the parameters \\(\\mu\\) that define the transformation \\(T\\) , evaluated at a point \\(p\\) . J=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{1}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial \\mu_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{2}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial \\mu_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial \\mu_{1}}(p) & \\frac{\\partial T_{d}}{\\partial \\mu_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial \\mu_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-evaluatejacobianwithimagegradientproduct","text":"virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Compute the inner product of the Jacobian with the moving image gradient. The Jacobian is (partially) constructed inside this function, but not returned.","title":"function EvaluateJacobianWithImageGradientProduct"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialjacobian","text":"virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialJacobian , itk::KernelTransform2::GetSpatialJacobian Compute the spatial Jacobian of the transformation. The spatial Jacobian is expressed as a vector of partial derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sJ=\\left[ \\begin{array}{cccc} \\frac{\\partial T_{1}}{\\partial x_{1}}(p) & \\frac{\\partial T_{1}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{1}}{\\partial x_{m}}(p) \\\\ \\frac{\\partial T_{2}}{\\partial x_{1}}(p) & \\frac{\\partial T_{2}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{2}}{\\partial x_{m}}(p) \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \\frac{\\partial T_{d}}{\\partial x_{1}}(p) & \\frac{\\partial T_{d}}{\\partial x_{2}}(p) & \\cdots & \\frac{\\partial T_{d}}{\\partial x_{m}}(p) \\end{array}\\right], with \\(m\\) the number of parameters, i.e. the size of \\(\\mu\\) , and \\(d\\) the dimension of the image.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoparameters","text":"inline virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const Override some pure virtual ITK4 functions.","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-computejacobianwithrespecttoposition","text":"inline virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsedp , JacobianType & itkNotUsedj ) const","title":"function ComputeJacobianWithRespectToPosition"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getspatialhessian","text":"virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 Reimplemented by : itk::KernelTransform2::GetSpatialHessian , itk::KernelTransform2::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialjacobian_1","text":"virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialJacobian , itk::KernelTransform2::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-getjacobianofspatialhessian_1","text":"virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 Reimplemented by : itk::KernelTransform2::GetJacobianOfSpatialHessian , itk::KernelTransform2::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform","text":"AdvancedTransform ()","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_1","text":"AdvancedTransform ( NumberOfParametersType numberOfParameters )","title":"function AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#function-advancedtransform_2","text":"inline virtual ~ AdvancedTransform ()","title":"function ~AdvancedTransform"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerospatialhessian","text":"bool m_HasNonZeroSpatialHessian ;","title":"variable m_HasNonZeroSpatialHessian"},{"location":"api/Classes/classitk_1_1AdvancedTransform.html#variable-m_hasnonzerojacobianofspatialhessian","text":"bool m_HasNonZeroJacobianOfSpatialHessian ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_HasNonZeroJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html","text":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double > Detailed Description template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#itkbsplineinterpolateimagefunctionwithdoublecoefficents","text":"More... Inherits from BSplineInterpolateImageFunction< TImageType, double, double >","title":"itk::BSplineInterpolateImageFunctionWithDoubleCoefficents"},{"location":"api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html#detailed-description","text":"template < typename TImageType , typename TCoordRep = double > class itk :: BSplineInterpolateImageFunctionWithDoubleCoefficents ; Updated on 2023-10-25 at 15:40:26 +0000","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html","text":"itk::CompactlySupportedRBFSparseKernelTransform More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const Protected Functions Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override Additional inherited members Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ; Public Types Documentation typedef Self typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited typedef OutputPointType typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters Protected Functions Documentation function CompactlySupportedRBFSparseKernelTransform inline CompactlySupportedRBFSparseKernelTransform () function ~CompactlySupportedRBFSparseKernelTransform inline virtual ~ CompactlySupportedRBFSparseKernelTransform () function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#itkcompactlysupportedrbfsparsekerneltransform","text":"More... Inherits from itk::SparseKernelTransform< TScalarType, 3 > , Transform< TScalarType, NDimensions, NDimensions >","title":"itk::CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types","text":"Name typedef CompactlySupportedRBFSparseKernelTransform Self typedef SparseKernelTransform < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions","text":"Name CompactlySupportedRBFSparseKernelTransform () virtual ~CompactlySupportedRBFSparseKernelTransform () virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const override virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const override","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#additional-inherited-members","text":"Public Types inherited from itk::SparseKernelTransform< TScalarType, 3 > Name typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions inherited from itk::SparseKernelTransform< TScalarType, 3 > Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::SparseKernelTransform< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: CompactlySupportedRBFSparseKernelTransform ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-self","text":"typedef CompactlySupportedRBFSparseKernelTransform itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-superclass","text":"typedef SparseKernelTransform < TScalarType , NDimensions > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: CompactlySupportedRBFSparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplements : itk::SparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform","text":"inline CompactlySupportedRBFSparseKernelTransform ()","title":"function CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-compactlysupportedrbfsparsekerneltransform_1","text":"inline virtual ~ CompactlySupportedRBFSparseKernelTransform ()","title":"function ~CompactlySupportedRBFSparseKernelTransform"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const override Reimplements : itk::SparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override Reimplements : itk::SparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space Updated on 2023-10-25 at 15:40:26 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html","text":"itk::Functor::MultiplyByConstant More... Public Functions Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const Public Attributes Name TConstant m_Constant Detailed Description template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ; Public Functions Documentation function MultiplyByConstant inline MultiplyByConstant () function ~MultiplyByConstant inline ~ MultiplyByConstant () function operator!= inline bool operator != ( const MultiplyByConstant & other ) const function operator== inline bool operator == ( const MultiplyByConstant & other ) const function operator() inline TOutput operator ()( const TInput & A ) const function SetConstant inline void SetConstant ( TConstant ct ) function GetConstant inline const TConstant & GetConstant () const Public Attributes Documentation variable m_Constant TConstant m_Constant ; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#itkfunctormultiplybyconstant","text":"More...","title":"itk::Functor::MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions","text":"Name MultiplyByConstant () ~MultiplyByConstant () bool operator!= (const MultiplyByConstant & other) const bool operator== (const MultiplyByConstant & other) const TOutput operator() (const TInput & A) const void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes","text":"Name TConstant m_Constant","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#detailed-description","text":"template < class TInput , class TConstant , class TOutput > class itk :: Functor :: MultiplyByConstant ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant","text":"inline MultiplyByConstant ()","title":"function MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-multiplybyconstant_1","text":"inline ~ MultiplyByConstant ()","title":"function ~MultiplyByConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator","text":"inline bool operator != ( const MultiplyByConstant & other ) const","title":"function operator!="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_1","text":"inline bool operator == ( const MultiplyByConstant & other ) const","title":"function operator=="},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-operator_2","text":"inline TOutput operator ()( const TInput & A ) const","title":"function operator()"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-setconstant","text":"inline void SetConstant ( TConstant ct )","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html#variable-m_constant","text":"TConstant m_Constant ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_Constant"},{"location":"api/Classes/classitk_1_1KernelTransform2.html","text":"itk::KernelTransform2 More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Additional inherited members Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms. Public Types Documentation typedef Self typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs. typedef ParametersType typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ; typedef NumberOfParametersType typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ; typedef JacobianType typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ; typedef InputPointType typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ; typedef OutputPointType typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef InputVnlVectorType typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ; typedef OutputVnlVectorType typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ; typedef NonZeroJacobianIndicesType typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs. typedef SpatialJacobianType typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ; typedef JacobianOfSpatialJacobianType typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ; typedef SpatialHessianType typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ; typedef JacobianOfSpatialHessianType typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ; typedef InternalMatrixType typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef GMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Protected Types Documentation typedef SVDDecompositionType typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition. typedef QRDecompositionType typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer. function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function GetNumberOfParameters inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) Compute W matrix. function ComputeLInverse void ComputeLInverse ( void ) Compute L matrix inverse. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space function TransformVector inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform. function TransformVector inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const function TransformCovariantVector inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const function GetJacobian virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation. function SetIdentity virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform. function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks. function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks. function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) function SetAlpha inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetAlpha inline virtual TScalarType GetAlpha ( void ) const function itkSetMacro itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform. function GetPoissonRatio inline virtual const TScalarType GetPoissonRatio ( void ) const function itkSetMacro itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition. function itkGetConstReferenceMacro itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ) function GetSpatialJacobian inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided. function GetSpatialHessian inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation. function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialJacobian inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation. function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) . function GetJacobianOfSpatialHessian inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation. Protected Functions Documentation function KernelTransform2 KernelTransform2 () function ~KernelTransform2 virtual ~ KernelTransform2 () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline. function ComputeReflexiveG virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. function ComputeK void ComputeK ( void ) Compute K matrix. function ComputeL void ComputeL ( void ) Compute L matrix. function ComputeP void ComputeP ( void ) Compute P matrix. function ComputeY void ComputeY ( void ) Compute Y matrix. function ComputeD void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter. variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function. variable m_AMatrix AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation. variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation. variable m_WMatrixComputed bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_LMatrixDecompositionComputed bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed? variable m_LMatrixDecompositionSVD SVDDecompositionType * m_LMatrixDecompositionSVD ; variable m_LMatrixDecompositionQR QRDecompositionType * m_LMatrixDecompositionQR ; variable m_I IMatrixType m_I ; Identity matrix. variable m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params) variable m_NonZeroJacobianIndicesTemp NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method: variable m_FastComputationPossible bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#itkkerneltransform2","text":"More... #include Inherits from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types","text":"Name typedef KernelTransform2 Self typedef AdvancedTransform < TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > GMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types","text":"Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions","text":"Name itkTypeMacro ( KernelTransform2 , AdvancedTransform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions","text":"Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeG (const InputVectorType & landmarkVector, GMatrixType & GMatrix) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void )","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: KernelTransform2 ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. KernelTransform2 : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Modified to include it in elastix: style make it inherit from AdvancedTransform make it threadsafe, like was done in the itk as well. Support for matrix inversion by QR decomposition, instead of SVD. QR is much faster. Used in SetParameters() and SetFixedParameters() . Much faster Jacobian computation for some of the derived kernel transforms.","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-self","text":"typedef KernelTransform2 itk :: KernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-superclass","text":"typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: KernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: KernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Typedefs.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: ParametersType ;","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-numberofparameterstype","text":"typedef Superclass :: NumberOfParametersType itk :: KernelTransform2 < TScalarType , NDimensions >:: NumberOfParametersType ;","title":"typedef NumberOfParametersType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianType ;","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputPointType ;","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-inputvnlvectortype","text":"typedef Superclass :: InputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: InputVnlVectorType ;","title":"typedef InputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-outputvnlvectortype","text":"typedef Superclass :: OutputVnlVectorType itk :: KernelTransform2 < TScalarType , NDimensions >:: OutputVnlVectorType ;","title":"typedef OutputVnlVectorType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-nonzerojacobianindicestype","text":"typedef Superclass :: NonZeroJacobianIndicesType itk :: KernelTransform2 < TScalarType , NDimensions >:: NonZeroJacobianIndicesType ; AdvancedTransform typedefs.","title":"typedef NonZeroJacobianIndicesType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialjacobiantype","text":"typedef Superclass :: SpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialJacobianType ;","title":"typedef SpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialjacobiantype","text":"typedef Superclass :: JacobianOfSpatialJacobianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialJacobianType ;","title":"typedef JacobianOfSpatialJacobianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-spatialhessiantype","text":"typedef Superclass :: SpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: SpatialHessianType ;","title":"typedef SpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-jacobianofspatialhessiantype","text":"typedef Superclass :: JacobianOfSpatialHessianType itk :: KernelTransform2 < TScalarType , NDimensions >:: JacobianOfSpatialHessianType ;","title":"typedef JacobianOfSpatialHessianType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-internalmatrixtype","text":"typedef Superclass :: InternalMatrixType itk :: KernelTransform2 < TScalarType , NDimensions >:: InternalMatrixType ;","title":"typedef InternalMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: KernelTransform2 < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsettype","text":"typedef VectorContainer < unsigned long , InputVectorType > itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: KernelTransform2 < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-imatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-gmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-lmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-kmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-pmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-ymatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-wmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-dmatrixtype","text":"typedef vnl_matrix < TScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-amatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-bmatrixtype","text":"typedef vnl_vector_fixed < TScalarType , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-rowmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > itk :: KernelTransform2 < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-columnmatrixtype","text":"typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > itk :: KernelTransform2 < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-svddecompositiontype","text":"typedef vnl_svd < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: SVDDecompositionType ; Decompositions, needed for the L matrix. These decompositions are cached for performance reasons during registration. During registration, in every iteration SetParameters() is called, which in turn calls ComputeWMatrix() . The L matrix is not changed however, and therefore it is not needed to redo the decomposition.","title":"typedef SVDDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#typedef-qrdecompositiontype","text":"typedef vnl_qr < ScalarType > itk :: KernelTransform2 < TScalarType , NDimensions >:: QRDecompositionType ;","title":"typedef QRDecompositionType"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( KernelTransform2 , AdvancedTransform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getnumberofparameters","text":"inline virtual NumberOfParametersType GetNumberOfParameters ( void ) const Return the number of parameters that completely define the Transform.","title":"function GetNumberOfParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computelinverse","text":"void ComputeLInverse ( void ) Compute L matrix inverse.","title":"function ComputeLInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector","text":"inline virtual OutputVectorType TransformVector ( const InputVectorType & ) const These vector transforms are not implemented for this transform.","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformvector_1","text":"inline virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const","title":"function TransformVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-transformcovariantvector","text":"inline virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const","title":"function TransformCovariantVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobian","text":"virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const Reimplements : itk::AdvancedTransform::GetJacobian Compute the Jacobian of the transformation.","title":"function GetJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setidentity","text":"virtual void SetIdentity ( void ) Set the Transformation Parameters to be an identity transform.","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) Update the Parameters array from the landmarks coordinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the source landmarks.","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the target landmarks.","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-setalpha","text":"inline virtual void SetAlpha ( TScalarType itkNotUsedAlpha ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function SetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getalpha","text":"inline virtual TScalarType GetAlpha ( void ) const","title":"function GetAlpha"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro","text":"itkSetMacro ( PoissonRatio , TScalarType ) This method makes only sense for the ElasticBody splines. Declare here, so that you can always call it if you don't know the type of kernel beforehand. It will be overridden in the ElasticBodySplineKernelTransform and in the ElasticBodyReciprocalSplineKernelTransform.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getpoissonratio","text":"inline virtual const TScalarType GetPoissonRatio ( void ) const","title":"function GetPoissonRatio"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itksetmacro_1","text":"itkSetMacro ( MatrixInversionMethod , std :: string ) Matrix inversion by SVD or QR decomposition.","title":"function itkSetMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-itkgetconstreferencemacro","text":"itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string )","title":"function itkGetConstReferenceMacro"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialjacobian","text":"inline virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const Reimplements : itk::AdvancedTransform::GetSpatialJacobian Must be provided.","title":"function GetSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getspatialhessian","text":"inline virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const Reimplements : itk::AdvancedTransform::GetSpatialHessian Compute the spatial Hessian of the transformation. The spatial Hessian is the vector of matrices of partial second order derivatives of the transformation components with respect to the spatial position \\(x\\) , evaluated at a point \\(p\\) . sH=\\left[ \\begin{array}{cc} \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{1}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) \\\\ \\frac{\\partial^2 T_{i}}{\\partial x_{1} \\partial x_{2}}(p) & \\frac{\\partial^2 T_{i}}{\\partial x_{2} \\partial x_{2}}(p) \\\\ \\end{array}\\right], with i the i-th component of the transformation.","title":"function GetSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute the Jacobian of the spatial Jacobian of the transformation. The Jacobian of the spatial Jacobian is the derivative of the spatial Jacobian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialjacobian_1","text":"inline virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialJacobian Compute both the spatial Jacobian and the Jacobian of the spatial Jacobian of the transformation.","title":"function GetJacobianOfSpatialJacobian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute the Jacobian of the spatial Hessian of the transformation. The Jacobian of the spatial Hessian is the derivative of the spatial Hessian to the transformation parameters \\(\\mu\\) , evaluated at a point \\(p\\) .","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-getjacobianofspatialhessian_1","text":"inline virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const Reimplements : itk::AdvancedTransform::GetJacobianOfSpatialHessian Compute both the spatial Hessian and the Jacobian of the spatial Hessian of the transformation.","title":"function GetJacobianOfSpatialHessian"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2","text":"KernelTransform2 ()","title":"function KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-kerneltransform2_1","text":"virtual ~ KernelTransform2 ()","title":"function ~KernelTransform2"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computereflexiveg","text":"virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::ThinPlateSplineKernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space.","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computek","text":"void ComputeK ( void ) Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computel","text":"void ComputeL ( void ) Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computep","text":"void ComputeP ( void ) Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computey","text":"void ComputeY ( void ) Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-computed","text":"void ComputeD ( void ) Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#function-reorganizew","text":"void ReorganizeW ( void ) Warning : This method release the memory of the W Matrix. Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter.","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function.","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotational/Shearing part of the Affine component of the Transformation.","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation.","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; The G matrix. It used to be mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time but this is not necessary. SK: we don't need this matrix anymore as a member. Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositioncomputed","text":"bool m_LMatrixDecompositionComputed ; Has the L matrix decomposition been computed?","title":"variable m_LMatrixDecompositionComputed"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionsvd","text":"SVDDecompositionType * m_LMatrixDecompositionSVD ;","title":"variable m_LMatrixDecompositionSVD"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_lmatrixdecompositionqr","text":"QRDecompositionType * m_LMatrixDecompositionQR ;","title":"variable m_LMatrixDecompositionQR"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix.","title":"variable m_I"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindices","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; Precomputed nonzero Jacobian indices (simply all params)","title":"variable m_NonZeroJacobianIndices"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_nonzerojacobianindicestemp","text":"NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; for old GetJacobian() method:","title":"variable m_NonZeroJacobianIndicesTemp"},{"location":"api/Classes/classitk_1_1KernelTransform2.html#variable-m_fastcomputationpossible","text":"bool m_FastComputationPossible ; The Jacobian can be computed much faster for some of the derived kerbel transforms, most notably the TPS. Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_FastComputationPossible"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html","text":"itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > > Public Types Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const Protected Functions Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const Detailed Description template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510 Public Types Documentation typedef Self typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs. typedef Superclass typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods). function SetConstant inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels function GetConstant inline const TConstant & GetConstant () const Protected Functions Documentation function MultiplyByConstantImageFilter inline MultiplyByConstantImageFilter () function ~MultiplyByConstantImageFilter inline virtual ~ MultiplyByConstantImageFilter () function PrintSelf inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#itkmultiplybyconstantimagefilter","text":"Multiply input pixels by a constant. More... #include Inherits from UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant< TInputImage::PixelType, TConstant, TOutputImage::PixelType > >","title":"itk::MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types","text":"Name typedef MultiplyByConstantImageFilter Self typedef UnaryFunctorImageFilter< TInputImage, TOutputImage, Functor::MultiplyByConstant < typename TInputImage::PixelType, TConstant, typename TOutputImage::PixelType > > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer","title":"Public Types"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) void SetConstant (TConstant ct) const TConstant & GetConstant () const","title":"Public Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions","text":"Name MultiplyByConstantImageFilter () virtual ~MultiplyByConstantImageFilter () void PrintSelf (std::ostream & os, Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#detailed-description","text":"template < class TInputImage , class TConstant , class TOutputImage > class itk :: MultiplyByConstantImageFilter ; Multiply input pixels by a constant. See : UnaryFunctorImageFilter Author : Tom Vercauteren, INRIA & Mauna Kea Technologies This filter is templated over the input image type and the output image type. This implementation was taken from the Insight Journal paper: http://hdl.handle.net/1926/510","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-self","text":"typedef MultiplyByConstantImageFilter itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-superclass","text":"typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: MultiplyByConstantImageFilter < TInputImage , TConstant , TOutputImage >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-setconstant","text":"inline void SetConstant ( TConstant ct ) Set the constant that will be used to multiply all the image pixels","title":"function SetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-getconstant","text":"inline const TConstant & GetConstant () const","title":"function GetConstant"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter","text":"inline MultiplyByConstantImageFilter ()","title":"function MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-multiplybyconstantimagefilter_1","text":"inline virtual ~ MultiplyByConstantImageFilter ()","title":"function ~MultiplyByConstantImageFilter"},{"location":"api/Classes/classitk_1_1MultiplyByConstantImageFilter.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , Indent indent ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html","text":"itk::SparseKernelTransform More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions > Public Types Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType Public Functions Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) Protected Functions Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const Public Attributes Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I Detailed Description template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\" Public Types Documentation typedef Self typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type. typedef InputPointType typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class. typedef OutputPointType typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class. typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ; typedef PointSetTraitsType typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists. typedef PointSetType typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ; typedef PointSetPointer typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ; typedef PointsContainer typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ; typedef PointsIterator typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ; typedef PointsConstIterator typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ; typedef VectorSetType typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef. typedef VectorSetPointer typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ; typedef IMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef. typedef TripletType typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices. typedef GMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef. typedef LMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef. typedef KMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef. typedef PMatrixType typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef. typedef YMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef. typedef WMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef. typedef DMatrixType typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component typedef AMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component typedef BMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component typedef RowMatrixType typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef. typedef ColumnMatrixType typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef. Public Functions Documentation function itkTypeMacro itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods). function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space. function itkGetObjectMacro itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) . function SetSourceLandmarks virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list. function itkGetObjectMacro itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) . function SetTargetLandmarks virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list. function itkGetObjectMacro itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) . function ComputeWMatrix void ComputeWMatrix ( void ) const Compute W matrix. function TransformPoint virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space function SetIdentity virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform function SetParameters virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array . function SetFixedParameters virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks function UpdateParameters virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates. function GetParameters virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks function GetFixedParameters virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks function ComputeJacobianWithRespectToParameters virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters function SetStiffness inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. function itkGetMacro itkGetMacro ( Stiffness , double ) Protected Functions Documentation function SparseKernelTransform SparseKernelTransform () function ~SparseKernelTransform virtual ~ SparseKernelTransform () function PrintSelf void PrintSelf ( std :: ostream & os , Indent indent ) const function ComputeG virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline function ComputeReflexiveG virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space function ComputeK void ComputeK () const Compute K matrix. function ComputeL void ComputeL () const Compute L matrix. function ComputeP void ComputeP () const Compute P matrix. function ComputeY void ComputeY () const Compute Y matrix. function ComputeD void ComputeD () const Compute displacements \\( q_i - p_i \\) . function ReorganizeW void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components. Public Attributes Documentation variable m_SourceLandmarks PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'. variable m_TargetLandmarks PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'. Protected Attributes Documentation variable m_Stiffness double m_Stiffness ; Stiffness parameter variable m_Displacements VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i]; variable m_LMatrix LMatrixType m_LMatrix ; The L matrix. variable m_LMatrixInverse LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache. variable m_KMatrix KMatrixType m_KMatrix ; The K matrix. variable m_PMatrix PMatrixType m_PMatrix ; The P matrix. variable m_YMatrix YMatrixType m_YMatrix ; The Y matrix. variable m_WMatrix WMatrixType m_WMatrix ; The W matrix. variable m_DMatrix DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function variable m_AMatrix AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation variable m_BVector BMatrixType m_BVector ; Translational part of the Affine component of the Transformation variable m_GMatrix GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time variable m_WMatrixComputed bool m_WMatrixComputed ; Has the W matrix been computed? variable m_LMatrixComputed bool m_LMatrixComputed ; Has the L matrix been computed? variable m_LInverseComputed bool m_LInverseComputed ; Has the L inverse matrix been computed? variable m_I IMatrixType m_I ; Identity matrix. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#itksparsekerneltransform","text":"More... #include Inherits from Transform< TScalarType, NDimensions, NDimensions >","title":"itk::SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types","text":"Name typedef SparseKernelTransform Self typedef Transform< TScalarType, NDimensions, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType , NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerIterator PointsIterator typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef itk::VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > IMatrixType typedef Eigen::Triplet< TScalarType > TripletType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > GMatrixType typedef Eigen::SparseMatrix< TScalarType > LMatrixType typedef Eigen::SparseMatrix< TScalarType > KMatrixType typedef Eigen::SparseMatrix< TScalarType > PMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > YMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > WMatrixType typedef Eigen::Matrix< TScalarType, Eigen::Dynamic, Eigen::Dynamic > DMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, NDimensions > AMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > BMatrixType typedef Eigen::Matrix< TScalarType, 1, NDimensions > RowMatrixType typedef Eigen::Matrix< TScalarType, NDimensions, 1 > ColumnMatrixType","title":"Public Types"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions","text":"Name itkTypeMacro ( SparseKernelTransform , Transform ) itkNewMacro ( Self ) itkStaticConstMacro (SpaceDimension , unsigned int , NDimensions ) itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) const virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual void SetIdentity () virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) const virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void ComputeJacobianWithRespectToParameters (const InputPointType & in, JacobianType & jacobian) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions","text":"Name SparseKernelTransform () virtual ~SparseKernelTransform () void PrintSelf (std::ostream & os, Indent indent) const virtual const GMatrixType & ComputeG (const InputVectorType & landmarkVector) const virtual const GMatrixType & ComputeReflexiveG (PointsIterator ) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const void ComputeK () const void ComputeL () const void ComputeP () const void ComputeY () const void ComputeD () const void ReorganizeW (void ) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes","text":"Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks","title":"Public Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes","text":"Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector GMatrixType m_GMatrix bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed IMatrixType m_I","title":"Protected Attributes"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions > class itk :: SparseKernelTransform ; Intended to be a base class for elastic body spline and thin plate spline. This is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16, No. 3 June 1997. Notation closely follows their paper, so if you have it in front of you, this code will make a lot more sense. SparseKernelTransform : Provides support for defining source and target landmarks Defines a number of data types used in the computations Defines the mathematical framework used to compute all splines, so that subclasses need only provide a kernel specific to that spline This formulation allows the stiffness of the spline to be adjusted, allowing the spline to vary from interpolating the landmarks to approximating the landmarks. This part of the formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996. This class was modified to support its use in the ITK registration framework by Rupert Brooks, McGill Centre for Intelligent Machines, Montreal, Canada March 2007. See the Insight Journal Paper by Brooks, R., Arbel, T. \"Improvements to the itk::KernelTransform and its subclasses.\"","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-self","text":"typedef SparseKernelTransform itk :: SparseKernelTransform < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-superclass","text":"typedef Transform < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: SparseKernelTransform < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: SparseKernelTransform < TScalarType , NDimensions >:: JacobianType ; Jacobian type.","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputPointType ; Standard coordinate point type for this class.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: InputVectorType ; Standard vector type for this class.","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: SparseKernelTransform < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettraitstype","text":"typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetTraitsType ; PointList typedef. This type is used for maintaining lists of points, specifically, the source and target landmark lists.","title":"typedef PointSetTraitsType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsettype","text":"typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetType ;","title":"typedef PointSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsetpointer","text":"typedef PointSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointSetPointer ;","title":"typedef PointSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointscontainer","text":"typedef PointSetType :: PointsContainer itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsContainer ;","title":"typedef PointsContainer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsiterator","text":"typedef PointSetType :: PointsContainerIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pointsconstiterator","text":"typedef PointSetType :: PointsContainerConstIterator itk :: SparseKernelTransform < TScalarType , NDimensions >:: PointsConstIterator ;","title":"typedef PointsConstIterator"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsettype","text":"typedef itk :: VectorContainer < unsigned long , InputVectorType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetType ; VectorSet typedef.","title":"typedef VectorSetType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-vectorsetpointer","text":"typedef VectorSetType :: Pointer itk :: SparseKernelTransform < TScalarType , NDimensions >:: VectorSetPointer ;","title":"typedef VectorSetPointer"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-imatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: IMatrixType ; 'I' (identity) matrix typedef.","title":"typedef IMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-triplettype","text":"typedef Eigen :: Triplet < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: TripletType ; triplets used to fill sparse matrices.","title":"typedef TripletType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-gmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: GMatrixType ; 'G' matrix typedef.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-lmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: LMatrixType ; 'L' matrix typedef.","title":"typedef LMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-kmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: KMatrixType ; 'K' matrix typedef.","title":"typedef KMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-pmatrixtype","text":"typedef Eigen :: SparseMatrix < TScalarType > itk :: SparseKernelTransform < TScalarType , NDimensions >:: PMatrixType ; 'P' matrix typedef.","title":"typedef PMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-ymatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: YMatrixType ; 'Y' matrix typedef.","title":"typedef YMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-wmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: WMatrixType ; 'W' matrix typedef.","title":"typedef WMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-dmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > itk :: SparseKernelTransform < TScalarType , NDimensions >:: DMatrixType ; 'D' matrix typedef. Deformation component","title":"typedef DMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-amatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: AMatrixType ; 'A' matrix typedef. Rotational part of the Affine component","title":"typedef AMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-bmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: BMatrixType ; 'B' matrix typedef. Translational part of the Affine component","title":"typedef BMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-rowmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > itk :: SparseKernelTransform < TScalarType , NDimensions >:: RowMatrixType ; Row matrix typedef.","title":"typedef RowMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#typedef-columnmatrixtype","text":"typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > itk :: SparseKernelTransform < TScalarType , NDimensions >:: ColumnMatrixType ; Column matrix typedef.","title":"typedef ColumnMatrixType"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itktypemacro","text":"itkTypeMacro ( SparseKernelTransform , Transform ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( SourceLandmarks , PointSetType ) Get the source landmarks list, which we will denote \\( p \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setsourcelandmarks","text":"virtual void SetSourceLandmarks ( PointSetType * ) Set the source landmarks list.","title":"function SetSourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( TargetLandmarks , PointSetType ) Get the target landmarks list, which we will denote \\( q \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-settargetlandmarks","text":"virtual void SetTargetLandmarks ( PointSetType * ) Set the target landmarks list.","title":"function SetTargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetobjectmacro_2","text":"itkGetObjectMacro ( Displacements , VectorSetType ) Get the displacements list, which we will denote \\( d \\) , where \\( d_i = q_i - p_i \\) .","title":"function itkGetObjectMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computewmatrix","text":"void ComputeWMatrix ( void ) const Compute W matrix.","title":"function ComputeWMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-transformpoint","text":"virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const Compute L matrix inverse. Compute the position of point in the new space","title":"function TransformPoint"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setidentity","text":"virtual void SetIdentity () Compute the Jacobian Matrix of the transformation at one point Set the Transformation Parameters to be an identity transform","title":"function SetIdentity"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setparameters","text":"virtual void SetParameters ( const ParametersType & ) Set the Transformation Parameters and update the internal transformation. The parameters represent the source landmarks. Each landmark point is represented by NDimensions doubles. All the landmarks are concatenated to form one flat Array .","title":"function SetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setfixedparameters","text":"virtual void SetFixedParameters ( const ParametersType & ) Set Transform Fixed Parameters: To support the transform file writer this function was added to set the target landmarks similar to the SetParameters function setting the source landmarks","title":"function SetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-updateparameters","text":"virtual void UpdateParameters ( void ) const Update the Parameters array from the landmarks corrdinates.","title":"function UpdateParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getparameters","text":"virtual const ParametersType & GetParameters ( void ) const Get the Transformation Parameters - Gets the Source Landmarks","title":"function GetParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-getfixedparameters","text":"virtual const ParametersType & GetFixedParameters ( void ) const Get Transform Fixed Parameters - Gets the Target Landmarks","title":"function GetFixedParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computejacobianwithrespecttoparameters","text":"virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeJacobianWithRespectToParameters","title":"function ComputeJacobianWithRespectToParameters"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-setstiffness","text":"inline virtual void SetStiffness ( double stiffness ) Stiffness of the spline. A stiffness of zero results in the standard interpolating spline. A non-zero stiffness allows the spline to approximate rather than interpolate the landmarks. Stiffness values are usually rather small, typically in the range of 0.001 to 0.1. The approximating spline formulation is based on the short paper by R. Sprengel, K. Rohr, H. Stiehl. \"Thin-Plate Spline Approximation for Image Registration\". In 18th International Conference of the IEEE Engineering in Medicine and Biology Society. 1996.","title":"function SetStiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-itkgetmacro","text":"itkGetMacro ( Stiffness , double )","title":"function itkGetMacro"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform","text":"SparseKernelTransform ()","title":"function SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-sparsekerneltransform_1","text":"virtual ~ SparseKernelTransform ()","title":"function ~SparseKernelTransform"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-printself","text":"void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computeg","text":"virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeG Compute G(x) This is essentially the kernel of the transform. By overriding this method, we can obtain (among others): Elastic body spline Thin plate spline Volume spline","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computereflexiveg","text":"virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const Compute a G(x) for a point to itself (i.e. for the block diagonal elements of the matrix K. Parameter indicates for which landmark the reflexive G is to be computed. The default implementation for the reflexive contribution is a diagonal matrix where the diagonal elements are the stiffness of the spline.","title":"function ComputeReflexiveG"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplemented by : itk::CompactlySupportedRBFSparseKernelTransform::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel funcion to the global deformation of the space","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computek","text":"void ComputeK () const Compute K matrix.","title":"function ComputeK"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computel","text":"void ComputeL () const Compute L matrix.","title":"function ComputeL"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computep","text":"void ComputeP () const Compute P matrix.","title":"function ComputeP"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computey","text":"void ComputeY () const Compute Y matrix.","title":"function ComputeY"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-computed","text":"void ComputeD () const Compute displacements \\( q_i - p_i \\) .","title":"function ComputeD"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#function-reorganizew","text":"void ReorganizeW ( void ) const Warning : This method release the memory of the W Matrix Reorganize the components of W into D (deformable), A (rotation part of affine) and B (translational part of affine ) components.","title":"function ReorganizeW"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_sourcelandmarks","text":"PointSetPointer m_SourceLandmarks ; The list of source landmarks, denoted 'p'.","title":"variable m_SourceLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_targetlandmarks","text":"PointSetPointer m_TargetLandmarks ; The list of target landmarks, denoted 'q'.","title":"variable m_TargetLandmarks"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_stiffness","text":"double m_Stiffness ; Stiffness parameter","title":"variable m_Stiffness"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_displacements","text":"VectorSetPointer m_Displacements ; The list of displacements. d[i] = q[i] - p[i];","title":"variable m_Displacements"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrix","text":"LMatrixType m_LMatrix ; The L matrix.","title":"variable m_LMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixinverse","text":"LMatrixType m_LMatrixInverse ; The inverse of L, which we also cache.","title":"variable m_LMatrixInverse"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_kmatrix","text":"KMatrixType m_KMatrix ; The K matrix.","title":"variable m_KMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_pmatrix","text":"PMatrixType m_PMatrix ; The P matrix.","title":"variable m_PMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_ymatrix","text":"YMatrixType m_YMatrix ; The Y matrix.","title":"variable m_YMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrix","text":"WMatrixType m_WMatrix ; The W matrix.","title":"variable m_WMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_dmatrix","text":"DMatrixType m_DMatrix ; The Deformation matrix. This is an auxiliary matrix that will hold the Deformation (non-affine) part of the transform. Those are the coefficients that will multiply the Kernel function","title":"variable m_DMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_amatrix","text":"AMatrixType m_AMatrix ; Rotatinoal/Shearing part of the Affine component of the Transformation","title":"variable m_AMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_bvector","text":"BMatrixType m_BVector ; Translational part of the Affine component of the Transformation","title":"variable m_BVector"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_gmatrix","text":"GMatrixType m_GMatrix ; The G matrix. It is made mutable because m_GMatrix was made an ivar only to avoid copying the matrix at return time","title":"variable m_GMatrix"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_wmatrixcomputed","text":"bool m_WMatrixComputed ; Has the W matrix been computed?","title":"variable m_WMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_lmatrixcomputed","text":"bool m_LMatrixComputed ; Has the L matrix been computed?","title":"variable m_LMatrixComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_linversecomputed","text":"bool m_LInverseComputed ; Has the L inverse matrix been computed?","title":"variable m_LInverseComputed"},{"location":"api/Classes/classitk_1_1SparseKernelTransform.html#variable-m_i","text":"IMatrixType m_I ; Identity matrix. Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_I"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html","text":"itk::TPGACLevelSetImageFilter More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float > Public Types Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Protected Functions Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change) Detailed Description template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ; Public Types Documentation typedef Self typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs typedef Superclass typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ; typedef ImageType typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ; typedef IndexType typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ; typedef TimeStepType typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ; typedef ValueType typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass. typedef OutputImageType typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ; typedef FeatureImageType typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory function itkTypeMacro itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods). Protected Functions Documentation function ~TPGACLevelSetImageFilter inline ~ TPGACLevelSetImageFilter () function TPGACLevelSetImageFilter TPGACLevelSetImageFilter () function PrintSelf virtual void PrintSelf ( std :: ostream & os , Indent indent ) const function TPGACLevelSetImageFilter TPGACLevelSetImageFilter ( const Self & ) function operator= void operator = ( const Self & ) function CalculateUpdateValue inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#itktpgaclevelsetimagefilter","text":"More... Inherits from GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, float >","title":"itk::TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types","text":"Name typedef TPGACLevelSetImageFilter Self typedef GeodesicActiveContourLevelSetImageFilter< TInputImage, TFeatureImage, TOutputPixelType > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef TInputImage ImageType typedef ImageType::IndexType IndexType typedef Superclass::TimeStepType TimeStepType typedef Superclass::ValueType ValueType typedef Superclass::OutputImageType OutputImageType typedef Superclass::FeatureImageType FeatureImageType","title":"Public Types"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter )","title":"Public Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions","text":"Name ~TPGACLevelSetImageFilter () TPGACLevelSetImageFilter () virtual void PrintSelf (std::ostream & os, Indent indent) const TPGACLevelSetImageFilter (const Self & ) void operator= (const Self & ) virtual ValueType CalculateUpdateValue (const IndexType & idx, const TimeStepType & dt, const ValueType & value, const ValueType & change)","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#detailed-description","text":"template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class itk :: TPGACLevelSetImageFilter ;","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-self","text":"typedef TPGACLevelSetImageFilter itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-superclass","text":"typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-imagetype","text":"typedef TInputImage itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-indextype","text":"typedef ImageType :: IndexType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: IndexType ;","title":"typedef IndexType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-timesteptype","text":"typedef Superclass :: TimeStepType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: TimeStepType ;","title":"typedef TimeStepType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-valuetype","text":"typedef Superclass :: ValueType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: ValueType ; Inherited typedef from the superclass.","title":"typedef ValueType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-outputimagetype","text":"typedef Superclass :: OutputImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: OutputImageType ;","title":"typedef OutputImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#typedef-featureimagetype","text":"typedef Superclass :: FeatureImageType itk :: TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType >:: FeatureImageType ;","title":"typedef FeatureImageType"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-itktypemacro","text":"itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter","text":"inline ~ TPGACLevelSetImageFilter ()","title":"function ~TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_1","text":"TPGACLevelSetImageFilter ()","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-printself","text":"virtual void PrintSelf ( std :: ostream & os , Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-tpgaclevelsetimagefilter_2","text":"TPGACLevelSetImageFilter ( const Self & )","title":"function TPGACLevelSetImageFilter"},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-operator","text":"void operator = ( const Self & )","title":"function operator="},{"location":"api/Classes/classitk_1_1TPGACLevelSetImageFilter.html#function-calculateupdatevalue","text":"inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) Overridden from the parent class to indroduce a constraint on surface flow under certain conditions. Updated on 2023-10-25 at 15:40:26 +0000","title":"function CalculateUpdateValue"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html","text":"itk::ThinPlateSplineKernelTransform2 More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 > Public Types Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator Protected Types Name typedef Superclass::GMatrixType GMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma) Protected Functions Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const Additional inherited members Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian Detailed Description template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997 Public Types Documentation typedef Self typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs. typedef Superclass typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ; typedef Pointer typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ; typedef ConstPointer typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ; typedef ScalarType typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type. typedef ParametersType typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type. typedef JacobianType typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type typedef InputPointType typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. typedef OutputPointType typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ; typedef InputVectorType typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ; typedef OutputVectorType typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ; typedef InputCovariantVectorType typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ; typedef OutputCovariantVectorType typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ; typedef PointsIterator typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ; Protected Types Documentation typedef GMatrixType typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) New macro for creation of through a Smart Pointer function itkTypeMacro itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space. function SetSigma inline void SetSigma ( double sigma ) Protected Functions Documentation function ThinPlateSplineKernelTransform2 inline ThinPlateSplineKernelTransform2 () function ~ThinPlateSplineKernelTransform2 inline virtual ~ ThinPlateSplineKernelTransform2 () function ComputeG virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix. function ComputeDeformationContribution virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#itkthinplatesplinekerneltransform2","text":"More... #include Inherits from itk::KernelTransform2< TScalarType, 3 > , itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > , Transform< TScalarType, 3, 3 >","title":"itk::ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types","text":"Name typedef ThinPlateSplineKernelTransform2 Self typedef KernelTransform2 < TScalarType, NDimensions > Superclass typedef SmartPointer< Self > Pointer typedef SmartPointer< const Self > ConstPointer typedef Superclass::ScalarType ScalarType typedef Superclass::ParametersType ParametersType typedef Superclass::JacobianType JacobianType typedef Superclass::InputPointType InputPointType typedef Superclass::OutputPointType OutputPointType typedef Superclass::InputVectorType InputVectorType typedef Superclass::OutputVectorType OutputVectorType typedef Superclass::InputCovariantVectorType InputCovariantVectorType typedef Superclass::OutputCovariantVectorType OutputCovariantVectorType typedef Superclass::PointsIterator PointsIterator","title":"Public Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types","text":"Name typedef Superclass::GMatrixType GMatrixType","title":"Protected Types"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) itkStaticConstMacro (SpaceDimension , unsigned int , Superclass::SpaceDimension ) void SetSigma (double sigma)","title":"Public Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions","text":"Name ThinPlateSplineKernelTransform2 () virtual ~ThinPlateSplineKernelTransform2 () virtual void ComputeG (const InputVectorType & x, GMatrixType & GMatrix) const virtual void ComputeDeformationContribution (const InputPointType & inputPoint, OutputPointType & result) const","title":"Protected Functions"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#additional-inherited-members","text":"Public Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType typedef Superclass::SpatialJacobianType SpatialJacobianType typedef Superclass::JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType typedef Superclass::SpatialHessianType SpatialHessianType typedef Superclass::JacobianOfSpatialHessianType JacobianOfSpatialHessianType typedef Superclass::InternalMatrixType InternalMatrixType typedef DefaultStaticMeshTraits< TScalarType, NDimensions, NDimensions, TScalarType, TScalarType > PointSetTraitsType typedef PointSet< InputPointType, NDimensions, PointSetTraitsType > PointSetType typedef PointSetType::Pointer PointSetPointer typedef PointSetType::PointsContainer PointsContainer typedef PointSetType::PointsContainerConstIterator PointsConstIterator typedef VectorContainer< unsigned long, InputVectorType > VectorSetType typedef VectorSetType::Pointer VectorSetPointer typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > IMatrixType typedef vnl_matrix< TScalarType > LMatrixType typedef vnl_matrix< TScalarType > KMatrixType typedef vnl_matrix< TScalarType > PMatrixType typedef vnl_matrix< TScalarType > YMatrixType typedef vnl_matrix< TScalarType > WMatrixType typedef vnl_matrix< TScalarType > DMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, NDimensions > AMatrixType typedef vnl_vector_fixed< TScalarType, NDimensions > BMatrixType typedef vnl_matrix_fixed< TScalarType, 1, NDimensions > RowMatrixType typedef vnl_matrix_fixed< TScalarType, NDimensions, 1 > ColumnMatrixType Protected Types inherited from itk::KernelTransform2< TScalarType, 3 > Name typedef vnl_svd< ScalarType > SVDDecompositionType typedef vnl_qr< ScalarType > QRDecompositionType Public Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name virtual NumberOfParametersType GetNumberOfParameters (void ) const itkGetObjectMacro (SourceLandmarks , PointSetType ) virtual void SetSourceLandmarks (PointSetType * ) itkGetObjectMacro (TargetLandmarks , PointSetType ) virtual void SetTargetLandmarks (PointSetType * ) itkGetObjectMacro (Displacements , VectorSetType ) void ComputeWMatrix (void ) void ComputeLInverse (void ) virtual OutputPointType TransformPoint (const InputPointType & thisPoint) const virtual OutputVectorType TransformVector (const InputVectorType & ) const virtual OutputVnlVectorType TransformVector (const InputVnlVectorType & ) const virtual OutputCovariantVectorType TransformCovariantVector (const InputCovariantVectorType & ) const virtual void GetJacobian (const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const virtual void SetIdentity (void ) virtual void SetParameters (const ParametersType & ) virtual void SetFixedParameters (const ParametersType & ) virtual void UpdateParameters (void ) virtual const ParametersType & GetParameters (void ) const virtual const ParametersType & GetFixedParameters (void ) const virtual void SetStiffness (double stiffness) itkGetMacro (Stiffness , double ) virtual void SetAlpha (TScalarType itkNotUsedAlpha) virtual TScalarType GetAlpha (void ) const itkSetMacro (PoissonRatio , TScalarType ) virtual const TScalarType GetPoissonRatio (void ) const itkSetMacro (MatrixInversionMethod , std::string ) itkGetConstReferenceMacro (MatrixInversionMethod , std::string ) virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const Protected Functions inherited from itk::KernelTransform2< TScalarType, 3 > Name KernelTransform2 () virtual ~KernelTransform2 () void PrintSelf (std::ostream & os, Indent indent) const virtual void ComputeReflexiveG (PointsIterator , GMatrixType & GMatrix) const void ComputeK (void ) void ComputeL (void ) void ComputeP (void ) void ComputeY (void ) void ComputeD (void ) void ReorganizeW (void ) Public Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name PointSetPointer m_SourceLandmarks PointSetPointer m_TargetLandmarks Protected Attributes inherited from itk::KernelTransform2< TScalarType, 3 > Name double m_Stiffness VectorSetPointer m_Displacements LMatrixType m_LMatrix LMatrixType m_LMatrixInverse KMatrixType m_KMatrix PMatrixType m_PMatrix YMatrixType m_YMatrix WMatrixType m_WMatrix DMatrixType m_DMatrix AMatrixType m_AMatrix BMatrixType m_BVector bool m_WMatrixComputed bool m_LMatrixComputed bool m_LInverseComputed bool m_LMatrixDecompositionComputed SVDDecompositionType * m_LMatrixDecompositionSVD QRDecompositionType * m_LMatrixDecompositionQR IMatrixType m_I NonZeroJacobianIndicesType m_NonZeroJacobianIndices NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp bool m_FastComputationPossible Public Types inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name typedef Superclass::ParametersValueType ParametersValueType typedef Superclass::NumberOfParametersType NumberOfParametersType typedef Superclass::DerivativeType DerivativeType typedef Superclass::InputVnlVectorType InputVnlVectorType typedef Superclass::OutputVnlVectorType OutputVnlVectorType typedef Superclass::InverseTransformBaseType InverseTransformBaseType typedef Superclass::InverseTransformBasePointer InverseTransformBasePointer typedef Transform< TScalarType, NInputDimensions, NOutputDimensions > TransformType typedef TransformType::Pointer TransformTypePointer typedef TransformType::ConstPointer TransformTypeConstPointer typedef std::vector< unsigned long > NonZeroJacobianIndicesType typedef Matrix< ScalarType , OutputSpaceDimension, InputSpaceDimension > SpatialJacobianType typedef std::vector< SpatialJacobianType > JacobianOfSpatialJacobianType typedef FixedArray< Matrix< ScalarType , InputSpaceDimension, InputSpaceDimension >, OutputSpaceDimension > SpatialHessianType typedef std::vector< SpatialHessianType > JacobianOfSpatialHessianType typedef SpatialJacobianType::InternalMatrixType InternalMatrixType typedef OutputCovariantVectorType MovingImageGradientType typedef MovingImageGradientType::ValueType MovingImageGradientValueType Public Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices (void ) const itkGetConstMacro (HasNonZeroSpatialHessian , bool ) itkGetConstMacro (HasNonZeroJacobianOfSpatialHessian , bool ) virtual void GetJacobian (const InputPointType & ipp, JacobianType & j, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void EvaluateJacobianWithImageGradientProduct (const InputPointType & ipp, const MovingImageGradientType & movingImageGradient, DerivativeType & imageJacobian, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const virtual void GetSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj) const =0 virtual void ComputeJacobianWithRespectToParameters (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void ComputeJacobianWithRespectToPosition (const InputPointType & itkNotUsedp, JacobianType & itkNotUsedj) const virtual void GetSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialJacobian (const InputPointType & ipp, SpatialJacobianType & sj, JacobianOfSpatialJacobianType & jsj, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 virtual void GetJacobianOfSpatialHessian (const InputPointType & ipp, SpatialHessianType & sh, JacobianOfSpatialHessianType & jsh, NonZeroJacobianIndicesType & nonZeroJacobianIndices) const =0 Protected Functions inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name AdvancedTransform () AdvancedTransform (NumberOfParametersType numberOfParameters) virtual ~AdvancedTransform () Protected Attributes inherited from itk::AdvancedTransform< TScalarType, NDimensions, NDimensions > Name bool m_HasNonZeroSpatialHessian bool m_HasNonZeroJacobianOfSpatialHessian","title":"Additional inherited members"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#detailed-description","text":"template < class TScalarType , unsigned int NDimensions = 3 > class itk :: ThinPlateSplineKernelTransform2 ; This class defines the thin plate spline (TPS) transformation. It is implemented in as straightforward a manner as possible from the IEEE TMI paper by Davis, Khotanzad, Flamig, and Harms, Vol. 16 No. 3 June 1997","title":"Detailed Description"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-self","text":"typedef ThinPlateSplineKernelTransform2 itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-superclass","text":"typedef KernelTransform2 < TScalarType , NDimensions > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointer","text":"typedef SmartPointer < Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-constpointer","text":"typedef SmartPointer < const Self > itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-scalartype","text":"typedef Superclass :: ScalarType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ScalarType ; Scalar type.","title":"typedef ScalarType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-parameterstype","text":"typedef Superclass :: ParametersType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: ParametersType ; Parameters type.","title":"typedef ParametersType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-jacobiantype","text":"typedef Superclass :: JacobianType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: JacobianType ; Jacobian Type","title":"typedef JacobianType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputpointtype","text":"typedef Superclass :: InputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputPointType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef InputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputpointtype","text":"typedef Superclass :: OutputPointType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputPointType ;","title":"typedef OutputPointType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputvectortype","text":"typedef Superclass :: InputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputVectorType ;","title":"typedef InputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputvectortype","text":"typedef Superclass :: OutputVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputVectorType ;","title":"typedef OutputVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-inputcovariantvectortype","text":"typedef Superclass :: InputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: InputCovariantVectorType ;","title":"typedef InputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-outputcovariantvectortype","text":"typedef Superclass :: OutputCovariantVectorType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: OutputCovariantVectorType ;","title":"typedef OutputCovariantVectorType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-pointsiterator","text":"typedef Superclass :: PointsIterator itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: PointsIterator ;","title":"typedef PointsIterator"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#typedef-gmatrixtype","text":"typedef Superclass :: GMatrixType itk :: ThinPlateSplineKernelTransform2 < TScalarType , NDimensions >:: GMatrixType ; These (rather redundant) typedefs are needed because on SGI, typedefs are not inherited.","title":"typedef GMatrixType"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itknewmacro","text":"itkNewMacro ( Self ) New macro for creation of through a Smart Pointer","title":"function itkNewMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itktypemacro","text":"itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ) Dimension of the domain space.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-setsigma","text":"inline void SetSigma ( double sigma )","title":"function SetSigma"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2","text":"inline ThinPlateSplineKernelTransform2 ()","title":"function ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-thinplatesplinekerneltransform2_1","text":"inline virtual ~ ThinPlateSplineKernelTransform2 ()","title":"function ~ThinPlateSplineKernelTransform2"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computeg","text":"virtual void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const Reimplements : itk::KernelTransform2::ComputeG Compute G(x) For the thin plate spline, this is: G(x) = r(x)*I \\( G(x) = r(x)*I \\) where r(x) = Euclidean norm = sqrt[x1^2 + x2^2 + x3^2] r(x) = \\sqrt{ x_1^2 + x_2^2 + x_3^2 } I = identity matrix.","title":"function ComputeG"},{"location":"api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html#function-computedeformationcontribution","text":"virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const Reimplements : itk::KernelTransform2::ComputeDeformationContribution Compute the contribution of the landmarks weighted by the kernel function to the global deformation of the space. Updated on 2023-10-25 at 15:40:26 +0000","title":"function ComputeDeformationContribution"},{"location":"api/Classes/classmat3d.html","text":"mat3d Public Functions Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose () Protected Attributes Name double m_data Public Functions Documentation function mat3d inline mat3d () function mat3d mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ) function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function operator* inline mat3d operator * ( mat3d & m ) function operator*= inline mat3d & operator *= ( mat3d & m ) function operator+= inline mat3d & operator += ( mat3d & m ) function operator-= inline mat3d & operator -= ( mat3d & m ) function operator/= inline mat3d & operator /= ( const double f ) function operator* inline vec3d operator * ( vec3d b ) function det inline double det () const function Invert double Invert () function inverse mat3d inverse () const function zero inline void zero () function unit inline void unit () function transpose mat3d transpose () Protected Attributes Documentation variable m_data double m_data ; Updated on 2023-10-25 at 15:40:28 +0000","title":"mat3d"},{"location":"api/Classes/classmat3d.html#mat3d","text":"","title":"mat3d"},{"location":"api/Classes/classmat3d.html#public-functions","text":"Name mat3d () mat3d (double a00, double a01, double a02, double a10, double a11, double a12, double a20, double a21, double a22) double * operator[] (int i) double & operator() (int i, int j) mat3d operator* ( mat3d & m) mat3d & operator*= ( mat3d & m) mat3d & operator+= ( mat3d & m) mat3d & operator-= ( mat3d & m) mat3d & operator/= (const double f) vec3d operator* ( vec3d b) double det () const double Invert () mat3d inverse () const void zero () void unit () mat3d transpose ()","title":"Public Functions"},{"location":"api/Classes/classmat3d.html#protected-attributes","text":"Name double m_data","title":"Protected Attributes"},{"location":"api/Classes/classmat3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmat3d.html#function-mat3d","text":"inline mat3d ()","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-mat3d_1","text":"mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 )","title":"function mat3d"},{"location":"api/Classes/classmat3d.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmat3d.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmat3d.html#function-operator_2","text":"inline mat3d operator * ( mat3d & m )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-operator_3","text":"inline mat3d & operator *= ( mat3d & m )","title":"function operator*="},{"location":"api/Classes/classmat3d.html#function-operator_4","text":"inline mat3d & operator += ( mat3d & m )","title":"function operator+="},{"location":"api/Classes/classmat3d.html#function-operator-","text":"inline mat3d & operator -= ( mat3d & m )","title":"function operator-="},{"location":"api/Classes/classmat3d.html#function-operator_5","text":"inline mat3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classmat3d.html#function-operator_6","text":"inline vec3d operator * ( vec3d b )","title":"function operator*"},{"location":"api/Classes/classmat3d.html#function-det","text":"inline double det () const","title":"function det"},{"location":"api/Classes/classmat3d.html#function-invert","text":"double Invert ()","title":"function Invert"},{"location":"api/Classes/classmat3d.html#function-inverse","text":"mat3d inverse () const","title":"function inverse"},{"location":"api/Classes/classmat3d.html#function-zero","text":"inline void zero ()","title":"function zero"},{"location":"api/Classes/classmat3d.html#function-unit","text":"inline void unit ()","title":"function unit"},{"location":"api/Classes/classmat3d.html#function-transpose","text":"mat3d transpose ()","title":"function transpose"},{"location":"api/Classes/classmat3d.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classmat3d.html#variable-m_data","text":"double m_data ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable m_data"},{"location":"api/Classes/classmatrix.html","text":"matrix Public Functions Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt) Public Functions Documentation function matrix matrix ( int r , int c ) function ~matrix inline ~ matrix () function zero void zero () function operator[] inline double * operator []( int i ) function operator() inline double & operator ()( int i , int j ) function solve bool solve ( vector < double > & x , vector < double > & b ) function lsq_solve bool lsq_solve ( vector < double > & x , vector < double > & b ) function eigen_vectors bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values ) function Rows inline int Rows () function mult_transpose void mult_transpose ( vector < double > & x , vector < double > & y ) function mult_transpose_self void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-25 at 15:40:28 +0000","title":"matrix"},{"location":"api/Classes/classmatrix.html#matrix","text":"","title":"matrix"},{"location":"api/Classes/classmatrix.html#public-functions","text":"Name matrix (int r, int c) ~matrix () void zero () double * operator[] (int i) double & operator() (int i, int j) bool solve (vector< double > & x, vector< double > & b) bool lsq_solve (vector< double > & x, vector< double > & b) bool eigen_vectors ( matrix & Eigen, vector< double > & eigen_values) int Rows () void mult_transpose (vector< double > & x, vector< double > & y) void mult_transpose_self ( matrix & AAt)","title":"Public Functions"},{"location":"api/Classes/classmatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmatrix.html#function-matrix","text":"matrix ( int r , int c )","title":"function matrix"},{"location":"api/Classes/classmatrix.html#function-matrix_1","text":"inline ~ matrix ()","title":"function ~matrix"},{"location":"api/Classes/classmatrix.html#function-zero","text":"void zero ()","title":"function zero"},{"location":"api/Classes/classmatrix.html#function-operator","text":"inline double * operator []( int i )","title":"function operator[]"},{"location":"api/Classes/classmatrix.html#function-operator_1","text":"inline double & operator ()( int i , int j )","title":"function operator()"},{"location":"api/Classes/classmatrix.html#function-solve","text":"bool solve ( vector < double > & x , vector < double > & b )","title":"function solve"},{"location":"api/Classes/classmatrix.html#function-lsq_solve","text":"bool lsq_solve ( vector < double > & x , vector < double > & b )","title":"function lsq_solve"},{"location":"api/Classes/classmatrix.html#function-eigen_vectors","text":"bool eigen_vectors ( matrix & Eigen , vector < double > & eigen_values )","title":"function eigen_vectors"},{"location":"api/Classes/classmatrix.html#function-rows","text":"inline int Rows ()","title":"function Rows"},{"location":"api/Classes/classmatrix.html#function-mult_transpose","text":"void mult_transpose ( vector < double > & x , vector < double > & y )","title":"function mult_transpose"},{"location":"api/Classes/classmatrix.html#function-mult_transpose_self","text":"void mult_transpose_self ( matrix & AAt ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function mult_transpose_self"},{"location":"api/Classes/classmeshFIM.html","text":"meshFIM Public Types Name enum LabelType typedef int VoxelIndexType typedef int index Public Functions Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM () Public Attributes Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors Public Types Documentation enum LabelType Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint typedef VoxelIndexType typedef int meshFIM :: VoxelIndexType ; typedef index typedef int meshFIM :: index ; Public Functions Documentation function ComputeDistanceToLandmarksGivenTriangleInfo void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ) function computeFIM void computeFIM ( TriMesh * mesh , const char * vertT_filename ) function GetFeatureValues void GetFeatureValues ( point x , std :: vector < float > & vals ) function ReadFaceIndexMap void ReadFaceIndexMap ( const char * infilename ) function ReadFeatureFromFile void ReadFeatureFromFile ( const char * infilename ) function ReadFeatureGradientFromFile void ReadFeatureGradientFromFile ( const char * infilename ) function GetFeatureDerivative point GetFeatureDerivative ( point p , int fIndex ) function need_abs_curvatures void need_abs_curvatures () function need_edge_lengths void need_edge_lengths () function need_speed void need_speed () function need_oneringfaces void need_oneringfaces () function need_kdtree void need_kdtree () function SetMesh void SetMesh ( TriMesh * mesh ) function SetStopDistance inline void SetStopDistance ( float d ) function setSpeedType inline void setSpeedType ( int st ) function meshFIM inline meshFIM () function ~meshFIM inline ~ meshFIM () Public Attributes Documentation variable m_meshPtr TriMesh * m_meshPtr ; variable NumComputation int NumComputation ; variable imageOrigin float imageOrigin ; variable imageSpacing float imageSpacing ; variable imageSize int imageSize ; variable imageIndex int imageIndex ; variable colors std :: vector < Color > colors ; Updated on 2023-10-25 at 15:40:28 +0000","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#meshfim","text":"","title":"meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-types","text":"Name enum LabelType typedef int VoxelIndexType typedef int index","title":"Public Types"},{"location":"api/Classes/classmeshFIM.html#public-functions","text":"Name void ComputeDistanceToLandmarksGivenTriangleInfo (TriMesh * mesh, const char * infilename, const char * outfilename) void computeFIM (TriMesh * mesh, const char * vertT_filename) void GetFeatureValues (point x, std::vector< float > & vals) void ReadFaceIndexMap (const char * infilename) void ReadFeatureFromFile (const char * infilename) void ReadFeatureGradientFromFile (const char * infilename) point GetFeatureDerivative (point p, int fIndex) void need_abs_curvatures () void need_edge_lengths () void need_speed () void need_oneringfaces () void need_kdtree () void SetMesh (TriMesh * mesh) void SetStopDistance (float d) void setSpeedType (int st) meshFIM () ~meshFIM ()","title":"Public Functions"},{"location":"api/Classes/classmeshFIM.html#public-attributes","text":"Name TriMesh * m_meshPtr int NumComputation float imageOrigin float imageSpacing int imageSize int imageIndex std::vector< Color > colors","title":"Public Attributes"},{"location":"api/Classes/classmeshFIM.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classmeshFIM.html#enum-labeltype","text":"Enumerator Value Description MaskPoint SeedPoint ActivePoint FarPoint StopPoint AlivePoint ToBeAlivePoint","title":"enum LabelType"},{"location":"api/Classes/classmeshFIM.html#typedef-voxelindextype","text":"typedef int meshFIM :: VoxelIndexType ;","title":"typedef VoxelIndexType"},{"location":"api/Classes/classmeshFIM.html#typedef-index","text":"typedef int meshFIM :: index ;","title":"typedef index"},{"location":"api/Classes/classmeshFIM.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classmeshFIM.html#function-computedistancetolandmarksgiventriangleinfo","text":"void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename )","title":"function ComputeDistanceToLandmarksGivenTriangleInfo"},{"location":"api/Classes/classmeshFIM.html#function-computefim","text":"void computeFIM ( TriMesh * mesh , const char * vertT_filename )","title":"function computeFIM"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturevalues","text":"void GetFeatureValues ( point x , std :: vector < float > & vals )","title":"function GetFeatureValues"},{"location":"api/Classes/classmeshFIM.html#function-readfaceindexmap","text":"void ReadFaceIndexMap ( const char * infilename )","title":"function ReadFaceIndexMap"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturefromfile","text":"void ReadFeatureFromFile ( const char * infilename )","title":"function ReadFeatureFromFile"},{"location":"api/Classes/classmeshFIM.html#function-readfeaturegradientfromfile","text":"void ReadFeatureGradientFromFile ( const char * infilename )","title":"function ReadFeatureGradientFromFile"},{"location":"api/Classes/classmeshFIM.html#function-getfeaturederivative","text":"point GetFeatureDerivative ( point p , int fIndex )","title":"function GetFeatureDerivative"},{"location":"api/Classes/classmeshFIM.html#function-need_abs_curvatures","text":"void need_abs_curvatures ()","title":"function need_abs_curvatures"},{"location":"api/Classes/classmeshFIM.html#function-need_edge_lengths","text":"void need_edge_lengths ()","title":"function need_edge_lengths"},{"location":"api/Classes/classmeshFIM.html#function-need_speed","text":"void need_speed ()","title":"function need_speed"},{"location":"api/Classes/classmeshFIM.html#function-need_oneringfaces","text":"void need_oneringfaces ()","title":"function need_oneringfaces"},{"location":"api/Classes/classmeshFIM.html#function-need_kdtree","text":"void need_kdtree ()","title":"function need_kdtree"},{"location":"api/Classes/classmeshFIM.html#function-setmesh","text":"void SetMesh ( TriMesh * mesh )","title":"function SetMesh"},{"location":"api/Classes/classmeshFIM.html#function-setstopdistance","text":"inline void SetStopDistance ( float d )","title":"function SetStopDistance"},{"location":"api/Classes/classmeshFIM.html#function-setspeedtype","text":"inline void setSpeedType ( int st )","title":"function setSpeedType"},{"location":"api/Classes/classmeshFIM.html#function-meshfim","text":"inline meshFIM ()","title":"function meshFIM"},{"location":"api/Classes/classmeshFIM.html#function-meshfim_1","text":"inline ~ meshFIM ()","title":"function ~meshFIM"},{"location":"api/Classes/classmeshFIM.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classmeshFIM.html#variable-m_meshptr","text":"TriMesh * m_meshPtr ;","title":"variable m_meshPtr"},{"location":"api/Classes/classmeshFIM.html#variable-numcomputation","text":"int NumComputation ;","title":"variable NumComputation"},{"location":"api/Classes/classmeshFIM.html#variable-imageorigin","text":"float imageOrigin ;","title":"variable imageOrigin"},{"location":"api/Classes/classmeshFIM.html#variable-imagespacing","text":"float imageSpacing ;","title":"variable imageSpacing"},{"location":"api/Classes/classmeshFIM.html#variable-imagesize","text":"int imageSize ;","title":"variable imageSize"},{"location":"api/Classes/classmeshFIM.html#variable-imageindex","text":"int imageIndex ;","title":"variable imageIndex"},{"location":"api/Classes/classmeshFIM.html#variable-colors","text":"std :: vector < Color > colors ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable colors"},{"location":"api/Classes/classobject__reader.html","text":"object_reader More... #include Detailed Description class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-25 at 15:40:28 +0000","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#object_reader","text":"More... #include ","title":"object_reader"},{"location":"api/Classes/classobject__reader.html#detailed-description","text":"class object_reader ; Reads a std::vector of c++ objects. The first integer in the file is assumed to represent the number of transforms in the file. The size of each transform is determined by the templating. Updated on 2023-10-25 at 15:40:28 +0000","title":"Detailed Description"},{"location":"api/Classes/classobject__writer.html","text":"object_writer Updated on 2023-10-25 at 15:40:28 +0000","title":"object_writer"},{"location":"api/Classes/classobject__writer.html#object_writer","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"object_writer"},{"location":"api/Classes/classquatd.html","text":"quatd Public Functions Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t) Public Attributes Name double x double y double z double w Public Functions Documentation function quatd inline quatd () function quatd inline quatd ( const double angle , vec3d v ) function quatd inline quatd ( vec3d v1 , vec3d v2 ) function quatd inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) function operator!= inline bool operator != ( const quatd & q ) function operator- inline quatd operator - () function operator+ inline quatd operator + ( const quatd & q ) const function operator- inline quatd operator - ( const quatd & q ) const function operator+= inline quatd & operator += ( const quatd & q ) function operator-= inline quatd & operator -= ( const quatd & q ) function operator* inline quatd operator * ( const quatd & q ) const function operator*= inline quatd & operator *= ( const quatd & q ) function operator* inline quatd operator * ( const double a ) const function operator/ inline quatd operator / ( const double a ) const function operator/= inline quatd & operator /= ( const double a ) function Conjugate inline quatd Conjugate () const function Norm inline double Norm () const function MakeUnit inline void MakeUnit () function Inverse inline quatd Inverse () const function DotProduct inline double DotProduct ( const quatd & q ) const function GetVector inline vec3d GetVector () const function GetAngle inline double GetAngle () const function RotateVector inline void RotateVector ( vec3d & v ) const function operator* inline vec3d operator * ( const vec3d & r ) function operator* inline mat3d operator * ( mat3d m ) function RotateVectorP inline void RotateVectorP ( double * v , double * r ) const function dot static inline double dot ( quatd & q1 , quatd & q2 ) function lerp static inline quatd lerp ( quatd & q1 , quatd & q2 , double t ) function slerp static quatd slerp ( quatd & q1 , quatd & q2 , double t ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable w double w ; Updated on 2023-10-25 at 15:40:28 +0000","title":"quatd"},{"location":"api/Classes/classquatd.html#quatd","text":"","title":"quatd"},{"location":"api/Classes/classquatd.html#public-functions","text":"Name quatd () quatd (const double angle, vec3d v) quatd ( vec3d v1, vec3d v2) quatd (const double qx, const double qy, const double qz, const double qw =1.0) bool operator!= (const quatd & q) quatd operator- () quatd operator+ (const quatd & q) const quatd operator- (const quatd & q) const quatd & operator+= (const quatd & q) quatd & operator-= (const quatd & q) quatd operator* (const quatd & q) const quatd & operator*= (const quatd & q) quatd operator* (const double a) const quatd operator/ (const double a) const quatd & operator/= (const double a) quatd Conjugate () const double Norm () const void MakeUnit () quatd Inverse () const double DotProduct (const quatd & q) const vec3d GetVector () const double GetAngle () const void RotateVector ( vec3d & v) const vec3d operator* (const vec3d & r) mat3d operator* ( mat3d m) void RotateVectorP (double * v, double * r) const double dot ( quatd & q1, quatd & q2) quatd lerp ( quatd & q1, quatd & q2, double t) quatd slerp ( quatd & q1, quatd & q2, double t)","title":"Public Functions"},{"location":"api/Classes/classquatd.html#public-attributes","text":"Name double x double y double z double w","title":"Public Attributes"},{"location":"api/Classes/classquatd.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classquatd.html#function-quatd","text":"inline quatd ()","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_1","text":"inline quatd ( const double angle , vec3d v )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_2","text":"inline quatd ( vec3d v1 , vec3d v2 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-quatd_3","text":"inline quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 )","title":"function quatd"},{"location":"api/Classes/classquatd.html#function-operator","text":"inline bool operator != ( const quatd & q )","title":"function operator!="},{"location":"api/Classes/classquatd.html#function-operator-","text":"inline quatd operator - ()","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_1","text":"inline quatd operator + ( const quatd & q ) const","title":"function operator+"},{"location":"api/Classes/classquatd.html#function-operator-_1","text":"inline quatd operator - ( const quatd & q ) const","title":"function operator-"},{"location":"api/Classes/classquatd.html#function-operator_2","text":"inline quatd & operator += ( const quatd & q )","title":"function operator+="},{"location":"api/Classes/classquatd.html#function-operator-_2","text":"inline quatd & operator -= ( const quatd & q )","title":"function operator-="},{"location":"api/Classes/classquatd.html#function-operator_3","text":"inline quatd operator * ( const quatd & q ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_4","text":"inline quatd & operator *= ( const quatd & q )","title":"function operator*="},{"location":"api/Classes/classquatd.html#function-operator_5","text":"inline quatd operator * ( const double a ) const","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_6","text":"inline quatd operator / ( const double a ) const","title":"function operator/"},{"location":"api/Classes/classquatd.html#function-operator_7","text":"inline quatd & operator /= ( const double a )","title":"function operator/="},{"location":"api/Classes/classquatd.html#function-conjugate","text":"inline quatd Conjugate () const","title":"function Conjugate"},{"location":"api/Classes/classquatd.html#function-norm","text":"inline double Norm () const","title":"function Norm"},{"location":"api/Classes/classquatd.html#function-makeunit","text":"inline void MakeUnit ()","title":"function MakeUnit"},{"location":"api/Classes/classquatd.html#function-inverse","text":"inline quatd Inverse () const","title":"function Inverse"},{"location":"api/Classes/classquatd.html#function-dotproduct","text":"inline double DotProduct ( const quatd & q ) const","title":"function DotProduct"},{"location":"api/Classes/classquatd.html#function-getvector","text":"inline vec3d GetVector () const","title":"function GetVector"},{"location":"api/Classes/classquatd.html#function-getangle","text":"inline double GetAngle () const","title":"function GetAngle"},{"location":"api/Classes/classquatd.html#function-rotatevector","text":"inline void RotateVector ( vec3d & v ) const","title":"function RotateVector"},{"location":"api/Classes/classquatd.html#function-operator_8","text":"inline vec3d operator * ( const vec3d & r )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-operator_9","text":"inline mat3d operator * ( mat3d m )","title":"function operator*"},{"location":"api/Classes/classquatd.html#function-rotatevectorp","text":"inline void RotateVectorP ( double * v , double * r ) const","title":"function RotateVectorP"},{"location":"api/Classes/classquatd.html#function-dot","text":"static inline double dot ( quatd & q1 , quatd & q2 )","title":"function dot"},{"location":"api/Classes/classquatd.html#function-lerp","text":"static inline quatd lerp ( quatd & q1 , quatd & q2 , double t )","title":"function lerp"},{"location":"api/Classes/classquatd.html#function-slerp","text":"static quatd slerp ( quatd & q1 , quatd & q2 , double t )","title":"function slerp"},{"location":"api/Classes/classquatd.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classquatd.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classquatd.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classquatd.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classquatd.html#variable-w","text":"double w ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable w"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html","text":"shapeworks::AnalysisTool Inherits from QWidget Public Types Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType Public Slots Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed () Public Signals Name void update_view () void pca_update () void progress (int ) void reconstruction_complete () Public Functions Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type () Public Attributes Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C Public Types Documentation enum GroupAnalysisType Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3 enum McaMode Enumerator Value Description Vanilla Within Between using AlignmentType using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ; using PointType using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ; Public Slots Documentation slot on_tabWidget_currentChanged void on_tabWidget_currentChanged () slot handle_analysis_options void handle_analysis_options () slot handle_median void handle_median () slot on_mean_button_clicked void on_mean_button_clicked () slot on_group1_button_clicked void on_group1_button_clicked () slot on_group2_button_clicked void on_group2_button_clicked () slot on_difference_button_clicked void on_difference_button_clicked () slot on_pcaSlider_valueChanged void on_pcaSlider_valueChanged () slot on_group_slider_valueChanged void on_group_slider_valueChanged () slot on_pcaModeSpinBox_valueChanged void on_pcaModeSpinBox_valueChanged ( int i ) slot handle_pca_animate_state_changed void handle_pca_animate_state_changed () slot handle_pca_timer void handle_pca_timer () slot handle_group_animate_state_changed void handle_group_animate_state_changed () slot handle_group_timer void handle_group_timer () slot handle_reconstruction_complete void handle_reconstruction_complete () slot on_reconstructionButton_clicked void on_reconstructionButton_clicked () slot set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. slot get_display_feature_map std :: string get_display_feature_map () slot group_changed void group_changed () slot groups_active bool groups_active () slot on_view_open_button_toggled void on_view_open_button_toggled () slot on_surface_open_button_toggled void on_surface_open_button_toggled () slot on_metrics_open_button_toggled void on_metrics_open_button_toggled () slot is_group_active bool is_group_active ( int shape_index ) slot reconstruction_method_changed void reconstruction_method_changed () slot initialize_mesh_warper void initialize_mesh_warper () slot group_p_values_clicked void group_p_values_clicked () slot network_analysis_clicked void network_analysis_clicked () slot handle_eval_thread_complete void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) slot handle_eval_thread_progress void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ) slot handle_eval_particle_normals_progress void handle_eval_particle_normals_progress ( float progress ) slot handle_eval_particle_normals_complete void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ) slot handle_group_pvalues_complete void handle_group_pvalues_complete () slot handle_alignment_changed void handle_alignment_changed ( int new_alignment ) slot run_good_bad_particles void run_good_bad_particles () slot handle_lda_progress void handle_lda_progress ( double progress ) slot handle_lda_complete void handle_lda_complete () slot handle_network_analysis_progress void handle_network_analysis_progress ( int progress ) slot handle_network_analysis_complete void handle_network_analysis_complete () slot show_difference_to_mean_clicked void show_difference_to_mean_clicked () slot group_analysis_combo_changed void group_analysis_combo_changed () Public Signals Documentation signal update_view void update_view () signal pca_update void pca_update () signal progress void progress ( int ) signal reconstruction_complete void reconstruction_complete () Public Functions Documentation function AnalysisTool AnalysisTool ( Preferences & prefs ) function ~AnalysisTool ~ AnalysisTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function get_session QSharedPointer < Session > get_session () Return the session. function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function get_app inline ShapeWorksStudioApp * get_app () function set_active void set_active ( bool active ) Set if this tool is active. function get_active bool get_active () Return if this tool is active. function get_group_difference_mode bool get_group_difference_mode () function get_group_difference_vectors std :: vector < Shape :: Point > get_group_difference_vectors () function get_analysis_mode std :: string get_analysis_mode () function set_analysis_mode void set_analysis_mode ( std :: string mode ) function set_labels void set_labels ( QString which , QString value ) function get_pca_mode int get_pca_mode () function get_group_ratio double get_group_ratio () function get_pca_value double get_pca_value () function pca_animate bool pca_animate () function get_mca_level McaMode get_mca_level () const function get_sample_number int get_sample_number () function compute_stats bool compute_stats () function update_slider void update_slider () function reset_stats void reset_stats () function enable_actions void enable_actions ( bool newly_enabled = false ) function get_mean_shape_points Particles get_mean_shape_points () function get_mean_shape ShapeHandle get_mean_shape () function get_shape_points Particles get_shape_points ( int mode , double value ) function get_multi_level_shape_points Particles get_multi_level_shape_points ( int mode , double value , McaMode level ) function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) function get_mca_mode_shape ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ) function get_current_shape ShapeHandle get_current_shape () function get_stats ParticleShapeStatistics get_stats () function load_settings void load_settings () function store_settings void store_settings () function shutdown void shutdown () function export_variance_graph bool export_variance_graph ( QString filename ) function compute_shape_evaluations void compute_shape_evaluations () function get_group_analysis_type GroupAnalysisType get_group_analysis_type () Public Attributes Documentation variable MODE_ALL_SAMPLES_C static const std :: string MODE_ALL_SAMPLES_C ; variable MODE_MEAN_C static const std :: string MODE_MEAN_C ; variable MODE_PCA_C static const std :: string MODE_PCA_C ; variable MODE_SINGLE_SAMPLE_C static const std :: string MODE_SINGLE_SAMPLE_C ; variable MODE_REGRESSION_C static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#shapeworksanalysistool","text":"Inherits from QWidget","title":"shapeworks::AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types","text":"Name enum GroupAnalysisType enum McaMode using Analyze::AlignmentType AlignmentType using itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots","text":"Name void on_tabWidget_currentChanged () void handle_analysis_options () void handle_median () void on_mean_button_clicked () void on_group1_button_clicked () void on_group2_button_clicked () void on_difference_button_clicked () void on_pcaSlider_valueChanged () void on_group_slider_valueChanged () void on_pcaModeSpinBox_valueChanged (int i) void handle_pca_animate_state_changed () void handle_pca_timer () void handle_group_animate_state_changed () void handle_group_timer () void handle_reconstruction_complete () void on_reconstructionButton_clicked () void set_feature_map (const std::string & feature_map) Set the currently selected feature map. std::string get_display_feature_map () void group_changed () bool groups_active () void on_view_open_button_toggled () void on_surface_open_button_toggled () void on_metrics_open_button_toggled () bool is_group_active (int shape_index) void reconstruction_method_changed () void initialize_mesh_warper () void group_p_values_clicked () void network_analysis_clicked () void handle_eval_thread_complete (ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) void handle_eval_thread_progress (ShapeEvaluationJob::JobType job_type, float progress) void handle_eval_particle_normals_progress (float progress) void handle_eval_particle_normals_complete (std::vector< bool > good_bad) void handle_group_pvalues_complete () void handle_alignment_changed (int new_alignment) void run_good_bad_particles () void handle_lda_progress (double progress) void handle_lda_complete () void handle_network_analysis_progress (int progress) void handle_network_analysis_complete () void show_difference_to_mean_clicked () void group_analysis_combo_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals","text":"Name void update_view () void pca_update () void progress (int ) void reconstruction_complete ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions","text":"Name AnalysisTool ( Preferences & prefs) ~AnalysisTool () void set_session (QSharedPointer< Session > session) set the pointer to the session QSharedPointer< Session > get_session () Return the session. void set_app ( ShapeWorksStudioApp * app) set the pointer to the application ShapeWorksStudioApp * get_app () void set_active (bool active) Set if this tool is active. bool get_active () Return if this tool is active. bool get_group_difference_mode () std::vector< Shape::Point > get_group_difference_vectors () std::string get_analysis_mode () void set_analysis_mode (std::string mode) void set_labels (QString which, QString value) int get_pca_mode () double get_group_ratio () double get_pca_value () bool pca_animate () McaMode get_mca_level () const int get_sample_number () bool compute_stats () void update_slider () void reset_stats () void enable_actions (bool newly_enabled =false) Particles get_mean_shape_points () ShapeHandle get_mean_shape () Particles get_shape_points (int mode, double value) Particles get_multi_level_shape_points (int mode, double value, McaMode level) ShapeHandle get_mode_shape (int mode, double value) ShapeHandle get_mca_mode_shape (int mode, double value, McaMode level) ShapeHandle get_current_shape () ParticleShapeStatistics get_stats () void load_settings () void store_settings () void shutdown () bool export_variance_graph (QString filename) void compute_shape_evaluations () GroupAnalysisType get_group_analysis_type ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes","text":"Name const std::string MODE_ALL_SAMPLES_C const std::string MODE_MEAN_C const std::string MODE_PCA_C const std::string MODE_SINGLE_SAMPLE_C const std::string MODE_REGRESSION_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-groupanalysistype","text":"Enumerator Value Description None 0 Pvalues 1 NetworkAnalysis 2 LDA 3","title":"enum GroupAnalysisType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#enum-mcamode","text":"Enumerator Value Description Vanilla Within Between","title":"enum McaMode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-alignmenttype","text":"using shapeworks :: AnalysisTool :: AlignmentType = Analyze :: AlignmentType ;","title":"using AlignmentType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#using-pointtype","text":"using shapeworks :: AnalysisTool :: PointType = itk :: Point < double , 3 > ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_tabwidget_currentchanged","text":"void on_tabWidget_currentChanged ()","title":"slot on_tabWidget_currentChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_analysis_options","text":"void handle_analysis_options ()","title":"slot handle_analysis_options"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_median","text":"void handle_median ()","title":"slot handle_median"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_mean_button_clicked","text":"void on_mean_button_clicked ()","title":"slot on_mean_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group1_button_clicked","text":"void on_group1_button_clicked ()","title":"slot on_group1_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group2_button_clicked","text":"void on_group2_button_clicked ()","title":"slot on_group2_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_difference_button_clicked","text":"void on_difference_button_clicked ()","title":"slot on_difference_button_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcaslider_valuechanged","text":"void on_pcaSlider_valueChanged ()","title":"slot on_pcaSlider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_group_slider_valuechanged","text":"void on_group_slider_valueChanged ()","title":"slot on_group_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_pcamodespinbox_valuechanged","text":"void on_pcaModeSpinBox_valueChanged ( int i )","title":"slot on_pcaModeSpinBox_valueChanged"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_animate_state_changed","text":"void handle_pca_animate_state_changed ()","title":"slot handle_pca_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_pca_timer","text":"void handle_pca_timer ()","title":"slot handle_pca_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_animate_state_changed","text":"void handle_group_animate_state_changed ()","title":"slot handle_group_animate_state_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_timer","text":"void handle_group_timer ()","title":"slot handle_group_timer"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_reconstructionbutton_clicked","text":"void on_reconstructionButton_clicked ()","title":"slot on_reconstructionButton_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"slot set_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-get_display_feature_map","text":"std :: string get_display_feature_map ()","title":"slot get_display_feature_map"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_changed","text":"void group_changed ()","title":"slot group_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-groups_active","text":"bool groups_active ()","title":"slot groups_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_view_open_button_toggled","text":"void on_view_open_button_toggled ()","title":"slot on_view_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_surface_open_button_toggled","text":"void on_surface_open_button_toggled ()","title":"slot on_surface_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-on_metrics_open_button_toggled","text":"void on_metrics_open_button_toggled ()","title":"slot on_metrics_open_button_toggled"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-is_group_active","text":"bool is_group_active ( int shape_index )","title":"slot is_group_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-reconstruction_method_changed","text":"void reconstruction_method_changed ()","title":"slot reconstruction_method_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-initialize_mesh_warper","text":"void initialize_mesh_warper ()","title":"slot initialize_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_p_values_clicked","text":"void group_p_values_clicked ()","title":"slot group_p_values_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-network_analysis_clicked","text":"void network_analysis_clicked ()","title":"slot network_analysis_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_complete","text":"void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"slot handle_eval_thread_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_thread_progress","text":"void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress )","title":"slot handle_eval_thread_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_progress","text":"void handle_eval_particle_normals_progress ( float progress )","title":"slot handle_eval_particle_normals_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_eval_particle_normals_complete","text":"void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad )","title":"slot handle_eval_particle_normals_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_group_pvalues_complete","text":"void handle_group_pvalues_complete ()","title":"slot handle_group_pvalues_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ( int new_alignment )","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-run_good_bad_particles","text":"void run_good_bad_particles ()","title":"slot run_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_progress","text":"void handle_lda_progress ( double progress )","title":"slot handle_lda_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_lda_complete","text":"void handle_lda_complete ()","title":"slot handle_lda_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_progress","text":"void handle_network_analysis_progress ( int progress )","title":"slot handle_network_analysis_progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-handle_network_analysis_complete","text":"void handle_network_analysis_complete ()","title":"slot handle_network_analysis_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-show_difference_to_mean_clicked","text":"void show_difference_to_mean_clicked ()","title":"slot show_difference_to_mean_clicked"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#slot-group_analysis_combo_changed","text":"void group_analysis_combo_changed ()","title":"slot group_analysis_combo_changed"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-pca_update","text":"void pca_update ()","title":"signal pca_update"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#signal-reconstruction_complete","text":"void reconstruction_complete ()","title":"signal reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool","text":"AnalysisTool ( Preferences & prefs )","title":"function AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-analysistool_1","text":"~ AnalysisTool ()","title":"function ~AnalysisTool"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_session","text":"QSharedPointer < Session > get_session () Return the session.","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_app","text":"inline ShapeWorksStudioApp * get_app ()","title":"function get_app"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_active","text":"void set_active ( bool active ) Set if this tool is active.","title":"function set_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_active","text":"bool get_active () Return if this tool is active.","title":"function get_active"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_mode","text":"bool get_group_difference_mode ()","title":"function get_group_difference_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_difference_vectors","text":"std :: vector < Shape :: Point > get_group_difference_vectors ()","title":"function get_group_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_analysis_mode","text":"std :: string get_analysis_mode ()","title":"function get_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_analysis_mode","text":"void set_analysis_mode ( std :: string mode )","title":"function set_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-set_labels","text":"void set_labels ( QString which , QString value )","title":"function set_labels"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_mode","text":"int get_pca_mode ()","title":"function get_pca_mode"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_ratio","text":"double get_group_ratio ()","title":"function get_group_ratio"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_pca_value","text":"double get_pca_value ()","title":"function get_pca_value"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-pca_animate","text":"bool pca_animate ()","title":"function pca_animate"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_level","text":"McaMode get_mca_level () const","title":"function get_mca_level"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_sample_number","text":"int get_sample_number ()","title":"function get_sample_number"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_stats","text":"bool compute_stats ()","title":"function compute_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-update_slider","text":"void update_slider ()","title":"function update_slider"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-reset_stats","text":"void reset_stats ()","title":"function reset_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-enable_actions","text":"void enable_actions ( bool newly_enabled = false )","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points ()","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value )","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_multi_level_shape_points","text":"Particles get_multi_level_shape_points ( int mode , double value , McaMode level )","title":"function get_multi_level_shape_points"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value )","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_mca_mode_shape","text":"ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level )","title":"function get_mca_mode_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_current_shape","text":"ShapeHandle get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_stats","text":"ParticleShapeStatistics get_stats ()","title":"function get_stats"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-load_settings","text":"void load_settings ()","title":"function load_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-store_settings","text":"void store_settings ()","title":"function store_settings"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-export_variance_graph","text":"bool export_variance_graph ( QString filename )","title":"function export_variance_graph"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-compute_shape_evaluations","text":"void compute_shape_evaluations ()","title":"function compute_shape_evaluations"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#function-get_group_analysis_type","text":"GroupAnalysisType get_group_analysis_type ()","title":"function get_group_analysis_type"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_all_samples_c","text":"static const std :: string MODE_ALL_SAMPLES_C ;","title":"variable MODE_ALL_SAMPLES_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_mean_c","text":"static const std :: string MODE_MEAN_C ;","title":"variable MODE_MEAN_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_pca_c","text":"static const std :: string MODE_PCA_C ;","title":"variable MODE_PCA_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_single_sample_c","text":"static const std :: string MODE_SINGLE_SAMPLE_C ;","title":"variable MODE_SINGLE_SAMPLE_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisTool.html#variable-mode_regression_c","text":"static const std :: string MODE_REGRESSION_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable MODE_REGRESSION_C"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html","text":"shapeworks::AnalysisUtils Public Functions Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain) Public Functions Documentation function get_local_particle_system static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#shapeworksanalysisutils","text":"","title":"shapeworks::AnalysisUtils"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions","text":"Name ParticleSystemEvaluation get_local_particle_system ( Session * session, int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalysisUtils.html#function-get_local_particle_system","text":"static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Analyze.html","text":"shapeworks::Analyze High level analyze API. More... #include Public Types Name enum AlignmentType Public Functions Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain) Detailed Description class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project . Public Types Documentation enum AlignmentType Enumerator Value Description Global -2 Local -1 Public Functions Documentation function Analyze Analyze ( ProjectHandle project ) function run_offline_analysis void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile. function get_shapes ShapeList get_shapes () Return the list of shapes. function get_num_subjects int get_num_subjects () Return the number of subjects. function get_num_modes int get_num_modes () Return the number of modes. function get_num_particles int get_num_particles () Return the number of particles. function get_mean_shape_points Particles get_mean_shape_points () Return the mean shape. function get_mean_shape ShapeHandle get_mean_shape () Return the mean shape. function get_group_shape_particles Particles get_group_shape_particles ( double ratio ) function get_group_shape ShapeHandle get_group_shape ( double ratio ) function get_shape_points Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value. function get_mode_shape ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value. function groups_active inline bool groups_active () function create_shape_from_points ShapeHandle create_shape_from_points ( Particles points ) function get_subject_features Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ) function set_group_selection void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ) function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#shapeworksanalyze","text":"High level analyze API. More... #include ","title":"shapeworks::Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types","text":"Name enum AlignmentType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions","text":"Name Analyze (ProjectHandle project) void run_offline_analysis (std::string outfile, float range, float steps) Run offline analysis, saving results to outfile. ShapeList get_shapes () Return the list of shapes. int get_num_subjects () Return the number of subjects. int get_num_modes () Return the number of modes. int get_num_particles () Return the number of particles. Particles get_mean_shape_points () Return the mean shape. ShapeHandle get_mean_shape () Return the mean shape. Particles get_group_shape_particles (double ratio) ShapeHandle get_group_shape (double ratio) Particles get_shape_points (int mode, double value) Return the particles for a given mode and value. ShapeHandle get_mode_shape (int mode, double value) Return the shape for a given mode and value. bool groups_active () ShapeHandle create_shape_from_points ( Particles points) Eigen::VectorXf get_subject_features (int subject, std::string feature_name) void set_group_selection (std::string group_name, std::string group1, std::string group2) ParticleSystemEvaluation get_local_particle_system (int domain)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#detailed-description","text":"class shapeworks :: Analyze ; High level analyze API. The Analyze class operates on a Project .","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#enum-alignmenttype","text":"Enumerator Value Description Global -2 Local -1","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-analyze","text":"Analyze ( ProjectHandle project )","title":"function Analyze"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-run_offline_analysis","text":"void run_offline_analysis ( std :: string outfile , float range , float steps ) Run offline analysis, saving results to outfile.","title":"function run_offline_analysis"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shapes","text":"ShapeList get_shapes () Return the list of shapes.","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_subjects","text":"int get_num_subjects () Return the number of subjects.","title":"function get_num_subjects"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_modes","text":"int get_num_modes () Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_num_particles","text":"int get_num_particles () Return the number of particles.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape_points","text":"Particles get_mean_shape_points () Return the mean shape.","title":"function get_mean_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape () Return the mean shape.","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape_particles","text":"Particles get_group_shape_particles ( double ratio )","title":"function get_group_shape_particles"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_group_shape","text":"ShapeHandle get_group_shape ( double ratio )","title":"function get_group_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_shape_points","text":"Particles get_shape_points ( int mode , double value ) Return the particles for a given mode and value.","title":"function get_shape_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_mode_shape","text":"ShapeHandle get_mode_shape ( int mode , double value ) Return the shape for a given mode and value.","title":"function get_mode_shape"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-groups_active","text":"inline bool groups_active ()","title":"function groups_active"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-create_shape_from_points","text":"ShapeHandle create_shape_from_points ( Particles points )","title":"function create_shape_from_points"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_subject_features","text":"Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name )","title":"function get_subject_features"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-set_group_selection","text":"void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 )","title":"function set_group_selection"},{"location":"api/Classes/classshapeworks_1_1Analyze.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html","text":"shapeworks::AnalyzeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#shapeworksanalyzecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::AnalyzeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:26 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html","text":"shapeworks::ColorMap Public Functions Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color) Public Attributes Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_ Public Functions Documentation function construct_lookup_table void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ) function set_discrete_mode inline void set_discrete_mode ( bool discrete_mode ) function set_reverse_mode inline void set_reverse_mode ( bool reverse_mode ) function convert static vtkColor3ub convert ( QColor color ) Public Attributes Documentation variable name_ QString name_ ; variable color_series_ vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#shapeworkscolormap","text":"","title":"shapeworks::ColorMap"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions","text":"Name void construct_lookup_table (vtkSmartPointer< vtkLookupTable > lut) void set_discrete_mode (bool discrete_mode) void set_reverse_mode (bool reverse_mode) vtkColor3ub convert (QColor color)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes","text":"Name QString name_ vtkSmartPointer< vtkColorSeries > color_series_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-construct_lookup_table","text":"void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut )","title":"function construct_lookup_table"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_discrete_mode","text":"inline void set_discrete_mode ( bool discrete_mode )","title":"function set_discrete_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-set_reverse_mode","text":"inline void set_reverse_mode ( bool reverse_mode )","title":"function set_reverse_mode"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#function-convert","text":"static vtkColor3ub convert ( QColor color )","title":"function convert"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-name_","text":"QString name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1ColorMap.html#variable-color_series_","text":"vtkSmartPointer < vtkColorSeries > color_series_ ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable color_series_"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html","text":"shapeworks::ColorMaps Inherits from std::vector< ColorMap > Public Functions Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index) Public Functions Documentation function ColorMaps ColorMaps () function get_color_series inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) function get_color_map inline ColorMap get_color_map ( int index ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#shapeworkscolormaps","text":"Inherits from std::vector< ColorMap >","title":"shapeworks::ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions","text":"Name ColorMaps () vtkSmartPointer< vtkColorSeries > get_color_series (int index) ColorMap get_color_map (int index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-colormaps","text":"ColorMaps ()","title":"function ColorMaps"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_series","text":"inline vtkSmartPointer < vtkColorSeries > get_color_series ( int index )","title":"function get_color_series"},{"location":"api/Classes/classshapeworks_1_1ColorMaps.html#function-get_color_map","text":"inline ColorMap get_color_map ( int index ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_color_map"},{"location":"api/Classes/classshapeworks_1_1Command.html","text":"shapeworks::Command Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand Public Functions Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions Name virtual void buildParser () Protected Attributes Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type function name inline const std :: string name () const function usage inline const std :: string usage () const function desc inline const std :: string desc () const function parse_args std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers function run int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value Protected Functions Documentation function buildParser virtual void buildParser () Protected Attributes Documentation variable parser optparse :: OptionParser parser ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#shapeworkscommand","text":"Inherited by shapeworks::AnalyzeCommandGroup , shapeworks::GroomCommandGroup , shapeworks::ImageCommand , shapeworks::MeshCommand , shapeworks::OptimizeCommandGroup , shapeworks::ParticleSystemCommand , shapeworks::ProjectCommandGroup , shapeworks::ShapeworksCommand","title":"shapeworks::Command"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions","text":"Name virtual const std::string type () const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions","text":"Name virtual void buildParser ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes","text":"Name optparse::OptionParser parser","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Command.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-type","text":"inline virtual const std :: string type () Reimplemented by : shapeworks::ImageCommand::type , shapeworks::MeshCommand::type , shapeworks::OptimizeCommandGroup::type , shapeworks::GroomCommandGroup::type , shapeworks::AnalyzeCommandGroup::type , shapeworks::ProjectCommandGroup::type , shapeworks::ParticleSystemCommand::type , shapeworks::ShapeworksCommand::type","title":"function type"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-name","text":"inline const std :: string name () const","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-usage","text":"inline const std :: string usage () const","title":"function usage"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-desc","text":"inline const std :: string desc () const","title":"function desc"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-parse_args","text":"std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ) parses the arguments for this command, saving them in the parser and returning the leftovers","title":"function parse_args"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-run","text":"int run ( SharedCommandData & sharedData ) calls execute for this command using the parsed args, returning system exit value","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#function-buildparser","text":"virtual void buildParser ()","title":"function buildParser"},{"location":"api/Classes/classshapeworks_1_1Command.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Command.html#variable-parser","text":"optparse :: OptionParser parser ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable parser"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html","text":"shapeworks::CompareSettings Public Functions Name DisplayMode get_display_mode () bool get_mean_shape_checked () Public Attributes Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_ Public Functions Documentation function get_display_mode inline DisplayMode get_display_mode () function get_mean_shape_checked inline bool get_mean_shape_checked () Public Attributes Documentation variable compare_enabled_ bool compare_enabled_ = false ; variable surface_distance_mode_ bool surface_distance_mode_ = false ; variable original_checked_ bool original_checked_ = false ; variable groomed_checked_ bool groomed_checked_ = false ; variable reconstructed_checked_ bool reconstructed_checked_ = false ; variable mean_shape_checked_ bool mean_shape_checked_ = false ; variable opacity_ float opacity_ = 1.0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#shapeworkscomparesettings","text":"","title":"shapeworks::CompareSettings"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions","text":"Name DisplayMode get_display_mode () bool get_mean_shape_checked ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes","text":"Name bool compare_enabled_ bool surface_distance_mode_ bool original_checked_ bool groomed_checked_ bool reconstructed_checked_ bool mean_shape_checked_ float opacity_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_display_mode","text":"inline DisplayMode get_display_mode ()","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#function-get_mean_shape_checked","text":"inline bool get_mean_shape_checked ()","title":"function get_mean_shape_checked"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-compare_enabled_","text":"bool compare_enabled_ = false ;","title":"variable compare_enabled_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-surface_distance_mode_","text":"bool surface_distance_mode_ = false ;","title":"variable surface_distance_mode_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-original_checked_","text":"bool original_checked_ = false ;","title":"variable original_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-groomed_checked_","text":"bool groomed_checked_ = false ;","title":"variable groomed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-reconstructed_checked_","text":"bool reconstructed_checked_ = false ;","title":"variable reconstructed_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-mean_shape_checked_","text":"bool mean_shape_checked_ = false ;","title":"variable mean_shape_checked_"},{"location":"api/Classes/classshapeworks_1_1CompareSettings.html#variable-opacity_","text":"float opacity_ = 1.0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable opacity_"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html","text":"shapeworks::CompareWidget Inherits from QWidget Public Signals Name void settings_changed () Public Functions Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available () Public Signals Documentation signal settings_changed void settings_changed () Public Functions Documentation function CompareWidget explicit CompareWidget ( QWidget * parent = nullptr ) function ~CompareWidget ~ CompareWidget () function get_settings CompareSettings get_settings () function set_available void set_available ( DisplayMode mode , bool available ) function set_mean_shape_available void set_mean_shape_available ( bool available ) function check_any_available bool check_any_available () Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#shapeworkscomparewidget","text":"Inherits from QWidget","title":"shapeworks::CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals","text":"Name void settings_changed ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions","text":"Name CompareWidget (QWidget * parent =nullptr) ~CompareWidget () CompareSettings get_settings () void set_available (DisplayMode mode, bool available) void set_mean_shape_available (bool available) bool check_any_available ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#signal-settings_changed","text":"void settings_changed ()","title":"signal settings_changed"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget","text":"explicit CompareWidget ( QWidget * parent = nullptr )","title":"function CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-comparewidget_1","text":"~ CompareWidget ()","title":"function ~CompareWidget"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-get_settings","text":"CompareSettings get_settings ()","title":"function get_settings"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_available","text":"void set_available ( DisplayMode mode , bool available )","title":"function set_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-set_mean_shape_available","text":"void set_mean_shape_available ( bool available )","title":"function set_mean_shape_available"},{"location":"api/Classes/classshapeworks_1_1CompareWidget.html#function-check_any_available","text":"bool check_any_available () Updated on 2023-10-25 at 15:40:26 +0000","title":"function check_any_available"},{"location":"api/Classes/classshapeworks_1_1Constraint.html","text":"shapeworks::Constraint More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint Public Functions Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Name int sgn (double val) Returns the sign of the double. Protected Attributes Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better. Public Functions Documentation function isViolated inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated function print virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print function setMus inline void setMus ( std :: vector < double > inmu ) Initializes mu. function getMus inline std :: vector < double > getMus () Gets mu. function constraintGradient virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval function updateMu void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update. function lagragianGradient Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions Documentation function sgn inline int sgn ( double val ) Returns the sign of the double. Protected Attributes Documentation variable mus_ std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#shapeworksconstraint","text":"More... #include Inherited by shapeworks::FreeFormConstraint , shapeworks::PlaneConstraint","title":"shapeworks::Constraint"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions","text":"Name bool isViolated (const vnl_vector< double > & pt) const Returns if pt in vnl_vector format is violated by the constraint. virtual bool isViolated (const Eigen::Vector3d & pt) const =0 Returns if pt in Eigen format is violated by the constraint. virtual void print () const =0 Prints the constraint neatly. void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const =0 Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const =0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions","text":"Name int sgn (double val) Returns the sign of the double.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes","text":"Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#detailed-description","text":"class shapeworks :: Constraint ; This class is the general constraint class. Each instance represents a single constraint, either cutting-plane, sphere or free-form. They all inherit from this class. This class containts all the infrastructure to handle gradients and evaluations, which is shared among all constraint types. NOTE: Not actually using the augmented lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated","text":"inline bool isViolated ( const vnl_vector < double > & pt ) const Returns if pt in vnl_vector format is violated by the constraint.","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-isviolated_1","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 Returns if pt in Eigen format is violated by the constraint. Reimplemented by : shapeworks::FreeFormConstraint::isViolated , shapeworks::PlaneConstraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-print","text":"virtual void print () const = 0 Prints the constraint neatly. Reimplemented by : shapeworks::FreeFormConstraint::print , shapeworks::PlaneConstraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-setmus","text":"inline void setMus ( std :: vector < double > inmu ) Initializes mu.","title":"function setMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-getmus","text":"inline std :: vector < double > getMus () Gets mu.","title":"function getMus"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constraintgradient","text":"virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 Returns the gradient of the constraint. Reimplemented by : shapeworks::FreeFormConstraint::constraintGradient , shapeworks::PlaneConstraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplemented by : shapeworks::FreeFormConstraint::constraintEval , shapeworks::PlaneConstraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-updatemu","text":"void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ) Updates the value of mu according to the augmented lagrangian update.","title":"function updateMu"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-lagragiangradient","text":"Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better.","title":"function lagragianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#function-sgn","text":"inline int sgn ( double val ) Returns the sign of the double.","title":"function sgn"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraint.html#variable-mus_","text":"std :: vector < double > mus_ ; Mu is the lagrangian momentum term. Updated on 2023-10-25 at 15:40:26 +0000","title":"variable mus_"},{"location":"api/Classes/classshapeworks_1_1Constraints.html","text":"shapeworks::Constraints More... #include Public Types Name using itk::Point< double, 3 > Point3 Public Functions Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object. Detailed Description class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap Public Types Documentation using Point3 using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ; Public Functions Documentation function Constraints inline Constraints () Constraints are inactive when initialized. function ~Constraints inline ~ Constraints () function addPlane void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. function addFreeFormConstraint void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. function transformConstraints bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs) function transformPlanes bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints. function getPlaneConstraints inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. function getFreeformConstraint FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. function isAnyViolated bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos. function printAll void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. function violationReport std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. function violationReportData std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. function constraintsLagrangianGradient vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. function InitializeLagrangianParameters void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus. function UpdateMus void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian. function GetActive inline bool GetActive () Gets the variable active, which determines whether constraints are being used. function SetActive inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used. function read void read ( std :: string filename ) Reads in a constraint json file named filename. function write void write ( std :: string filename ) Writes out a constraint json file named filename. function hasConstraints bool hasConstraints () function clipMesh void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#shapeworksconstraints","text":"More... #include ","title":"shapeworks::Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types","text":"Name using itk::Point< double, 3 > Point3","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions","text":"Name Constraints () Constraints are inactive when initialized. ~Constraints () void addPlane (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces. void addFreeFormConstraint (std::shared_ptr< shapeworks::Mesh > mesh) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces. bool transformConstraints (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to free-form constraints (FFCs) bool transformPlanes (const vnl_matrix_fixed< double, 4, 4 > & transform) Applies transformations to cutting-plane constraints. std::vector< PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info. FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info. bool isAnyViolated (const Point3 & pos) Returns true if any constraint is violated by point pos. void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output. std::string violationReport (const Point3 & pos, size_t index) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index. std::vector< std::vector< double > > violationReportData (const Point3 & pos) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC. vnl_vector_fixed< double, 3 > constraintsLagrangianGradient (const Point3 & pos, const Point3 & prepos, double C, size_t index) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle. void InitializeLagrangianParameters (std::vector< double > mus) Initializes lagrangian parameter mus. void UpdateMus (const Point3 & pos, double C, size_t index) Updates mus, the momentum variable of the augmented lagrangian. bool GetActive () Gets the variable active, which determines whether constraints are being used. void SetActive (bool ac) Sets the variable active, which determines whether constraints are being used. void read (std::string filename) Reads in a constraint json file named filename. void write (std::string filename) Writes out a constraint json file named filename. bool hasConstraints () void clipMesh ( Mesh & mesh) Clips the mesh that has been passed into it by the constraints stored in this object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#detailed-description","text":"class shapeworks :: Constraints ; This class contains the set of boundary constraints that are appleid to the shapes in the dataset. They are used to isolate areas of interest on shape surfaces/volumes. These boundary constraints currently take the form of cutting planes, cutting spheres (deprecated), or free-form constraints (FFCs). Do not confuse these with the ApplyConstraints function found in the \"domain\" code, they refer to the action of snapping to the surface and do not serve to isolate areas of interest. Please check out Libs/Optimize/Constraints/Constraints for a constraints roadmap","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#using-point3","text":"using shapeworks :: Constraints :: Point3 = itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints","text":"inline Constraints () Constraints are inactive when initialized.","title":"function Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraints_1","text":"inline ~ Constraints ()","title":"function ~Constraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addplane","text":"void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) Adds a cutting-plane boundary constraint. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addPlane"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-addfreeformconstraint","text":"void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Adds the free-form boundary constraint, or FFC. Constraints are used to isolate areas of interest on shape surfaces.","title":"function addFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformconstraints","text":"bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to free-form constraints (FFCs)","title":"function transformConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-transformplanes","text":"bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ) Applies transformations to cutting-plane constraints.","title":"function transformPlanes"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getplaneconstraints","text":"inline std :: vector < PlaneConstraint > & getPlaneConstraints () Returns the vector that constains all plane constraints, of type PlaneConstraint . See class PlaneConstraint for more info.","title":"function getPlaneConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getfreeformconstraint","text":"FreeFormConstraint & getFreeformConstraint () Returns the free form constraint, of type FreeFormConstraint . See class FreeFormConstraint for more info.","title":"function getFreeformConstraint"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-isanyviolated","text":"bool isAnyViolated ( const Point3 & pos ) Returns true if any constraint is violated by point pos.","title":"function isAnyViolated"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-printall","text":"void printAll () Prints all constraints in a neat format. Make sure to disable multithreading if printing within to optimization to avoid jumbled output.","title":"function printAll"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreport","text":"std :: string violationReport ( const Point3 & pos , size_t index ) Prints out a comprehensive violation report with each constraint that is violated and the magnitude of such violation by point pos. Index can be 0 if one does not have the index.","title":"function violationReport"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-violationreportdata","text":"std :: vector < std :: vector < double > > violationReportData ( const Point3 & pos ) Returns the distance to every cosntraint with [0] plane, [1] sphere, and [2] FFC.","title":"function violationReportData"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-constraintslagrangiangradient","text":"vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ) Returns the constraint gradient. prepos is the current particle, pos is the particle with an optimization update applied, C can be 1, and index is the index of the particle.","title":"function constraintsLagrangianGradient"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-initializelagrangianparameters","text":"void InitializeLagrangianParameters ( std :: vector < double > mus ) Initializes lagrangian parameter mus.","title":"function InitializeLagrangianParameters"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-updatemus","text":"void UpdateMus ( const Point3 & pos , double C , size_t index ) Updates mus, the momentum variable of the augmented lagrangian.","title":"function UpdateMus"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-getactive","text":"inline bool GetActive () Gets the variable active, which determines whether constraints are being used.","title":"function GetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-setactive","text":"inline void SetActive ( bool ac ) Sets the variable active, which determines whether constraints are being used.","title":"function SetActive"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-read","text":"void read ( std :: string filename ) Reads in a constraint json file named filename.","title":"function read"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-write","text":"void write ( std :: string filename ) Writes out a constraint json file named filename.","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-hasconstraints","text":"bool hasConstraints ()","title":"function hasConstraints"},{"location":"api/Classes/classshapeworks_1_1Constraints.html#function-clipmesh","text":"void clipMesh ( Mesh & mesh ) Clips the mesh that has been passed into it by the constraints stored in this object. Updated on 2023-10-25 at 15:40:26 +0000","title":"function clipMesh"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html","text":"shapeworks::ContourDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< ContourDomain > Pointer Public Functions Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ; Public Functions Documentation function ContourDomain inline explicit ContourDomain () function ~ContourDomain inline virtual ~ ContourDomain () function SetPolyLine void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ) function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleNormalAtPoint inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradientAtPoint inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function Distance virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetPositionAfterSplit virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#shapeworkscontourdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types","text":"Name using std::shared_ptr< ContourDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions","text":"Name ContourDomain () virtual ~ContourDomain () void SetPolyLine (vtkSmartPointer< vtkPolyData > poly_data) virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const override virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual double GetSurfaceArea () const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override virtual void InvalidateParticlePosition (int idx) const override virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#using-pointer","text":"using shapeworks :: ContourDomain :: Pointer = std :: shared_ptr < ContourDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain","text":"inline explicit ContourDomain ()","title":"function ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-contourdomain_1","text":"inline virtual ~ ContourDomain ()","title":"function ~ContourDomain"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-setpolyline","text":"void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function SetPolyLine"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplenormalatpoint","text":"inline virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradientatpoint","text":"inline virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-distance","text":"virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override Reimplements : shapeworks::ParticleDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-squareddistance","text":"virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ContourDomain.html#function-getpositionaftersplit","text":"virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override Reimplements : shapeworks::ParticleDomain::GetPositionAfterSplit Updated on 2023-10-25 at 15:40:26 +0000","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html","text":"shapeworks::CorrespondenceFunction Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone () Protected Functions Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c) Public Attributes Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension Protected Attributes Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ; typedef DataType typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function SetShapeData inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix. function GetShapeData inline ShapeDataType * GetShapeData () function GetShapeData inline const ShapeDataType * GetShapeData () const function SetShapeGradient inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix. function GetShapeGradient inline ShapeGradientType * GetShapeGradient () function GetShapeGradient inline const ShapeGradientType * GetShapeGradient () const function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function CheckForNans inline bool CheckForNans ( vnl_matrix_type mat ) function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function CorrespondenceFunction inline CorrespondenceFunction () function ~CorrespondenceFunction inline virtual ~ CorrespondenceFunction () function operator= void operator = ( const CorrespondenceFunction & ) function CorrespondenceFunction CorrespondenceFunction ( const CorrespondenceFunction & ) function ComputeUpdates virtual void ComputeUpdates ( const ParticleSystem * c ) Public Attributes Documentation variable ShapeGradientType itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeData ShapeDataType :: Pointer m_ShapeData ; variable m_ShapeGradient ShapeGradientType :: Pointer m_ShapeGradient ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_Counter int m_Counter ; variable m_AttributeScales std :: vector < double > m_AttributeScales ; variable m_DomainsPerShape int m_DomainsPerShape ; variable m_AttributesPerDomain std :: vector < int > m_AttributesPerDomain ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_UseXYZ std :: vector < bool > m_UseXYZ ; variable m_UseNormals std :: vector < bool > m_UseNormals ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; variable num_dims int num_dims ; variable num_samples int num_samples ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#shapeworkscorrespondencefunction","text":"Correspondence term. #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types","text":"Name typedef CorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef ShapeDataType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions","text":"Name itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void SetShapeData (ShapeDataType * s) Access the shape matrix. ShapeDataType * GetShapeData () const ShapeDataType * GetShapeData () const void SetShapeGradient (ShapeGradientType * s) Access the shape gradient matrix. ShapeGradientType * GetShapeGradient () const ShapeGradientType * GetShapeGradient () const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) void SetMinimumVariance (double d) double GetMinimumVariance () const bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const void SetAttributeScales (const std::vector< double > & s) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void UseMeanEnergy () void UseEntropy () void SetXYZ (int i, bool val) void SetNormals (int i, bool val) bool CheckForNans (vnl_matrix_type mat) virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions","text":"Name CorrespondenceFunction () virtual ~CorrespondenceFunction () void operator= (const CorrespondenceFunction & ) CorrespondenceFunction (const CorrespondenceFunction & ) virtual void ComputeUpdates (const ParticleSystem * c)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes","text":"Name itkTypeMacro( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks::ShapeGradientMatrix ShapeGradientType constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes","text":"Name ShapeDataType::Pointer m_ShapeData ShapeGradientType::Pointer m_ShapeGradient std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue bool m_HoldMinimumVariance int m_RecomputeCovarianceInterval double m_MinimumVarianceDecayConstant int m_Counter std::vector< double > m_AttributeScales int m_DomainsPerShape std::vector< int > m_AttributesPerDomain double m_CurrentEnergy bool m_UseMeanEnergy std::vector< bool > m_UseXYZ std::vector< bool > m_UseNormals std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix int num_dims int num_samples","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name itkTypeMacro ( VectorFunction , LightObject ) virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-self","text":"typedef CorrespondenceFunction shapeworks :: CorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: CorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeDataType :: DataType shapeworks :: CorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: CorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: CorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: CorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapedata","text":"inline void SetShapeData ( ShapeDataType * s ) Access the shape matrix.","title":"function SetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata","text":"inline ShapeDataType * GetShapeData ()","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapedata_1","text":"inline const ShapeDataType * GetShapeData () const","title":"function GetShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setshapegradient","text":"inline void SetShapeGradient ( ShapeGradientType * s ) Access the shape gradient matrix.","title":"function SetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient","text":"inline ShapeGradientType * GetShapeGradient ()","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getshapegradient_1","text":"inline const ShapeGradientType * GetShapeGradient () const","title":"function GetShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-checkfornans","text":"inline bool CheckForNans ( vnl_matrix_type mat )","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction","text":"inline CorrespondenceFunction ()","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_1","text":"inline virtual ~ CorrespondenceFunction ()","title":"function ~CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-operator","text":"void operator = ( const CorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-correspondencefunction_2","text":"CorrespondenceFunction ( const CorrespondenceFunction & )","title":"function CorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#function-computeupdates","text":"virtual void ComputeUpdates ( const ParticleSystem * c )","title":"function ComputeUpdates"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-shapegradienttype","text":"itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ;","title":"variable ShapeGradientType"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapedata","text":"ShapeDataType :: Pointer m_ShapeData ;","title":"variable m_ShapeData"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_shapegradient","text":"ShapeGradientType :: Pointer m_ShapeGradient ;","title":"variable m_ShapeGradient"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributescales","text":"std :: vector < double > m_AttributeScales ;","title":"variable m_AttributeScales"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_domainspershape","text":"int m_DomainsPerShape ;","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_attributesperdomain","text":"std :: vector < int > m_AttributesPerDomain ;","title":"variable m_AttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usexyz","text":"std :: vector < bool > m_UseXYZ ;","title":"variable m_UseXYZ"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_usenormals","text":"std :: vector < bool > m_UseNormals ;","title":"variable m_UseNormals"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ;","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_dims","text":"int num_dims ;","title":"variable num_dims"},{"location":"api/Classes/classshapeworks_1_1CorrespondenceFunction.html#variable-num_samples","text":"int num_samples ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable num_samples"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html","text":"title: shapeworks::CurvatureSamplingFunction summary: Please note: This is the sampling function currently being used. shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject Protected Classes Name struct CrossDomainNeighborhood Public Types Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType Public Functions Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone () Protected Functions Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system) Public Attributes Name constexpr static int VDimension Protected Attributes Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor Additional inherited members Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature. Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ; typedef Self typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ; typedef Superclass typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ; typedef GradientNumericType typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs. typedef VectorType typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ; typedef GradientVectorType typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ; typedef MeanCurvatureCacheType typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ; typedef VnlMatrixType typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate function BeforeEvaluate virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy function ComputeKappa inline double ComputeKappa ( double mc , unsigned int d ) const function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function SetMeanCurvatureCache inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function GetMeanCurvatureCache inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const function SetRho inline void SetRho ( double g ) function GetRho inline double GetRho () const function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double w ) function GetSharedBoundaryWeight inline double GetSharedBoundaryWeight () const function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function GetSharedBoundaryEnabled inline bool GetSharedBoundaryEnabled () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone Protected Functions Documentation function CurvatureSamplingFunction inline CurvatureSamplingFunction () function ~CurvatureSamplingFunction inline virtual ~ CurvatureSamplingFunction () function operator= void operator = ( const CurvatureSamplingFunction & ) function CurvatureSamplingFunction CurvatureSamplingFunction ( const CurvatureSamplingFunction & ) function UpdateNeighborhood void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MeanCurvatureCache MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; variable m_Counter unsigned int m_Counter ; variable m_Rho double m_Rho ; variable m_avgKappa double m_avgKappa ; variable m_IsSharedBoundaryEnabled bool m_IsSharedBoundaryEnabled { false }; variable m_SharedBoundaryWeight double m_SharedBoundaryWeight { 1.0 }; variable m_CurrentSigma double m_CurrentSigma ; variable m_CurrentNeighborhood std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; variable m_MaxMoveFactor float m_MaxMoveFactor = 0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"classshapeworks 1 1CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#shapeworkscurvaturesamplingfunction","text":"Please note: This is the sampling function currently being used. More... #include Inherits from shapeworks::SamplingFunction , shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-classes","text":"Name struct CrossDomainNeighborhood","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef CurvatureSamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef SamplingFunction Superclass typedef Superclass::GradientNumericType GradientNumericType typedef Superclass::VectorType VectorType typedef Superclass::PointType PointType typedef Superclass::GradientVectorType GradientVectorType typedef MeanCurvatureContainer < TGradientNumericType, VDimension > MeanCurvatureCacheType typedef shapeworks::ImageDomainWithCurvature < TGradientNumericType >::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions","text":"Name itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const double ComputeKappa (double mc, unsigned int d) const virtual void AfterIteration () virtual void BeforeIteration () virtual double EstimateSigma (unsigned int idx, unsigned int dom, const shapeworks::ParticleDomain * domain, const PointType & pos, double initial_sigma, double precision, int & err, double & avgKappa) const void SetMeanCurvatureCache ( MeanCurvatureCacheType * s) MeanCurvatureCacheType * GetMeanCurvatureCache () const MeanCurvatureCacheType * GetMeanCurvatureCache () const void SetRho (double g) double GetRho () const void SetSharedBoundaryWeight (double w) double GetSharedBoundaryWeight () const void SetSharedBoundaryEnabled (bool enabled) bool GetSharedBoundaryEnabled () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions","text":"Name CurvatureSamplingFunction () virtual ~CurvatureSamplingFunction () void operator= (const CurvatureSamplingFunction & ) CurvatureSamplingFunction (const CurvatureSamplingFunction & ) void UpdateNeighborhood (const PointType & pos, int idx, int d, double radius, const ParticleSystem * system)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes","text":"Name MeanCurvatureCacheType::Pointer m_MeanCurvatureCache unsigned int m_Counter double m_Rho double m_avgKappa bool m_IsSharedBoundaryEnabled double m_SharedBoundaryWeight double m_CurrentSigma std::vector< CrossDomainNeighborhood > m_CurrentNeighborhood float m_MaxMoveFactor","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#additional-inherited-members","text":"Public Types inherited from shapeworks::SamplingFunction Name typedef GenericContainerArray < double > SigmaCacheType Public Functions inherited from shapeworks::SamplingFunction Name virtual void ResetBuffers () TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const Protected Functions inherited from shapeworks::SamplingFunction Name SamplingFunction () virtual ~SamplingFunction () SamplingFunction (const SamplingFunction & ) Protected Attributes inherited from shapeworks::SamplingFunction Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#detailed-description","text":"class shapeworks :: CurvatureSamplingFunction ; Please note: This is the sampling function currently being used. This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. The change in normals associated with the position is also taken into account, providing an adaptive sampling of the surface with respect to both position and extrinsic surface curvature.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: CurvatureSamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-self","text":"typedef CurvatureSamplingFunction shapeworks :: CurvatureSamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: CurvatureSamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: CurvatureSamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-superclass","text":"typedef SamplingFunction shapeworks :: CurvatureSamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientnumerictype","text":"typedef Superclass :: GradientNumericType shapeworks :: CurvatureSamplingFunction :: GradientNumericType ; Inherit some parent typedefs.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: CurvatureSamplingFunction :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: CurvatureSamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-gradientvectortype","text":"typedef Superclass :: GradientVectorType shapeworks :: CurvatureSamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-meancurvaturecachetype","text":"typedef MeanCurvatureContainer < TGradientNumericType , VDimension > shapeworks :: CurvatureSamplingFunction :: MeanCurvatureCacheType ;","title":"typedef MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#typedef-vnlmatrixtype","text":"typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType shapeworks :: CurvatureSamplingFunction :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::SamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::SamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeevaluate","text":"virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-computekappa","text":"inline double ComputeKappa ( double mc , unsigned int d ) const","title":"function ComputeKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setmeancurvaturecache","text":"inline void SetMeanCurvatureCache ( MeanCurvatureCacheType * s )","title":"function SetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getmeancurvaturecache_1","text":"inline const MeanCurvatureCacheType * GetMeanCurvatureCache () const","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setrho","text":"inline void SetRho ( double g )","title":"function SetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getrho","text":"inline double GetRho () const","title":"function GetRho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double w )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryweight","text":"inline double GetSharedBoundaryWeight () const","title":"function GetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-getsharedboundaryenabled","text":"inline bool GetSharedBoundaryEnabled () const","title":"function GetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction","text":"inline CurvatureSamplingFunction ()","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_1","text":"inline virtual ~ CurvatureSamplingFunction ()","title":"function ~CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-operator","text":"void operator = ( const CurvatureSamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-curvaturesamplingfunction_2","text":"CurvatureSamplingFunction ( const CurvatureSamplingFunction & )","title":"function CurvatureSamplingFunction"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#function-updateneighborhood","text":"void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system )","title":"function UpdateNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_meancurvaturecache","text":"MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ;","title":"variable m_MeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_counter","text":"unsigned int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_rho","text":"double m_Rho ;","title":"variable m_Rho"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_avgkappa","text":"double m_avgKappa ;","title":"variable m_avgKappa"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_issharedboundaryenabled","text":"bool m_IsSharedBoundaryEnabled { false };","title":"variable m_IsSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_sharedboundaryweight","text":"double m_SharedBoundaryWeight { 1.0 };","title":"variable m_SharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentsigma","text":"double m_CurrentSigma ;","title":"variable m_CurrentSigma"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_currentneighborhood","text":"std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ;","title":"variable m_CurrentNeighborhood"},{"location":"api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html#variable-m_maxmovefactor","text":"float m_MaxMoveFactor = 0 ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable m_MaxMoveFactor"},{"location":"api/Classes/classshapeworks_1_1DataTool.html","text":"shapeworks::DataTool Inherits from QWidget Public Slots Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked () Public Signals Name void import_button_clicked () Public Functions Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data () Public Slots Documentation slot delete_button_clicked void delete_button_clicked () slot delete_landmarks_clicked void delete_landmarks_clicked () slot set_placing_button_clicked void set_placing_button_clicked ( int id ) slot handle_landmark_mode_changed void handle_landmark_mode_changed () slot handle_constraints_mode_changed void handle_constraints_mode_changed () slot constraints_table_right_click void constraints_table_right_click ( const QPoint & point ) slot copy_ffc_clicked void copy_ffc_clicked () Public Signals Documentation signal import_button_clicked void import_button_clicked () Public Functions Documentation function DataTool DataTool ( Preferences & prefs ) function ~DataTool ~ DataTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function disable_actions void disable_actions () function enable_actions void enable_actions () function update_table void update_table () function update_landmark_table void update_landmark_table () function landmark_domain_changed void landmark_domain_changed () function constraints_domain_changed void constraints_domain_changed () function delete_planes_clicked void delete_planes_clicked () function delete_ffc_clicked void delete_ffc_clicked () function update_notes void update_notes () function get_notes std :: string get_notes () function store_data void store_data () Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#shapeworksdatatool","text":"Inherits from QWidget","title":"shapeworks::DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots","text":"Name void delete_button_clicked () void delete_landmarks_clicked () void set_placing_button_clicked (int id) void handle_landmark_mode_changed () void handle_constraints_mode_changed () void constraints_table_right_click (const QPoint & point) void copy_ffc_clicked ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals","text":"Name void import_button_clicked ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions","text":"Name DataTool ( Preferences & prefs) ~DataTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void disable_actions () void enable_actions () void update_table () void update_landmark_table () void landmark_domain_changed () void constraints_domain_changed () void delete_planes_clicked () void delete_ffc_clicked () void update_notes () std::string get_notes () void store_data ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_button_clicked","text":"void delete_button_clicked ()","title":"slot delete_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-delete_landmarks_clicked","text":"void delete_landmarks_clicked ()","title":"slot delete_landmarks_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-set_placing_button_clicked","text":"void set_placing_button_clicked ( int id )","title":"slot set_placing_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_landmark_mode_changed","text":"void handle_landmark_mode_changed ()","title":"slot handle_landmark_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-handle_constraints_mode_changed","text":"void handle_constraints_mode_changed ()","title":"slot handle_constraints_mode_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-constraints_table_right_click","text":"void constraints_table_right_click ( const QPoint & point )","title":"slot constraints_table_right_click"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#slot-copy_ffc_clicked","text":"void copy_ffc_clicked ()","title":"slot copy_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#signal-import_button_clicked","text":"void import_button_clicked ()","title":"signal import_button_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool","text":"DataTool ( Preferences & prefs )","title":"function DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-datatool_1","text":"~ DataTool ()","title":"function ~DataTool"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-disable_actions","text":"void disable_actions ()","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-enable_actions","text":"void enable_actions ()","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_table","text":"void update_table ()","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_landmark_table","text":"void update_landmark_table ()","title":"function update_landmark_table"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-landmark_domain_changed","text":"void landmark_domain_changed ()","title":"function landmark_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-constraints_domain_changed","text":"void constraints_domain_changed ()","title":"function constraints_domain_changed"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_planes_clicked","text":"void delete_planes_clicked ()","title":"function delete_planes_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-delete_ffc_clicked","text":"void delete_ffc_clicked ()","title":"function delete_ffc_clicked"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-update_notes","text":"void update_notes ()","title":"function update_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-get_notes","text":"std :: string get_notes ()","title":"function get_notes"},{"location":"api/Classes/classshapeworks_1_1DataTool.html#function-store_data","text":"void store_data () Updated on 2023-10-25 at 15:40:26 +0000","title":"function store_data"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html","text":"shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject Public Types Name enum class FileType enum class SplitType Public Functions Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Detailed Description class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object Public Types Documentation enum FileType Enumerator Value Description ID IMAGE PARTICLES enum SplitType Enumerator Value Description TRAIN TEST Public Functions Documentation function DeepSSMJob DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ) function ~DeepSSMJob ~ DeepSSMJob () function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function run_augmentation void run_augmentation () function run_training void run_training () function run_testing void run_testing () function python_message void python_message ( std :: string str ) function get_list std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#shapeworksdeepssmjob","text":"Qt Wrapper for DeepSSM. More... #include Inherits from shapeworks::Job , QObject","title":"shapeworks::DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types","text":"Name enum class FileType enum class SplitType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions","text":"Name DeepSSMJob (ProjectHandle project, DeepSSMTool::ToolMode tool_mode) ~DeepSSMJob () virtual void run () override run the job virtual QString name () override get the name of the job void run_augmentation () void run_training () void run_testing () void python_message (std::string str) std::vector< std::string > get_list (FileType file_type, SplitType split_type)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#detailed-description","text":"class shapeworks :: DeepSSMJob ; Qt Wrapper for DeepSSM. The DeepSSMJob class wraps the functionality for DeepSSM as a Studio Job object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-filetype","text":"Enumerator Value Description ID IMAGE PARTICLES","title":"enum FileType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#enum-splittype","text":"Enumerator Value Description TRAIN TEST","title":"enum SplitType"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob","text":"DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode )","title":"function DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-deepssmjob_1","text":"~ DeepSSMJob ()","title":"function ~DeepSSMJob"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_augmentation","text":"void run_augmentation ()","title":"function run_augmentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_training","text":"void run_training ()","title":"function run_training"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-run_testing","text":"void run_testing ()","title":"function run_testing"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-python_message","text":"void python_message ( std :: string str )","title":"function python_message"},{"location":"api/Classes/classshapeworks_1_1DeepSSMJob.html#function-get_list","text":"std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ) Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_list"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html","text":"shapeworks::DeepSSMParameters Public Functions Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults () Public Attributes Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C Public Functions Documentation function DeepSSMParameters explicit DeepSSMParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_aug_num_samples int get_aug_num_samples () function set_aug_num_samples void set_aug_num_samples ( int num_samples ) function get_aug_num_dims int get_aug_num_dims () function set_aug_num_dims void set_aug_num_dims ( int num_dims ) function get_training_num_dims int get_training_num_dims () function set_training_num_dims void set_training_num_dims ( int num_dims ) function get_aug_percent_variability double get_aug_percent_variability () function set_aug_percent_variability void set_aug_percent_variability ( double percent_variability ) function get_aug_sampler_type std :: string get_aug_sampler_type () function set_aug_sampler_type void set_aug_sampler_type ( std :: string sampler_type ) function get_training_epochs int get_training_epochs () function set_training_epochs void set_training_epochs ( int epochs ) function get_training_learning_rate double get_training_learning_rate () function set_training_learning_rate void set_training_learning_rate ( double rate ) function get_training_decay_learning_rate bool get_training_decay_learning_rate () function set_training_decay_learning_rate void set_training_decay_learning_rate ( bool decay ) function get_training_fine_tuning bool get_training_fine_tuning () function set_training_fine_tuning void set_training_fine_tuning ( bool fine_tuning ) function get_training_fine_tuning_epochs int get_training_fine_tuning_epochs () function set_training_fine_tuning_epochs void set_training_fine_tuning_epochs ( int epochs ) function get_training_fine_tuning_learning_rate double get_training_fine_tuning_learning_rate () function set_training_fine_tuning_learning_rate void set_training_fine_tuning_learning_rate ( double rate ) function get_training_batch_size int get_training_batch_size () function set_training_batch_size void set_training_batch_size ( int batch_size ) function get_training_split double get_training_split () function set_training_split void set_training_split ( double value ) function get_validation_split double get_validation_split () function set_validation_split void set_validation_split ( double value ) function get_testing_split double get_testing_split () function set_testing_split void set_testing_split ( double value ) function restore_split_defaults void restore_split_defaults () function restore_augmentation_defaults void restore_augmentation_defaults () function restore_training_defaults void restore_training_defaults () function restore_defaults void restore_defaults () Public Attributes Documentation variable DEEPSSM_SAMPLER_GAUSSIAN_C static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; variable DEEPSSM_SAMPLER_MIXTURE_C static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ; variable DEEPSSM_SAMPLER_KDE_C static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#shapeworksdeepssmparameters","text":"","title":"shapeworks::DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions","text":"Name DeepSSMParameters (ProjectHandle project) void save_to_project () int get_aug_num_samples () void set_aug_num_samples (int num_samples) int get_aug_num_dims () void set_aug_num_dims (int num_dims) int get_training_num_dims () void set_training_num_dims (int num_dims) double get_aug_percent_variability () void set_aug_percent_variability (double percent_variability) std::string get_aug_sampler_type () void set_aug_sampler_type (std::string sampler_type) int get_training_epochs () void set_training_epochs (int epochs) double get_training_learning_rate () void set_training_learning_rate (double rate) bool get_training_decay_learning_rate () void set_training_decay_learning_rate (bool decay) bool get_training_fine_tuning () void set_training_fine_tuning (bool fine_tuning) int get_training_fine_tuning_epochs () void set_training_fine_tuning_epochs (int epochs) double get_training_fine_tuning_learning_rate () void set_training_fine_tuning_learning_rate (double rate) int get_training_batch_size () void set_training_batch_size (int batch_size) double get_training_split () void set_training_split (double value) double get_validation_split () void set_validation_split (double value) double get_testing_split () void set_testing_split (double value) void restore_split_defaults () void restore_augmentation_defaults () void restore_training_defaults () void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes","text":"Name const std::string DEEPSSM_SAMPLER_GAUSSIAN_C const std::string DEEPSSM_SAMPLER_MIXTURE_C const std::string DEEPSSM_SAMPLER_KDE_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-deepssmparameters","text":"explicit DeepSSMParameters ( ProjectHandle project )","title":"function DeepSSMParameters"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_samples","text":"int get_aug_num_samples ()","title":"function get_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_samples","text":"void set_aug_num_samples ( int num_samples )","title":"function set_aug_num_samples"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_num_dims","text":"int get_aug_num_dims ()","title":"function get_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_num_dims","text":"void set_aug_num_dims ( int num_dims )","title":"function set_aug_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_num_dims","text":"int get_training_num_dims ()","title":"function get_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_num_dims","text":"void set_training_num_dims ( int num_dims )","title":"function set_training_num_dims"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_percent_variability","text":"double get_aug_percent_variability ()","title":"function get_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_percent_variability","text":"void set_aug_percent_variability ( double percent_variability )","title":"function set_aug_percent_variability"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_aug_sampler_type","text":"std :: string get_aug_sampler_type ()","title":"function get_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_aug_sampler_type","text":"void set_aug_sampler_type ( std :: string sampler_type )","title":"function set_aug_sampler_type"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_epochs","text":"int get_training_epochs ()","title":"function get_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_epochs","text":"void set_training_epochs ( int epochs )","title":"function set_training_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_learning_rate","text":"double get_training_learning_rate ()","title":"function get_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_learning_rate","text":"void set_training_learning_rate ( double rate )","title":"function set_training_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_decay_learning_rate","text":"bool get_training_decay_learning_rate ()","title":"function get_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_decay_learning_rate","text":"void set_training_decay_learning_rate ( bool decay )","title":"function set_training_decay_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning","text":"bool get_training_fine_tuning ()","title":"function get_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning","text":"void set_training_fine_tuning ( bool fine_tuning )","title":"function set_training_fine_tuning"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_epochs","text":"int get_training_fine_tuning_epochs ()","title":"function get_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_epochs","text":"void set_training_fine_tuning_epochs ( int epochs )","title":"function set_training_fine_tuning_epochs"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_fine_tuning_learning_rate","text":"double get_training_fine_tuning_learning_rate ()","title":"function get_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_fine_tuning_learning_rate","text":"void set_training_fine_tuning_learning_rate ( double rate )","title":"function set_training_fine_tuning_learning_rate"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_batch_size","text":"int get_training_batch_size ()","title":"function get_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_batch_size","text":"void set_training_batch_size ( int batch_size )","title":"function set_training_batch_size"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_training_split","text":"double get_training_split ()","title":"function get_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_training_split","text":"void set_training_split ( double value )","title":"function set_training_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_validation_split","text":"double get_validation_split ()","title":"function get_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_validation_split","text":"void set_validation_split ( double value )","title":"function set_validation_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-get_testing_split","text":"double get_testing_split ()","title":"function get_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-set_testing_split","text":"void set_testing_split ( double value )","title":"function set_testing_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_split_defaults","text":"void restore_split_defaults ()","title":"function restore_split_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_augmentation_defaults","text":"void restore_augmentation_defaults ()","title":"function restore_augmentation_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_training_defaults","text":"void restore_training_defaults ()","title":"function restore_training_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_gaussian_c","text":"static const std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ;","title":"variable DEEPSSM_SAMPLER_GAUSSIAN_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_mixture_c","text":"static const std :: string DEEPSSM_SAMPLER_MIXTURE_C ;","title":"variable DEEPSSM_SAMPLER_MIXTURE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMParameters.html#variable-deepssm_sampler_kde_c","text":"static const std :: string DEEPSSM_SAMPLER_KDE_C ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable DEEPSSM_SAMPLER_KDE_C"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html","text":"shapeworks::DeepSSMTool Inherits from QWidget Public Types Name enum class ToolMode Public Slots Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed () Public Signals Name void update_view () void progress (int ) Public Functions Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature () Public Types Documentation enum ToolMode Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType Public Slots Documentation slot run_clicked void run_clicked () slot restore_defaults void restore_defaults () slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) slot tab_changed void tab_changed ( int tab ) slot update_panels void update_panels () slot update_split void update_split ( QLineEdit * source ) slot handle_new_mesh void handle_new_mesh () slot training_fine_tuning_changed void training_fine_tuning_changed () Public Signals Documentation signal update_view void update_view () signal progress void progress ( int ) Public Functions Documentation function DeepSSMTool DeepSSMTool ( Preferences & prefs ) function ~DeepSSMTool ~ DeepSSMTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function set_app void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application function is_active bool is_active () Return if this tool is active. function load_params void load_params () function store_params void store_params () function shutdown void shutdown () function get_shapes ShapeList get_shapes () function resizeEvent void resizeEvent ( QResizeEvent * event ) override function get_display_feature std :: string get_display_feature () Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#shapeworksdeepssmtool","text":"Inherits from QWidget","title":"shapeworks::DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types","text":"Name enum class ToolMode","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots","text":"Name void run_clicked () void restore_defaults () void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) void tab_changed (int tab) void update_panels () void update_split (QLineEdit * source) void handle_new_mesh () void training_fine_tuning_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals","text":"Name void update_view () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions","text":"Name DeepSSMTool ( Preferences & prefs) ~DeepSSMTool () void set_session (QSharedPointer< Session > session) set the pointer to the session void set_app ( ShapeWorksStudioApp * app) set the pointer to the application bool is_active () Return if this tool is active. void load_params () void store_params () void shutdown () ShapeList get_shapes () void resizeEvent (QResizeEvent * event) override std::string get_display_feature ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#enum-toolmode","text":"Enumerator Value Description DeepSSM_SplitType DeepSSM_AugmentationType DeepSSM_TrainingType DeepSSM_TestingType","title":"enum ToolMode"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-tab_changed","text":"void tab_changed ( int tab )","title":"slot tab_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_panels","text":"void update_panels ()","title":"slot update_panels"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-update_split","text":"void update_split ( QLineEdit * source )","title":"slot update_split"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#slot-training_fine_tuning_changed","text":"void training_fine_tuning_changed ()","title":"slot training_fine_tuning_changed"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool","text":"DeepSSMTool ( Preferences & prefs )","title":"function DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-deepssmtool_1","text":"~ DeepSSMTool ()","title":"function ~DeepSSMTool"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-set_app","text":"void set_app ( ShapeWorksStudioApp * app ) set the pointer to the application","title":"function set_app"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-is_active","text":"bool is_active () Return if this tool is active.","title":"function is_active"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-load_params","text":"void load_params ()","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-store_params","text":"void store_params ()","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-shutdown","text":"void shutdown ()","title":"function shutdown"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1DeepSSMTool.html#function-get_display_feature","text":"std :: string get_display_feature () Updated on 2023-10-25 at 15:40:26 +0000","title":"function get_display_feature"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html","text":"shapeworks::DisentangledCorrespondenceFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type Public Functions Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM. Public Types Documentation typedef Self typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ; typedef shared_vnl_matrix_array_type typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DisentangledCorrespondenceFunction inline DisentangledCorrespondenceFunction () function ~DisentangledCorrespondenceFunction inline virtual ~ DisentangledCorrespondenceFunction () function operator= void operator = ( const DisentangledCorrespondenceFunction & ) function DisentangledCorrespondenceFunction DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ) function ComputeCovarianceMatrices virtual void ComputeCovarianceMatrices () function Initialize inline void Initialize () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_MinimumEigenValue_time_cohort std :: vector < double > m_MinimumEigenValue_time_cohort ; variable m_MinimumEigenValue_shape_cohort std :: vector < double > m_MinimumEigenValue_shape_cohort ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_InverseCovMatrices_time_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ; variable m_InverseCovMatrices_shape_cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ; variable m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; variable m_points_mean_shape_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort ; variable m_Time_PointsUpdate shared_vnl_matrix_array_type m_Time_PointsUpdate ; variable m_Shape_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#shapeworksdisentangledcorrespondencefunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types","text":"Name typedef DisentangledCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type typedef std::shared_ptr< std::vector< vnl_matrix_type > > shared_vnl_matrix_array_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions","text":"Name DisentangledCorrespondenceFunction () virtual ~DisentangledCorrespondenceFunction () void operator= (const DisentangledCorrespondenceFunction & ) DisentangledCorrespondenceFunction (const DisentangledCorrespondenceFunction & ) virtual void ComputeCovarianceMatrices () void Initialize ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix double m_MinimumVariance double m_MinimumEigenValue std::vector< double > m_MinimumEigenValue_time_cohort std::vector< double > m_MinimumEigenValue_shape_cohort double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_time_cohort std::shared_ptr< std::vector< Eigen::MatrixXd > > m_InverseCovMatrices_shape_cohort shared_vnl_matrix_array_type m_points_mean_time_cohort shared_vnl_matrix_array_type m_points_mean_shape_cohort shared_vnl_matrix_array_type m_Time_PointsUpdate shared_vnl_matrix_array_type m_Shape_PointsUpdate","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#detailed-description","text":"class shapeworks :: DisentangledCorrespondenceFunction ; This class implements the Correspondence Term where the entropy computation is disentangled across time and shape domain, and builds a Sapatiotemporal SSM.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-self","text":"typedef DisentangledCorrespondenceFunction shapeworks :: DisentangledCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DisentangledCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DisentangledCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DisentangledCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: DisentangledCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: DisentangledCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DisentangledCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: DisentangledCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: DisentangledCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#typedef-shared_vnl_matrix_array_type","text":"typedef std :: shared_ptr < std :: vector < vnl_matrix_type > > shapeworks :: DisentangledCorrespondenceFunction :: shared_vnl_matrix_array_type ;","title":"typedef shared_vnl_matrix_array_type"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction","text":"inline DisentangledCorrespondenceFunction ()","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_1","text":"inline virtual ~ DisentangledCorrespondenceFunction ()","title":"function ~DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-operator","text":"void operator = ( const DisentangledCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-disentangledcorrespondencefunction_2","text":"DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & )","title":"function DisentangledCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-computecovariancematrices","text":"virtual void ComputeCovarianceMatrices ()","title":"function ComputeCovarianceMatrices"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_time_cohort","text":"std :: vector < double > m_MinimumEigenValue_time_cohort ;","title":"variable m_MinimumEigenValue_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumeigenvalue_shape_cohort","text":"std :: vector < double > m_MinimumEigenValue_shape_cohort ;","title":"variable m_MinimumEigenValue_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_time_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_time_cohort ;","title":"variable m_InverseCovMatrices_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_inversecovmatrices_shape_cohort","text":"std :: shared_ptr < std :: vector < Eigen :: MatrixXd > > m_InverseCovMatrices_shape_cohort ;","title":"variable m_InverseCovMatrices_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_time_cohort","text":"shared_vnl_matrix_array_type m_points_mean_time_cohort ;","title":"variable m_points_mean_time_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_points_mean_shape_cohort","text":"shared_vnl_matrix_array_type m_points_mean_shape_cohort ;","title":"variable m_points_mean_shape_cohort"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_time_pointsupdate","text":"shared_vnl_matrix_array_type m_Time_PointsUpdate ;","title":"variable m_Time_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html#variable-m_shape_pointsupdate","text":"shared_vnl_matrix_array_type m_Shape_PointsUpdate ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_Shape_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html","text":"shapeworks::DualVectorFunction More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType Public Functions Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone () Protected Functions Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff(). Public Types Documentation typedef Self typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ; typedef VectorType typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type. Public Functions Documentation function itkTypeMacro itkTypeMacro ( DualVectorFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function EnergyA inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function EnergyB inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const function Energy inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber function SetFunctionA inline void SetFunctionA ( VectorFunction * o ) function GetFunctionA inline VectorFunction * GetFunctionA () function GetFunctionB inline VectorFunction * GetFunctionB () function SetFunctionB inline void SetFunctionB ( VectorFunction * o ) function SetAOn inline void SetAOn () Turn each term on and off. function SetAOff inline void SetAOff () function SetAOn inline void SetAOn ( bool s ) function GetAOn inline bool GetAOn () const function SetBOn inline void SetBOn () function SetBOff inline void SetBOff () function SetBOn inline void SetBOn ( bool s ) function GetBOn inline bool GetBOn () const function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0. function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling function SetRelativeGradientScaling inline void SetRelativeGradientScaling ( double r ) function GetRelativeGradientScaling inline double GetRelativeGradientScaling () const function GetAverageGradMagA inline double GetAverageGradMagA () const function GetAverageGradMagB inline double GetAverageGradMagB () const function GetAverageEnergyA inline double GetAverageEnergyA () const function GetAverageEnergyB inline double GetAverageEnergyB () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function DualVectorFunction inline DualVectorFunction () function ~DualVectorFunction inline virtual ~ DualVectorFunction () function operator= void operator = ( const DualVectorFunction & ) function DualVectorFunction DualVectorFunction ( const DualVectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_AOn bool m_AOn ; variable m_BOn bool m_BOn ; variable m_RelativeGradientScaling double m_RelativeGradientScaling ; variable m_RelativeEnergyScaling double m_RelativeEnergyScaling ; variable m_AverageGradMagA double m_AverageGradMagA ; variable m_AverageGradMagB double m_AverageGradMagB ; variable m_AverageEnergyA double m_AverageEnergyA ; variable m_AverageEnergyB double m_AverageEnergyB ; variable m_Counter double m_Counter ; variable m_FunctionA VectorFunction :: Pointer m_FunctionA ; variable m_FunctionB VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#shapeworksdualvectorfunction","text":"More... #include Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types","text":"Name typedef DualVectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef Superclass::VectorType VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions","text":"Name itkTypeMacro ( DualVectorFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove) const virtual double EnergyA (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double EnergyB (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual double Energy (unsigned int idx, unsigned int d, const ParticleSystem * system) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxmove, double & energy) const virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void AfterIteration () virtual void BeforeIteration () virtual void SetParticleSystem ( ParticleSystem * p) virtual void SetDomainNumber (unsigned int i) void SetFunctionA ( VectorFunction * o) VectorFunction * GetFunctionA () VectorFunction * GetFunctionB () void SetFunctionB ( VectorFunction * o) void SetAOn () void SetAOff () void SetAOn (bool s) bool GetAOn () const void SetBOn () void SetBOff () void SetBOn (bool s) bool GetBOn () const virtual void SetRelativeEnergyScaling (double r) override virtual double GetRelativeEnergyScaling () const override void SetRelativeGradientScaling (double r) double GetRelativeGradientScaling () const double GetAverageGradMagA () const double GetAverageGradMagB () const double GetAverageEnergyA () const double GetAverageEnergyB () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions","text":"Name DualVectorFunction () virtual ~DualVectorFunction () void operator= (const DualVectorFunction & ) DualVectorFunction (const DualVectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes","text":"Name bool m_AOn bool m_BOn double m_RelativeGradientScaling double m_RelativeEnergyScaling double m_AverageGradMagA double m_AverageGradMagB double m_AverageEnergyA double m_AverageEnergyB double m_Counter VectorFunction::Pointer m_FunctionA VectorFunction::Pointer m_FunctionB","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual ParticleSystem * GetParticleSystem () const virtual int GetDomainNumber () const Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#detailed-description","text":"class shapeworks :: DualVectorFunction ; This class combines the results of evaluating 2 VectorFunction and presents the interface of a single function evaluation. Optionally, only the first function can be used by calling SetLinkOff().","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-self","text":"typedef DualVectorFunction shapeworks :: DualVectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: DualVectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: DualVectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: DualVectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: DualVectorFunction :: VectorType ; Vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( DualVectorFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energya","text":"inline virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energyb","text":"inline virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const","title":"function EnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplements : shapeworks::VectorFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplements : shapeworks::VectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplements : shapeworks::VectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctiona","text":"inline void SetFunctionA ( VectorFunction * o )","title":"function SetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctiona","text":"inline VectorFunction * GetFunctionA ()","title":"function GetFunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getfunctionb","text":"inline VectorFunction * GetFunctionB ()","title":"function GetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setfunctionb","text":"inline void SetFunctionB ( VectorFunction * o )","title":"function SetFunctionB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon","text":"inline void SetAOn () Turn each term on and off.","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaoff","text":"inline void SetAOff ()","title":"function SetAOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setaon_1","text":"inline void SetAOn ( bool s )","title":"function SetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaon","text":"inline bool GetAOn () const","title":"function GetAOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon","text":"inline void SetBOn ()","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setboff","text":"inline void SetBOff ()","title":"function SetBOff"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setbon_1","text":"inline void SetBOn ( bool s )","title":"function SetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getbon","text":"inline bool GetBOn () const","title":"function GetBOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) override Reimplements : shapeworks::VectorFunction::SetRelativeEnergyScaling The relative scaling scales the gradient B relative to A. By default this value is 1.0.","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const override Reimplements : shapeworks::VectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-setrelativegradientscaling","text":"inline void SetRelativeGradientScaling ( double r )","title":"function SetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getrelativegradientscaling","text":"inline double GetRelativeGradientScaling () const","title":"function GetRelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmaga","text":"inline double GetAverageGradMagA () const","title":"function GetAverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaveragegradmagb","text":"inline double GetAverageGradMagB () const","title":"function GetAverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergya","text":"inline double GetAverageEnergyA () const","title":"function GetAverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-getaverageenergyb","text":"inline double GetAverageEnergyB () const","title":"function GetAverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction","text":"inline DualVectorFunction ()","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_1","text":"inline virtual ~ DualVectorFunction ()","title":"function ~DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-operator","text":"void operator = ( const DualVectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#function-dualvectorfunction_2","text":"DualVectorFunction ( const DualVectorFunction & )","title":"function DualVectorFunction"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_aon","text":"bool m_AOn ;","title":"variable m_AOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_bon","text":"bool m_BOn ;","title":"variable m_BOn"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativegradientscaling","text":"double m_RelativeGradientScaling ;","title":"variable m_RelativeGradientScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_relativeenergyscaling","text":"double m_RelativeEnergyScaling ;","title":"variable m_RelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmaga","text":"double m_AverageGradMagA ;","title":"variable m_AverageGradMagA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averagegradmagb","text":"double m_AverageGradMagB ;","title":"variable m_AverageGradMagB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergya","text":"double m_AverageEnergyA ;","title":"variable m_AverageEnergyA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_averageenergyb","text":"double m_AverageEnergyB ;","title":"variable m_AverageEnergyB"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_counter","text":"double m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functiona","text":"VectorFunction :: Pointer m_FunctionA ;","title":"variable m_FunctionA"},{"location":"api/Classes/classshapeworks_1_1DualVectorFunction.html#variable-m_functionb","text":"VectorFunction :: Pointer m_FunctionB ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_FunctionB"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html","text":"shapeworks::EigenUtils Public Functions Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index) Public Functions Documentation function compute_mean_and_stddev static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#shapeworkseigenutils","text":"","title":"shapeworks::EigenUtils"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions","text":"Name std::pair< double, double > compute_mean_and_stddev (const Eigen::MatrixXd & matrix, int row_index)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1EigenUtils.html#function-compute_mean_and_stddev","text":"static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_mean_and_stddev"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html","text":"shapeworks::ExcelProjectReader Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format Public Functions Documentation function ExcelProjectReader ExcelProjectReader ( Project & project ) function ~ExcelProjectReader ~ ExcelProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#shapeworksexcelprojectreader","text":"Excel file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions","text":"Name ExcelProjectReader ( Project & project) ~ExcelProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#detailed-description","text":"class shapeworks :: ExcelProjectReader ; Excel file format reader for Project . This class enables reader of Project objects from XLSX file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader","text":"ExcelProjectReader ( Project & project )","title":"function ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-excelprojectreader_1","text":"~ ExcelProjectReader ()","title":"function ~ExcelProjectReader"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html","text":"shapeworks::ExcelProjectWriter Excel file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, const std::string & filename) Detailed Description class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format Public Functions Documentation function write_project static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#shapeworksexcelprojectwriter","text":"Excel file format writer for Project . More... #include ","title":"shapeworks::ExcelProjectWriter"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, const std::string & filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#detailed-description","text":"class shapeworks :: ExcelProjectWriter ; Excel file format writer for Project . This class enables writing of Project objects to Excel file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExcelProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , const std :: string & filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1Executable.html","text":"shapeworks::Executable Public Functions Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv) Public Functions Documentation function Executable Executable () function addCommand void addCommand ( Command & command ) function run int run ( int argc , char const * const * argv ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#shapeworksexecutable","text":"","title":"shapeworks::Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions","text":"Name Executable () void addCommand ( Command & command) int run (int argc, char const *const * argv)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Executable.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-executable","text":"Executable ()","title":"function Executable"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-addcommand","text":"void addCommand ( Command & command )","title":"function addCommand"},{"location":"api/Classes/classshapeworks_1_1Executable.html#function-run","text":"int run ( int argc , char const * const * argv ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html","text":"shapeworks::ExportImageDialog More... #include Inherits from QDialog Public Functions Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode) Detailed Description class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images Public Functions Documentation function ExportImageDialog ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#shapeworksexportimagedialog","text":"More... #include Inherits from QDialog","title":"shapeworks::ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions","text":"Name ExportImageDialog (QWidget * parent, Preferences & prefs, QSharedPointer< AnalysisTool > analysis_tool, QSharedPointer< Visualizer > visualizer, bool pca_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#detailed-description","text":"class shapeworks :: ExportImageDialog ; The ExportImageDialog is a QDialog that implements the user interface for exporting images","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportImageDialog.html#function-exportimagedialog","text":"ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function ExportImageDialog"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html","text":"shapeworks::ExportUtils Export utilities for Studio. #include Public Functions Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename) Public Functions Documentation function get_save_filename static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ) function export_all_subjects_particle_scalars static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ) function write_scalars static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ) function write_particle_scalars static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#shapeworksexportutils","text":"Export utilities for Studio. #include ","title":"shapeworks::ExportUtils"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions","text":"Name QString get_save_filename ( ShapeWorksStudioApp * parent, QString title, QString filetypes, QString default_ext) void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent, QSharedPointer< Session > session) bool write_scalars ( ShapeWorksStudioApp * app, vtkSmartPointer< vtkPolyData > poly_data, QString filename) bool write_particle_scalars ( ShapeWorksStudioApp * app, std::shared_ptr< Shape > shape, QString filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-get_save_filename","text":"static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext )","title":"function get_save_filename"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-export_all_subjects_particle_scalars","text":"static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session )","title":"function export_all_subjects_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_scalars","text":"static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename )","title":"function write_scalars"},{"location":"api/Classes/classshapeworks_1_1ExportUtils.html#function-write_particle_scalars","text":"static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html","text":"shapeworks::FreeFormConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function FreeFormConstraint inline FreeFormConstraint () function setMesh inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC. function getMesh inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC. function readyForOptimize bool readyForOptimize () const Prepares for optimize. function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function constraintEval inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function setDefinition void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists. function getDefinition inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. function applyToPolyData void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata. function boundaries std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries function getQueryPoint inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point function setQueryPoint inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point function computeBoundaries void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars function setInoutPolyData inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata. function getInoutPolyData inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata. function createInoutPolyData void createInoutPolyData () Create the in/out poly data from the definition poly data. function isSet bool isSet () Return if this FFC is set or not. function setPainted void setPainted ( bool painted ) Set if this FFC has paint on it or not. function reset void reset () Reset to initial state. function computeGradientFields void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh. function convertLegacyFFC void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#shapeworksfreeformconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions","text":"Name FreeFormConstraint () void setMesh (std::shared_ptr< shapeworks::Mesh > mesh) Sets the mesh that defines the FFC. std::shared_ptr< shapeworks::Mesh > getMesh () Returns the mesh that defines the FFC. bool readyForOptimize () const Prepares for optimize. virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void setDefinition (vtkSmartPointer< vtkPolyData > polyData) Set polydata where per-vertex free form constraint definition exists. vtkSmartPointer< vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists. void applyToPolyData (vtkSmartPointer< vtkPolyData > polyData) Apply the free form constraint to a polydata. std::vector< std::vector< Eigen::Vector3d > > & boundaries () Eigen::Vector3d getQueryPoint () void setQueryPoint (Eigen::Vector3d queryPoint) void computeBoundaries () void setInoutPolyData (vtkSmartPointer< vtkPolyData > polyData) Set the in/out polydata. vtkSmartPointer< vtkPolyData > getInoutPolyData () Get the in/out polydata. void createInoutPolyData () Create the in/out poly data from the definition poly data. bool isSet () Return if this FFC is set or not. void setPainted (bool painted) Set if this FFC has paint on it or not. void reset () Reset to initial state. void computeGradientFields (std::shared_ptr< Mesh > mesh) Compute gradient fields for a mesh. void convertLegacyFFC (vtkSmartPointer< vtkPolyData > polyData) Convert legacy FFC to new format.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#detailed-description","text":"class shapeworks :: FreeFormConstraint ; Encapsulate functionality related to free-form constraints (FFC). Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-freeformconstraint","text":"inline FreeFormConstraint ()","title":"function FreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setmesh","text":"inline void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) Sets the mesh that defines the FFC.","title":"function setMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getmesh","text":"inline std :: shared_ptr < shapeworks :: Mesh > getMesh () Returns the mesh that defines the FFC.","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-readyforoptimize","text":"bool readyForOptimize () const Prepares for optimize.","title":"function readyForOptimize"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-print","text":"inline virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-constrainteval","text":"inline virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setdefinition","text":"void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ) Set polydata where per-vertex free form constraint definition exists.","title":"function setDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getdefinition","text":"inline vtkSmartPointer < vtkPolyData > getDefinition () Get polydata where per-vertex free form constraint definition exists.","title":"function getDefinition"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-applytopolydata","text":"void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Apply the free form constraint to a polydata.","title":"function applyToPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-boundaries","text":"std :: vector < std :: vector < Eigen :: Vector3d > > & boundaries () Deprecated : Access the set of boundaries","title":"function boundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getquerypoint","text":"inline Eigen :: Vector3d getQueryPoint () Deprecated : Get query (inside) point","title":"function getQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setquerypoint","text":"inline void setQueryPoint ( Eigen :: Vector3d queryPoint ) Deprecated : Set query (inside) point","title":"function setQueryPoint"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computeboundaries","text":"void computeBoundaries () Deprecated : Compute boundaries from definition polydata with ffc_paint scalars","title":"function computeBoundaries"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setinoutpolydata","text":"inline void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) Set the in/out polydata.","title":"function setInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-getinoutpolydata","text":"inline vtkSmartPointer < vtkPolyData > getInoutPolyData () Get the in/out polydata.","title":"function getInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-createinoutpolydata","text":"void createInoutPolyData () Create the in/out poly data from the definition poly data.","title":"function createInoutPolyData"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-isset","text":"bool isSet () Return if this FFC is set or not.","title":"function isSet"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-setpainted","text":"void setPainted ( bool painted ) Set if this FFC has paint on it or not.","title":"function setPainted"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-reset","text":"void reset () Reset to initial state.","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-computegradientfields","text":"void computeGradientFields ( std :: shared_ptr < Mesh > mesh ) Compute gradient fields for a mesh.","title":"function computeGradientFields"},{"location":"api/Classes/classshapeworks_1_1FreeFormConstraint.html#function-convertlegacyffc","text":"void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ) Convert legacy FFC to new format. Updated on 2023-10-25 at 15:40:27 +0000","title":"function convertLegacyFFC"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html","text":"shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject Public Types Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const Protected Functions Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer () Detailed Description template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ; typedef Superclass typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods). function operator[] inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k. function Get inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator function GetSize inline unsigned long int GetSize () const Number of objects in the container. Protected Functions Documentation function GenericContainer inline GenericContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GenericContainer inline virtual ~ GenericContainer () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#shapeworksgenericcontainer","text":"This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) More... #include Inherits from itk::DataObject","title":"shapeworks::GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types","text":"Name typedef T DataType typedef GenericContainer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , itk::DataObject ) T & operator[] (size_t k) T & Get (size_t k) unsigned long int GetSize () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions","text":"Name GenericContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GenericContainer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainer ; This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) One difference being that the set operator will expand the vector if the index is out of bounds.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainer < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-self","text":"typedef GenericContainer shapeworks :: GenericContainer < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-superclass","text":"typedef DataObject shapeworks :: GenericContainer < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainer < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainer < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainer < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-operator","text":"inline T & operator []( size_t k ) Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k.","title":"function operator[]"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-get","text":"inline T & Get ( size_t k ) Convenience method since all usage of this function is via a pointer, leading ugly syntax like ->operator","title":"function Get"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-getsize","text":"inline unsigned long int GetSize () const Number of objects in the container.","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer","text":"inline GenericContainer ()","title":"function GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GenericContainer.html#function-genericcontainer_1","text":"inline virtual ~ GenericContainer () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~GenericContainer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html","text":"shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Public Types Documentation typedef DataType typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs typedef Self typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ; typedef Superclass typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function ZeroAllValues inline void ZeroAllValues () Protected Functions Documentation function GenericContainerArray inline GenericContainerArray () function ~GenericContainerArray inline virtual ~ GenericContainerArray () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#shapeworksgenericcontainerarray","text":"This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. More... #include Inherits from std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types","text":"Name typedef T DataType typedef GenericContainerArray Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro (ParticleContainer , Observer ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions","text":"Name GenericContainerArray () virtual ~GenericContainerArray () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#detailed-description","text":"template < class T > class shapeworks :: GenericContainerArray ; This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-datatype","text":"typedef T shapeworks :: GenericContainerArray < T >:: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-self","text":"typedef GenericContainerArray shapeworks :: GenericContainerArray < T >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-superclass","text":"typedef Observer shapeworks :: GenericContainerArray < T >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GenericContainerArray < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GenericContainerArray < T >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-itktypemacro","text":"itkTypeMacro ( ParticleContainer , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-zeroallvalues","text":"inline void ZeroAllValues ()","title":"function ZeroAllValues"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray","text":"inline GenericContainerArray ()","title":"function GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-genericcontainerarray_1","text":"inline virtual ~ GenericContainerArray ()","title":"function ~GenericContainerArray"},{"location":"api/Classes/classshapeworks_1_1GenericContainerArray.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html","text":"shapeworks::GradientDescentOptimizer Inherits from itk::Object Public Types Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization. Protected Functions Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer () Public Attributes Name constexpr static unsigned int VDimension Public Types Documentation using TGradientNumericType using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ; typedef Self typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs typedef Superclass typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ; typedef DomainType typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain. typedef ParticleSystemType typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality. typedef GradientFunctionType typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function. typedef VectorType typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function StartOptimization inline void StartOptimization () Start the optimization. function StartAdaptiveGaussSeidelOptimization void StartAdaptiveGaussSeidelOptimization () function AugmentedLagrangianConstraints void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ) function StopOptimization inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration. function AbortProcessing inline void AbortProcessing () function itkGetMacro itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver. function itkSetMacro itkSetMacro ( NumberOfIterations , unsigned int ) function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function itkGetMacro itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value. function itkSetMacro itkSetMacro ( TimeStep , double ) function itkGetMacro itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use. function itkSetMacro itkSetMacro ( MaximumNumberOfIterations , unsigned int ) function itkGetMacro itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution. function itkSetMacro itkSetMacro ( Tolerance , double ) function itkGetObjectMacro itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) function itkGetObjectMacro itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer. function itkSetObjectMacro itkSetObjectMacro ( GradientFunction , GradientFunctionType ) function SetInitializationMode inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false) function SetCheckIterations inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence. function SetInitializationStartScalingFactor inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization. Protected Functions Documentation function GradientDescentOptimizer GradientDescentOptimizer () function GradientDescentOptimizer GradientDescentOptimizer ( const GradientDescentOptimizer & ) function operator= const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~GradientDescentOptimizer inline virtual ~ GradientDescentOptimizer () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#shapeworksgradientdescentoptimizer","text":"Inherits from itk::Object","title":"shapeworks::GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types","text":"Name using float TGradientNumericType typedef GradientDescentOptimizer Self typedef itk::Object Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef shapeworks::ImageDomainWithGradients < TGradientNumericType > DomainType typedef ParticleSystem ParticleSystemType typedef VectorFunction GradientFunctionType typedef GradientFunctionType::VectorType VectorType typedef ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void StartOptimization () void StartAdaptiveGaussSeidelOptimization () void AugmentedLagrangianConstraints ( VectorType & gradient, const PointType & pt, const size_t & dom, const double & maximumUpdateAllowed, size_t index) void StopOptimization () void AbortProcessing () itkGetMacro (NumberOfIterations , unsigned int ) itkSetMacro (NumberOfIterations , unsigned int ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () itkGetMacro (TimeStep , double ) itkSetMacro (TimeStep , double ) itkGetMacro (MaximumNumberOfIterations , unsigned int ) itkSetMacro (MaximumNumberOfIterations , unsigned int ) itkGetMacro (Tolerance , double ) itkSetMacro (Tolerance , double ) itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) itkSetObjectMacro ( ParticleSystem , ParticleSystemType ) itkGetObjectMacro (GradientFunction , GradientFunctionType ) itkSetObjectMacro (GradientFunction , GradientFunctionType ) void SetInitializationMode (bool b) Determines if this is an initialization (true) or an optimization (false) void SetCheckIterations (size_t si) Sets the number of iterations when we check for convergence. void SetInitializationStartScalingFactor (double si) Sets the scaling factor at the beginning of the initialization.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions","text":"Name GradientDescentOptimizer () GradientDescentOptimizer (const GradientDescentOptimizer & ) const GradientDescentOptimizer & operator= (const GradientDescentOptimizer & ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~GradientDescentOptimizer ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#using-tgradientnumerictype","text":"using shapeworks :: GradientDescentOptimizer :: TGradientNumericType = float ;","title":"using TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-self","text":"typedef GradientDescentOptimizer shapeworks :: GradientDescentOptimizer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-superclass","text":"typedef itk :: Object shapeworks :: GradientDescentOptimizer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: GradientDescentOptimizer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: GradientDescentOptimizer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-domaintype","text":"typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > shapeworks :: GradientDescentOptimizer :: DomainType ; Type of the domain.","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: GradientDescentOptimizer :: ParticleSystemType ; Particle System type is based on the dimensionality.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-gradientfunctiontype","text":"typedef VectorFunction shapeworks :: GradientDescentOptimizer :: GradientFunctionType ; Type of the gradient function.","title":"typedef GradientFunctionType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-vectortype","text":"typedef GradientFunctionType :: VectorType shapeworks :: GradientDescentOptimizer :: VectorType ; Numerical vector type.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: GradientDescentOptimizer :: PointType ; Point Type","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startoptimization","text":"inline void StartOptimization () Start the optimization.","title":"function StartOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-startadaptivegaussseideloptimization","text":"void StartAdaptiveGaussSeidelOptimization ()","title":"function StartAdaptiveGaussSeidelOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-augmentedlagrangianconstraints","text":"void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index )","title":"function AugmentedLagrangianConstraints"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-stopoptimization","text":"inline void StopOptimization () Stop the optimization. This method sets a flag that aborts the StartOptimization method after the current iteration.","title":"function StopOptimization"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-abortprocessing","text":"inline void AbortProcessing ()","title":"function AbortProcessing"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro","text":"itkGetMacro ( NumberOfIterations , unsigned int ) Get/Set the number of iterations performed by the solver.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro","text":"itkSetMacro ( NumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_1","text":"itkGetMacro ( TimeStep , double ) Get/Set a time step parameter for the update. Each update is simply scaled by this value.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_1","text":"itkSetMacro ( TimeStep , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_2","text":"itkGetMacro ( MaximumNumberOfIterations , unsigned int ) Get/Set the maximum iterations to allow this solver to use.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_2","text":"itkSetMacro ( MaximumNumberOfIterations , unsigned int )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetmacro_3","text":"itkGetMacro ( Tolerance , double ) Get/Set the precision of the solution.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetmacro_3","text":"itkSetMacro ( Tolerance , double )","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( ParticleSystem , ParticleSystemType ) Get/Set the ParticleSystem modified by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( ParticleSystem , ParticleSystemType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itkgetobjectmacro_1","text":"itkGetObjectMacro ( GradientFunction , GradientFunctionType ) Get/Set the gradient function used by this optimizer.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-itksetobjectmacro_1","text":"itkSetObjectMacro ( GradientFunction , GradientFunctionType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationmode","text":"inline void SetInitializationMode ( bool b ) Determines if this is an initialization (true) or an optimization (false)","title":"function SetInitializationMode"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setcheckiterations","text":"inline void SetCheckIterations ( size_t si ) Sets the number of iterations when we check for convergence.","title":"function SetCheckIterations"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-setinitializationstartscalingfactor","text":"inline void SetInitializationStartScalingFactor ( double si ) Sets the scaling factor at the beginning of the initialization.","title":"function SetInitializationStartScalingFactor"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer","text":"GradientDescentOptimizer ()","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_1","text":"GradientDescentOptimizer ( const GradientDescentOptimizer & )","title":"function GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-operator","text":"const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#function-gradientdescentoptimizer_2","text":"inline virtual ~ GradientDescentOptimizer ()","title":"function ~GradientDescentOptimizer"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GradientDescentOptimizer.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1Groom.html","text":"shapeworks::Groom High level groom API. More... #include Public Functions Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform. Protected Attributes Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_ Detailed Description class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations. Public Functions Documentation function Groom Groom ( ProjectHandle project ) function run bool run () Run the grooming. function abort void abort () Set abort as soon as possible. function get_aborted bool get_aborted () Return if grooming was aborted. function compute_landmark_distance static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks. function compute_landmark_transform static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform. Protected Attributes Documentation variable progress_ std :: atomic < float > progress_ = 0 ; variable total_ops_ std :: atomic < int > total_ops_ = 0 ; variable progress_counter_ std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#shapeworksgroom","text":"High level groom API. More... #include ","title":"shapeworks::Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions","text":"Name Groom (ProjectHandle project) bool run () Run the grooming. void abort () Set abort as soon as possible. bool get_aborted () Return if grooming was aborted. double compute_landmark_distance (vtkSmartPointer< vtkPoints > one, vtkSmartPointer< vtkPoints > two) Util to compute square distance between paired landmarks. vtkSmartPointer< vtkMatrix4x4 > compute_landmark_transform (vtkSmartPointer< vtkPoints > source, vtkSmartPointer< vtkPoints > target) Util to compute landmark transform.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes","text":"Name std::atomic< float > progress_ std::atomic< int > total_ops_ std::atomic< int > progress_counter_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Groom.html#detailed-description","text":"class shapeworks :: Groom ; High level groom API. The Groom class operates on a Project . It is used by Studio and other tools to perform Grooming operations.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Groom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-groom","text":"Groom ( ProjectHandle project )","title":"function Groom"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-run","text":"bool run () Run the grooming.","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-abort","text":"void abort () Set abort as soon as possible.","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-get_aborted","text":"bool get_aborted () Return if grooming was aborted.","title":"function get_aborted"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_distance","text":"static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ) Util to compute square distance between paired landmarks.","title":"function compute_landmark_distance"},{"location":"api/Classes/classshapeworks_1_1Groom.html#function-compute_landmark_transform","text":"static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ) Util to compute landmark transform.","title":"function compute_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Groom.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_","text":"std :: atomic < float > progress_ = 0 ;","title":"variable progress_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-total_ops_","text":"std :: atomic < int > total_ops_ = 0 ;","title":"variable total_ops_"},{"location":"api/Classes/classshapeworks_1_1Groom.html#variable-progress_counter_","text":"std :: atomic < int > progress_counter_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable progress_counter_"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html","text":"shapeworks::GroomCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#shapeworksgroomcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::GroomCommandGroup"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html","text":"shapeworks::GroomParameters More... #include Public Functions Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults () Public Attributes Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C Detailed Description class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters Public Functions Documentation function GroomParameters explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ) function set_domain_name void set_domain_name ( std :: string domain_name ) function save_to_project void save_to_project () function get_groom_output_prefix std :: string get_groom_output_prefix () function set_groom_output_prefix void set_groom_output_prefix ( std :: string prefix ) function get_groom_all_domains_the_same bool get_groom_all_domains_the_same () function set_groom_all_domains_the_same void set_groom_all_domains_the_same ( bool value ) function get_alignment_enabled bool get_alignment_enabled () function set_alignment_enabled void set_alignment_enabled ( bool value ) function get_alignment_method std :: string get_alignment_method () function set_alignment_method void set_alignment_method ( std :: string method ) function get_isolate_tool bool get_isolate_tool () function set_isolate_tool void set_isolate_tool ( bool value ) function get_fill_holes_tool bool get_fill_holes_tool () function set_fill_holes_tool void set_fill_holes_tool ( bool value ) function get_fill_mesh_holes_tool bool get_fill_mesh_holes_tool () function set_fill_mesh_holes_tool void set_fill_mesh_holes_tool ( bool value ) function get_auto_pad_tool bool get_auto_pad_tool () function set_auto_pad_tool void set_auto_pad_tool ( bool value ) function get_padding_amount int get_padding_amount () function set_padding_amount void set_padding_amount ( int padding_amount ) function get_antialias_tool bool get_antialias_tool () function set_antialias_tool void set_antialias_tool ( bool value ) function get_antialias_iterations int get_antialias_iterations () function set_antialias_iterations void set_antialias_iterations ( int iterations ) function get_blur_tool bool get_blur_tool () function set_blur_tool void set_blur_tool ( bool value ) function get_blur_amount double get_blur_amount () function set_blur_amount void set_blur_amount ( double blur_amount ) function get_fast_marching bool get_fast_marching () function set_fast_marching void set_fast_marching ( bool value ) function get_mesh_smooth bool get_mesh_smooth () function set_mesh_smooth void set_mesh_smooth ( bool value ) function get_mesh_smoothing_method std :: string get_mesh_smoothing_method () function set_mesh_smoothing_method void set_mesh_smoothing_method ( std :: string method ) function get_mesh_vtk_laplacian_iterations int get_mesh_vtk_laplacian_iterations () function set_mesh_vtk_laplacian_iterations void set_mesh_vtk_laplacian_iterations ( int iterations ) function get_mesh_vtk_laplacian_relaxation double get_mesh_vtk_laplacian_relaxation () function set_mesh_vtk_laplacian_relaxation void set_mesh_vtk_laplacian_relaxation ( double relaxation ) function get_mesh_vtk_windowed_sinc_iterations int get_mesh_vtk_windowed_sinc_iterations () function set_mesh_vtk_windowed_sinc_iterations void set_mesh_vtk_windowed_sinc_iterations ( int iterations ) function get_mesh_vtk_windowed_sinc_passband double get_mesh_vtk_windowed_sinc_passband () function set_mesh_vtk_windowed_sinc_passband void set_mesh_vtk_windowed_sinc_passband ( double passband ) function get_use_icp bool get_use_icp () function get_use_center bool get_use_center () function get_use_landmarks bool get_use_landmarks () function get_crop bool get_crop () function set_crop void set_crop ( bool crop ) function get_convert_to_mesh bool get_convert_to_mesh () function set_convert_to_mesh void set_convert_to_mesh ( bool value ) function get_reflect bool get_reflect () function set_reflect void set_reflect ( bool reflect ) function get_reflect_column std :: string get_reflect_column () function set_reflect_column void set_reflect_column ( std :: string column ) function get_reflect_choice std :: string get_reflect_choice () function set_reflect_choice void set_reflect_choice ( std :: string choice ) function get_reflect_axis std :: string get_reflect_axis () function set_reflect_axis void set_reflect_axis ( std :: string axies ) function get_resample bool get_resample () function set_resample void set_resample ( bool resample ) function get_isotropic bool get_isotropic () function set_isotropic void set_isotropic ( bool isotropic ) function get_iso_spacing double get_iso_spacing () function set_iso_spacing void set_iso_spacing ( double spacing ) function get_spacing std :: vector < double > get_spacing () function set_spacing void set_spacing ( std :: vector < double > spacing ) function get_remesh bool get_remesh () function set_remesh void set_remesh ( bool remesh ) function get_remesh_percent_mode bool get_remesh_percent_mode () function set_remesh_percent_mode void set_remesh_percent_mode ( bool mode ) function get_remesh_percent double get_remesh_percent () function set_remesh_percent void set_remesh_percent ( double percent ) function get_remesh_num_vertices int get_remesh_num_vertices () function set_remesh_num_vertices void set_remesh_num_vertices ( int num_vertices ) function get_remesh_gradation double get_remesh_gradation () function set_remesh_gradation void set_remesh_gradation ( double gradation ) function get_skip_grooming bool get_skip_grooming () function set_skip_grooming void set_skip_grooming ( bool skip ) function restore_defaults void restore_defaults () Public Attributes Documentation variable GROOM_SMOOTH_VTK_LAPLACIAN_C static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; variable GROOM_ALIGNMENT_CENTER_C static const std :: string GROOM_ALIGNMENT_CENTER_C ; variable GROOM_ALIGNMENT_ICP_C static const std :: string GROOM_ALIGNMENT_ICP_C ; variable GROOM_ALIGNMENT_LANDMARK_C static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#shapeworksgroomparameters","text":"More... #include ","title":"shapeworks::GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions","text":"Name GroomParameters (ProjectHandle project, std::string domain_name =\"\") void set_domain_name (std::string domain_name) void save_to_project () std::string get_groom_output_prefix () void set_groom_output_prefix (std::string prefix) bool get_groom_all_domains_the_same () void set_groom_all_domains_the_same (bool value) bool get_alignment_enabled () void set_alignment_enabled (bool value) std::string get_alignment_method () void set_alignment_method (std::string method) bool get_isolate_tool () void set_isolate_tool (bool value) bool get_fill_holes_tool () void set_fill_holes_tool (bool value) bool get_fill_mesh_holes_tool () void set_fill_mesh_holes_tool (bool value) bool get_auto_pad_tool () void set_auto_pad_tool (bool value) int get_padding_amount () void set_padding_amount (int padding_amount) bool get_antialias_tool () void set_antialias_tool (bool value) int get_antialias_iterations () void set_antialias_iterations (int iterations) bool get_blur_tool () void set_blur_tool (bool value) double get_blur_amount () void set_blur_amount (double blur_amount) bool get_fast_marching () void set_fast_marching (bool value) bool get_mesh_smooth () void set_mesh_smooth (bool value) std::string get_mesh_smoothing_method () void set_mesh_smoothing_method (std::string method) int get_mesh_vtk_laplacian_iterations () void set_mesh_vtk_laplacian_iterations (int iterations) double get_mesh_vtk_laplacian_relaxation () void set_mesh_vtk_laplacian_relaxation (double relaxation) int get_mesh_vtk_windowed_sinc_iterations () void set_mesh_vtk_windowed_sinc_iterations (int iterations) double get_mesh_vtk_windowed_sinc_passband () void set_mesh_vtk_windowed_sinc_passband (double passband) bool get_use_icp () bool get_use_center () bool get_use_landmarks () bool get_crop () void set_crop (bool crop) bool get_convert_to_mesh () void set_convert_to_mesh (bool value) bool get_reflect () void set_reflect (bool reflect) std::string get_reflect_column () void set_reflect_column (std::string column) std::string get_reflect_choice () void set_reflect_choice (std::string choice) std::string get_reflect_axis () void set_reflect_axis (std::string axies) bool get_resample () void set_resample (bool resample) bool get_isotropic () void set_isotropic (bool isotropic) double get_iso_spacing () void set_iso_spacing (double spacing) std::vector< double > get_spacing () void set_spacing (std::vector< double > spacing) bool get_remesh () void set_remesh (bool remesh) bool get_remesh_percent_mode () void set_remesh_percent_mode (bool mode) double get_remesh_percent () void set_remesh_percent (double percent) int get_remesh_num_vertices () void set_remesh_num_vertices (int num_vertices) double get_remesh_gradation () void set_remesh_gradation (double gradation) bool get_skip_grooming () void set_skip_grooming (bool skip) void restore_defaults ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes","text":"Name const std::string GROOM_SMOOTH_VTK_LAPLACIAN_C const std::string GROOM_SMOOTH_VTK_WINDOWED_SINC_C const std::string GROOM_ALIGNMENT_CENTER_C const std::string GROOM_ALIGNMENT_ICP_C const std::string GROOM_ALIGNMENT_LANDMARK_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#detailed-description","text":"class shapeworks :: GroomParameters ; This class encapsulated processing of Groom parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-groomparameters","text":"explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" )","title":"function GroomParameters"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_domain_name","text":"void set_domain_name ( std :: string domain_name )","title":"function set_domain_name"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_output_prefix","text":"std :: string get_groom_output_prefix ()","title":"function get_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_output_prefix","text":"void set_groom_output_prefix ( std :: string prefix )","title":"function set_groom_output_prefix"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_groom_all_domains_the_same","text":"bool get_groom_all_domains_the_same ()","title":"function get_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_groom_all_domains_the_same","text":"void set_groom_all_domains_the_same ( bool value )","title":"function set_groom_all_domains_the_same"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_enabled","text":"bool get_alignment_enabled ()","title":"function get_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_enabled","text":"void set_alignment_enabled ( bool value )","title":"function set_alignment_enabled"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_alignment_method","text":"std :: string get_alignment_method ()","title":"function get_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_alignment_method","text":"void set_alignment_method ( std :: string method )","title":"function set_alignment_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isolate_tool","text":"bool get_isolate_tool ()","title":"function get_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isolate_tool","text":"void set_isolate_tool ( bool value )","title":"function set_isolate_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_holes_tool","text":"bool get_fill_holes_tool ()","title":"function get_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_holes_tool","text":"void set_fill_holes_tool ( bool value )","title":"function set_fill_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fill_mesh_holes_tool","text":"bool get_fill_mesh_holes_tool ()","title":"function get_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fill_mesh_holes_tool","text":"void set_fill_mesh_holes_tool ( bool value )","title":"function set_fill_mesh_holes_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_auto_pad_tool","text":"bool get_auto_pad_tool ()","title":"function get_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_auto_pad_tool","text":"void set_auto_pad_tool ( bool value )","title":"function set_auto_pad_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_padding_amount","text":"int get_padding_amount ()","title":"function get_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_padding_amount","text":"void set_padding_amount ( int padding_amount )","title":"function set_padding_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_tool","text":"bool get_antialias_tool ()","title":"function get_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_tool","text":"void set_antialias_tool ( bool value )","title":"function set_antialias_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_antialias_iterations","text":"int get_antialias_iterations ()","title":"function get_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_antialias_iterations","text":"void set_antialias_iterations ( int iterations )","title":"function set_antialias_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_tool","text":"bool get_blur_tool ()","title":"function get_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_tool","text":"void set_blur_tool ( bool value )","title":"function set_blur_tool"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_blur_amount","text":"double get_blur_amount ()","title":"function get_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_blur_amount","text":"void set_blur_amount ( double blur_amount )","title":"function set_blur_amount"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_fast_marching","text":"bool get_fast_marching ()","title":"function get_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_fast_marching","text":"void set_fast_marching ( bool value )","title":"function set_fast_marching"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smooth","text":"bool get_mesh_smooth ()","title":"function get_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smooth","text":"void set_mesh_smooth ( bool value )","title":"function set_mesh_smooth"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_smoothing_method","text":"std :: string get_mesh_smoothing_method ()","title":"function get_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_smoothing_method","text":"void set_mesh_smoothing_method ( std :: string method )","title":"function set_mesh_smoothing_method"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_iterations","text":"int get_mesh_vtk_laplacian_iterations ()","title":"function get_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_iterations","text":"void set_mesh_vtk_laplacian_iterations ( int iterations )","title":"function set_mesh_vtk_laplacian_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_laplacian_relaxation","text":"double get_mesh_vtk_laplacian_relaxation ()","title":"function get_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_laplacian_relaxation","text":"void set_mesh_vtk_laplacian_relaxation ( double relaxation )","title":"function set_mesh_vtk_laplacian_relaxation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_iterations","text":"int get_mesh_vtk_windowed_sinc_iterations ()","title":"function get_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_iterations","text":"void set_mesh_vtk_windowed_sinc_iterations ( int iterations )","title":"function set_mesh_vtk_windowed_sinc_iterations"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_mesh_vtk_windowed_sinc_passband","text":"double get_mesh_vtk_windowed_sinc_passband ()","title":"function get_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_mesh_vtk_windowed_sinc_passband","text":"void set_mesh_vtk_windowed_sinc_passband ( double passband )","title":"function set_mesh_vtk_windowed_sinc_passband"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_icp","text":"bool get_use_icp ()","title":"function get_use_icp"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_center","text":"bool get_use_center ()","title":"function get_use_center"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_crop","text":"bool get_crop ()","title":"function get_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_crop","text":"void set_crop ( bool crop )","title":"function set_crop"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_convert_to_mesh","text":"bool get_convert_to_mesh ()","title":"function get_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_convert_to_mesh","text":"void set_convert_to_mesh ( bool value )","title":"function set_convert_to_mesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect","text":"bool get_reflect ()","title":"function get_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect","text":"void set_reflect ( bool reflect )","title":"function set_reflect"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_column","text":"std :: string get_reflect_column ()","title":"function get_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_column","text":"void set_reflect_column ( std :: string column )","title":"function set_reflect_column"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_choice","text":"std :: string get_reflect_choice ()","title":"function get_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_choice","text":"void set_reflect_choice ( std :: string choice )","title":"function set_reflect_choice"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_reflect_axis","text":"std :: string get_reflect_axis ()","title":"function get_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_reflect_axis","text":"void set_reflect_axis ( std :: string axies )","title":"function set_reflect_axis"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_resample","text":"bool get_resample ()","title":"function get_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_resample","text":"void set_resample ( bool resample )","title":"function set_resample"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_isotropic","text":"bool get_isotropic ()","title":"function get_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_isotropic","text":"void set_isotropic ( bool isotropic )","title":"function set_isotropic"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_iso_spacing","text":"double get_iso_spacing ()","title":"function get_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_iso_spacing","text":"void set_iso_spacing ( double spacing )","title":"function set_iso_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_spacing","text":"std :: vector < double > get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_spacing","text":"void set_spacing ( std :: vector < double > spacing )","title":"function set_spacing"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh","text":"bool get_remesh ()","title":"function get_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh","text":"void set_remesh ( bool remesh )","title":"function set_remesh"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent_mode","text":"bool get_remesh_percent_mode ()","title":"function get_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent_mode","text":"void set_remesh_percent_mode ( bool mode )","title":"function set_remesh_percent_mode"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_percent","text":"double get_remesh_percent ()","title":"function get_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_percent","text":"void set_remesh_percent ( double percent )","title":"function set_remesh_percent"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_num_vertices","text":"int get_remesh_num_vertices ()","title":"function get_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_num_vertices","text":"void set_remesh_num_vertices ( int num_vertices )","title":"function set_remesh_num_vertices"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_remesh_gradation","text":"double get_remesh_gradation ()","title":"function get_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_remesh_gradation","text":"void set_remesh_gradation ( double gradation )","title":"function set_remesh_gradation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-get_skip_grooming","text":"bool get_skip_grooming ()","title":"function get_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-set_skip_grooming","text":"void set_skip_grooming ( bool skip )","title":"function set_skip_grooming"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#function-restore_defaults","text":"void restore_defaults ()","title":"function restore_defaults"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_laplacian_c","text":"static const std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ;","title":"variable GROOM_SMOOTH_VTK_LAPLACIAN_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_smooth_vtk_windowed_sinc_c","text":"static const std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ;","title":"variable GROOM_SMOOTH_VTK_WINDOWED_SINC_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_center_c","text":"static const std :: string GROOM_ALIGNMENT_CENTER_C ;","title":"variable GROOM_ALIGNMENT_CENTER_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_icp_c","text":"static const std :: string GROOM_ALIGNMENT_ICP_C ;","title":"variable GROOM_ALIGNMENT_ICP_C"},{"location":"api/Classes/classshapeworks_1_1GroomParameters.html#variable-groom_alignment_landmark_c","text":"static const std :: string GROOM_ALIGNMENT_LANDMARK_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable GROOM_ALIGNMENT_LANDMARK_C"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html","text":"shapeworks::GroomTool Inherits from QWidget Public Slots Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg) Public Signals Name void groom_start () void groom_complete () void progress (int ) Public Functions Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_antialias_checkbox_stateChanged void on_antialias_checkbox_stateChanged ( int state ) slot on_blur_checkbox_stateChanged void on_blur_checkbox_stateChanged ( int state ) slot on_autopad_checkbox_stateChanged void on_autopad_checkbox_stateChanged ( int state ) slot skip_grooming_toggled void skip_grooming_toggled () slot on_restore_defaults_clicked void on_restore_defaults_clicked () slot update_ui void update_ui () slot domain_changed void domain_changed () slot alignment_checkbox_changed void alignment_checkbox_changed ( int state ) slot alignment_option_changed void alignment_option_changed ( int index ) slot reflect_checkbox_changed void reflect_checkbox_changed ( int state ) slot reflect_column_changed void reflect_column_changed ( int index ) slot reflect_choice_changed void reflect_choice_changed ( int index ) slot reflect_axis_changed void reflect_axis_changed ( int index ) slot on_run_groom_button_clicked void on_run_groom_button_clicked () Run groom tool. slot handle_thread_complete void handle_thread_complete () slot handle_progress void handle_progress ( int val ) slot handle_error void handle_error ( QString msg ) Public Signals Documentation signal groom_start void groom_start () signal groom_complete void groom_complete () signal progress void progress ( int ) Public Functions Documentation function GroomTool GroomTool ( Preferences & prefs , Telemetry & telemetry ) function ~GroomTool ~ GroomTool () function set_session void set_session ( QSharedPointer < Session > session ) Set the pointer to the session. function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function disable_actions void disable_actions () Disable action buttons. function enable_actions void enable_actions () Enable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#shapeworksgroomtool","text":"Inherits from QWidget","title":"shapeworks::GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots","text":"Name void on_antialias_checkbox_stateChanged (int state) void on_blur_checkbox_stateChanged (int state) void on_autopad_checkbox_stateChanged (int state) void skip_grooming_toggled () void on_restore_defaults_clicked () void update_ui () void domain_changed () void alignment_checkbox_changed (int state) void alignment_option_changed (int index) void reflect_checkbox_changed (int state) void reflect_column_changed (int index) void reflect_choice_changed (int index) void reflect_axis_changed (int index) void on_run_groom_button_clicked () Run groom tool. void handle_thread_complete () void handle_progress (int val) void handle_error (QString msg)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals","text":"Name void groom_start () void groom_complete () void progress (int )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions","text":"Name GroomTool ( Preferences & prefs, Telemetry & telemetry) ~GroomTool () void set_session (QSharedPointer< Session > session) Set the pointer to the session. void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void disable_actions () Disable action buttons. void enable_actions () Enable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_antialias_checkbox_statechanged","text":"void on_antialias_checkbox_stateChanged ( int state )","title":"slot on_antialias_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_blur_checkbox_statechanged","text":"void on_blur_checkbox_stateChanged ( int state )","title":"slot on_blur_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_autopad_checkbox_statechanged","text":"void on_autopad_checkbox_stateChanged ( int state )","title":"slot on_autopad_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-skip_grooming_toggled","text":"void skip_grooming_toggled ()","title":"slot skip_grooming_toggled"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_restore_defaults_clicked","text":"void on_restore_defaults_clicked ()","title":"slot on_restore_defaults_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-update_ui","text":"void update_ui ()","title":"slot update_ui"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-domain_changed","text":"void domain_changed ()","title":"slot domain_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_checkbox_changed","text":"void alignment_checkbox_changed ( int state )","title":"slot alignment_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-alignment_option_changed","text":"void alignment_option_changed ( int index )","title":"slot alignment_option_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_checkbox_changed","text":"void reflect_checkbox_changed ( int state )","title":"slot reflect_checkbox_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_column_changed","text":"void reflect_column_changed ( int index )","title":"slot reflect_column_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_choice_changed","text":"void reflect_choice_changed ( int index )","title":"slot reflect_choice_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-reflect_axis_changed","text":"void reflect_axis_changed ( int index )","title":"slot reflect_axis_changed"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-on_run_groom_button_clicked","text":"void on_run_groom_button_clicked () Run groom tool.","title":"slot on_run_groom_button_clicked"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_progress","text":"void handle_progress ( int val )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#slot-handle_error","text":"void handle_error ( QString msg )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_start","text":"void groom_start ()","title":"signal groom_start"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-groom_complete","text":"void groom_complete ()","title":"signal groom_complete"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool","text":"GroomTool ( Preferences & prefs , Telemetry & telemetry )","title":"function GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-groomtool_1","text":"~ GroomTool ()","title":"function ~GroomTool"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Set the pointer to the session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1GroomTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html","text":"shapeworks::GroupPvalueJob Inherits from shapeworks::Job , QObject Public Functions Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function GroupPvalueJob GroupPvalueJob ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#shapeworksgrouppvaluejob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions","text":"Name GroupPvalueJob ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-grouppvaluejob","text":"GroupPvalueJob ( ParticleShapeStatistics stats )","title":"function GroupPvalueJob"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1GroupPvalueJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1Image.html","text":"shapeworks::Image Module: Image Classes More... #include Public Types Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType Public Functions Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images. Public Types Documentation enum InterpolationType Enumerator Value Description Linear NearestNeighbor using PixelType using shapeworks :: Image :: PixelType = float ; using ImageType using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; Public Functions Documentation function Image Image ( const Dims dims ) function Image inline Image ( const std :: string & pathname ) function Image inline Image ( ImageType :: Pointer imagePtr ) function Image Image ( const vtkSmartPointer < vtkImageData > vtkImage ) function Image inline Image ( Image && img ) function Image inline Image ( const Image & img ) function operator= Image & operator = ( const Image & img ) function operator= Image & operator = ( Image && img ) lvalue assignment operator function operator ImageType::Pointer inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image function getITKImage inline ImageType :: Pointer getITKImage () const function getVTKImage vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image function operator- Image & operator - () negation operator function operator+ Image operator + ( const Image & other ) const plus operator to add two images function operator+= Image & operator += ( const Image & other ) function operator- Image operator - ( const Image & other ) const minus operator to add two images function operator-= Image & operator -= ( const Image & other ) function operator* Image operator * ( const Image & other ) const multiply operator to multiply two images function operator* Image operator * ( const PixelType x ) const multiply operator to scale contents of an image function operator*= Image & operator *= ( const PixelType x ) function operator/ Image operator / ( const PixelType x ) const divide operator to scale contents of an image function operator/= Image & operator /= ( const PixelType x ) function operator+ Image operator + ( const PixelType x ) const plus operator to shift contents of an image function operator+= Image & operator += ( const PixelType x ) function operator- Image operator - ( const PixelType x ) const minus operator to shift contents of an image function operator-= Image & operator -= ( const PixelType x ) function antialias Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image function recenter Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image function resample Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator function resample Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing function resample Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing function resize Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same) function pad Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value function pad Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value function pad Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value function translate Image & translate ( const Vector3 & v ) helper to simply translate image function scale Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin) function rotate Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function rotate Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians) function createCenterOfMassTransform TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image function createRigidRegistrationTransform TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations function applyTransform Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter function applyTransform Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values function extractLabel Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image function closeHoles Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume function binarize Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user function computeDT Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue function applyCurvatureFilter Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter function applyGradientFilter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter function applySigmoidFilter Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter function applyTPLevelSetFilter Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter function topologyPreservingSmooth Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] function applyIntensityFilter Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter function gaussianBlur Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma function crop Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added function clip Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane function reflect Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane). function setOrigin Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value function setSpacing Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value function setCoordsys Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space function isolate Image & isolate () isolate the largest object in a binary segmentation function dims inline Dims dims () const logical dimensions of the image function size inline Point3 size () const physical dimensions of the image (dims * spacing) function spacing inline Vector spacing () const physical spacing of the image function origin inline Point3 origin () const physical coordinates of image origin function center inline Point3 center () const physical coordinates of center of this image function coordsys inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space function centerOfMass Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval] function min PixelType min () minimum of image function max PixelType max () maximum of image function mean PixelType mean () mean of image function std PixelType std () standard deviation of image function logicalBoundingBox IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space function physicalBoundingBox PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space function physicalBoundingBox PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space function logicalToPhysical PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates function physicalToLogical IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates function logicalToPhysical Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space function physicalToLogical Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate function isInside bool isInside ( const Point3 & p ) const checks if a given point is inside the image function iterator ImageIterator iterator () creates an image iterator and returns it function compare bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter function operator== inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter function write Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension function toMesh Mesh toMesh ( PixelType isovalue ) const converts image to mesh function evaluate Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#shapeworksimage","text":"Module: Image Classes More... #include ","title":"shapeworks::Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types","text":"Name enum InterpolationType using float PixelType using itk::Image< PixelType, 3 > ImageType using itk::StatisticsImageFilter< ImageType >::Pointer StatsPtr using itk::ImageRegionIterator< ImageType > ImageIterator using itk::LinearInterpolateImageFunction< ImageType > InterpolatorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions","text":"Name Image (const Dims dims) Image (const std::string & pathname) Image (ImageType::Pointer imagePtr) Image (const vtkSmartPointer< vtkImageData > vtkImage) Image ( Image && img) Image (const Image & img) Image & operator= (const Image & img) Image & operator= ( Image && img) lvalue assignment operator operator ImageType::Pointer () rvalue assignment operator ImageType::Pointer getITKImage () const vtkSmartPointer< vtkImageData > getVTKImage () const creates a VTK filter for the given image Image & operator- () negation operator Image operator+ (const Image & other) const plus operator to add two images Image & operator+= (const Image & other) Image operator- (const Image & other) const minus operator to add two images Image & operator-= (const Image & other) Image operator* (const Image & other) const multiply operator to multiply two images Image operator* (const PixelType x) const multiply operator to scale contents of an image Image & operator*= (const PixelType x) Image operator/ (const PixelType x) const divide operator to scale contents of an image Image & operator/= (const PixelType x) Image operator+ (const PixelType x) const plus operator to shift contents of an image Image & operator+= (const PixelType x) Image operator- (const PixelType x) const minus operator to shift contents of an image Image & operator-= (const PixelType x) Image & antialias (unsigned iterations =50, double maxRMSErr =0.01f, int layers =3) antialiases image Image & recenter () Image & resample (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & resample (const Vector & physicalSpacing, InterpolationType interp =Linear) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing Image & resample (double isoSpacing =1.0, InterpolationType interp =Linear) resamples image using isotropic physical spacing Image & resize (Dims logicalDims, InterpolationType interp =Linear) Image & pad (int padding, PixelType value =0.0) pads an image by same number of voxels in all directions with constant value Image & pad (int padx, int pady, int padz, PixelType value =0.0) pads an image by desired number of voxels in each direction with constant value Image & pad ( IndexRegion & region, PixelType value =0.0) pads an image to include the given region with constant value Image & translate (const Vector3 & v) helper to simply translate image Image & scale (const Vector3 & v) helper to simply scale image around center (not origin) Image & rotate (const double angle, const Vector3 & axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) Image & rotate (const double angle, Axis axis) helper to simply rotate around axis through center (not origin) by given angle (in radians) TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image TransformPtr createRigidRegistrationTransform (const Image & target_dt, float isoValue =0.0, unsigned iterations =20) Image & applyTransform (const TransformPtr transform, InterpolationType interp =Linear) applies the given transformation to the image by using resampling filter Image & applyTransform (const TransformPtr transform, const Point3 origin, const Dims dims, const Vector3 spacing, const ImageType::DirectionType direction, InterpolationType interp =NearestNeighbor) Image & extractLabel (const PixelType label =1.0) Image & closeHoles (const PixelType foreground =0.0) closes holes in a given volume, default foreground value assumes a binary volume Image & binarize (PixelType minVal =0.0, PixelType maxVal =std::numeric_limits< PixelType >:: max (), PixelType innerVal =1.0, PixelType outerVal =0.0) threholds image into binary label based on upper and lower intensity bounds given by user Image & computeDT (PixelType isoValue =0.0) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue Image & applyCurvatureFilter (unsigned iterations =10) denoises an image using curvature driven flow using curvature flow image filter Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter Image & applySigmoidFilter (double alpha =10.0, double beta =10.0) computes sigmoid function pixel-wise using sigmoid image filter Image & applyTPLevelSetFilter (const Image & featureImage, double scaling =20.0) segements structures in images using topology preserving geodesic active contour level set filter Image & topologyPreservingSmooth (float scaling =20.0, float sigmoidAlpha =10.5, float sigmoidBeta =10.0) Image & applyIntensityFilter (double minVal, double maxVal) applies intensity windowing image filter Image & gaussianBlur (double sigma =0.0) applies gaussian blur with given sigma Image & crop ( PhysicalRegion region, const int padding =0) crops the image down to the given region, with optional padding added Image & clip (const Plane plane, const PixelType val =0.0) clips an image using a cutting plane Image & reflect (const Axis & axis) Image & setOrigin (Point3 origin =Point3({0, 0, 0})) sets the image origin in physical space to the given value Image & setSpacing (Vector3 spacing) sets the image spacing to the given value Image & setCoordsys (ImageType::DirectionType coordsys) sets the coordinate system in which this image lives in physical space Image & isolate () isolate the largest object in a binary segmentation Dims dims () const logical dimensions of the image Point3 size () const physical dimensions of the image (dims * spacing) Vector spacing () const physical spacing of the image Point3 origin () const physical coordinates of image origin Point3 center () const physical coordinates of center of this image ImageType::DirectionType coordsys () const return coordinate system in which this image lives in physical space Point3 centerOfMass (PixelType minVal =0.0, PixelType maxVal =1.0) const returns average physical coordinate of pixels in range (minval, maxval] PixelType min () minimum of image PixelType max () maximum of image PixelType mean () mean of image PixelType std () standard deviation of image IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space PhysicalRegion physicalBoundingBox (PixelType isovalue) const bounding box of largest region of data >= the given isoValue in physical space PhysicalRegion logicalToPhysical ( IndexRegion region) const converts a bounding box in logical (index) space to this image's index coordinates IndexRegion physicalToLogical ( PhysicalRegion region) const converts a bounding box in physical space to this image's logical (index) coordinates Point3 logicalToPhysical (const Coord & c) const converts from pixel coordinates to physical space Coord physicalToLogical (const Point3 & p) const converts from a physical coordinate to a logical coordinate bool isInside (const Point3 & p) const checks if a given point is inside the image ImageIterator iterator () creates an image iterator and returns it bool compare (const Image & other, bool verifyall =true, double tolerance =0.0, double precision =1e-12) const compares this with another image using the region of interest filter bool operator== (const Image & other) const compares this with another image using the region of interest filter Image & write (const std::string & filename, bool compressed =true) writes image, format specified by filename extension Mesh toMesh (PixelType isovalue) const converts image to mesh Image::PixelType evaluate (Point p) Evaluates the image at a given position. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#detailed-description","text":"class shapeworks :: Image ; This class represents a 3D image volume and operations that can be performed on images.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#enum-interpolationtype","text":"Enumerator Value Description Linear NearestNeighbor","title":"enum InterpolationType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-pixeltype","text":"using shapeworks :: Image :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imagetype","text":"using shapeworks :: Image :: ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-statsptr","text":"using shapeworks :: Image :: StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ;","title":"using StatsPtr"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-imageiterator","text":"using shapeworks :: Image :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#using-interpolatortype","text":"using shapeworks :: Image :: InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ;","title":"using InterpolatorType"},{"location":"api/Classes/classshapeworks_1_1Image.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image","text":"Image ( const Dims dims )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_1","text":"inline Image ( const std :: string & pathname )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_2","text":"inline Image ( ImageType :: Pointer imagePtr )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_3","text":"Image ( const vtkSmartPointer < vtkImageData > vtkImage )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_4","text":"inline Image ( Image && img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-image_5","text":"inline Image ( const Image & img )","title":"function Image"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator","text":"Image & operator = ( const Image & img )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_1","text":"Image & operator = ( Image && img ) lvalue assignment operator","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-imagetypepointer","text":"inline operator ImageType :: Pointer () rvalue assignment operator return this as an ITK image","title":"function operator ImageType::Pointer"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getitkimage","text":"inline ImageType :: Pointer getITKImage () const","title":"function getITKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getvtkimage","text":"vtkSmartPointer < vtkImageData > getVTKImage () const creates a VTK filter for the given image","title":"function getVTKImage"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-","text":"Image & operator - () negation operator","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_2","text":"Image operator + ( const Image & other ) const plus operator to add two images","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_3","text":"Image & operator += ( const Image & other )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_1","text":"Image operator - ( const Image & other ) const minus operator to add two images","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_2","text":"Image & operator -= ( const Image & other )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_4","text":"Image operator * ( const Image & other ) const multiply operator to multiply two images","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_5","text":"Image operator * ( const PixelType x ) const multiply operator to scale contents of an image","title":"function operator*"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_6","text":"Image & operator *= ( const PixelType x )","title":"function operator*="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_7","text":"Image operator / ( const PixelType x ) const divide operator to scale contents of an image","title":"function operator/"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_8","text":"Image & operator /= ( const PixelType x )","title":"function operator/="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_9","text":"Image operator + ( const PixelType x ) const plus operator to shift contents of an image","title":"function operator+"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_10","text":"Image & operator += ( const PixelType x )","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_3","text":"Image operator - ( const PixelType x ) const minus operator to shift contents of an image","title":"function operator-"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator-_4","text":"Image & operator -= ( const PixelType x )","title":"function operator-="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-antialias","text":"Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ) antialiases image","title":"function antialias"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-recenter","text":"Image & recenter () helper identical to setOrigin(image.center()) changing origin (in the image header) to physcial center of the image","title":"function recenter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample","text":"Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_1","text":"Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ) resamples image using new physical spacing, updating logical dims to keep all image data for this spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resample_2","text":"Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ) resamples image using isotropic physical spacing","title":"function resample"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-resize","text":"Image & resize ( Dims logicalDims , InterpolationType interp = Linear ) changes logical image size, computing new physical spacing based on this size (i.e., physical image size remains the same)","title":"function resize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad","text":"Image & pad ( int padding , PixelType value = 0.0 ) pads an image by same number of voxels in all directions with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_1","text":"Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ) pads an image by desired number of voxels in each direction with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-pad_2","text":"Image & pad ( IndexRegion & region , PixelType value = 0.0 ) pads an image to include the given region with constant value","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-translate","text":"Image & translate ( const Vector3 & v ) helper to simply translate image","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-scale","text":"Image & scale ( const Vector3 & v ) helper to simply scale image around center (not origin)","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate","text":"Image & rotate ( const double angle , const Vector3 & axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-rotate_1","text":"Image & rotate ( const double angle , Axis axis ) helper to simply rotate around axis through center (not origin) by given angle (in radians)","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createcenterofmasstransform","text":"TransformPtr createCenterOfMassTransform () creates a transform that translates center of mass to center of image","title":"function createCenterOfMassTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-createrigidregistrationtransform","text":"TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ) creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"function createRigidRegistrationTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform","text":"Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ) applies the given transformation to the image by using resampling filter","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytransform_1","text":"Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ) applies the given transformation to the image by using resampling filter with new origin, dims, spacing and direction values","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-extractlabel","text":"Image & extractLabel ( const PixelType label = 1.0 ) extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image","title":"function extractLabel"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-closeholes","text":"Image & closeHoles ( const PixelType foreground = 0.0 ) closes holes in a given volume, default foreground value assumes a binary volume","title":"function closeHoles"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-binarize","text":"Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ) threholds image into binary label based on upper and lower intensity bounds given by user","title":"function binarize"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-computedt","text":"Image & computeDT ( PixelType isoValue = 0.0 ) computes distance transform volume from a (preferably antialiased) binary image using the specified isovalue","title":"function computeDT"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applycurvaturefilter","text":"Image & applyCurvatureFilter ( unsigned iterations = 10 ) denoises an image using curvature driven flow using curvature flow image filter","title":"function applyCurvatureFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applygradientfilter","text":"Image & applyGradientFilter () computes gradient magnitude at each pixel using gradient magnitude filter","title":"function applyGradientFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applysigmoidfilter","text":"Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ) computes sigmoid function pixel-wise using sigmoid image filter","title":"function applySigmoidFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applytplevelsetfilter","text":"Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ) segements structures in images using topology preserving geodesic active contour level set filter","title":"function applyTPLevelSetFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-topologypreservingsmooth","text":"Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ) creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"function topologyPreservingSmooth"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-applyintensityfilter","text":"Image & applyIntensityFilter ( double minVal , double maxVal ) applies intensity windowing image filter","title":"function applyIntensityFilter"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-gaussianblur","text":"Image & gaussianBlur ( double sigma = 0.0 ) applies gaussian blur with given sigma","title":"function gaussianBlur"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-crop","text":"Image & crop ( PhysicalRegion region , const int padding = 0 ) crops the image down to the given region, with optional padding added","title":"function crop"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-clip","text":"Image & clip ( const Plane plane , const PixelType val = 0.0 ) clips an image using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-reflect","text":"Image & reflect ( const Axis & axis ) reflect image around the plane specified by the logical center and the given normal (ex: <1,0,0> reflects across YZ-plane).","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setorigin","text":"Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 }) ) sets the image origin in physical space to the given value","title":"function setOrigin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setspacing","text":"Image & setSpacing ( Vector3 spacing ) sets the image spacing to the given value","title":"function setSpacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-setcoordsys","text":"Image & setCoordsys ( ImageType :: DirectionType coordsys ) sets the coordinate system in which this image lives in physical space","title":"function setCoordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isolate","text":"Image & isolate () isolate the largest object in a binary segmentation","title":"function isolate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-dims","text":"inline Dims dims () const logical dimensions of the image","title":"function dims"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-size","text":"inline Point3 size () const physical dimensions of the image (dims * spacing)","title":"function size"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-spacing","text":"inline Vector spacing () const physical spacing of the image","title":"function spacing"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-origin","text":"inline Point3 origin () const physical coordinates of image origin","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-center","text":"inline Point3 center () const physical coordinates of center of this image","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-coordsys","text":"inline ImageType :: DirectionType coordsys () const return coordinate system in which this image lives in physical space","title":"function coordsys"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-centerofmass","text":"Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const returns average physical coordinate of pixels in range (minval, maxval]","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-min","text":"PixelType min () minimum of image","title":"function min"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-max","text":"PixelType max () maximum of image","title":"function max"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-mean","text":"PixelType mean () mean of image","title":"function mean"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-std","text":"PixelType std () standard deviation of image","title":"function std"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicalboundingbox","text":"IndexRegion logicalBoundingBox () const bounding box of complete image in logical (index) space","title":"function logicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox","text":"PhysicalRegion physicalBoundingBox () const bounding box of complete image in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicalboundingbox_1","text":"PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const bounding box of largest region of data >= the given isoValue in physical space","title":"function physicalBoundingBox"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical","text":"PhysicalRegion logicalToPhysical ( IndexRegion region ) const converts a bounding box in logical (index) space to this image's index coordinates","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological","text":"IndexRegion physicalToLogical ( PhysicalRegion region ) const converts a bounding box in physical space to this image's logical (index) coordinates","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-logicaltophysical_1","text":"Point3 logicalToPhysical ( const Coord & c ) const converts from pixel coordinates to physical space","title":"function logicalToPhysical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-physicaltological_1","text":"Coord physicalToLogical ( const Point3 & p ) const converts from a physical coordinate to a logical coordinate","title":"function physicalToLogical"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-isinside","text":"bool isInside ( const Point3 & p ) const checks if a given point is inside the image","title":"function isInside"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-iterator","text":"ImageIterator iterator () creates an image iterator and returns it","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-compare","text":"bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const compares this with another image using the region of interest filter","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-operator_11","text":"inline bool operator == ( const Image & other ) const compares this with another image using the region of interest filter","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Image.html#function-write","text":"Image & write ( const std :: string & filename , bool compressed = true ) writes image, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-tomesh","text":"Mesh toMesh ( PixelType isovalue ) const converts image to mesh","title":"function toMesh"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-evaluate","text":"Image :: PixelType evaluate ( Point p ) Evaluates the image at a given position.","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1Image.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Image.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Image.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html","text":"shapeworks::ImageCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#shapeworksimagecommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ImageCommand"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html","text":"shapeworks::ImageDomain More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T > Public Types Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Additional inherited members Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomain ; Public Types Documentation using Pointer using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs using ImageType using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class. using PointType using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image). Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetOrigin inline PointType GetOrigin () const function GetSize inline ImageType :: SizeType GetSize () const function GetSpacing inline ImageType :: SpacingType GetSpacing () const function GetIndex inline ImageType :: RegionType :: IndexType GetIndex () const function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function Sample inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking. function GetMaxDiameter inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Protected Functions Documentation function GetVDBImage inline openvdb :: FloatGrid :: Ptr GetVDBImage () const function ImageDomain inline ImageDomain () function ~ImageDomain inline virtual ~ ImageDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function transform inline openvdb :: math :: Transform :: Ptr transform () const function ToVDBCoord inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#shapeworksimagedomain","text":"More... Inherits from shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradients< T >","title":"shapeworks::ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types","text":"Name using std::shared_ptr< ImageDomain > Pointer using itk::Image< T, DIMENSION > ImageType using ParticleRegionDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions","text":"Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual void DeletePartialDerivativeImages () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointer","text":"using shapeworks :: ImageDomain < T >:: Pointer = std :: shared_ptr < ImageDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-imagetype","text":"using shapeworks :: ImageDomain < T >:: ImageType = itk :: Image < T , DIMENSION > ; Type of the ITK image used by this class.","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#using-pointtype","text":"using shapeworks :: ImageDomain < T >:: PointType = ParticleRegionDomain :: PointType ; Point type of the domain (not the image).","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getorigin","text":"inline PointType GetOrigin () const","title":"function GetOrigin"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getsize","text":"inline ImageType :: SizeType GetSize () const","title":"function GetSize"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getspacing","text":"inline ImageType :: SpacingType GetSpacing () const","title":"function GetSpacing"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getindex","text":"inline ImageType :: RegionType :: IndexType GetIndex () const","title":"function GetIndex"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-sample","text":"inline T Sample ( const PointType & p ) const Sample the image at a point. This method performs bounds checking.","title":"function Sample"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getmaxdiameter","text":"inline virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-getvdbimage","text":"inline openvdb :: FloatGrid :: Ptr GetVDBImage () const","title":"function GetVDBImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain","text":"inline ImageDomain ()","title":"function ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-imagedomain_1","text":"inline virtual ~ ImageDomain ()","title":"function ~ImageDomain"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-transform","text":"inline openvdb :: math :: Transform :: Ptr transform () const","title":"function transform"},{"location":"api/Classes/classshapeworks_1_1ImageDomain.html#function-tovdbcoord","text":"inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function ToVDBCoord"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html","text":"shapeworks::ImageDomainWithCurvature More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T > Public Types Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithCurvature ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ; typedef VnlMatrixType typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute Protected Functions Documentation function ImageDomainWithCurvature inline ImageDomainWithCurvature () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImageDomainWithCurvature inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#shapeworksimagedomainwithcurvature","text":"More... Inherits from shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImplicitSurfaceDomain< T >","title":"shapeworks::ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types","text":"Name typedef ImageDomainWithGradN < T > Superclass typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::VnlMatrixType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions","text":"Name ImageDomainWithCurvature () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImageDomainWithCurvature ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::GradNType GradNType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Types inherited from shapeworks::ImageDomain< T > Name using std::shared_ptr< ImageDomain > Pointer Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Types inherited from shapeworks::ParticleRegionDomain Name using std::shared_ptr< ParticleRegionDomain > Pointer Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name typedef std::shared_ptr< ParticleDomain > Pointer using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithCurvature ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-superclass","text":"typedef ImageDomainWithGradN < T > shapeworks :: ImageDomainWithCurvature < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithCurvature < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithCurvature < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#typedef-vnlmatrixtype","text":"typedef Superclass :: VnlMatrixType shapeworks :: ImageDomainWithCurvature < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature","text":"inline ImageDomainWithCurvature ()","title":"function ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html#function-imagedomainwithcurvature_1","text":"inline virtual ~ ImageDomainWithCurvature () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ImageDomainWithCurvature"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html","text":"shapeworks::ImageDomainWithGradN More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T > Public Types Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradN ; Public Types Documentation typedef Superclass typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs using Pointer using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef PointType typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ; typedef GradNType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ; typedef VnlMatrixType typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension. function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradN inline ImageDomainWithGradN () function ~ImageDomainWithGradN inline virtual ~ ImageDomainWithGradN () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#shapeworksimagedomainwithgradn","text":"More... Inherits from shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithCurvature< T >","title":"shapeworks::ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types","text":"Name typedef ImageDomainWithGradients < T > Superclass using std::shared_ptr< ImageDomainWithGradN > Pointer typedef Superclass::PointType PointType typedef Superclass::ImageType ImageType typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions","text":"Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradN ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-superclass","text":"typedef ImageDomainWithGradients < T > shapeworks :: ImageDomainWithGradN < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradN < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradN > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImageDomainWithGradN < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImageDomainWithGradN < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-gradntype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#typedef-vnlmatrixtype","text":"typedef Superclass :: GradNType shapeworks :: ImageDomainWithGradN < T >:: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint Sample the GradN at a point. This method performs no bounds checking. To check bounds, use IsInsideBuffer. SampleGradN returns a vnl matrix of size VDimension x VDimension.","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomainWithGradients::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn","text":"inline ImageDomainWithGradN ()","title":"function ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-imagedomainwithgradn_1","text":"inline virtual ~ ImageDomainWithGradN ()","title":"function ~ImageDomainWithGradN"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradN.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html","text":"shapeworks::ImageDomainWithGradients More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T > Public Types Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient () Additional inherited members Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImageDomainWithGradients ; Public Types Documentation using Pointer using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ; typedef PointType typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image). typedef ImageType typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ; typedef VectorType typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ; typedef VnlVectorType typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ; Public Functions Documentation function SetImage inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound. function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function ProjectVectorToSurfaceTangent inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified. function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed. Protected Functions Documentation function ImageDomainWithGradients inline ImageDomainWithGradients () function ~ImageDomainWithGradients inline virtual ~ ImageDomainWithGradients () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function GetVDBGradient inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#shapeworksimagedomainwithgradients","text":"More... Inherits from shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Inherited by shapeworks::ImageDomainWithGradN< T >","title":"shapeworks::ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types","text":"Name using std::shared_ptr< ImageDomainWithGradients < T > > Pointer typedef ImageDomain < T >:: PointType PointType typedef ImageDomain < T >:: ImageType ImageType typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions","text":"Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions","text":"Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () void PrintSelf (std::ostream & os, itk::Indent indent) const openvdb::VectorGrid::Ptr GetVDBGradient ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ImageDomain< T > Name virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#detailed-description","text":"template < class T > class shapeworks :: ImageDomainWithGradients ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#using-pointer","text":"using shapeworks :: ImageDomainWithGradients < T >:: Pointer = std :: shared_ptr < ImageDomainWithGradients < T > > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-pointtype","text":"typedef ImageDomain < T >:: PointType shapeworks :: ImageDomainWithGradients < T >:: PointType ; Point type of the domain (not necessarily of the image).","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-imagetype","text":"typedef ImageDomain < T >:: ImageType shapeworks :: ImageDomainWithGradients < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vectortype","text":"typedef itk :: FixedArray < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < T , DIMENSION > shapeworks :: ImageDomainWithGradients < T >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-setimage","text":"inline void SetImage ( ImageType * I , double narrow_band ) Set/Get the itk::Image specifying the particle domain. The set method modifies the parent class LowerBound and UpperBound.","title":"function SetImage"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-projectvectortosurfacetangent","text":"inline vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION > & gradE , const PointType & pos , int idx ) const override This method is called by an optimizer after a call to Evaluate and may be used to apply any constraints the resulting vector, such as a projection to the surface tangent plane. Returns true if the gradient was modified.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ImageDomain::DeleteImages Reimplemented by : shapeworks::ImageDomainWithGradN::DeleteImages Used when a domain is fixed.","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients","text":"inline ImageDomainWithGradients ()","title":"function ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-imagedomainwithgradients_1","text":"inline virtual ~ ImageDomainWithGradients ()","title":"function ~ImageDomainWithGradients"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImageDomainWithGradients.html#function-getvdbgradient","text":"inline openvdb :: VectorGrid :: Ptr GetVDBGradient () Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetVDBGradient"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html","text":"shapeworks::ImageLabel An extention of QLabel especially for scaled images. #include Inherits from QLabel Public Functions Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap) Protected Functions Name void resizeEvent (QResizeEvent * reisze_event) override Public Functions Documentation function ImageLabel inline ImageLabel ( QWidget * parent ) function setPixmap inline void setPixmap ( const QPixmap & pixmap ) Protected Functions Documentation function resizeEvent void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#shapeworksimagelabel","text":"An extention of QLabel especially for scaled images. #include Inherits from QLabel","title":"shapeworks::ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions","text":"Name ImageLabel (QWidget * parent) void setPixmap (const QPixmap & pixmap)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions","text":"Name void resizeEvent (QResizeEvent * reisze_event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-imagelabel","text":"inline ImageLabel ( QWidget * parent )","title":"function ImageLabel"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-setpixmap","text":"inline void setPixmap ( const QPixmap & pixmap )","title":"function setPixmap"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageLabel.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * reisze_event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html","text":"shapeworks::ImageUtils Helper functions for image. #include Public Types Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1) Public Types Documentation using TPSTransform using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points Public Functions Documentation function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue function createWarpTransform static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#shapeworksimageutils","text":"Helper functions for image. #include ","title":"shapeworks::ImageUtils"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types","text":"Name using itk::ThinPlateSplineKernelTransform< double, 3 > TPSTransform computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions","text":"Name PhysicalRegion boundingBox (const std::vector< std::string > & filenames, Image::PixelType isoValue =1.0) calculate bounding box for images using the region of data <= the given isoValue PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Image > > & images, Image::PixelType isoValue =1.0) calculate bounding box for shapework images using the region of data <= the given isoValue TPSTransform::Pointer createWarpTransform (const std::string & source_landmarks_file, const std::string & target_landmarks_file, const int stride =1)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#using-tpstransform","text":"using shapeworks :: ImageUtils :: TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; computes a thin plate spline (TSP) transform from the source to the target landmarks (in the given files) using every stride points","title":"using TPSTransform"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , Image :: PixelType isoValue = 1.0 ) calculate bounding box for images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image > > & images , Image :: PixelType isoValue = 1.0 ) calculate bounding box for shapework images using the region of data <= the given isoValue","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1ImageUtils.html#function-createwarptransform","text":"static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function createWarpTransform"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html","text":"shapeworks::ImplicitSurfaceDomain More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain Public Types Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType Public Functions Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain () Additional inherited members Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Detailed Description template < class T > class shapeworks :: ImplicitSurfaceDomain ; Public Types Documentation typedef Superclass typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs typedef Pointer typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ; typedef ImageType typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ; typedef PointType typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ; Public Functions Documentation function SetTolerance inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance. function GetTolerance inline virtual T GetTolerance () function GetDomainType inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points. function UpdateParticlePosition inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function ImplicitSurfaceDomain inline ImplicitSurfaceDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ImplicitSurfaceDomain inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#shapeworksimplicitsurfacedomain","text":"More... Inherits from shapeworks::ImageDomainWithCurvature< T > , shapeworks::ImageDomainWithGradN< T > , shapeworks::ImageDomainWithGradients< T > , shapeworks::ImageDomain< T > , shapeworks::ParticleRegionDomain , shapeworks::ParticleDomain","title":"shapeworks::ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types","text":"Name typedef ImageDomainWithCurvature < T > Superclass typedef std::shared_ptr< ImplicitSurfaceDomain > Pointer typedef Superclass::ImageType ImageType typedef Superclass::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions","text":"Name virtual void SetTolerance (const T _Tolerance) virtual T GetTolerance () virtual shapeworks::DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override PointType UpdateParticlePosition (const PointType & point, int idx, vnl_vector_fixed< double, DIMENSION > & update) const override virtual PointType GetZeroCrossingPoint () const override ImplicitSurfaceDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ImplicitSurfaceDomain ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ImageDomainWithCurvature< T > Name typedef Superclass::VnlMatrixType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override Protected Functions inherited from shapeworks::ImageDomainWithCurvature< T > Name ImageDomainWithCurvature () virtual ~ImageDomainWithCurvature () Public Types inherited from shapeworks::ImageDomainWithGradN< T > Name typedef Superclass::GradNType GradNType typedef Superclass::GradNType VnlMatrixType Public Functions inherited from shapeworks::ImageDomainWithGradN< T > Name void SetImage ( ImageType * I, double narrow_band) virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override virtual void DeletePartialDerivativeImages () override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradN< T > Name ImageDomainWithGradN () virtual ~ImageDomainWithGradN () Public Types inherited from shapeworks::ImageDomainWithGradients< T > Name typedef itk::FixedArray< T, DIMENSION > VectorType typedef vnl_vector_fixed< T, DIMENSION > VnlVectorType Public Functions inherited from shapeworks::ImageDomainWithGradients< T > Name void SetImage ( ImageType * I, double narrow_band) virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & p, int idx) const virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & p, int idx) const vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (vnl_vector_fixed< double, DIMENSION > & gradE, const PointType & pos, int idx) const override virtual void DeleteImages () override Protected Functions inherited from shapeworks::ImageDomainWithGradients< T > Name ImageDomainWithGradients () virtual ~ImageDomainWithGradients () openvdb::VectorGrid::Ptr GetVDBGradient () Public Functions inherited from shapeworks::ImageDomain< T > Name void SetImage ( ImageType * I, double narrow_band) virtual double GetSurfaceArea () const override PointType GetOrigin () const ImageType::SizeType GetSize () const ImageType::SpacingType GetSpacing () const ImageType::RegionType::IndexType GetIndex () const virtual PointType GetValidLocationNear ( PointType p) const override T Sample (const PointType & p) const virtual double GetMaxDiameter () const override virtual void DeleteImages () override virtual void UpdateZeroCrossingPoint () override Protected Functions inherited from shapeworks::ImageDomain< T > Name openvdb::FloatGrid::Ptr GetVDBImage () const ImageDomain () virtual ~ImageDomain () openvdb::math::Transform::Ptr transform () const openvdb::Vec3R ToVDBCoord (const PointType & p) const Public Functions inherited from shapeworks::ParticleRegionDomain Name virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions inherited from shapeworks::ParticleRegionDomain Name ParticleRegionDomain () virtual ~ParticleRegionDomain () bool IsInsideBuffer (const PointType & p) const Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#detailed-description","text":"template < class T > class shapeworks :: ImplicitSurfaceDomain ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-superclass","text":"typedef ImageDomainWithCurvature < T > shapeworks :: ImplicitSurfaceDomain < T >:: Superclass ; Standard class typedefs","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ImplicitSurfaceDomain > shapeworks :: ImplicitSurfaceDomain < T >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-imagetype","text":"typedef Superclass :: ImageType shapeworks :: ImplicitSurfaceDomain < T >:: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ImplicitSurfaceDomain < T >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-settolerance","text":"inline virtual void SetTolerance ( const T _Tolerance ) Set/Get the precision of the projection operation. The resulting projection will be within the specified tolerance.","title":"function SetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-gettolerance","text":"inline virtual T GetTolerance ()","title":"function GetTolerance"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getdomaintype","text":"inline virtual shapeworks :: DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This method constrains points to lie within the given domain and on a given implicit surface. If the point is not already on the surface, it is projected back to the surface using a Newton-Raphson iteration. IMPORTANT: This method returns the true/false value of its superclass, and does not indicate changes only due to projection. This is done for speed: we typically will only want to know if a point tried to move outside of the bounding box domain, since movement off the surface will be very common. Consider subclassing this method to add a check for significant differences in the input and output points.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-updateparticleposition","text":"inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION > & update ) const override","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain","text":"inline ImplicitSurfaceDomain ()","title":"function ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html#function-implicitsurfacedomain_1","text":"inline virtual ~ ImplicitSurfaceDomain () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ImplicitSurfaceDomain"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html","text":"shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include Public Functions Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Coord min Coord max Public Functions Documentation function IndexRegion IndexRegion () = default function IndexRegion IndexRegion ( const IndexRegion & ) = default function IndexRegion inline IndexRegion ( const Dims & dims ) function IndexRegion inline IndexRegion ( const Coord & _min , const Coord & _max ) function operator== inline bool operator == ( const IndexRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Coord origin () const function size inline Dims size () const function pad IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Coord min { 1000000000 , 1000000000 , 1000000000 }; variable max Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#shapeworksindexregion","text":"Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) #include ","title":"shapeworks::IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions","text":"Name IndexRegion () =default IndexRegion (const IndexRegion & ) =default IndexRegion (const Dims & dims) IndexRegion (const Coord & _min, const Coord & _max) bool operator== (const IndexRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Coord origin () const Dims size () const IndexRegion & pad (int padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes","text":"Name Coord min Coord max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion","text":"IndexRegion () = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_1","text":"IndexRegion ( const IndexRegion & ) = default","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_2","text":"inline IndexRegion ( const Dims & dims )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-indexregion_3","text":"inline IndexRegion ( const Coord & _min , const Coord & _max )","title":"function IndexRegion"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-operator","text":"inline bool operator == ( const IndexRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-origin","text":"inline Coord origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-size","text":"inline Dims size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#function-pad","text":"IndexRegion & pad ( int padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-min","text":"Coord min { 1000000000 , 1000000000 , 1000000000 };","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1IndexRegion.html#variable-max","text":"Coord max { -1000000000 , -1000000000 , -1000000000 }; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1Job.html","text":"shapeworks::Job Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob Public Signals Name void progress (double ) void finished () Public Functions Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal progress void progress ( double ) signal finished void finished () Public Functions Documentation function Job Job () function ~Job virtual ~ Job () function run virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run function name virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name function get_completion_message virtual QString get_completion_message () get a message to display when the job is complete function get_abort_message virtual QString get_abort_message () get a message to display when the job is aborted function start_timer void start_timer () start the timer function timer_elapsed qint64 timer_elapsed () how much time has elapsed since the timer was started function set_complete inline void set_complete ( bool complete ) set the job as complete function is_complete inline bool is_complete () const is the job complete? function abort inline void abort () abort the job function is_aborted inline bool is_aborted () const was the job aborted? Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#shapeworksjob","text":"Inherits from QObject Inherited by shapeworks::DeepSSMJob , shapeworks::GroupPvalueJob , shapeworks::NetworkAnalysisJob , shapeworks::ParticleAreaJob , shapeworks::ParticleNormalEvaluationJob , shapeworks::ShapeEvaluationJob , shapeworks::StatsGroupLDAJob","title":"shapeworks::Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals","text":"Name void progress (double ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions","text":"Name Job () virtual ~Job () virtual void run () =0 run the job virtual QString name () =0 get the name of the job virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-progress","text":"void progress ( double )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Job.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Job.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job","text":"Job ()","title":"function Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-job_1","text":"virtual ~ Job ()","title":"function ~Job"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-run","text":"virtual void run () = 0 run the job Reimplemented by : shapeworks::ShapeEvaluationJob::run , shapeworks::DeepSSMJob::run , shapeworks::GroupPvalueJob::run , shapeworks::NetworkAnalysisJob::run , shapeworks::ParticleAreaJob::run , shapeworks::ParticleNormalEvaluationJob::run , shapeworks::StatsGroupLDAJob::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-name","text":"virtual QString name () = 0 get the name of the job Reimplemented by : shapeworks::ShapeEvaluationJob::name , shapeworks::DeepSSMJob::name , shapeworks::GroupPvalueJob::name , shapeworks::NetworkAnalysisJob::name , shapeworks::ParticleAreaJob::name , shapeworks::ParticleNormalEvaluationJob::name , shapeworks::StatsGroupLDAJob::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_completion_message","text":"virtual QString get_completion_message () get a message to display when the job is complete","title":"function get_completion_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-get_abort_message","text":"virtual QString get_abort_message () get a message to display when the job is aborted","title":"function get_abort_message"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-start_timer","text":"void start_timer () start the timer","title":"function start_timer"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-timer_elapsed","text":"qint64 timer_elapsed () how much time has elapsed since the timer was started","title":"function timer_elapsed"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-set_complete","text":"inline void set_complete ( bool complete ) set the job as complete","title":"function set_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_complete","text":"inline bool is_complete () const is the job complete?","title":"function is_complete"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-abort","text":"inline void abort () abort the job","title":"function abort"},{"location":"api/Classes/classshapeworks_1_1Job.html#function-is_aborted","text":"inline bool is_aborted () const was the job aborted? Updated on 2023-10-25 at 15:40:27 +0000","title":"function is_aborted"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html","text":"shapeworks::JsonProjectReader JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader Public Functions Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override Additional inherited members Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_ Detailed Description class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format Public Functions Documentation function JsonProjectReader JsonProjectReader ( Project & project ) function ~JsonProjectReader ~ JsonProjectReader () function read_project virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#shapeworksjsonprojectreader","text":"JSON file format reader for Project . More... #include Inherits from shapeworks::ProjectReader","title":"shapeworks::JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions","text":"Name JsonProjectReader ( Project & project) ~JsonProjectReader () virtual bool read_project (std::string filename) override Read a project from a file. virtual StringMap get_parameters (std::string name) override virtual StringMultiMap get_multi_parameters (std::string name) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ProjectReader Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions inherited from shapeworks::ProjectReader Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. Protected Functions inherited from shapeworks::ProjectReader Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes inherited from shapeworks::ProjectReader Name Project & project_","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#detailed-description","text":"class shapeworks :: JsonProjectReader ; JSON file format reader for Project . This class enables reader of Project objects from JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader","text":"JsonProjectReader ( Project & project )","title":"function JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-jsonprojectreader_1","text":"~ JsonProjectReader ()","title":"function ~JsonProjectReader"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) override Read a project from a file. Reimplements : shapeworks::ProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) override Reimplements : shapeworks::ProjectReader::get_multi_parameters Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html","text":"shapeworks::JsonProjectWriter JSON file format writer for Project . More... #include Public Functions Name bool write_project ( Project & project, std::string filename) Detailed Description class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format Public Functions Documentation function write_project static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#shapeworksjsonprojectwriter","text":"JSON file format writer for Project . More... #include ","title":"shapeworks::JsonProjectWriter"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions","text":"Name bool write_project ( Project & project, std::string filename)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#detailed-description","text":"class shapeworks :: JsonProjectWriter ; JSON file format writer for Project . This class enables writing of Project objects to JSON file format","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1JsonProjectWriter.html#function-write_project","text":"static bool write_project ( Project & project , std :: string filename ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_project"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html","text":"shapeworks::KeyboardShortcuts More... #include Inherits from QDialog Public Functions Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor Detailed Description class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts Public Functions Documentation function KeyboardShortcuts KeyboardShortcuts ( QWidget * parent ) constructor function ~KeyboardShortcuts virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#shapeworkskeyboardshortcuts","text":"More... #include Inherits from QDialog","title":"shapeworks::KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions","text":"Name KeyboardShortcuts (QWidget * parent) constructor virtual ~KeyboardShortcuts () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#detailed-description","text":"class shapeworks :: KeyboardShortcuts ; The KeyboardShortcuts is a QDialog that implements the dialog for displaying the keyboard shortcuts","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts","text":"KeyboardShortcuts ( QWidget * parent ) constructor","title":"function KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1KeyboardShortcuts.html#function-keyboardshortcuts_1","text":"virtual ~ KeyboardShortcuts () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~KeyboardShortcuts"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html","text":"shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. #include Public Attributes Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_ Public Attributes Documentation variable domain_ std :: string domain_ ; variable domain_id_ int domain_id_ = -1 ; variable landmark_id int landmark_id = -1 ; variable name_ std :: string name_ ; variable visible_ bool visible_ = true ; variable color_ std :: string color_ ; variable comment_ std :: string comment_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#shapeworkslandmarkdefinition","text":"Landmark class containing properties of each landmark. #include ","title":"shapeworks::LandmarkDefinition"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes","text":"Name std::string domain_ int domain_id_ int landmark_id std::string name_ bool visible_ std::string color_ std::string comment_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_","text":"std :: string domain_ ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-domain_id_","text":"int domain_id_ = -1 ;","title":"variable domain_id_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-landmark_id","text":"int landmark_id = -1 ;","title":"variable landmark_id"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-name_","text":"std :: string name_ ;","title":"variable name_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-visible_","text":"bool visible_ = true ;","title":"variable visible_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-color_","text":"std :: string color_ ;","title":"variable color_"},{"location":"api/Classes/classshapeworks_1_1LandmarkDefinition.html#variable-comment_","text":"std :: string comment_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable comment_"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html","text":"shapeworks::LandmarkItemDelegate Inherits from QStyledItemDelegate Public Signals Name void button_clicked (int row) Public Functions Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model) Public Signals Documentation signal button_clicked void button_clicked ( int row ) Public Functions Documentation function LandmarkItemDelegate LandmarkItemDelegate ( QObject * parent = 0 ) function paint void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function createEditor QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function setEditorData void setEditorData ( QWidget * editor , const QModelIndex & index ) const override function setModelData void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override function sizeHint QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override function updateEditorGeometry void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override function set_button_text void set_button_text ( std :: string button_text ) function set_model void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#shapeworkslandmarkitemdelegate","text":"Inherits from QStyledItemDelegate","title":"shapeworks::LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals","text":"Name void button_clicked (int row)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions","text":"Name LandmarkItemDelegate (QObject * parent =0) void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override QWidget * createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override void setEditorData (QWidget * editor, const QModelIndex & index) const override void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const override void updateEditorGeometry (QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override void set_button_text (std::string button_text) void set_model (std::shared_ptr< LandmarkTableModel > model)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#signal-button_clicked","text":"void button_clicked ( int row )","title":"signal button_clicked"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-landmarkitemdelegate","text":"LandmarkItemDelegate ( QObject * parent = 0 )","title":"function LandmarkItemDelegate"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-paint","text":"void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function paint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-createeditor","text":"QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function createEditor"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-seteditordata","text":"void setEditorData ( QWidget * editor , const QModelIndex & index ) const override","title":"function setEditorData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-setmodeldata","text":"void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override","title":"function setModelData"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-sizehint","text":"QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function sizeHint"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-updateeditorgeometry","text":"void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override","title":"function updateEditorGeometry"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_button_text","text":"void set_button_text ( std :: string button_text )","title":"function set_button_text"},{"location":"api/Classes/classshapeworks_1_1LandmarkItemDelegate.html#function-set_model","text":"void set_model ( std :: shared_ptr < LandmarkTableModel > model ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_model"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html","text":"shapeworks::LandmarkTableModel Inherits from QAbstractTableModel Public Slots Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click. Public Functions Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation. Public Slots Documentation slot new_landmark void new_landmark () create a new landmark slot handle_click void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked. slot handle_double_click void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked. slot handle_header_click void handle_header_click ( int index ) Handle header click. Public Functions Documentation function LandmarkTableModel LandmarkTableModel ( QObject * parent = 0 ) Constructor. function ~LandmarkTableModel virtual ~ LandmarkTableModel () Destructor. function set_session void set_session ( QSharedPointer < Session > session ) Attach to a session. function store_landmarks void store_landmarks () Store landmarks back to project. function set_active_domain void set_active_domain ( int domain ) Set the currently active domain. function update_table void update_table () Update the table of landmarks from the project. function update_cells void update_cells () Update table cells. function remove_rows void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices. function toggle_visible void toggle_visible () Toggle tri-state button for visibility in horizontal header. function set_placing_landmark void set_placing_landmark ( int row ) Set the currently placing landmark. function delete_landmarks void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks function rowCount int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation. function columnCount int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation. function data QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation. function setData bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation. function headerData QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation. function flags Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#shapeworkslandmarktablemodel","text":"Inherits from QAbstractTableModel","title":"shapeworks::LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots","text":"Name void new_landmark () create a new landmark void handle_click (const QModelIndex & index) Handler for when table cells are clicked. void handle_double_click (const QModelIndex & index) Handler for when table cells are double clicked. void handle_header_click (int index) Handle header click.","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions","text":"Name LandmarkTableModel (QObject * parent =0) Constructor. virtual ~LandmarkTableModel () Destructor. void set_session (QSharedPointer< Session > session) Attach to a session. void store_landmarks () Store landmarks back to project. void set_active_domain (int domain) Set the currently active domain. void update_table () Update the table of landmarks from the project. void update_cells () Update table cells. void remove_rows (const std::vector< int > & rows) Remove landmarks with specified row indices. void toggle_visible () Toggle tri-state button for visibility in horizontal header. void set_placing_landmark (int row) Set the currently placing landmark. void delete_landmarks (const QModelIndexList & list) delete the selected landmarks int rowCount (const QModelIndex & index) const override QAbstractTableModel::rowCount implementation. int columnCount (const QModelIndex & index) const override QAbstractTableModel::columnCount implementation. QVariant data (const QModelIndex & index, int role) const override QAbstractTableModel::data implementation. bool setData (const QModelIndex & index, const QVariant & value, int role) override QAbstractTableModel::setData implementation. QVariant headerData (int section, Qt::Orientation orientation, int role) const override QAbstractTableModel::headerData implementation. Qt::ItemFlags flags (const QModelIndex & index) const override QAbstractTableModel::flags implementation.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-new_landmark","text":"void new_landmark () create a new landmark","title":"slot new_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_click","text":"void handle_click ( const QModelIndex & index ) Handler for when table cells are clicked.","title":"slot handle_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_double_click","text":"void handle_double_click ( const QModelIndex & index ) Handler for when table cells are double clicked.","title":"slot handle_double_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#slot-handle_header_click","text":"void handle_header_click ( int index ) Handle header click.","title":"slot handle_header_click"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel","text":"LandmarkTableModel ( QObject * parent = 0 ) Constructor.","title":"function LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-landmarktablemodel_1","text":"virtual ~ LandmarkTableModel () Destructor.","title":"function ~LandmarkTableModel"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) Attach to a session.","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-store_landmarks","text":"void store_landmarks () Store landmarks back to project.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_active_domain","text":"void set_active_domain ( int domain ) Set the currently active domain.","title":"function set_active_domain"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_table","text":"void update_table () Update the table of landmarks from the project.","title":"function update_table"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-update_cells","text":"void update_cells () Update table cells.","title":"function update_cells"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-remove_rows","text":"void remove_rows ( const std :: vector < int > & rows ) Remove landmarks with specified row indices.","title":"function remove_rows"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-toggle_visible","text":"void toggle_visible () Toggle tri-state button for visibility in horizontal header.","title":"function toggle_visible"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-set_placing_landmark","text":"void set_placing_landmark ( int row ) Set the currently placing landmark.","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-delete_landmarks","text":"void delete_landmarks ( const QModelIndexList & list ) delete the selected landmarks","title":"function delete_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-rowcount","text":"int rowCount ( const QModelIndex & index ) const override QAbstractTableModel::rowCount implementation.","title":"function rowCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-columncount","text":"int columnCount ( const QModelIndex & index ) const override QAbstractTableModel::columnCount implementation.","title":"function columnCount"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-data","text":"QVariant data ( const QModelIndex & index , int role ) const override QAbstractTableModel::data implementation.","title":"function data"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-setdata","text":"bool setData ( const QModelIndex & index , const QVariant & value , int role ) override QAbstractTableModel::setData implementation.","title":"function setData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-headerdata","text":"QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override QAbstractTableModel::headerData implementation.","title":"function headerData"},{"location":"api/Classes/classshapeworks_1_1LandmarkTableModel.html#function-flags","text":"Qt :: ItemFlags flags ( const QModelIndex & index ) const override QAbstractTableModel::flags implementation. Updated on 2023-10-25 at 15:40:27 +0000","title":"function flags"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html","text":"shapeworks::LandmarkWidget LandmarkWidget . More... #include Public Functions Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles () Detailed Description class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks Public Functions Documentation function LandmarkWidget LandmarkWidget ( Viewer * viewer ) function ~LandmarkWidget ~ LandmarkWidget () function update_landmarks void update_landmarks () function store_positions void store_positions () function update_glyph_properties void update_glyph_properties () function clear_landmark_handles void clear_landmark_handles () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#shapeworkslandmarkwidget","text":"LandmarkWidget . More... #include ","title":"shapeworks::LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions","text":"Name LandmarkWidget ( Viewer * viewer) ~LandmarkWidget () void update_landmarks () void store_positions () void update_glyph_properties () void clear_landmark_handles ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#detailed-description","text":"class shapeworks :: LandmarkWidget ; LandmarkWidget . Widget to display and manipulate landmarks","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget","text":"LandmarkWidget ( Viewer * viewer )","title":"function LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-landmarkwidget_1","text":"~ LandmarkWidget ()","title":"function ~LandmarkWidget"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-store_positions","text":"void store_positions ()","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1LandmarkWidget.html#function-clear_landmark_handles","text":"void clear_landmark_handles () Updated on 2023-10-25 at 15:40:27 +0000","title":"function clear_landmark_handles"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html","text":"shapeworks::LegacyCorrespondenceFunction Inherits from shapeworks::VectorFunction , itk::LightObject Public Types Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone () Protected Functions Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Public Types Documentation typedef Self typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ; typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ; typedef VectorType typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ; typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Energy inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy function WriteModes void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names. function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver. function AfterIteration inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver. function SetMinimumVariance inline void SetMinimumVariance ( double d ) function GetMinimumVariance inline double GetMinimumVariance () const function SetMinimumVarianceDecay inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) function GetMinimumVarianceDecayConstant inline bool GetMinimumVarianceDecayConstant () const function PrintShapeMatrix inline void PrintShapeMatrix () function UseMeanEnergy inline void UseMeanEnergy () function UseEntropy inline void UseEntropy () function GetHoldMinimumVariance inline bool GetHoldMinimumVariance () const function SetHoldMinimumVariance inline void SetHoldMinimumVariance ( bool b ) function SetRecomputeCovarianceInterval inline void SetRecomputeCovarianceInterval ( int i ) function GetRecomputeCovarianceInterval inline int GetRecomputeCovarianceInterval () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Protected Functions Documentation function LegacyCorrespondenceFunction inline LegacyCorrespondenceFunction () function ~LegacyCorrespondenceFunction inline virtual ~ LegacyCorrespondenceFunction () function operator= void operator = ( const LegacyCorrespondenceFunction & ) function LegacyCorrespondenceFunction LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ) function ComputeCovarianceMatrix virtual void ComputeCovarianceMatrix () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_PointsUpdate std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; variable m_MinimumVariance double m_MinimumVariance ; variable m_MinimumEigenValue double m_MinimumEigenValue ; variable m_CurrentEnergy double m_CurrentEnergy ; variable m_HoldMinimumVariance bool m_HoldMinimumVariance ; variable m_MinimumVarianceDecayConstant double m_MinimumVarianceDecayConstant ; variable m_RecomputeCovarianceInterval int m_RecomputeCovarianceInterval ; variable m_Counter int m_Counter ; variable m_UseMeanEnergy bool m_UseMeanEnergy ; variable m_points_mean std :: shared_ptr < vnl_matrix_type > m_points_mean ; variable m_InverseCovMatrix std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#shapeworkslegacycorrespondencefunction","text":"Inherits from shapeworks::VectorFunction , itk::LightObject","title":"shapeworks::LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types","text":"Name typedef LegacyCorrespondenceFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions","text":"Name itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual double Energy (unsigned int a, unsigned int b, const ParticleSystem * c) const void WriteModes (const std::string & , int ) const void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const virtual void BeforeIteration () virtual void AfterIteration () void SetMinimumVariance (double d) double GetMinimumVariance () const void SetMinimumVarianceDecay (double initial_value, double final_value, double time_period) bool GetMinimumVarianceDecayConstant () const void PrintShapeMatrix () void UseMeanEnergy () void UseEntropy () bool GetHoldMinimumVariance () const void SetHoldMinimumVariance (bool b) void SetRecomputeCovarianceInterval (int i) int GetRecomputeCovarianceInterval () const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions","text":"Name LegacyCorrespondenceFunction () virtual ~LegacyCorrespondenceFunction () void operator= (const LegacyCorrespondenceFunction & ) LegacyCorrespondenceFunction (const LegacyCorrespondenceFunction & ) virtual void ComputeCovarianceMatrix ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix std::shared_ptr< vnl_matrix_type > m_PointsUpdate double m_MinimumVariance double m_MinimumEigenValue double m_CurrentEnergy bool m_HoldMinimumVariance double m_MinimumVarianceDecayConstant int m_RecomputeCovarianceInterval int m_Counter bool m_UseMeanEnergy std::shared_ptr< vnl_matrix_type > m_points_mean std::shared_ptr< Eigen::MatrixXd > m_InverseCovMatrix","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void ResetBuffers () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-self","text":"typedef LegacyCorrespondenceFunction shapeworks :: LegacyCorrespondenceFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyCorrespondenceFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyCorrespondenceFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: LegacyCorrespondenceFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: LegacyCorrespondenceFunction :: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: LegacyCorrespondenceFunction :: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: LegacyCorrespondenceFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: LegacyCorrespondenceFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: LegacyCorrespondenceFunction :: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itktypemacro","text":"itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const Reimplements : shapeworks::VectorFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-writemodes","text":"void WriteModes ( const std :: string & , int ) const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. The string argument is a prefix to the file names.","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::VectorFunction::BeforeIteration Called before each iteration of a solver.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplements : shapeworks::VectorFunction::AfterIteration Called after each iteration of the solver.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariance","text":"inline void SetMinimumVariance ( double d )","title":"function SetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariance","text":"inline double GetMinimumVariance () const","title":"function GetMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setminimumvariancedecay","text":"inline void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period )","title":"function SetMinimumVarianceDecay"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getminimumvariancedecayconstant","text":"inline bool GetMinimumVarianceDecayConstant () const","title":"function GetMinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-printshapematrix","text":"inline void PrintShapeMatrix ()","title":"function PrintShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-usemeanenergy","text":"inline void UseMeanEnergy ()","title":"function UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-useentropy","text":"inline void UseEntropy ()","title":"function UseEntropy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getholdminimumvariance","text":"inline bool GetHoldMinimumVariance () const","title":"function GetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setholdminimumvariance","text":"inline void SetHoldMinimumVariance ( bool b )","title":"function SetHoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-setrecomputecovarianceinterval","text":"inline void SetRecomputeCovarianceInterval ( int i )","title":"function SetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-getrecomputecovarianceinterval","text":"inline int GetRecomputeCovarianceInterval () const","title":"function GetRecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction","text":"inline LegacyCorrespondenceFunction ()","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_1","text":"inline virtual ~ LegacyCorrespondenceFunction ()","title":"function ~LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-operator","text":"void operator = ( const LegacyCorrespondenceFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-legacycorrespondencefunction_2","text":"LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & )","title":"function LegacyCorrespondenceFunction"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#function-computecovariancematrix","text":"virtual void ComputeCovarianceMatrix ()","title":"function ComputeCovarianceMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_pointsupdate","text":"std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ;","title":"variable m_PointsUpdate"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariance","text":"double m_MinimumVariance ;","title":"variable m_MinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumeigenvalue","text":"double m_MinimumEigenValue ;","title":"variable m_MinimumEigenValue"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_currentenergy","text":"double m_CurrentEnergy ;","title":"variable m_CurrentEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_holdminimumvariance","text":"bool m_HoldMinimumVariance ;","title":"variable m_HoldMinimumVariance"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_minimumvariancedecayconstant","text":"double m_MinimumVarianceDecayConstant ;","title":"variable m_MinimumVarianceDecayConstant"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_recomputecovarianceinterval","text":"int m_RecomputeCovarianceInterval ;","title":"variable m_RecomputeCovarianceInterval"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_counter","text":"int m_Counter ;","title":"variable m_Counter"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_usemeanenergy","text":"bool m_UseMeanEnergy ;","title":"variable m_UseMeanEnergy"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_points_mean","text":"std :: shared_ptr < vnl_matrix_type > m_points_mean ;","title":"variable m_points_mean"},{"location":"api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html#variable-m_inversecovmatrix","text":"std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_InverseCovMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html","text":"shapeworks::LegacyShapeMatrix Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix Public Types Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods). function DomainAddEventCallback inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration function AfterIteration inline virtual void AfterIteration () function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) Protected Functions Documentation function LegacyShapeMatrix inline LegacyShapeMatrix () function ~LegacyShapeMatrix inline virtual ~ LegacyShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#shapeworkslegacyshapematrix","text":"Inherits from vnl_matrix< double >, shapeworks::Observer Inherited by shapeworks::LinearRegressionShapeMatrix , shapeworks::MixedEffectsShapeMatrix","title":"shapeworks::LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LegacyShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) virtual Observer void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void ResizeMatrix (int rs, int cs) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () void SetDomainsPerShape (int i) int GetDomainsPerShape () const virtual void BeforeIteration () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions","text":"Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name itkTypeMacro ( Observer , DataObject ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LegacyShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-self","text":"typedef LegacyShapeMatrix shapeworks :: LegacyShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: LegacyShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LegacyShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LegacyShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory. Run-time type information (and related methods).","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual Observer void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::DomainAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Reimplemented by : shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::LinearRegressionShapeMatrix::BeforeIteration , shapeworks::MixedEffectsShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix","text":"inline LegacyShapeMatrix ()","title":"function LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-legacyshapematrix_1","text":"inline virtual ~ LegacyShapeMatrix ()","title":"function ~LegacyShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1LegacyShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html","text":"shapeworks::Lightbox Display multiple Viewers in a tiled display. More... #include Inherits from QObject Public Slots Name void handle_timer_callback () Public Signals Name void right_click (int index) Public Functions Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window () Detailed Description class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display Public Slots Documentation slot handle_timer_callback void handle_timer_callback () Public Signals Documentation signal right_click void right_click ( int index ) Public Functions Documentation function Lightbox Lightbox () function ~Lightbox ~ Lightbox () function set_shapes void set_shapes ( ShapeList shapes ) function get_shapes ShapeList get_shapes () function set_interactor void set_interactor ( vtkRenderWindowInteractor * interactor ) function set_render_window void set_render_window ( vtkRenderWindow * render_window ) function set_tile_layout void set_tile_layout ( int width , int height ) function setup_renderers void setup_renderers () function get_num_rows int get_num_rows () function get_num_rows_visible int get_num_rows_visible () function set_start_row void set_start_row ( int row ) function get_viewers ViewerList get_viewers () function redraw void redraw () function handle_pick void handle_pick ( int * click_pos , bool one , bool ctrl ) function handle_hover void handle_hover ( int * click_pos ) function handle_key void handle_key ( int * click_pos , std :: string key ) function handle_right_click void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement. function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_session void set_session ( QSharedPointer < Session > session ) function set_visualizer void set_visualizer ( Visualizer * visualizer ) function render_window_ready inline bool render_window_ready () function clear_renderers void clear_renderers () function initPos std :: array < double , 3 > initPos () function handle_new_mesh void handle_new_mesh () function reset_camera void reset_camera () function reset_camera_clipping_range void reset_camera_clipping_range () function set_orientation_marker void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ) function set_orientation_marker_viewport void set_orientation_marker_viewport () function update_feature_range void update_feature_range () function update_interactor_style void update_interactor_style () function set_shared_window_and_level void set_shared_window_and_level ( double window , double level ) function get_render_window vtkRenderWindow * get_render_window () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#shapeworkslightbox","text":"Display multiple Viewers in a tiled display. More... #include Inherits from QObject","title":"shapeworks::Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots","text":"Name void handle_timer_callback ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals","text":"Name void right_click (int index)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions","text":"Name Lightbox () ~Lightbox () void set_shapes (ShapeList shapes) ShapeList get_shapes () void set_interactor (vtkRenderWindowInteractor * interactor) void set_render_window (vtkRenderWindow * render_window) void set_tile_layout (int width, int height) void setup_renderers () int get_num_rows () int get_num_rows_visible () void set_start_row (int row) ViewerList get_viewers () void redraw () void handle_pick (int * click_pos, bool one, bool ctrl) void handle_hover (int * click_pos) void handle_key (int * click_pos, std::string key) void handle_right_click (int * click_pos, vtkRenderer * renderer) Handle a right click that did not involve any movement. void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_session (QSharedPointer< Session > session) void set_visualizer ( Visualizer * visualizer) bool render_window_ready () void clear_renderers () std::array< double, 3 > initPos () void handle_new_mesh () void reset_camera () void reset_camera_clipping_range () void set_orientation_marker (Preferences::OrientationMarkerType type, Preferences::OrientationMarkerCorner corner) void set_orientation_marker_viewport () void update_feature_range () void update_interactor_style () void set_shared_window_and_level (double window, double level) vtkRenderWindow * get_render_window ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#detailed-description","text":"class shapeworks :: Lightbox ; Display multiple Viewers in a tiled display. The LightBox class displays multiple Viewers in a tiled display","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#slot-handle_timer_callback","text":"void handle_timer_callback ()","title":"slot handle_timer_callback"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#signal-right_click","text":"void right_click ( int index )","title":"signal right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox","text":"Lightbox ()","title":"function Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-lightbox_1","text":"~ Lightbox ()","title":"function ~Lightbox"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shapes","text":"void set_shapes ( ShapeList shapes )","title":"function set_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_shapes","text":"ShapeList get_shapes ()","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_interactor","text":"void set_interactor ( vtkRenderWindowInteractor * interactor )","title":"function set_interactor"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_render_window","text":"void set_render_window ( vtkRenderWindow * render_window )","title":"function set_render_window"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_tile_layout","text":"void set_tile_layout ( int width , int height )","title":"function set_tile_layout"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-setup_renderers","text":"void setup_renderers ()","title":"function setup_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows","text":"int get_num_rows ()","title":"function get_num_rows"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_num_rows_visible","text":"int get_num_rows_visible ()","title":"function get_num_rows_visible"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_start_row","text":"void set_start_row ( int row )","title":"function set_start_row"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_viewers","text":"ViewerList get_viewers ()","title":"function get_viewers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-redraw","text":"void redraw ()","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_pick","text":"void handle_pick ( int * click_pos , bool one , bool ctrl )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_hover","text":"void handle_hover ( int * click_pos )","title":"function handle_hover"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_key","text":"void handle_key ( int * click_pos , std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_right_click","text":"void handle_right_click ( int * click_pos , vtkRenderer * renderer ) Handle a right click that did not involve any movement.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-render_window_ready","text":"inline bool render_window_ready ()","title":"function render_window_ready"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-clear_renderers","text":"void clear_renderers ()","title":"function clear_renderers"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-initpos","text":"std :: array < double , 3 > initPos ()","title":"function initPos"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-reset_camera_clipping_range","text":"void reset_camera_clipping_range ()","title":"function reset_camera_clipping_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker","text":"void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner )","title":"function set_orientation_marker"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_orientation_marker_viewport","text":"void set_orientation_marker_viewport ()","title":"function set_orientation_marker_viewport"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_feature_range","text":"void update_feature_range ()","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-update_interactor_style","text":"void update_interactor_style ()","title":"function update_interactor_style"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-set_shared_window_and_level","text":"void set_shared_window_and_level ( double window , double level )","title":"function set_shared_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Lightbox.html#function-get_render_window","text":"vtkRenderWindow * get_render_window () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_render_window"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html","text":"shapeworks::LinearRegressionShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function LinearRegressionShapeMatrix inline LinearRegressionShapeMatrix () function ~LinearRegressionShapeMatrix inline virtual ~ LinearRegressionShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#shapeworkslinearregressionshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types","text":"Name typedef double DataType typedef LinearRegressionShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions","text":"Name LinearRegressionShapeMatrix () virtual ~LinearRegressionShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: LinearRegressionShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-self","text":"typedef LinearRegressionShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: LinearRegressionShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: LinearRegressionShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: LinearRegressionShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix","text":"inline LinearRegressionShapeMatrix ()","title":"function LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-linearregressionshapematrix_1","text":"inline virtual ~ LinearRegressionShapeMatrix ()","title":"function ~LinearRegressionShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html","text":"shapeworks::LogWindow Log Window. More... #include Inherits from QDialog Public Functions Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history Detailed Description class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages) Public Functions Documentation function LogWindow LogWindow ( QWidget * parent = 0 ) function add_message void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#shapeworkslogwindow","text":"Log Window. More... #include Inherits from QDialog","title":"shapeworks::LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions","text":"Name LogWindow (QWidget * parent =0) void add_message (MessageType message_type, QString message) add a message to the history","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#detailed-description","text":"class shapeworks :: LogWindow ; Log Window. This dialog displays the history of messages (e.g. status bar messages)","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-logwindow","text":"LogWindow ( QWidget * parent = 0 )","title":"function LogWindow"},{"location":"api/Classes/classshapeworks_1_1LogWindow.html#function-add_message","text":"void add_message ( MessageType message_type , QString message ) add a message to the history Updated on 2023-10-25 at 15:40:27 +0000","title":"function add_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html","text":"shapeworks::Logging Module: Common Classes ShapeWorks Logging Library. More... #include Public Functions Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted. Detailed Description class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32 Public Functions Documentation function Instance static Logging & Instance () Return the singleton instance. function open_file_log void open_file_log ( const std :: string & filename ) Create a file log. function check_log_open bool check_log_open () const Return if the log is open. function get_log_filename std :: string get_log_filename () const Return the log filename. function log_message void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro. function log_stack void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro. function log_error void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro. function show_message void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro. function show_status void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro. function show_progress void show_progress ( double value , const std :: string & message ) Display progress (0-100) function log_debug void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro. function log_warning void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro. function close_log void close_log () Close the log, use SW_CLOSE_LOG macro. function set_error_callback void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised. function set_message_callback void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted. function set_warning_callback void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted. function set_debug_callback void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted. function set_status_callback void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted. function set_progress_callback void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#shapeworkslogging","text":"Module: Common Classes ShapeWorks Logging Library. More... #include ","title":"shapeworks::Logging"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions","text":"Name Logging & Instance () Return the singleton instance. void open_file_log (const std::string & filename) Create a file log. bool check_log_open () const Return if the log is open. std::string get_log_filename () const Return the log filename. void log_message (const std::string & message, const int line, const char * file) const Log a message, use SW_LOG macro. void log_stack (const std::string & message) const Log a stack trace message, use SW_LOG_STACK macro. void log_error (const std::string & message, const int line, const char * file) const Log an error, use SW_ERROR macro. void show_message (const std::string & message, const int line, const char * file) const Log a message, use SW_MESSAGE macro. void show_status (const std::string & message, const int line, const char * file) const Log a message, use SW_STATUS macro. void show_progress (double value, const std::string & message) Display progress (0-100) void log_debug (const std::string & message, const int line, const char * file) const Log a debug message, use SW_DEBUG macro. void log_warning (const std::string & message, const int line, const char * file) const Log a warning message, use SW_WARN macro. void close_log () Close the log, use SW_CLOSE_LOG macro. void set_error_callback (const std::function< void(std::string)> & callback) Set an error callback function to be called whenever an error is raised. void set_message_callback (const std::function< void(std::string)> & callback) Set a message callback function to be called whenever an message is posted. void set_warning_callback (const std::function< void(std::string)> & callback) Set a warning callback function to be called whenever a warning is posted. void set_debug_callback (const std::function< void(std::string)> & callback) Set a debug message callback function to be called whenever a debug message is posted. void set_status_callback (const std::function< void(std::string)> & callback) Set a status callback function to be called whenever a status message is posted. void set_progress_callback (const std::function< void(double, std::string)> & callback) Set a progress callback function to be called whenever a progress update is posted.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Logging.html#detailed-description","text":"class shapeworks :: Logging ; ShapeWorks Logging Library. The Logging class supports univeral console and file logging. To use the ShapeWorks logging library, use the pre-defined macros: Normal log message: SW_LOG ( \"message\" ) Warning: SW_WARN ( \"warning\" ) Error: SW_ERROR ( \"error\" ) Debug: SW_DEBUG ( \"debug\" ) Output (assuming it was line 25 of Analyze.cpp and SW_LOG_LEVEL=debug): [ 2022-08-18 11 : 40 : 01.021 ] [ debug ] [ Analyze . cpp | 25 ] debug The logging macros using the fmt library. Read more here: https://github.com/fmtlib/fmt Example: int mode = 10 ; double eigen_value = 42.3 ; SW_LOG ( \"eigen value [{}]: {:.2f}\" , mode , eigen_value ); Output: [ 2022-08-18 11 : 37 : 42.613 ] [ info ] eigen value [ 10 ] : 42.32","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Logging.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-instance","text":"static Logging & Instance () Return the singleton instance.","title":"function Instance"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-open_file_log","text":"void open_file_log ( const std :: string & filename ) Create a file log.","title":"function open_file_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-check_log_open","text":"bool check_log_open () const Return if the log is open.","title":"function check_log_open"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-get_log_filename","text":"std :: string get_log_filename () const Return the log filename.","title":"function get_log_filename"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_message","text":"void log_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_LOG macro.","title":"function log_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_stack","text":"void log_stack ( const std :: string & message ) const Log a stack trace message, use SW_LOG_STACK macro.","title":"function log_stack"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_error","text":"void log_error ( const std :: string & message , const int line , const char * file ) const Log an error, use SW_ERROR macro.","title":"function log_error"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_message","text":"void show_message ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_MESSAGE macro.","title":"function show_message"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_status","text":"void show_status ( const std :: string & message , const int line , const char * file ) const Log a message, use SW_STATUS macro.","title":"function show_status"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-show_progress","text":"void show_progress ( double value , const std :: string & message ) Display progress (0-100)","title":"function show_progress"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_debug","text":"void log_debug ( const std :: string & message , const int line , const char * file ) const Log a debug message, use SW_DEBUG macro.","title":"function log_debug"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-log_warning","text":"void log_warning ( const std :: string & message , const int line , const char * file ) const Log a warning message, use SW_WARN macro.","title":"function log_warning"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-close_log","text":"void close_log () Close the log, use SW_CLOSE_LOG macro.","title":"function close_log"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_error_callback","text":"void set_error_callback ( const std :: function < void ( std :: string ) > & callback ) Set an error callback function to be called whenever an error is raised.","title":"function set_error_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_message_callback","text":"void set_message_callback ( const std :: function < void ( std :: string ) > & callback ) Set a message callback function to be called whenever an message is posted.","title":"function set_message_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_warning_callback","text":"void set_warning_callback ( const std :: function < void ( std :: string ) > & callback ) Set a warning callback function to be called whenever a warning is posted.","title":"function set_warning_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_debug_callback","text":"void set_debug_callback ( const std :: function < void ( std :: string ) > & callback ) Set a debug message callback function to be called whenever a debug message is posted.","title":"function set_debug_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_status_callback","text":"void set_status_callback ( const std :: function < void ( std :: string ) > & callback ) Set a status callback function to be called whenever a status message is posted.","title":"function set_status_callback"},{"location":"api/Classes/classshapeworks_1_1Logging.html#function-set_progress_callback","text":"void set_progress_callback ( const std :: function < void ( double , std :: string ) > & callback ) Set a progress callback function to be called whenever a progress update is posted. Updated on 2023-10-25 at 15:40:28 +0000","title":"function set_progress_callback"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html","text":"shapeworks::MatrixContainer Public Attributes Name Eigen::MatrixXd matrix_ Public Attributes Documentation variable matrix_ Eigen :: MatrixXd matrix_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#shapeworksmatrixcontainer","text":"","title":"shapeworks::MatrixContainer"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes","text":"Name Eigen::MatrixXd matrix_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MatrixContainer.html#variable-matrix_","text":"Eigen :: MatrixXd matrix_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable matrix_"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html","text":"shapeworks::MeanCurvatureContainer More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer Public Types Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d) Protected Functions Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ; Public Types Documentation typedef NumericType typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs typedef Self typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ; typedef Superclass typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types. typedef PointType typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ; typedef VnlVectorType typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods). function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function PositionAddEventCallback inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) function ComputeMeanCurvature inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) function ComputeCurvatureStatistics virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface. function GetMeanCurvature inline double GetMeanCurvature ( int d ) function GetCurvatureStandardDeviation inline double GetCurvatureStandardDeviation ( int d ) Protected Functions Documentation function MeanCurvatureContainer inline MeanCurvatureContainer () function ~MeanCurvatureContainer inline virtual ~ MeanCurvatureContainer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#shapeworksmeancurvaturecontainer","text":"More... Inherits from shapeworks::GenericContainerArray< TNumericType > , std::vector< GenericContainer< T >::Pointer >, shapeworks::Observer","title":"shapeworks::MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types","text":"Name typedef TNumericType NumericType typedef MeanCurvatureContainer Self typedef GenericContainerArray < TNumericType > Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType typedef ParticleSystemType::PointType PointType typedef vnl_vector_fixed< TNumericType, VDimension > VnlVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) void SetVerbosity (unsigned int val) unsigned int GetVerbosity () virtual void PositionAddEventCallback (itk::Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (itk::Object * o, const itk::EventObject & e) virtual void DomainAddEventCallback (itk::Object * o, const itk::EventObject & e) void ComputeMeanCurvature (const ParticleSystemType * system, unsigned int idx, unsigned int dom) virtual void ComputeCurvatureStatistics (const ParticleSystemType * , unsigned int d) double GetMeanCurvature (int d) double GetCurvatureStandardDeviation (int d)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions","text":"Name MeanCurvatureContainer () virtual ~MeanCurvatureContainer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#additional-inherited-members","text":"Public Types inherited from shapeworks::GenericContainerArray< TNumericType > Name typedef T DataType Public Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void ZeroAllValues () Protected Functions inherited from shapeworks::GenericContainerArray< TNumericType > Name GenericContainerArray () virtual ~GenericContainerArray () Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#detailed-description","text":"template < class TNumericType , unsigned int VDimension > class shapeworks :: MeanCurvatureContainer ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-numerictype","text":"typedef TNumericType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: NumericType ; Standard class typedefs","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-self","text":"typedef MeanCurvatureContainer shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-superclass","text":"typedef GenericContainerArray < TNumericType > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: ParticleSystemType ; Numeric types.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#typedef-vnlvectortype","text":"typedef vnl_vector_fixed < TNumericType , VDimension > shapeworks :: MeanCurvatureContainer < TNumericType , VDimension >:: VnlVectorType ;","title":"typedef VnlVectorType"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-itktypemacro","text":"itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e )","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computemeancurvature","text":"inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom )","title":"function ComputeMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-computecurvaturestatistics","text":"virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ) Compute the mean and std deviation of the curvature on the image surface.","title":"function ComputeCurvatureStatistics"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getmeancurvature","text":"inline double GetMeanCurvature ( int d )","title":"function GetMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-getcurvaturestandarddeviation","text":"inline double GetCurvatureStandardDeviation ( int d )","title":"function GetCurvatureStandardDeviation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer","text":"inline MeanCurvatureContainer ()","title":"function MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-meancurvaturecontainer_1","text":"inline virtual ~ MeanCurvatureContainer ()","title":"function ~MeanCurvatureContainer"},{"location":"api/Classes/classshapeworks_1_1MeanCurvatureContainer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Mesh.html","text":"shapeworks::Mesh Module: Mesh Classes More... #include Public Types Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints Public Functions Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types. Friends Name struct SharedCommandData Detailed Description class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes Public Types Documentation enum FieldType Enumerator Value Description Point Face enum AlignmentType Enumerator Value Description Rigid Similarity Affine enum DistanceMethod Enumerator Value Description PointToPoint PointToCell enum CurvatureType Enumerator Value Description Principal Gaussian Mean enum SubdivisionType Enumerator Value Description Butterfly Loop using MeshType using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ; Public Functions Documentation function Mesh Mesh ( const std :: string & pathname ) function Mesh inline Mesh ( MeshType meshPtr ) function Mesh inline Mesh ( const Mesh & orig ) function Mesh inline Mesh ( Mesh && orig ) function operator= inline Mesh & operator = ( const Mesh & orig ) function Mesh Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ) function operator= inline Mesh & operator = ( Mesh && orig ) function operator+= Mesh & operator += ( const Mesh & otherMesh ) append two meshes function getVTKMesh inline MeshType getVTKMesh () const return the current mesh function write Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension function coverage Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) function smooth Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing function smoothSinc Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing function remesh Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity function remeshPercent Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity function invertNormals Mesh & invertNormals () handle flipping normals function reflect Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis function createTransform MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations function applyTransform Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh function rotate Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis function fillHoles Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them function clean Mesh & clean () clean mesh function probeVolume Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image function clip Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane function translate Mesh & translate ( const Vector3 & v ) helper to translate mesh function scale Mesh & scale ( const Vector3 & v ) helper to scale mesh function boundingBox PhysicalRegion boundingBox () const computes bounding box of current mesh function fixElement Mesh & fixElement () fix element winding of mesh function fixNonManifold Mesh & fixNonManifold () Attempt to fix non-manifold edges. function detectNonManifold bool detectNonManifold () Detect if mesh contain non-manifold edges. function detectTriangular bool detectTriangular () Detect if mesh is triangular;. function distance std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points. function clipClosedSurface Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface function computeNormals Mesh & computeNormals () computes and adds oriented point and cell normals function closestPoint Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point function closestPointId int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space function geodesicDistance double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh function geodesicDistance Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh function geodesicDistance Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh function curvature Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms function computeFieldGradient void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices function computeFieldGradientAtPoint Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point function interpolateFieldAtPoint double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point function applySubdivisionFilter Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop) function toImage Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing) function toDistanceTransform Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding function computeThickness Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points function computeLandmarkGeodesics Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields function center Point3 center () const center of mesh function centerOfMass Point3 centerOfMass () const center of mass of mesh function numPoints inline int numPoints () const number of points function numFaces inline int numFaces () const number of faces function points Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point function faces Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed function getPoint Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index function getFace IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed function getFieldNames std :: vector < std :: string > getFieldNames () const print all field names in mesh function setField Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values) function getField Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist function setFieldValue void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value function getFieldValue double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields) function getMultiFieldValue Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field function compareAllPoints bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal function compareAllFaces bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal function compareAllFields bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal function compareField bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified) function compare bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes function operator== inline bool operator == ( const Mesh & other ) const compare meshes function getFFCValue double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs. function getFFCGradient Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs. function getIGLMesh MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format. function clipByField vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value. function getCellLocator inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator. function getClosestFace int getClosestFace ( const Point3 & point ) const function computeBarycentricCoordinates Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number. function getSupportedTypes static inline std :: vector < std :: string > getSupportedTypes () Return supported file types. Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#shapeworksmesh","text":"Module: Mesh Classes More... #include ","title":"shapeworks::Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types","text":"Name enum FieldType enum AlignmentType enum DistanceMethod enum CurvatureType enum SubdivisionType using vtkSmartPointer< vtkPolyData > MeshType using vtkSmartPointer< vtkPoints > MeshPoints","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions","text":"Name Mesh (const std::string & pathname) Mesh (MeshType meshPtr) Mesh (const Mesh & orig) Mesh ( Mesh && orig) Mesh & operator= (const Mesh & orig) Mesh (const Eigen::MatrixXd & points, const Eigen::MatrixXi & faces) Mesh & operator= ( Mesh && orig) Mesh & operator+= (const Mesh & otherMesh) append two meshes MeshType getVTKMesh () const return the current mesh Mesh & write (const std::string & pathname, bool binaryFile =false) writes mesh, format specified by filename extension Mesh & coverage (const Mesh & otherMesh, bool allowBackIntersections =true, double angleThreshold =0, double backSearchRadius =0) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) Mesh & smooth (int iterations =0, double relaxation =0.0) applies laplacian smoothing Mesh & smoothSinc (int iterations =0, double passband =0.0) applies vtk windowed sinc smoothing Mesh & remesh (int numVertices, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Mesh & remeshPercent (double percentage, double adaptivity =1.0) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Mesh & invertNormals () handle flipping normals Mesh & reflect (const Axis & axis, const Vector3 & origin = makeVector ({0.0, 0.0, 0.0})) reflect meshes with respect to a specified center and specific axis MeshTransform createTransform (const Mesh & target, AlignmentType align =Similarity, unsigned iterations =10) Mesh & applyTransform (const MeshTransform transform) applies the given transformation to the mesh Mesh & rotate (const double angle, const Axis axis) applies the given rotation to the given axis Mesh & fillHoles (double hole_size =1000.0) finds holes in a mesh and closes them Mesh & clean () clean mesh Mesh & probeVolume (const Image & image) samples image data values at point locations specified by image Mesh & clip (const Plane plane) clips a mesh using a cutting plane Mesh & translate (const Vector3 & v) helper to translate mesh Mesh & scale (const Vector3 & v) helper to scale mesh PhysicalRegion boundingBox () const computes bounding box of current mesh Mesh & fixElement () fix element winding of mesh Mesh & fixNonManifold () Attempt to fix non-manifold edges. bool detectNonManifold () Detect if mesh contain non-manifold edges. bool detectTriangular () Detect if mesh is triangular;. std::vector< Field > distance (const Mesh & target, const DistanceMethod method =PointToCell) const Mesh & clipClosedSurface (const Plane plane) clips a mesh using a cutting plane resulting in a closed surface Mesh & computeNormals () computes and adds oriented point and cell normals Point3 closestPoint (const Point3 point, double & distance, vtkIdType & face_id) const int closestPointId (const Point3 point) const returns closest point id in this mesh to the given point in space double geodesicDistance (int source, int target) const computes geodesic distance between two vertices (specified by their indices) on mesh Field geodesicDistance (const Point3 landmark) const computes geodesic distance between a point (landmark) and each vertex on mesh Field geodesicDistance (const std::vector< Point3 > curve) const computes geodesic distance between a set of points (curve) and each vertex on mesh Field curvature (const CurvatureType type =Principal) const computes curvature using principal (default) or gaussian or mean algorithms void computeFieldGradient (const std::string & field) const compute the gradient of a scalar field for all vertices Eigen::Vector3d computeFieldGradientAtPoint (const std::string & field, const Point3 & query) const compute the gradient of a scalar field at a point double interpolateFieldAtPoint (const std::string & field, const Point3 & query) const interpolate a scalar field at a given point Mesh & applySubdivisionFilter (const SubdivisionType type =Butterfly, int subdivision =1) applies subdivision filter (butterfly (default) or loop) Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing =Point3({1., 1., 1.})) const rasterizes specified region to create binary image of desired dims (default: unit spacing) Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing =Point3({1., 1., 1.}), const Dims padding =Dims({1, 1, 1})) const converts specified region to distance transform image (default: unit spacing) with (logical) padding Mesh & computeThickness ( Image & image, Image * dt =nullptr, double max_dist =10000, double median_radius =5.0, std::string distance_mesh =\"\") assign cortical thickness values from mesh points Mesh & computeLandmarkGeodesics (const std::vector< Point3 > & landmarks) compute geodesic distances to landmarks and assign as fields Point3 center () const center of mesh Point3 centerOfMass () const center of mass of mesh int numPoints () const number of points int numFaces () const number of faces Eigen::MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point Eigen::MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed Point3 getPoint (int id) const (x,y,z) coordinates of vertex at given index IPoint3 getFace (int id) const return indices of the three points with which the face at the given index is composed std::vector< std::string > getFieldNames () const print all field names in mesh Mesh & setField (const std::string name, Array array, const FieldType type) sets the given field for points or faces with array (*does not copy array's values) Field getField (const std::string & name, const FieldType type) const gets a pointer to the requested field of points or faces, null if field doesn't exist void setFieldValue (const std::string & name, int idx, double value) sets the given index of field to value double getFieldValue (const std::string & name, int idx) const gets the value at the given index of field (NOTE: returns first component of vector fields) Eigen::VectorXd getMultiFieldValue (const std::string & name, int idx) const gets the multi value at the given index of [vertex] field bool compareAllPoints (const Mesh & other_mesh) const compare if values of the points in two (corresponding) meshes are (eps)equal bool compareAllFaces (const Mesh & other_mesh) const compare if face indices in two (corresponding) meshes are equal bool compareAllFields (const Mesh & other_mesh, const double eps =-1.0) const compare if all fields in two meshes are (eps)equal bool compareField (const Mesh & other_mesh, const std::string & name1, const std::string & name2 =\"\", const double eps =-1.0) const compare field of meshes to be (eps)equal (same field for both if only one specified) bool compare (const Mesh & other_mesh, const double eps =-1.0) const compare meshes bool operator== (const Mesh & other) const compare meshes double getFFCValue (Eigen::Vector3d query) const Gets values for FFCs. Eigen::Vector3d getFFCGradient (Eigen::Vector3d query) const Gets gradients for FFCs. MeshPoints getIGLMesh (Eigen::MatrixXd & V, Eigen::MatrixXi & F) const Formats mesh into an IGL format. vtkSmartPointer< vtkPolyData > clipByField (const std::string & name, double value) Clips the mesh according to a field value. vtkSmartPointer< vtkStaticCellLocator > getCellLocator () const Returns the cell locator. int getClosestFace (const Point3 & point) const Eigen::Vector3d computeBarycentricCoordinates (const Eigen::Vector3d & pt, int face) const Computes baricentric coordinates given a query point and a face number. std::vector< std::string > getSupportedTypes () Return supported file types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#detailed-description","text":"class shapeworks :: Mesh ; This class encapsulates a Mesh and operations that can be performed on meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-fieldtype","text":"Enumerator Value Description Point Face","title":"enum FieldType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-alignmenttype","text":"Enumerator Value Description Rigid Similarity Affine","title":"enum AlignmentType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-distancemethod","text":"Enumerator Value Description PointToPoint PointToCell","title":"enum DistanceMethod"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-curvaturetype","text":"Enumerator Value Description Principal Gaussian Mean","title":"enum CurvatureType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#enum-subdivisiontype","text":"Enumerator Value Description Butterfly Loop","title":"enum SubdivisionType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshtype","text":"using shapeworks :: Mesh :: MeshType = vtkSmartPointer < vtkPolyData > ;","title":"using MeshType"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#using-meshpoints","text":"using shapeworks :: Mesh :: MeshPoints = vtkSmartPointer < vtkPoints > ;","title":"using MeshPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh","text":"Mesh ( const std :: string & pathname )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_1","text":"inline Mesh ( MeshType meshPtr )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_2","text":"inline Mesh ( const Mesh & orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_3","text":"inline Mesh ( Mesh && orig )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator","text":"inline Mesh & operator = ( const Mesh & orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-mesh_4","text":"Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces )","title":"function Mesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_1","text":"inline Mesh & operator = ( Mesh && orig )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_2","text":"Mesh & operator += ( const Mesh & otherMesh ) append two meshes","title":"function operator+="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getvtkmesh","text":"inline MeshType getVTKMesh () const return the current mesh","title":"function getVTKMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-write","text":"Mesh & write ( const std :: string & pathname , bool binaryFile = false ) writes mesh, format specified by filename extension","title":"function write"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-coverage","text":"Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ) determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"function coverage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smooth","text":"Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ) applies laplacian smoothing","title":"function smooth"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-smoothsinc","text":"Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ) applies vtk windowed sinc smoothing","title":"function smoothSinc"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remesh","text":"Mesh & remesh ( int numVertices , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"function remesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-remeshpercent","text":"Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ) applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"function remeshPercent"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-invertnormals","text":"Mesh & invertNormals () handle flipping normals","title":"function invertNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-reflect","text":"Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 }) ) reflect meshes with respect to a specified center and specific axis","title":"function reflect"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-createtransform","text":"MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) creates transform to target mesh using specified AlignmentType (Mesh::Rigid, Mesh::Similarity, Mesh::Affine) for specified number of iterations","title":"function createTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applytransform","text":"Mesh & applyTransform ( const MeshTransform transform ) applies the given transformation to the mesh","title":"function applyTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-rotate","text":"Mesh & rotate ( const double angle , const Axis axis ) applies the given rotation to the given axis","title":"function rotate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fillholes","text":"Mesh & fillHoles ( double hole_size = 1000.0 ) finds holes in a mesh and closes them","title":"function fillHoles"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clean","text":"Mesh & clean () clean mesh","title":"function clean"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-probevolume","text":"Mesh & probeVolume ( const Image & image ) samples image data values at point locations specified by image","title":"function probeVolume"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clip","text":"Mesh & clip ( const Plane plane ) clips a mesh using a cutting plane","title":"function clip"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-translate","text":"Mesh & translate ( const Vector3 & v ) helper to translate mesh","title":"function translate"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-scale","text":"Mesh & scale ( const Vector3 & v ) helper to scale mesh","title":"function scale"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-boundingbox","text":"PhysicalRegion boundingBox () const computes bounding box of current mesh","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixelement","text":"Mesh & fixElement () fix element winding of mesh","title":"function fixElement"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-fixnonmanifold","text":"Mesh & fixNonManifold () Attempt to fix non-manifold edges.","title":"function fixNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detectnonmanifold","text":"bool detectNonManifold () Detect if mesh contain non-manifold edges.","title":"function detectNonManifold"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-detecttriangular","text":"bool detectTriangular () Detect if mesh is triangular;.","title":"function detectTriangular"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-distance","text":"std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const Computes distance from each vertex to closest cell or point in target mesh, specified as PointToCell (default) or PointToPoint. Returns Fields containing distance to target and ids of the associated cells or points.","title":"function distance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipclosedsurface","text":"Mesh & clipClosedSurface ( const Plane plane ) clips a mesh using a cutting plane resulting in a closed surface","title":"function clipClosedSurface"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computenormals","text":"Mesh & computeNormals () computes and adds oriented point and cell normals","title":"function computeNormals"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpoint","text":"Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const Returns closest point on this mesh to the given point in space. In addition, returns by reference: the distance of the point in space from this mesh the face_id containing the closest point","title":"function closestPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-closestpointid","text":"int closestPointId ( const Point3 point ) const returns closest point id in this mesh to the given point in space","title":"function closestPointId"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance","text":"double geodesicDistance ( int source , int target ) const computes geodesic distance between two vertices (specified by their indices) on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_1","text":"Field geodesicDistance ( const Point3 landmark ) const computes geodesic distance between a point (landmark) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-geodesicdistance_2","text":"Field geodesicDistance ( const std :: vector < Point3 > curve ) const computes geodesic distance between a set of points (curve) and each vertex on mesh","title":"function geodesicDistance"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-curvature","text":"Field curvature ( const CurvatureType type = Principal ) const computes curvature using principal (default) or gaussian or mean algorithms","title":"function curvature"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradient","text":"void computeFieldGradient ( const std :: string & field ) const compute the gradient of a scalar field for all vertices","title":"function computeFieldGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computefieldgradientatpoint","text":"Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const compute the gradient of a scalar field at a point","title":"function computeFieldGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-interpolatefieldatpoint","text":"double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const interpolate a scalar field at a given point","title":"function interpolateFieldAtPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-applysubdivisionfilter","text":"Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ) applies subdivision filter (butterfly (default) or loop)","title":"function applySubdivisionFilter"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-toimage","text":"Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. }) ) const rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"function toImage"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-todistancetransform","text":"Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 }) ) const converts specified region to distance transform image (default: unit spacing) with (logical) padding","title":"function toDistanceTransform"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computethickness","text":"Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ) assign cortical thickness values from mesh points","title":"function computeThickness"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computelandmarkgeodesics","text":"Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 > & landmarks ) compute geodesic distances to landmarks and assign as fields","title":"function computeLandmarkGeodesics"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-center","text":"Point3 center () const center of mesh","title":"function center"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-centerofmass","text":"Point3 centerOfMass () const center of mass of mesh","title":"function centerOfMass"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numpoints","text":"inline int numPoints () const number of points","title":"function numPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-numfaces","text":"inline int numFaces () const number of faces","title":"function numFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-points","text":"Eigen :: MatrixXd points () const matrix with number of points with (x,y,z) coordinates of each point","title":"function points"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-faces","text":"Eigen :: MatrixXi faces () const matrix with number of faces with indices of the three points from which each face is composed","title":"function faces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getpoint","text":"Point3 getPoint ( int id ) const (x,y,z) coordinates of vertex at given index","title":"function getPoint"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getface","text":"IPoint3 getFace ( int id ) const return indices of the three points with which the face at the given index is composed","title":"function getFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldnames","text":"std :: vector < std :: string > getFieldNames () const print all field names in mesh","title":"function getFieldNames"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfield","text":"Mesh & setField ( const std :: string name , Array array , const FieldType type ) sets the given field for points or faces with array (*does not copy array's values)","title":"function setField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfield","text":"Field getField ( const std :: string & name , const FieldType type ) const gets a pointer to the requested field of points or faces, null if field doesn't exist","title":"function getField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-setfieldvalue","text":"void setFieldValue ( const std :: string & name , int idx , double value ) sets the given index of field to value","title":"function setFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getfieldvalue","text":"double getFieldValue ( const std :: string & name , int idx ) const gets the value at the given index of field (NOTE: returns first component of vector fields)","title":"function getFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getmultifieldvalue","text":"Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const gets the multi value at the given index of [vertex] field","title":"function getMultiFieldValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallpoints","text":"bool compareAllPoints ( const Mesh & other_mesh ) const compare if values of the points in two (corresponding) meshes are (eps)equal","title":"function compareAllPoints"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfaces","text":"bool compareAllFaces ( const Mesh & other_mesh ) const compare if face indices in two (corresponding) meshes are equal","title":"function compareAllFaces"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compareallfields","text":"bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const compare if all fields in two meshes are (eps)equal","title":"function compareAllFields"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-comparefield","text":"bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const compare field of meshes to be (eps)equal (same field for both if only one specified)","title":"function compareField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-compare","text":"bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const compare meshes","title":"function compare"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-operator_3","text":"inline bool operator == ( const Mesh & other ) const compare meshes","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcvalue","text":"double getFFCValue ( Eigen :: Vector3d query ) const Gets values for FFCs.","title":"function getFFCValue"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getffcgradient","text":"Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const Gets gradients for FFCs.","title":"function getFFCGradient"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getiglmesh","text":"MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const Formats mesh into an IGL format.","title":"function getIGLMesh"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-clipbyfield","text":"vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ) Clips the mesh according to a field value.","title":"function clipByField"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getcelllocator","text":"inline vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const Returns the cell locator.","title":"function getCellLocator"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getclosestface","text":"int getClosestFace ( const Point3 & point ) const","title":"function getClosestFace"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-computebarycentriccoordinates","text":"Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const Computes baricentric coordinates given a query point and a face number.","title":"function computeBarycentricCoordinates"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#function-getsupportedtypes","text":"static inline std :: vector < std :: string > getSupportedTypes () Return supported file types.","title":"function getSupportedTypes"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1Mesh.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:28 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html","text":"shapeworks::MeshCache Thread safe cache for meshes index by shape. More... #include Public Functions Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear () Detailed Description class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread. Public Functions Documentation function MeshCache MeshCache () function set_cache_enabled inline void set_cache_enabled ( bool enabled ) function set_memory_percent inline void set_memory_percent ( int percent ) function get_mesh MeshHandle get_mesh ( const MeshWorkItem & vector ) function insert_mesh void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ) function clear void clear () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#shapeworksmeshcache","text":"Thread safe cache for meshes index by shape. More... #include ","title":"shapeworks::MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions","text":"Name MeshCache () void set_cache_enabled (bool enabled) void set_memory_percent (int percent) MeshHandle get_mesh (const MeshWorkItem & vector) void insert_mesh (const MeshWorkItem & item, MeshHandle mesh) void clear ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#detailed-description","text":"class shapeworks :: MeshCache ; Thread safe cache for meshes index by shape. The MeshCache implements a std::map keyed by shape (list of points) with MeshHandle values. It is thread-safe and can be used from any thread.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-meshcache","text":"MeshCache ()","title":"function MeshCache"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_cache_enabled","text":"inline void set_cache_enabled ( bool enabled )","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-set_memory_percent","text":"inline void set_memory_percent ( int percent )","title":"function set_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & vector )","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-insert_mesh","text":"void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh )","title":"function insert_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshCache.html#function-clear","text":"void clear () Updated on 2023-10-25 at 15:40:27 +0000","title":"function clear"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html","text":"shapeworks::MeshCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#shapeworksmeshcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::MeshCommand"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html","text":"shapeworks::MeshDomain Inherits from shapeworks::ParticleDomain Public Types Name using std::shared_ptr< MeshDomain > Pointer Public Functions Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ; Public Functions Documentation function GetDomainType inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function ApplyVectorConstraints bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition function GetCurvature inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetValidLocationNear inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetSurfaceArea inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius. function GetMaxDiameter virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function SampleGradientAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint function SampleNormalAtPoint inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint function SampleGradNAtPoint inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint function Distance inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function DeleteImages inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages function DeletePartialDerivativeImages inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages function SetMesh inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) function GetSWMesh inline std :: shared_ptr < Mesh > GetSWMesh () const function UpdateZeroCrossingPoint inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#shapeworksmeshdomain","text":"Inherits from shapeworks::ParticleDomain","title":"shapeworks::MeshDomain"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types","text":"Name using std::shared_ptr< MeshDomain > Pointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions","text":"Name virtual DomainType GetDomainType () const override virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const override bool ApplyVectorConstraints (VectorDoubleType & gradE, const PointType & pos) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const override virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const override virtual void InvalidateParticlePosition (int idx) const override virtual double GetCurvature (const PointType & p, int idx) const override virtual double GetSurfaceMeanCurvature () const override virtual double GetSurfaceStdDevCurvature () const override virtual const PointType & GetLowerBound () const override virtual const PointType & GetUpperBound () const override virtual PointType GetZeroCrossingPoint () const override virtual PointType GetValidLocationNear ( PointType p) const override virtual double GetSurfaceArea () const override virtual double GetMaxDiameter () const override virtual vnl_vector_fixed< float, DIMENSION > SampleGradientAtPoint (const PointType & point, int idx) const override virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (const PointType & point, int idx) const override virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const override double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, vnl_vector_fixed< double, DIMENSION > * out_grad =nullptr) const override virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const override virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const override virtual void DeleteImages () override virtual void DeletePartialDerivativeImages () override void SetMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh_) std::shared_ptr< Mesh > GetSWMesh () const virtual void UpdateZeroCrossingPoint () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name bool IsDomainFixed () const std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#using-pointer","text":"using shapeworks :: MeshDomain :: Pointer = std :: shared_ptr < MeshDomain > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getdomaintype","text":"inline virtual DomainType GetDomainType () const override Reimplements : shapeworks::ParticleDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override Reimplements : shapeworks::ParticleDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-applyvectorconstraints","text":"bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const","title":"function ApplyVectorConstraints"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override Reimplements : shapeworks::ParticleDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override Reimplements : shapeworks::ParticleDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-invalidateparticleposition","text":"virtual void InvalidateParticlePosition ( int idx ) const override Reimplements : shapeworks::ParticleDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getcurvature","text":"inline virtual double GetCurvature ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacemeancurvature","text":"inline virtual double GetSurfaceMeanCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacestddevcurvature","text":"inline virtual double GetSurfaceStdDevCurvature () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const override Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const override Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getzerocrossingpoint","text":"inline virtual PointType GetZeroCrossingPoint () const override Reimplements : shapeworks::ParticleDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getvalidlocationnear","text":"inline virtual PointType GetValidLocationNear ( PointType p ) const override Reimplements : shapeworks::ParticleDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getsurfacearea","text":"inline virtual double GetSurfaceArea () const override Reimplements : shapeworks::ParticleDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const override Reimplements : shapeworks::ParticleDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradientatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplenormalatpoint","text":"inline virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-samplegradnatpoint","text":"inline virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override Reimplements : shapeworks::ParticleDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-distance","text":"inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override Reimplements : shapeworks::ParticleDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const override Reimplements : shapeworks::ParticleDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deleteimages","text":"inline virtual void DeleteImages () override Reimplements : shapeworks::ParticleDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-deletepartialderivativeimages","text":"inline virtual void DeletePartialDerivativeImages () override Reimplements : shapeworks::ParticleDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-setmesh","text":"inline void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ )","title":"function SetMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-getswmesh","text":"inline std :: shared_ptr < Mesh > GetSWMesh () const","title":"function GetSWMesh"},{"location":"api/Classes/classshapeworks_1_1MeshDomain.html#function-updatezerocrossingpoint","text":"inline virtual void UpdateZeroCrossingPoint () override Reimplements : shapeworks::ParticleDomain::UpdateZeroCrossingPoint Updated on 2023-10-25 at 15:40:27 +0000","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html","text":"shapeworks::MeshGenerator Public Functions Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method () Public Attributes Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C Public Functions Documentation function MeshGenerator MeshGenerator () function ~MeshGenerator ~ MeshGenerator () function build_mesh MeshHandle build_mesh ( const MeshWorkItem & item ) function build_mesh_from_points MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ) function build_mesh_from_image MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ) function build_mesh_from_file MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ) function set_mesh_reconstructors void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ) function set_reconstruction_method void set_reconstruction_method ( std :: string method ) function get_reconstruction_method std :: string get_reconstruction_method () Public Attributes Documentation variable RECONSTRUCTION_LEGACY_C static const std :: string RECONSTRUCTION_LEGACY_C ; variable RECONSTRUCTION_DISTANCE_TRANSFORM_C static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; variable RECONSTRUCTION_MESH_WARPER_C static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#shapeworksmeshgenerator","text":"","title":"shapeworks::MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions","text":"Name MeshGenerator () ~MeshGenerator () MeshHandle build_mesh (const MeshWorkItem & item) MeshHandle build_mesh_from_points (const Eigen::VectorXd & shape, int domain) MeshHandle build_mesh_from_image (ImageType::Pointer image, float iso_value =0.0001) MeshHandle build_mesh_from_file (std::string filename, float iso_value =0.0001) void set_mesh_reconstructors (std::shared_ptr< MeshReconstructors > reconstructors) void set_reconstruction_method (std::string method) std::string get_reconstruction_method ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes","text":"Name const std::string RECONSTRUCTION_LEGACY_C const std::string RECONSTRUCTION_DISTANCE_TRANSFORM_C const std::string RECONSTRUCTION_MESH_WARPER_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator","text":"MeshGenerator ()","title":"function MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-meshgenerator_1","text":"~ MeshGenerator ()","title":"function ~MeshGenerator"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh","text":"MeshHandle build_mesh ( const MeshWorkItem & item )","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_points","text":"MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain )","title":"function build_mesh_from_points"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_image","text":"MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 )","title":"function build_mesh_from_image"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-build_mesh_from_file","text":"MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 )","title":"function build_mesh_from_file"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_mesh_reconstructors","text":"void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors )","title":"function set_mesh_reconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-set_reconstruction_method","text":"void set_reconstruction_method ( std :: string method )","title":"function set_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#function-get_reconstruction_method","text":"std :: string get_reconstruction_method ()","title":"function get_reconstruction_method"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_legacy_c","text":"static const std :: string RECONSTRUCTION_LEGACY_C ;","title":"variable RECONSTRUCTION_LEGACY_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_distance_transform_c","text":"static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ;","title":"variable RECONSTRUCTION_DISTANCE_TRANSFORM_C"},{"location":"api/Classes/classshapeworks_1_1MeshGenerator.html#variable-reconstruction_mesh_warper_c","text":"static const std :: string RECONSTRUCTION_MESH_WARPER_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable RECONSTRUCTION_MESH_WARPER_C"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html","text":"shapeworks::MeshGroup Representation of a group of meshes. More... #include Public Functions Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Detailed Description class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain Public Functions Documentation function MeshGroup MeshGroup () function MeshGroup MeshGroup ( unsigned long num_meshes ) function ~MeshGroup ~ MeshGroup () function set_number_of_meshes void set_number_of_meshes ( int n ) function valid bool valid () function set_mesh void set_mesh ( int i , MeshHandle mesh ) function meshes MeshList & meshes () Return a reference to the list of meshes. function get_combined_poly_data vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#shapeworksmeshgroup","text":"Representation of a group of meshes. More... #include ","title":"shapeworks::MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions","text":"Name MeshGroup () MeshGroup (unsigned long num_meshes) ~MeshGroup () void set_number_of_meshes (int n) bool valid () void set_mesh (int i, MeshHandle mesh) MeshList & meshes () Return a reference to the list of meshes. vtkSmartPointer< vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#detailed-description","text":"class shapeworks :: MeshGroup ; Representation of a group of meshes. The MeshGroup class encapsulates a group of meshes (e.g. from a single subject) A subject will have one mesh for each anatomy/domain","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup","text":"MeshGroup ()","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_1","text":"MeshGroup ( unsigned long num_meshes )","title":"function MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshgroup_2","text":"~ MeshGroup ()","title":"function ~MeshGroup"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_number_of_meshes","text":"void set_number_of_meshes ( int n )","title":"function set_number_of_meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-valid","text":"bool valid ()","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-set_mesh","text":"void set_mesh ( int i , MeshHandle mesh )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-meshes","text":"MeshList & meshes () Return a reference to the list of meshes.","title":"function meshes"},{"location":"api/Classes/classshapeworks_1_1MeshGroup.html#function-get_combined_poly_data","text":"vtkSmartPointer < vtkPolyData > get_combined_poly_data () Return polydata of all meshes, combined. Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_combined_poly_data"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html","text":"shapeworks::MeshManager Class to manage meshes. More... #include Inherits from QObject Public Slots Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress () Public Signals Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string ) Public Functions Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache Detailed Description class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background. Public Slots Documentation slot handle_thread_complete void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ) slot handle_warper_progress void handle_warper_progress () Public Signals Documentation signal new_mesh void new_mesh () signal error_encountered void error_encountered ( QString message ) signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function MeshManager MeshManager () function ~MeshManager ~ MeshManager () function set_cache_enabled void set_cache_enabled ( bool enabled ) Set if the cache should be enabled. function set_cache_memory_percent void set_cache_memory_percent ( int percent ) Set the memory cache size. function set_parallel_enabled inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled. function set_num_threads inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction. function generate_mesh void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread function get_mesh MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem function get_mesh MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points function get_surface_reconstructor std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain function get_mesh_warper std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain function get_mesh_generator inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator function clear_cache void clear_cache () clear the cache Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#shapeworksmeshmanager","text":"Class to manage meshes. More... #include Inherits from QObject","title":"shapeworks::MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots","text":"Name void handle_thread_complete (const MeshWorkItem & item, MeshHandle mesh) void handle_warper_progress ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals","text":"Name void new_mesh () void error_encountered (QString message) void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions","text":"Name MeshManager () ~MeshManager () void set_cache_enabled (bool enabled) Set if the cache should be enabled. void set_cache_memory_percent (int percent) Set the memory cache size. void set_parallel_enabled (bool enabled) Set if parallel reconstruction should be enabled. void set_num_threads (int num_threads) Set the number of threads for parallel reconstruction. void generate_mesh (const MeshWorkItem item) generate and cache a mesh for this shape in a different thread MeshHandle get_mesh (const MeshWorkItem & item, bool wait =false) get a mesh for a MeshWorkItem MeshHandle get_mesh (const Eigen::VectorXd & points, int domain, bool wait =false) get a mesh for a set of points std::shared_ptr< SurfaceReconstructor > get_surface_reconstructor (int domain) return the surface reconstructor for a given domain std::shared_ptr< MeshWarper > get_mesh_warper (int domain) return the mesh warper for a given domain std::shared_ptr< MeshGenerator > get_mesh_generator () return the mesh generator void clear_cache () clear the cache","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#detailed-description","text":"class shapeworks :: MeshManager ; Class to manage meshes. The MeshManager handles all aspects of mesh generation and caching. It houses the cache and manages threads to work on mesh generation in the background.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_thread_complete","text":"void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh )","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#slot-handle_warper_progress","text":"void handle_warper_progress ()","title":"slot handle_warper_progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-error_encountered","text":"void error_encountered ( QString message )","title":"signal error_encountered"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager","text":"MeshManager ()","title":"function MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-meshmanager_1","text":"~ MeshManager ()","title":"function ~MeshManager"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_enabled","text":"void set_cache_enabled ( bool enabled ) Set if the cache should be enabled.","title":"function set_cache_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_cache_memory_percent","text":"void set_cache_memory_percent ( int percent ) Set the memory cache size.","title":"function set_cache_memory_percent"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_parallel_enabled","text":"inline void set_parallel_enabled ( bool enabled ) Set if parallel reconstruction should be enabled.","title":"function set_parallel_enabled"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-set_num_threads","text":"inline void set_num_threads ( int num_threads ) Set the number of threads for parallel reconstruction.","title":"function set_num_threads"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-generate_mesh","text":"void generate_mesh ( const MeshWorkItem item ) generate and cache a mesh for this shape in a different thread","title":"function generate_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh","text":"MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ) get a mesh for a MeshWorkItem","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_1","text":"MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ) get a mesh for a set of points","title":"function get_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_surface_reconstructor","text":"std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ) return the surface reconstructor for a given domain","title":"function get_surface_reconstructor"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_warper","text":"std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ) return the mesh warper for a given domain","title":"function get_mesh_warper"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-get_mesh_generator","text":"inline std :: shared_ptr < MeshGenerator > get_mesh_generator () return the mesh generator","title":"function get_mesh_generator"},{"location":"api/Classes/classshapeworks_1_1MeshManager.html#function-clear_cache","text":"void clear_cache () clear the cache Updated on 2023-10-25 at 15:40:27 +0000","title":"function clear_cache"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html","text":"shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReader.html#shapeworksmeshreader","text":"reads mesh (used only by one of the Mesh constructors) #include Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshReader"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html","text":"shapeworks::MeshReconstructors Public Attributes Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_ Public Attributes Documentation variable surface_reconstructors_ std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ; variable mesh_warpers_ std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#shapeworksmeshreconstructors","text":"","title":"shapeworks::MeshReconstructors"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes","text":"Name std::vector< std::shared_ptr< SurfaceReconstructor > > surface_reconstructors_ std::vector< std::shared_ptr< QMeshWarper > > mesh_warpers_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-surface_reconstructors_","text":"std :: vector < std :: shared_ptr < SurfaceReconstructor > > surface_reconstructors_ ;","title":"variable surface_reconstructors_"},{"location":"api/Classes/classshapeworks_1_1MeshReconstructors.html#variable-mesh_warpers_","text":"std :: vector < std :: shared_ptr < QMeshWarper > > mesh_warpers_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable mesh_warpers_"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html","text":"shapeworks::MeshSlice MeshSlice . More... #include Public Functions Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key) Detailed Description class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer Public Functions Documentation function MeshSlice MeshSlice ( Viewer * viewer ) function set_volume void set_volume ( vtkSmartPointer < vtkImageData > volume ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key void handle_key ( std :: string key ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#shapeworksmeshslice","text":"MeshSlice . More... #include ","title":"shapeworks::MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions","text":"Name MeshSlice ( Viewer * viewer) void set_volume (vtkSmartPointer< vtkImageData > volume) bool is_image_loaded () void update_renderer () void update_camera () void handle_key (std::string key)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#detailed-description","text":"class shapeworks :: MeshSlice ; MeshSlice . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-meshslice","text":"MeshSlice ( Viewer * viewer )","title":"function MeshSlice"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-set_volume","text":"void set_volume ( vtkSmartPointer < vtkImageData > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1MeshSlice.html#function-handle_key","text":"void handle_key ( std :: string key ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html","text":"shapeworks::MeshUtils Module: Mesh Classes More... #include Public Functions Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations. Detailed Description class shapeworks :: MeshUtils ; This class provides helper functions for meshes Public Functions Documentation function createICPTransform static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform function threadSafeReadMesh static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock. function threadSafeWriteMesh static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock. function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes function boundingBox static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes function findReferenceMesh static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh function boundaryLoopExtractor static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh function sharedBoundaryExtractor static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh function generateNormals static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes function computeMeanNormals static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes function visualizeVectorFieldForFFCs void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs. function getArrow vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#shapeworksmeshutils","text":"Module: Mesh Classes More... #include ","title":"shapeworks::MeshUtils"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions","text":"Name const vtkSmartPointer< vtkMatrix4x4 > createICPTransform (const Mesh source, const Mesh target, Mesh::AlignmentType align, const unsigned iterations =20, bool meshTransform =false) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform Mesh threadSafeReadMesh (std::string filename) Thread safe reading of a mesh, uses a lock. void threadSafeWriteMesh (std::string filename, Mesh mesh) Thread safe writing of a mesh, uses a lock. PhysicalRegion boundingBox (const std::vector< std::string > & filenames, bool center =false) calculate bounding box incrementally for meshes PhysicalRegion boundingBox (const std::vector< std::reference_wrapper< const Mesh > > & meshes, bool center =false) calculate bounding box incrementally for meshes size_t findReferenceMesh (std::vector< Mesh > & meshes) determine the reference mesh Mesh boundaryLoopExtractor ( Mesh mesh) boundary loop extractor for a given mesh std::array< Mesh , 3 > sharedBoundaryExtractor (const Mesh & mesh_l, const Mesh & mesh_r, double tol) shared boundary extractor for the left and right mesh void generateNormals (const std::vector< std::reference_wrapper< Mesh > > & meshes, bool forceRegen =false) generates and adds normals for points and faces for each mesh in given set of meshes Field computeMeanNormals (const std::vector< std::string > & filenames, bool autoGenerateNormals =true) computes average normals for each point in given set of meshes Field computeMeanNormals (const std::vector< std::reference_wrapper< const Mesh > > & meshes) computes average normals for each point in given set of meshes void visualizeVectorFieldForFFCs (std::shared_ptr< Mesh > mesh) This function visualizes vector and scalar fields for FFCs. vtkSmartPointer< vtkActor > getArrow (Eigen::Vector3d start, Eigen::Vector3d end) Used as an auxiliary function for vector field visualizations.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#detailed-description","text":"class shapeworks :: MeshUtils ; This class provides helper functions for meshes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-createicptransform","text":"static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ) computes a rigid transformation from source to target using vtkIterativeClosestPointTransform","title":"function createICPTransform"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafereadmesh","text":"static Mesh threadSafeReadMesh ( std :: string filename ) Thread safe reading of a mesh, uses a lock.","title":"function threadSafeReadMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-threadsafewritemesh","text":"static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ) Thread safe writing of a mesh, uses a lock.","title":"function threadSafeWriteMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: string > & filenames , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundingbox_1","text":"static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes , bool center = false ) calculate bounding box incrementally for meshes","title":"function boundingBox"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-findreferencemesh","text":"static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ) determine the reference mesh","title":"function findReferenceMesh"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-boundaryloopextractor","text":"static Mesh boundaryLoopExtractor ( Mesh mesh ) boundary loop extractor for a given mesh","title":"function boundaryLoopExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-sharedboundaryextractor","text":"static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ) shared boundary extractor for the left and right mesh","title":"function sharedBoundaryExtractor"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-generatenormals","text":"static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh > > & meshes , bool forceRegen = false ) generates and adds normals for points and faces for each mesh in given set of meshes","title":"function generateNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals","text":"static Field computeMeanNormals ( const std :: vector < std :: string > & filenames , bool autoGenerateNormals = true ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-computemeannormals_1","text":"static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh > > & meshes ) computes average normals for each point in given set of meshes","title":"function computeMeanNormals"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-visualizevectorfieldforffcs","text":"void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ) This function visualizes vector and scalar fields for FFCs.","title":"function visualizeVectorFieldForFFCs"},{"location":"api/Classes/classshapeworks_1_1MeshUtils.html#function-getarrow","text":"vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ) Used as an auxiliary function for vector field visualizations. Updated on 2023-10-25 at 15:40:28 +0000","title":"function getArrow"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html","text":"shapeworks::MeshWarper Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper Public Functions Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Protected Functions Name virtual void update_progress (float p) For overriding to handle progress updates. Detailed Description class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices Public Functions Documentation function set_reference_mesh void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles. function generate_warp bool generate_warp () Generate warp, return true on success. function get_warp_available bool get_warp_available () Return if the warp is available. function is_contour inline bool is_contour () const function build_mesh vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles. function extract_landmarks Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh. function is_contour inline bool is_contour () Return if set as a contour. function get_landmarks_map inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) function get_good_particle_indices inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) function get_warp_matrix inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix. function has_bad_particles inline bool has_bad_particles () const Return true if warping has removed any bad particle(s) function get_reference_mesh inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. function get_reference_particles inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles. function prep_mesh static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh. Protected Functions Documentation function update_progress inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-25 at 15:40:28 +0000","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#shapeworksmeshwarper","text":"Module: Mesh Classes More... #include Inherited by shapeworks::QMeshWarper","title":"shapeworks::MeshWarper"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions","text":"Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#detailed-description","text":"class shapeworks :: MeshWarper ; This class implements mesh warping based on correspondence particles. Correspondence points are embedded into the mesh as new vertices (traingles split). Then a biharmonic deformation is used to warp the mesh to new sets of correspondence particles. It can optionally be used to warp landmarks along with the mesh by embedding them as vertices","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-set_reference_mesh","text":"void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {} ) Set the reference mesh and particles.","title":"function set_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-generate_warp","text":"bool generate_warp () Generate warp, return true on success.","title":"function generate_warp"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_available","text":"bool get_warp_available () Return if the warp is available.","title":"function get_warp_available"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour","text":"inline bool is_contour () const","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-build_mesh","text":"vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ) Build a mesh for a given set of particles.","title":"function build_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-extract_landmarks","text":"Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ) Return the landmarks (matrix [Nx3]) from the warped builded mesh.","title":"function extract_landmarks"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-is_contour_1","text":"inline bool is_contour () Return if set as a contour.","title":"function is_contour"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_landmarks_map","text":"inline std :: map < int , int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value)","title":"function get_landmarks_map"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_good_particle_indices","text":"inline std :: vector < int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping)","title":"function get_good_particle_indices"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_warp_matrix","text":"inline const Eigen :: MatrixXd & get_warp_matrix () const Return the warp matrix.","title":"function get_warp_matrix"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-has_bad_particles","text":"inline bool has_bad_particles () const Return true if warping has removed any bad particle(s)","title":"function has_bad_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_mesh","text":"inline vtkSmartPointer < vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added.","title":"function get_reference_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-get_reference_particles","text":"inline const Eigen :: MatrixXd & get_reference_particles () const Return the reference particles.","title":"function get_reference_particles"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-prep_mesh","text":"static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ) Prep incoming mesh.","title":"function prep_mesh"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWarper.html#function-update_progress","text":"inline virtual void update_progress ( float p ) For overriding to handle progress updates. Reimplemented by : shapeworks::QMeshWarper::update_progress Updated on 2023-10-25 at 15:40:28 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html","text":"shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. #include Public Attributes Name std::string filename Eigen::VectorXd points int domain size_t memory_size Friends Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b) Public Attributes Documentation variable filename std :: string filename ; variable points Eigen :: VectorXd points ; variable domain int domain { 0 }; variable memory_size size_t memory_size { 0 }; Friends friend operator< friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend operator== friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#shapeworksmeshworkitem","text":"Provides concurrent access to a list of shapes to work needing reconstruction. #include ","title":"shapeworks::MeshWorkItem"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes","text":"Name std::string filename Eigen::VectorXd points int domain size_t memory_size","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends","text":"Name bool operator< (const MeshWorkItem & a, const MeshWorkItem & b) bool operator== (const MeshWorkItem & a, const MeshWorkItem & b)","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-filename","text":"std :: string filename ;","title":"variable filename"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-points","text":"Eigen :: VectorXd points ;","title":"variable points"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-domain","text":"int domain { 0 };","title":"variable domain"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#variable-memory_size","text":"size_t memory_size { 0 };","title":"variable memory_size"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator","text":"friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b );","title":"friend operator<"},{"location":"api/Classes/classshapeworks_1_1MeshWorkItem.html#friend-operator_1","text":"friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); Updated on 2023-10-25 at 15:40:27 +0000","title":"friend operator=="},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html","text":"shapeworks::MeshWorkQueue Public Types Name using std::list< MeshWorkItem > WorkList Public Functions Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size () Public Types Documentation using WorkList using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ; Public Functions Documentation function MeshWorkQueue MeshWorkQueue () function ~MeshWorkQueue ~ MeshWorkQueue () function push void push ( const MeshWorkItem & item ) function get_next_work_item MeshWorkItem * get_next_work_item () function is_inside bool is_inside ( const MeshWorkItem & item ) function remove void remove ( const MeshWorkItem & item ) function is_empty bool is_empty () function size int size () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#shapeworksmeshworkqueue","text":"","title":"shapeworks::MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types","text":"Name using std::list< MeshWorkItem > WorkList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions","text":"Name MeshWorkQueue () ~MeshWorkQueue () void push (const MeshWorkItem & item) MeshWorkItem * get_next_work_item () bool is_inside (const MeshWorkItem & item) void remove (const MeshWorkItem & item) bool is_empty () int size ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#using-worklist","text":"using shapeworks :: MeshWorkQueue :: WorkList = std :: list < MeshWorkItem > ;","title":"using WorkList"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue","text":"MeshWorkQueue ()","title":"function MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-meshworkqueue_1","text":"~ MeshWorkQueue ()","title":"function ~MeshWorkQueue"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-push","text":"void push ( const MeshWorkItem & item )","title":"function push"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-get_next_work_item","text":"MeshWorkItem * get_next_work_item ()","title":"function get_next_work_item"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_inside","text":"bool is_inside ( const MeshWorkItem & item )","title":"function is_inside"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-remove","text":"void remove ( const MeshWorkItem & item )","title":"function remove"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-is_empty","text":"bool is_empty ()","title":"function is_empty"},{"location":"api/Classes/classshapeworks_1_1MeshWorkQueue.html#function-size","text":"int size () Updated on 2023-10-25 at 15:40:27 +0000","title":"function size"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html","text":"shapeworks::MeshWorker Inherits from QObject, QRunnable Public Signals Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished () Public Functions Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run () Public Signals Documentation signal result_ready void result_ready ( const MeshWorkItem & item , MeshHandle mesh ) signal finished void finished () Public Functions Documentation function MeshWorker MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ) function ~MeshWorker ~ MeshWorker () function run void run () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#shapeworksmeshworker","text":"Inherits from QObject, QRunnable","title":"shapeworks::MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals","text":"Name void result_ready (const MeshWorkItem & item, MeshHandle mesh) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions","text":"Name MeshWorker ( MeshWorkQueue * queue, std::shared_ptr< MeshGenerator > generator) ~MeshWorker () void run ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-result_ready","text":"void result_ready ( const MeshWorkItem & item , MeshHandle mesh )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker","text":"MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator )","title":"function MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-meshworker_1","text":"~ MeshWorker ()","title":"function ~MeshWorker"},{"location":"api/Classes/classshapeworks_1_1MeshWorker.html#function-run","text":"void run () Updated on 2023-10-25 at 15:40:27 +0000","title":"function run"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html","text":"shapeworks::MeshWrapper Inherited by shapeworks::VtkMeshWrapper Public Types Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType Public Functions Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0 Public Types Documentation typedef PointType typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ; typedef GradNType typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ; Public Functions Documentation function ComputeDistance virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 function IsWithinDistance virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk function GetPointOnMesh virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh function GetMeshLowerBound virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound function GetMeshUpperBound virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound function ProjectVectorToSurfaceTangent virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh function InvalidateParticle inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle function IsGeodesicsEnabled virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled function GetPolydata virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#shapeworksmeshwrapper","text":"Inherited by shapeworks::VtkMeshWrapper","title":"shapeworks::MeshWrapper"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types","text":"Name typedef ParticleDomain::PointType PointType typedef ParticleDomain::GradNType GradNType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions","text":"Name virtual double ComputeDistance (const PointType & pointa, int idx_a, const PointType & pointb, int idx_b, vnl_vector_fixed< double, 3 > * out_grad =nullptr) const =0 virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & dist) const =0 virtual PointType GeodesicWalk (PointType pointa, int idx, vnl_vector_fixed< double, DIMENSION > vector) const =0 virtual PointType GetPointOnMesh () const =0 virtual const PointType & GetMeshLowerBound () const =0 virtual const PointType & GetMeshUpperBound () const =0 virtual vnl_vector_fixed< double, DIMENSION > ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, vnl_vector_fixed< double, DIMENSION > & vector) const =0 virtual vnl_vector_fixed< float, DIMENSION > SampleNormalAtPoint (PointType p, int idx) const =0 virtual GradNType SampleGradNAtPoint (PointType p, int idx) const =0 virtual PointType SnapToMesh (PointType pointa, int idx) const =0 virtual void InvalidateParticle (int idx) virtual bool IsGeodesicsEnabled () const =0 virtual vtkSmartPointer< vtkPolyData > GetPolydata () const =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: MeshWrapper :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#typedef-gradntype","text":"typedef ParticleDomain :: GradNType shapeworks :: MeshWrapper :: GradNType ;","title":"typedef GradNType"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-computedistance","text":"virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshlowerbound","text":"virtual const PointType & GetMeshLowerBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getmeshupperbound","text":"virtual const PointType & GetMeshUpperBound () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplenormalatpoint","text":"virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-invalidateparticle","text":"inline virtual void InvalidateParticle ( int idx ) Reimplemented by : shapeworks::VtkMeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-isgeodesicsenabled","text":"virtual bool IsGeodesicsEnabled () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::IsGeodesicsEnabled","title":"function IsGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1MeshWrapper.html#function-getpolydata","text":"virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 Reimplemented by : shapeworks::VtkMeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html","text":"shapeworks::MixedEffectsShapeMatrix Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const Protected Functions Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Additional inherited members Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef DataType typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ; typedef Superclass typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods). function UpdateMeanMatrix inline void UpdateMeanMatrix () function ComputeMean inline vnl_vector < double > ComputeMean ( double k ) const function ResizeParameters inline void ResizeParameters ( unsigned int n ) function ResizeMeanMatrix inline virtual void ResizeMeanMatrix ( int rs , int cs ) function ResizeExplanatory inline void ResizeExplanatory ( unsigned int n ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int i ) function GetTimeptsPerIndividual inline int GetTimeptsPerIndividual () const function SetExplanatory inline void SetExplanatory ( std :: vector < double > v ) function SetExplanatory inline void SetExplanatory ( unsigned int i , double q ) function GetExplanatory inline const double & GetExplanatory ( unsigned int i ) const function GetExplanatory inline double & GetExplanatory ( unsigned int i ) function GetSlope inline const vnl_vector < double > & GetSlope () const function GetIntercept inline const vnl_vector < double > & GetIntercept () const function GetSlopeRandom inline const vnl_matrix < double > & GetSlopeRandom () const function GetInterceptRandom inline const vnl_matrix < double > & GetInterceptRandom () const function SetSlope inline void SetSlope ( const std :: vector < double > & v ) function SetIntercept inline void SetIntercept ( const std :: vector < double > & v ) function EstimateParameters inline void EstimateParameters () function Initialize inline void Initialize () function BeforeIteration inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration function SetRegressionInterval inline void SetRegressionInterval ( int i ) function GetRegressionInterval inline int GetRegressionInterval () const Protected Functions Documentation function MixedEffectsShapeMatrix inline MixedEffectsShapeMatrix () function ~MixedEffectsShapeMatrix inline virtual ~ MixedEffectsShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#shapeworksmixedeffectsshapematrix","text":"Inherits from shapeworks::LegacyShapeMatrix , vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types","text":"Name typedef double DataType typedef MixedEffectsShapeMatrix Self typedef LegacyShapeMatrix Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) void UpdateMeanMatrix () vnl_vector< double > ComputeMean (double k) const void ResizeParameters (unsigned int n) virtual void ResizeMeanMatrix (int rs, int cs) void ResizeExplanatory (unsigned int n) virtual void DomainAddEventCallback (Object * , const itk::EventObject & e) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetTimeptsPerIndividual (int i) int GetTimeptsPerIndividual () const void SetExplanatory (std::vector< double > v) void SetExplanatory (unsigned int i, double q) const double & GetExplanatory (unsigned int i) const double & GetExplanatory (unsigned int i) const vnl_vector< double > & GetSlope () const const vnl_vector< double > & GetIntercept () const const vnl_matrix< double > & GetSlopeRandom () const const vnl_matrix< double > & GetInterceptRandom () const void SetSlope (const std::vector< double > & v) void SetIntercept (const std::vector< double > & v) void EstimateParameters () void Initialize () virtual void BeforeIteration () void SetRegressionInterval (int i) int GetRegressionInterval () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions","text":"Name MixedEffectsShapeMatrix () virtual ~MixedEffectsShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::LegacyShapeMatrix Name virtual void ResizeMatrix (int rs, int cs) void PrintMatrix () bool CheckForNans () virtual void AfterIteration () virtual void SetMatrix (const vnl_matrix< double > & m) Protected Functions inherited from shapeworks::LegacyShapeMatrix Name LegacyShapeMatrix () virtual ~LegacyShapeMatrix () Protected Attributes inherited from shapeworks::LegacyShapeMatrix Name int m_DomainsPerShape Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: MixedEffectsShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-self","text":"typedef MixedEffectsShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-superclass","text":"typedef LegacyShapeMatrix shapeworks :: MixedEffectsShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: MixedEffectsShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: MixedEffectsShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-updatemeanmatrix","text":"inline void UpdateMeanMatrix ()","title":"function UpdateMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-computemean","text":"inline vnl_vector < double > ComputeMean ( double k ) const","title":"function ComputeMean"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeparameters","text":"inline void ResizeParameters ( unsigned int n )","title":"function ResizeParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizemeanmatrix","text":"inline virtual void ResizeMeanMatrix ( int rs , int cs )","title":"function ResizeMeanMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-resizeexplanatory","text":"inline void ResizeExplanatory ( unsigned int n )","title":"function ResizeExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::LegacyShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int i )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-gettimeptsperindividual","text":"inline int GetTimeptsPerIndividual () const","title":"function GetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory","text":"inline void SetExplanatory ( std :: vector < double > v )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setexplanatory_1","text":"inline void SetExplanatory ( unsigned int i , double q )","title":"function SetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory","text":"inline const double & GetExplanatory ( unsigned int i ) const","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getexplanatory_1","text":"inline double & GetExplanatory ( unsigned int i )","title":"function GetExplanatory"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getslope","text":"inline const vnl_vector < double > & GetSlope () const","title":"function GetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getintercept","text":"inline const vnl_vector < double > & GetIntercept () const","title":"function GetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getsloperandom","text":"inline const vnl_matrix < double > & GetSlopeRandom () const","title":"function GetSlopeRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getinterceptrandom","text":"inline const vnl_matrix < double > & GetInterceptRandom () const","title":"function GetInterceptRandom"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setslope","text":"inline void SetSlope ( const std :: vector < double > & v )","title":"function SetSlope"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setintercept","text":"inline void SetIntercept ( const std :: vector < double > & v )","title":"function SetIntercept"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-estimateparameters","text":"inline void EstimateParameters ()","title":"function EstimateParameters"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplements : shapeworks::LegacyShapeMatrix::BeforeIteration","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-setregressioninterval","text":"inline void SetRegressionInterval ( int i )","title":"function SetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-getregressioninterval","text":"inline int GetRegressionInterval () const","title":"function GetRegressionInterval"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix","text":"inline MixedEffectsShapeMatrix ()","title":"function MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-mixedeffectsshapematrix_1","text":"inline virtual ~ MixedEffectsShapeMatrix ()","title":"function ~MixedEffectsShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Updated on 2023-10-25 at 15:40:27 +0000","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html","text":"shapeworks::NetworkAnalysisJob Inherits from shapeworks::Job , QObject Public Functions Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function NetworkAnalysisJob NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function set_pvalue_of_interest void set_pvalue_of_interest ( double pvalue_of_interest ) function set_pvalue_threshold void set_pvalue_threshold ( double pvalue_threshold ) function set_num_iterations void set_num_iterations ( int num_iterations ) function get_tvalues Eigen :: VectorXf get_tvalues () function get_spm_values Eigen :: VectorXf get_spm_values () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#shapeworksnetworkanalysisjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions","text":"Name NetworkAnalysisJob (std::shared_ptr< Project > project, std::string target_group, std::string target_feature) virtual void run () override run the job virtual QString name () override get the name of the job void set_pvalue_of_interest (double pvalue_of_interest) void set_pvalue_threshold (double pvalue_threshold) void set_num_iterations (int num_iterations) Eigen::VectorXf get_tvalues () Eigen::VectorXf get_spm_values ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-networkanalysisjob","text":"NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature )","title":"function NetworkAnalysisJob"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_of_interest","text":"void set_pvalue_of_interest ( double pvalue_of_interest )","title":"function set_pvalue_of_interest"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_pvalue_threshold","text":"void set_pvalue_threshold ( double pvalue_threshold )","title":"function set_pvalue_threshold"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-set_num_iterations","text":"void set_num_iterations ( int num_iterations )","title":"function set_num_iterations"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_tvalues","text":"Eigen :: VectorXf get_tvalues ()","title":"function get_tvalues"},{"location":"api/Classes/classshapeworks_1_1NetworkAnalysisJob.html#function-get_spm_values","text":"Eigen :: VectorXf get_spm_values () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_spm_values"},{"location":"api/Classes/classshapeworks_1_1Observer.html","text":"shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix Public Classes Name struct DefinedCallbacksStruct Public Types Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const Public Attributes Name DefinedCallbacksStruct m_DefinedCallbacks Public Types Documentation typedef Self typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: Observer :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods). function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function TransformSetEventCallback inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) function PrefixTransformSetEventCallback inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) function NeighborhoodSetEventCallback inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback Protected Functions Documentation function Observer inline Observer () function ~Observer inline virtual ~ Observer () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Public Attributes Documentation variable m_DefinedCallbacks DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#shapeworksobserver","text":"This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) #include Inherits from itk::DataObject Inherited by shapeworks::GenericContainerArray< TNumericType > , shapeworks::GenericContainerArray< T > , shapeworks::LegacyShapeMatrix , shapeworks::ShapeGradientMatrix , shapeworks::ShapeMatrix","title":"shapeworks::Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-classes","text":"Name struct DefinedCallbacksStruct","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types","text":"Name typedef Observer Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( Observer , DataObject ) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionSetEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions","text":"Name Observer () virtual ~Observer () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes","text":"Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-self","text":"typedef Observer shapeworks :: Observer :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-superclass","text":"typedef DataObject shapeworks :: Observer :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: Observer :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: Observer :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: Observer :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-itktypemacro","text":"itkTypeMacro ( Observer , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::GenericContainerArray::DomainAddEventCallback , shapeworks::LegacyShapeMatrix::DomainAddEventCallback , shapeworks::LinearRegressionShapeMatrix::DomainAddEventCallback , shapeworks::MixedEffectsShapeMatrix::DomainAddEventCallback , shapeworks::ShapeGradientMatrix::DomainAddEventCallback , shapeworks::ShapeMatrix::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-transformseteventcallback","text":"inline virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function TransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-prefixtransformseteventcallback","text":"inline virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & )","title":"function PrefixTransformSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-neighborhoodseteventcallback","text":"inline virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & )","title":"function NeighborhoodSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::LegacyShapeMatrix::PositionSetEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionSetEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionSetEventCallback , shapeworks::ShapeGradientMatrix::PositionSetEventCallback , shapeworks::ShapeMatrix::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::GenericContainerArray::PositionAddEventCallback , shapeworks::LegacyShapeMatrix::PositionAddEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionAddEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionAddEventCallback , shapeworks::ShapeGradientMatrix::PositionAddEventCallback , shapeworks::ShapeMatrix::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::GenericContainerArray::PositionRemoveEventCallback , shapeworks::LegacyShapeMatrix::PositionRemoveEventCallback , shapeworks::LinearRegressionShapeMatrix::PositionRemoveEventCallback , shapeworks::MixedEffectsShapeMatrix::PositionRemoveEventCallback , shapeworks::ShapeGradientMatrix::PositionRemoveEventCallback , shapeworks::ShapeMatrix::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1Observer.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer","text":"inline Observer ()","title":"function Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-observer_1","text":"inline virtual ~ Observer ()","title":"function ~Observer"},{"location":"api/Classes/classshapeworks_1_1Observer.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1Observer.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Observer.html#variable-m_definedcallbacks","text":"DefinedCallbacksStruct m_DefinedCallbacks ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DefinedCallbacks"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html","text":"shapeworks::OptimizationVisualizer Public Functions Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer () Public Functions Documentation function AddMesh void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ) function IterationCallback void IterationCallback ( ParticleSystem * particleSystem ) function SetWireFrame void SetWireFrame ( bool enabled ) function SetSaveScreenshots void SetSaveScreenshots ( bool enabled , std :: string path ) function OptimizationVisualizer inline OptimizationVisualizer () function ~OptimizationVisualizer inline ~ OptimizationVisualizer () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#shapeworksoptimizationvisualizer","text":"","title":"shapeworks::OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions","text":"Name void AddMesh (vtkPolyData * mesh, std::shared_ptr< trimesh::TriMesh > tmesh) void IterationCallback ( ParticleSystem * particleSystem) void SetWireFrame (bool enabled) void SetSaveScreenshots (bool enabled, std::string path) OptimizationVisualizer () ~OptimizationVisualizer ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-addmesh","text":"void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-iterationcallback","text":"void IterationCallback ( ParticleSystem * particleSystem )","title":"function IterationCallback"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setwireframe","text":"void SetWireFrame ( bool enabled )","title":"function SetWireFrame"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-setsavescreenshots","text":"void SetSaveScreenshots ( bool enabled , std :: string path )","title":"function SetSaveScreenshots"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer","text":"inline OptimizationVisualizer ()","title":"function OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1OptimizationVisualizer.html#function-optimizationvisualizer_1","text":"inline ~ OptimizationVisualizer () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~OptimizationVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html","text":"shapeworks::Optimize More... #include Inherited by shapeworks::QOptimize Public Types Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir () Protected Attributes Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Detailed Description class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization Public Types Documentation using ImageType using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ; using VectorType using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ; using MatrixType using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ; Public Functions Documentation function Optimize Optimize () Constructor. function ~Optimize virtual ~ Optimize () Destructor. function Run bool Run () Run the optimization. function LoadParameterFile bool LoadParameterFile ( std :: string filename ) Load a parameter file. function SetUpOptimize bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project. function SetProject void SetProject ( std :: shared_ptr < Project > project ) Set the Project object. function SetIterationCallbackFunction inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration. function AbortOptimization void AbortOptimization () Abort optimization. function GetAborted bool GetAborted () Return if the optimization was aborted. function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints function SetCutPlanes void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes. function SetVerbosity void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5) function SetDomainsPerShape void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape. function GetDomainsPerShape int GetDomainsPerShape () Return the number of domains per shape. function SetDomainType void SetDomainType ( shapeworks :: DomainType type ) function GetDomainType shapeworks :: DomainType GetDomainType () function SetNumberOfParticles void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain) function GetNumberOfParticles std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain. function SetTransformFile void SetTransformFile ( std :: string filename ) Set the transform file. function GetTransformFile std :: string GetTransformFile () Get the transform file. function SetPrefixTransformFile void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details) function GetPrefixTransformFile std :: string GetPrefixTransformFile () Get the prefix transform file. function SetOutputDir void SetOutputDir ( std :: string output_dir ) Set the output directory. function SetOutputTransformFile void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file. function SetOutputIndividualTransformFiles void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written. function SetUseMeshBasedAttributes void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used. function GetUseMeshBasedAttributes bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. function SetUseXYZ void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain. function SetUseNormals void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain. function SetAttributesPerDomain void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain. function GetAttributesPerDomain std :: vector < int > GetAttributesPerDomain () Get attributes per domain. function SetDistributionDomainID void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details) function GetDistributionDomainID int GetDistributionDomainID () Get the distribution domain ID. function SetOutputCuttingPlaneFile void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file. function SetUseCuttingPlanes void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes. function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape. function SetProcessingMode void SetProcessingMode ( int mode ) Set processing mode (TODO: details) function SetAdaptivityMode void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details) function SetMeshFFCMode inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. function SetAdaptivityStrength void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details) function SetTimePtsPerSubject void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details) function GetTimePtsPerSubject int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) function SetOptimizationIterations void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations. function SetOptimizationIterationsCompleted void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details) function SetIterationsPerSplit void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split. function SetUseShapeStatisticsInInit void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization. function SetProcrustesInterval void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable) function SetProcrustesScaling void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used. function SetProcrustesRotationTranslation void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used. function SetRelativeWeighting void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details) function SetInitialRelativeWeighting void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details) function SetStartingRegularization void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details) function SetEndingRegularization void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details) function SetRecomputeRegularizationInterval void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details) function SetSaveInitSplits void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not. function SetCheckpointingInterval void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval. function SetKeepCheckpoints void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable) function SetUseRegression void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details) function SetUseMixedEffects void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details) function SetUseDisentangledSpatiotemporalSSM void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method. function GetUseDisentangledSpatiotemporalSSM bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. function SetNormalAngle void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details) function SetPerformGoodBad void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details) function SetLogEnergy void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details) function AddImage void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images. function AddMesh void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFilenames void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details) function SetPointFiles void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details) function SetInitialPoints void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function GetNumShapes int GetNumShapes () Get number of shapes. function SetAttributeScales void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes. function SetParticleFlags void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details) function SetFixedDomains void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details) function SetSharedBoundaryEnabled void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings. function SetSharedBoundaryWeight void SetSharedBoundaryWeight ( double weight ) function GetDomainFlags const std :: vector < int > & GetDomainFlags () function SetFileOutputEnabled void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled. function GetUseXYZ std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape. function GetUseNormals std :: vector < bool > GetUseNormals () Return if Normals are used, per shape. function SetNarrowBand void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing. function GetNarrowBand double GetNarrowBand () Return the narrow band to be used. function SetUseShapeStatisticsAfter void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over. function GetUseShapeStatisticsAfter int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. function PrintParamInfo void PrintParamInfo () Print parameter info to stdout. function GetSampler inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler . function GetParticleSystem MatrixContainer GetParticleSystem () Return the particle system as a matrix. function SetPythonFile void SetPythonFile ( std :: string filename ) Set the python file to run at startup. function SetGeodesicsEnabled void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled. function SetGeodesicsCacheSizeMultiplier void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles function GetVisualizer OptimizationVisualizer & GetVisualizer () function SetShowVisualizer void SetShowVisualizer ( bool show ) function GetShowVisualizer bool GetShowVisualizer () function GetMeshFFCMode inline bool GetMeshFFCMode () function TransformPoint vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary function UpdateProgress void UpdateProgress () function set_particle_format inline void set_particle_format ( std :: string format ) Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback function ComputeTotalIterations void ComputeTotalIterations () function OptimizerStop void OptimizerStop () function ReadTransformFile void ReadTransformFile () function ReadPrefixTransformFile void ReadPrefixTransformFile ( const std :: string & s ) function InitializeSampler void InitializeSampler () function GetMinNeighborhoodRadius double GetMinNeighborhoodRadius () function AddSinglePoint void AddSinglePoint () function Initialize void Initialize () function AddAdaptivity void AddAdaptivity () function RunOptimize void RunOptimize () function IterateCallback virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback function ComputeEnergyAfterIteration void ComputeEnergyAfterIteration () function SetCotanSigma void SetCotanSigma () function WriteTransformFile void WriteTransformFile ( int iter = -1 ) const function WriteTransformFile void WriteTransformFile ( std :: string iter_prefix ) const function WriteTransformFiles void WriteTransformFiles ( int iter = -1 ) const function WriteTransformFiles void WriteTransformFiles ( std :: string iter_prefix ) const function WritePointFiles void WritePointFiles ( int iter = -1 ) function WritePointFiles void WritePointFiles ( std :: string iter_prefix ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( int iter = -1 ) function WritePointFilesWithFeatures void WritePointFilesWithFeatures ( std :: string iter_prefix ) function WriteEnergyFiles void WriteEnergyFiles () function WriteSplitFiles void WriteSplitFiles ( std :: string name ) function WriteCuttingPlanePoints void WriteCuttingPlanePoints ( int iter = -1 ) function WriteParameters void WriteParameters ( std :: string output_dir = \"\" ) function ReportBadParticles void ReportBadParticles () function SetParameters int SetParameters () function WriteModes void WriteModes () function PrintStartMessage void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const function PrintDoneMessage void PrintDoneMessage ( unsigned int vlevel = 0 ) const function UpdateExportablePoints virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms function UpdateProject void UpdateProject () function GetCheckpointDir std :: string GetCheckpointDir () Protected Attributes Documentation variable m_sampler std :: shared_ptr < Sampler > m_sampler ; variable m_procrustes ProcrustesRegistration :: Pointer m_procrustes ; variable m_good_bad std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; variable m_verbosity_level unsigned int m_verbosity_level = 0 ; variable m_local_points std :: vector < std :: vector < itk :: Point < double > > > m_local_points ; variable m_global_points std :: vector < std :: vector < itk :: Point < double > > > m_global_points ; variable m_checkpoint_counter int m_checkpoint_counter = 0 ; variable m_procrustes_counter int m_procrustes_counter = 0 ; variable m_use_cutting_planes bool m_use_cutting_planes = false ; variable m_optimizing bool m_optimizing = false ; variable m_use_regression bool m_use_regression = false ; variable m_use_mixed_effects bool m_use_mixed_effects = false ; variable m_use_disentangled_ssm bool m_use_disentangled_ssm = false ; variable m_domains_per_shape unsigned int m_domains_per_shape = 1 ; variable m_domain_type shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; variable m_number_of_particles std :: vector < int > m_number_of_particles ; variable m_transform_file std :: string m_transform_file ; variable m_prefix_transform_file std :: string m_prefix_transform_file ; variable m_output_dir std :: string m_output_dir ; variable m_output_transform_file std :: string m_output_transform_file ; variable m_output_transform_files bool m_output_transform_files = false ; variable m_mesh_based_attributes bool m_mesh_based_attributes = false ; variable m_use_xyz std :: vector < bool > m_use_xyz ; variable m_use_normals std :: vector < bool > m_use_normals ; variable m_attributes_per_domain std :: vector < int > m_attributes_per_domain ; variable m_distribution_domain_id int m_distribution_domain_id = -1 ; variable m_output_cutting_plane_file std :: string m_output_cutting_plane_file ; variable m_processing_mode int m_processing_mode = 3 ; variable m_adaptivity_mode int m_adaptivity_mode = 0 ; variable m_adaptivity_strength double m_adaptivity_strength = 0.0 ; variable m_mesh_ffc_mode bool m_mesh_ffc_mode = 0 ; variable m_timepts_per_subject unsigned int m_timepts_per_subject = 1 ; variable m_optimization_iterations int m_optimization_iterations = 2000 ; variable m_optimization_iterations_completed int m_optimization_iterations_completed = 0 ; variable m_iterations_per_split int m_iterations_per_split = 1000 ; variable m_use_shape_statistics_in_init bool m_use_shape_statistics_in_init = false ; variable m_procrustes_interval unsigned int m_procrustes_interval = 3 ; variable m_procrustes_scaling bool m_procrustes_scaling = true ; variable m_procrustes_rotation_translation bool m_procrustes_rotation_translation = true ; variable m_relative_weighting double m_relative_weighting = 1.0 ; variable m_initial_relative_weighting double m_initial_relative_weighting = 0.05 ; variable m_starting_regularization double m_starting_regularization = 1000 ; variable m_ending_regularization double m_ending_regularization = 1.0 ; variable m_recompute_regularization_interval int m_recompute_regularization_interval = 1 ; variable m_save_init_splits bool m_save_init_splits = false ; variable m_checkpointing_interval unsigned int m_checkpointing_interval = 50 ; variable m_keep_checkpoints int m_keep_checkpoints = 0 ; variable m_cotan_sigma_factor double m_cotan_sigma_factor = 5.0 ; variable m_particle_flags std :: vector < int > m_particle_flags ; variable m_domain_flags std :: vector < int > m_domain_flags ; variable m_narrow_band double m_narrow_band = 0.0 ; variable m_narrow_band_set bool m_narrow_band_set = false ; variable m_fixed_domains_present bool m_fixed_domains_present = false ; variable m_use_shape_statistics_after int m_use_shape_statistics_after = -1 ; variable m_python_filename std :: string m_python_filename ; variable m_geodesics_enabled bool m_geodesics_enabled = false ; variable m_geodesic_cache_size_multiplier size_t m_geodesic_cache_size_multiplier = 0 ; variable m_spacing double m_spacing = 0 ; variable m_filenames std :: vector < std :: string > m_filenames ; variable m_num_shapes int m_num_shapes = 0 ; variable m_energy_a std :: vector < double > m_energy_a ; variable m_energy_b std :: vector < double > m_energy_b ; variable m_total_energy std :: vector < double > m_total_energy ; variable m_log_energy bool m_log_energy = false ; variable m_str_energy std :: string m_str_energy ; variable m_bad_ids std :: vector < std :: vector < int > > m_bad_ids ; variable m_normal_angle double m_normal_angle = itk :: Math :: pi / 2.0 ; variable m_perform_good_bad bool m_perform_good_bad = false ; variable m_cutting_planes_per_input std :: vector < int > m_cutting_planes_per_input ; variable m_spheres_per_input std :: vector < int > m_spheres_per_input ; variable m_file_output_enabled bool m_file_output_enabled = true ; variable m_aborted bool m_aborted = false ; variable m_cut_planes std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ; variable m_total_iterations int m_total_iterations = 0 ; variable m_iteration_count int m_iteration_count = 0 ; variable m_split_number int m_split_number = 0 ; variable current_particle_iterations_ int current_particle_iterations_ = 0 ; variable total_particle_iterations_ int total_particle_iterations_ = 0 ; variable iteration_callback_ std :: function < void ( void ) > iteration_callback_ ; variable show_visualizer_ bool show_visualizer_ = false ; variable visualizer_ shapeworks :: OptimizationVisualizer visualizer_ ; variable particle_format_ std :: string particle_format_ = \"particles\" ; variable project_ std :: shared_ptr < Project > project_ ; variable m_start_time std :: chrono :: system_clock :: time_point m_start_time ; variable m_last_update_time std :: chrono :: system_clock :: time_point m_last_update_time ; variable m_last_remaining_update_time std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; variable m_remaining_time_message std :: string m_remaining_time_message ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#shapeworksoptimize","text":"More... #include Inherited by shapeworks::QOptimize","title":"shapeworks::Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types","text":"Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions","text":"Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () Return the global points. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions","text":"Name virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () virtual void IterateCallback (itk::Object * , const itk::EventObject & ) void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const virtual void UpdateExportablePoints () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () void UpdateProject () std::string GetCheckpointDir ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes","text":"Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#detailed-description","text":"class shapeworks :: Optimize ; Par : Overview of Optimize This class is the top-level API for the optimization library The Optimize class controls all aspect of the particle system library provides a top-level public API for running optimization","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-imagetype","text":"using shapeworks :: Optimize :: ImageType = itk :: Image < float , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-vectortype","text":"using shapeworks :: Optimize :: VectorType = VectorFunction :: VectorType ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#using-matrixtype","text":"using shapeworks :: Optimize :: MatrixType = Eigen :: MatrixXd ;","title":"using MatrixType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize","text":"Optimize () Constructor.","title":"function Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimize_1","text":"virtual ~ Optimize () Destructor.","title":"function ~Optimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-run","text":"bool Run () Run the optimization.","title":"function Run"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-loadparameterfile","text":"bool LoadParameterFile ( std :: string filename ) Load a parameter file.","title":"function LoadParameterFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setupoptimize","text":"bool SetUpOptimize ( ProjectHandle project ) Set up this Optimize object using a ShapeWorks project.","title":"function SetUpOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setproject","text":"void SetProject ( std :: shared_ptr < Project > project ) Set the Project object.","title":"function SetProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallbackfunction","text":"inline void SetIterationCallbackFunction ( const std :: function < void ( void ) > & f ) Set an iteration callback function to be called after each iteration.","title":"function SetIterationCallbackFunction"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-abortoptimization","text":"void AbortOptimization () Abort optimization.","title":"function AbortOptimization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getaborted","text":"bool GetAborted () Return if the optimization was aborted.","title":"function GetAborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () Return the local points. Reimplemented by : shapeworks::QOptimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () Return the global points. Reimplemented by : shapeworks::QOptimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcutplanes","text":"void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 > > cut_planes ) Set cutting planes.","title":"function SetCutPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setverbosity","text":"void SetVerbosity ( int verbosity_level ) Set the verbosity level (0-5)","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomainspershape","text":"void SetDomainsPerShape ( int domains_per_shape ) Set the number of domains per shape.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainspershape","text":"int GetDomainsPerShape () Return the number of domains per shape.","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdomaintype","text":"void SetDomainType ( shapeworks :: DomainType type )","title":"function SetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomaintype","text":"shapeworks :: DomainType GetDomainType ()","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnumberofparticles","text":"void SetNumberOfParticles ( std :: vector < int > number_of_particles ) Set the numbers of particles (vector of numbers, one for each domain)","title":"function SetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumberofparticles","text":"std :: vector < int > GetNumberOfParticles () Return the numbers of particles per domain.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settransformfile","text":"void SetTransformFile ( std :: string filename ) Set the transform file.","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettransformfile","text":"std :: string GetTransformFile () Get the transform file.","title":"function GetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprefixtransformfile","text":"void SetPrefixTransformFile ( std :: string prefix_transform_file ) Set the prefix transform file (TODO: details)","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprefixtransformfile","text":"std :: string GetPrefixTransformFile () Get the prefix transform file.","title":"function GetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputdir","text":"void SetOutputDir ( std :: string output_dir ) Set the output directory.","title":"function SetOutputDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputtransformfile","text":"void SetOutputTransformFile ( std :: string output_transform_file ) Set the output transform file.","title":"function SetOutputTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputindividualtransformfiles","text":"void SetOutputIndividualTransformFiles ( bool value ) Set whether individual transforms should be written.","title":"function SetOutputIndividualTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemeshbasedattributes","text":"void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ) Set if mesh based attributes should be used.","title":"function SetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusemeshbasedattributes","text":"bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used.","title":"function GetUseMeshBasedAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusexyz","text":"void SetUseXYZ ( std :: vector < bool > use_xyz ) Set if XYZ is used, one value per domain.","title":"function SetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusenormals","text":"void SetUseNormals ( std :: vector < bool > use_normals ) Set if Normals are being used, one value per domain.","title":"function SetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ) Set the attributes per domain.","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getattributesperdomain","text":"std :: vector < int > GetAttributesPerDomain () Get attributes per domain.","title":"function GetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setdistributiondomainid","text":"void SetDistributionDomainID ( int distribution_domain_id ) Set the distribution domain ID (TODO: details)","title":"function SetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdistributiondomainid","text":"int GetDistributionDomainID () Get the distribution domain ID.","title":"function GetDistributionDomainID"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoutputcuttingplanefile","text":"void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ) Set the output cutting plane file.","title":"function SetOutputCuttingPlaneFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusecuttingplanes","text":"void SetUseCuttingPlanes ( bool use_cutting_planes ) Set if using cutting planes.","title":"function SetUseCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 > & va , const vnl_vector_fixed < double , 3 > & vb , const vnl_vector_fixed < double , 3 > & vc ) Set a given cutting plane for a shape.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocessingmode","text":"void SetProcessingMode ( int mode ) Set processing mode (TODO: details)","title":"function SetProcessingMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitymode","text":"void SetAdaptivityMode ( int adaptivity_mode ) Set adaptivity mode (TODO: details)","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( int mesh_ffc_mode ) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode.","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setadaptivitystrength","text":"void SetAdaptivityStrength ( double adaptivity_strength ) Set adaptivity strength (TODO: details)","title":"function SetAdaptivityStrength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-settimeptspersubject","text":"void SetTimePtsPerSubject ( int time_pts_per_subject ) Set the number of time points per subject (TODO: details)","title":"function SetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-gettimeptspersubject","text":"int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details)","title":"function GetTimePtsPerSubject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterations","text":"void SetOptimizationIterations ( int optimization_iterations ) Set the number of optimization iterations.","title":"function SetOptimizationIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setoptimizationiterationscompleted","text":"void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ) Set the number of optimization iterations already completed (TODO: details)","title":"function SetOptimizationIterationsCompleted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationspersplit","text":"void SetIterationsPerSplit ( int iterations_per_split ) Set the number of iterations per split.","title":"function SetIterationsPerSplit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsininit","text":"void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ) Set if shape statistics should be used in initialization.","title":"function SetUseShapeStatisticsInInit"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesinterval","text":"void SetProcrustesInterval ( int procrustes_interval ) Set the interval for running procrustes (0 to disable)","title":"function SetProcrustesInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesscaling","text":"void SetProcrustesScaling ( bool procrustes_scaling ) Set if procrustes scaling should be used.","title":"function SetProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setprocrustesrotationtranslation","text":"void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ) Set if procrustes rotation/translation should be used.","title":"function SetProcrustesRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrelativeweighting","text":"void SetRelativeWeighting ( double relative_weighting ) Set the relative weighting (TODO: details)","title":"function SetRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialrelativeweighting","text":"void SetInitialRelativeWeighting ( double initial_relative_weighting ) Set the initial relative weigting (TODO: details)","title":"function SetInitialRelativeWeighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setstartingregularization","text":"void SetStartingRegularization ( double starting_regularization ) Set the starting regularization (TODO: details)","title":"function SetStartingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setendingregularization","text":"void SetEndingRegularization ( double ending_regularization ) Set the ending regularization (TODO: details)","title":"function SetEndingRegularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setrecomputeregularizationinterval","text":"void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ) Set the interval for recomputing regularization (TODO: details)","title":"function SetRecomputeRegularizationInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsaveinitsplits","text":"void SetSaveInitSplits ( bool save_init_splits ) Set if initialization splits should be saved or not.","title":"function SetSaveInitSplits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcheckpointinginterval","text":"void SetCheckpointingInterval ( int checkpointing_interval ) Set the checkpointing interval.","title":"function SetCheckpointingInterval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setkeepcheckpoints","text":"void SetKeepCheckpoints ( int keep_checkpoints ) Set if checkpoints should be kept (0=disable, 1=enable)","title":"function SetKeepCheckpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseregression","text":"void SetUseRegression ( bool use_regression ) Set if regression should be used (TODO: details)","title":"function SetUseRegression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusemixedeffects","text":"void SetUseMixedEffects ( bool use_mixed_effects ) Set if mixed effects should be used (TODO: details)","title":"function SetUseMixedEffects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setusedisentangledspatiotemporalssm","text":"void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ) Set if optimization should be done using disentangled spatiotemporal SSM method.","title":"function SetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusedisentangledspatiotemporalssm","text":"bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method.","title":"function GetUseDisentangledSpatiotemporalSSM"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnormalangle","text":"void SetNormalAngle ( double normal_angle ) For good/bad analysis, set the normal angle to use (TODO: details)","title":"function SetNormalAngle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setperformgoodbad","text":"void SetPerformGoodBad ( bool perform_good_bad ) Set if good/bad analysis should be done (TODO: details)","title":"function SetPerformGoodBad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setlogenergy","text":"void SetLogEnergy ( bool log_energy ) Set the log energy (TODO: details)","title":"function SetLogEnergy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ) Set the shape input images.","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addmesh","text":"void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfilenames","text":"void SetFilenames ( const std :: vector < std :: string > & filenames ) Set the shape filenames (TODO: details)","title":"function SetFilenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpointfiles","text":"void SetPointFiles ( const std :: vector < std :: string > & point_files ) Set starting point files (TODO: details)","title":"function SetPointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setinitialpoints","text":"void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnumshapes","text":"int GetNumShapes () Get number of shapes.","title":"function GetNumShapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setattributescales","text":"void SetAttributeScales ( const std :: vector < double > & scales ) Set attribute scales (TODO: details)","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) Set the field attributes.","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparticleflags","text":"void SetParticleFlags ( std :: vector < int > flags ) Set Particle Flags (TODO: details)","title":"function SetParticleFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfixeddomains","text":"void SetFixedDomains ( std :: vector < int > flags ) Set Domain Flags (TODO: details)","title":"function SetFixedDomains"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryenabled","text":"void SetSharedBoundaryEnabled ( bool enabled ) Shared boundary settings.","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setsharedboundaryweight","text":"void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getdomainflags","text":"const std :: vector < int > & GetDomainFlags ()","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setfileoutputenabled","text":"void SetFileOutputEnabled ( bool enabled ) Set if file output is enabled.","title":"function SetFileOutputEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusexyz","text":"std :: vector < bool > GetUseXYZ () Return if XYZ is used, per shape.","title":"function GetUseXYZ"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getusenormals","text":"std :: vector < bool > GetUseNormals () Return if Normals are used, per shape.","title":"function GetUseNormals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setnarrowband","text":"void SetNarrowBand ( double v ) Set the narrow band used to be +/- the given value as a multiple of the spacing.","title":"function SetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getnarrowband","text":"double GetNarrowBand () Return the narrow band to be used.","title":"function GetNarrowBand"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setuseshapestatisticsafter","text":"void SetUseShapeStatisticsAfter ( int num_particles ) Set the number of particles when correspondence based multiscale takes over.","title":"function SetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getuseshapestatisticsafter","text":"int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over.","title":"function GetUseShapeStatisticsAfter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printparaminfo","text":"void PrintParamInfo () Print parameter info to stdout.","title":"function PrintParamInfo"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getsampler","text":"inline std :: shared_ptr < Sampler > GetSampler () Return the Sampler .","title":"function GetSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getparticlesystem","text":"MatrixContainer GetParticleSystem () Return the particle system as a matrix.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setpythonfile","text":"void SetPythonFile ( std :: string filename ) Set the python file to run at startup.","title":"function SetPythonFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicsenabled","text":"void SetGeodesicsEnabled ( bool is_enabled ) Set whether or not geodesics are enabled.","title":"function SetGeodesicsEnabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setgeodesicscachesizemultiplier","text":"void SetGeodesicsCacheSizeMultiplier ( size_t n ) Set cache size multiplier for geodesics. The total number of cache entries will be n * number_of_triangles","title":"function SetGeodesicsCacheSizeMultiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getvisualizer","text":"OptimizationVisualizer & GetVisualizer ()","title":"function GetVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setshowvisualizer","text":"void SetShowVisualizer ( bool show )","title":"function SetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getshowvisualizer","text":"bool GetShowVisualizer ()","title":"function GetShowVisualizer"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getmeshffcmode","text":"inline bool GetMeshFFCMode ()","title":"function GetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-transformpoint","text":"vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ) transform a point if necessary","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateprogress","text":"void UpdateProgress ()","title":"function UpdateProgress"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-set_particle_format","text":"inline void set_particle_format ( std :: string format )","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () Set the iteration callback. Derived classes should override to set their own callback. Reimplemented by : shapeworks::QOptimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computetotaliterations","text":"void ComputeTotalIterations ()","title":"function ComputeTotalIterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-optimizerstop","text":"void OptimizerStop ()","title":"function OptimizerStop"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readtransformfile","text":"void ReadTransformFile ()","title":"function ReadTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-readprefixtransformfile","text":"void ReadPrefixTransformFile ( const std :: string & s )","title":"function ReadPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initializesampler","text":"void InitializeSampler ()","title":"function InitializeSampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getminneighborhoodradius","text":"double GetMinNeighborhoodRadius ()","title":"function GetMinNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addsinglepoint","text":"void AddSinglePoint ()","title":"function AddSinglePoint"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-initialize","text":"void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-addadaptivity","text":"void AddAdaptivity ()","title":"function AddAdaptivity"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-runoptimize","text":"void RunOptimize ()","title":"function RunOptimize"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ) Reimplemented by : shapeworks::QOptimize::IterateCallback","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-computeenergyafteriteration","text":"void ComputeEnergyAfterIteration ()","title":"function ComputeEnergyAfterIteration"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setcotansigma","text":"void SetCotanSigma ()","title":"function SetCotanSigma"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile","text":"void WriteTransformFile ( int iter = -1 ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfile_1","text":"void WriteTransformFile ( std :: string iter_prefix ) const","title":"function WriteTransformFile"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles","text":"void WriteTransformFiles ( int iter = -1 ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writetransformfiles_1","text":"void WriteTransformFiles ( std :: string iter_prefix ) const","title":"function WriteTransformFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles","text":"void WritePointFiles ( int iter = -1 )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfiles_1","text":"void WritePointFiles ( std :: string iter_prefix )","title":"function WritePointFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures","text":"void WritePointFilesWithFeatures ( int iter = -1 )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writepointfileswithfeatures_1","text":"void WritePointFilesWithFeatures ( std :: string iter_prefix )","title":"function WritePointFilesWithFeatures"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeenergyfiles","text":"void WriteEnergyFiles ()","title":"function WriteEnergyFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writesplitfiles","text":"void WriteSplitFiles ( std :: string name )","title":"function WriteSplitFiles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writecuttingplanepoints","text":"void WriteCuttingPlanePoints ( int iter = -1 )","title":"function WriteCuttingPlanePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writeparameters","text":"void WriteParameters ( std :: string output_dir = \"\" )","title":"function WriteParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-reportbadparticles","text":"void ReportBadParticles ()","title":"function ReportBadParticles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-setparameters","text":"int SetParameters ()","title":"function SetParameters"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-writemodes","text":"void WriteModes ()","title":"function WriteModes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printstartmessage","text":"void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const","title":"function PrintStartMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-printdonemessage","text":"void PrintDoneMessage ( unsigned int vlevel = 0 ) const","title":"function PrintDoneMessage"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () Reimplemented by : shapeworks::QOptimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () Reimplemented by : shapeworks::QOptimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-updateproject","text":"void UpdateProject ()","title":"function UpdateProject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#function-getcheckpointdir","text":"std :: string GetCheckpointDir ()","title":"function GetCheckpointDir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_sampler","text":"std :: shared_ptr < Sampler > m_sampler ;","title":"variable m_sampler"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes","text":"ProcrustesRegistration :: Pointer m_procrustes ;","title":"variable m_procrustes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_good_bad","text":"std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ;","title":"variable m_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_verbosity_level","text":"unsigned int m_verbosity_level = 0 ;","title":"variable m_verbosity_level"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_local_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_local_points ;","title":"variable m_local_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_global_points","text":"std :: vector < std :: vector < itk :: Point < double > > > m_global_points ;","title":"variable m_global_points"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpoint_counter","text":"int m_checkpoint_counter = 0 ;","title":"variable m_checkpoint_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_counter","text":"int m_procrustes_counter = 0 ;","title":"variable m_procrustes_counter"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_cutting_planes","text":"bool m_use_cutting_planes = false ;","title":"variable m_use_cutting_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimizing","text":"bool m_optimizing = false ;","title":"variable m_optimizing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_regression","text":"bool m_use_regression = false ;","title":"variable m_use_regression"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_mixed_effects","text":"bool m_use_mixed_effects = false ;","title":"variable m_use_mixed_effects"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_disentangled_ssm","text":"bool m_use_disentangled_ssm = false ;","title":"variable m_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domains_per_shape","text":"unsigned int m_domains_per_shape = 1 ;","title":"variable m_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_type","text":"shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ;","title":"variable m_domain_type"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_number_of_particles","text":"std :: vector < int > m_number_of_particles ;","title":"variable m_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_transform_file","text":"std :: string m_transform_file ;","title":"variable m_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_prefix_transform_file","text":"std :: string m_prefix_transform_file ;","title":"variable m_prefix_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_dir","text":"std :: string m_output_dir ;","title":"variable m_output_dir"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_file","text":"std :: string m_output_transform_file ;","title":"variable m_output_transform_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_transform_files","text":"bool m_output_transform_files = false ;","title":"variable m_output_transform_files"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_based_attributes","text":"bool m_mesh_based_attributes = false ;","title":"variable m_mesh_based_attributes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_xyz","text":"std :: vector < bool > m_use_xyz ;","title":"variable m_use_xyz"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_normals","text":"std :: vector < bool > m_use_normals ;","title":"variable m_use_normals"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_attributes_per_domain","text":"std :: vector < int > m_attributes_per_domain ;","title":"variable m_attributes_per_domain"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_distribution_domain_id","text":"int m_distribution_domain_id = -1 ;","title":"variable m_distribution_domain_id"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_output_cutting_plane_file","text":"std :: string m_output_cutting_plane_file ;","title":"variable m_output_cutting_plane_file"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_processing_mode","text":"int m_processing_mode = 3 ;","title":"variable m_processing_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_mode","text":"int m_adaptivity_mode = 0 ;","title":"variable m_adaptivity_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_adaptivity_strength","text":"double m_adaptivity_strength = 0.0 ;","title":"variable m_adaptivity_strength"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_mesh_ffc_mode","text":"bool m_mesh_ffc_mode = 0 ;","title":"variable m_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_timepts_per_subject","text":"unsigned int m_timepts_per_subject = 1 ;","title":"variable m_timepts_per_subject"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations","text":"int m_optimization_iterations = 2000 ;","title":"variable m_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_optimization_iterations_completed","text":"int m_optimization_iterations_completed = 0 ;","title":"variable m_optimization_iterations_completed"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iterations_per_split","text":"int m_iterations_per_split = 1000 ;","title":"variable m_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_in_init","text":"bool m_use_shape_statistics_in_init = false ;","title":"variable m_use_shape_statistics_in_init"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_interval","text":"unsigned int m_procrustes_interval = 3 ;","title":"variable m_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_scaling","text":"bool m_procrustes_scaling = true ;","title":"variable m_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_procrustes_rotation_translation","text":"bool m_procrustes_rotation_translation = true ;","title":"variable m_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_relative_weighting","text":"double m_relative_weighting = 1.0 ;","title":"variable m_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_initial_relative_weighting","text":"double m_initial_relative_weighting = 0.05 ;","title":"variable m_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_starting_regularization","text":"double m_starting_regularization = 1000 ;","title":"variable m_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_ending_regularization","text":"double m_ending_regularization = 1.0 ;","title":"variable m_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_recompute_regularization_interval","text":"int m_recompute_regularization_interval = 1 ;","title":"variable m_recompute_regularization_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_save_init_splits","text":"bool m_save_init_splits = false ;","title":"variable m_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_checkpointing_interval","text":"unsigned int m_checkpointing_interval = 50 ;","title":"variable m_checkpointing_interval"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_keep_checkpoints","text":"int m_keep_checkpoints = 0 ;","title":"variable m_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cotan_sigma_factor","text":"double m_cotan_sigma_factor = 5.0 ;","title":"variable m_cotan_sigma_factor"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_particle_flags","text":"std :: vector < int > m_particle_flags ;","title":"variable m_particle_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_domain_flags","text":"std :: vector < int > m_domain_flags ;","title":"variable m_domain_flags"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band","text":"double m_narrow_band = 0.0 ;","title":"variable m_narrow_band"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_narrow_band_set","text":"bool m_narrow_band_set = false ;","title":"variable m_narrow_band_set"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_fixed_domains_present","text":"bool m_fixed_domains_present = false ;","title":"variable m_fixed_domains_present"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_use_shape_statistics_after","text":"int m_use_shape_statistics_after = -1 ;","title":"variable m_use_shape_statistics_after"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_python_filename","text":"std :: string m_python_filename ;","title":"variable m_python_filename"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesics_enabled","text":"bool m_geodesics_enabled = false ;","title":"variable m_geodesics_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_geodesic_cache_size_multiplier","text":"size_t m_geodesic_cache_size_multiplier = 0 ;","title":"variable m_geodesic_cache_size_multiplier"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spacing","text":"double m_spacing = 0 ;","title":"variable m_spacing"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_filenames","text":"std :: vector < std :: string > m_filenames ;","title":"variable m_filenames"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_num_shapes","text":"int m_num_shapes = 0 ;","title":"variable m_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_a","text":"std :: vector < double > m_energy_a ;","title":"variable m_energy_a"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_energy_b","text":"std :: vector < double > m_energy_b ;","title":"variable m_energy_b"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_energy","text":"std :: vector < double > m_total_energy ;","title":"variable m_total_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_log_energy","text":"bool m_log_energy = false ;","title":"variable m_log_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_str_energy","text":"std :: string m_str_energy ;","title":"variable m_str_energy"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_bad_ids","text":"std :: vector < std :: vector < int > > m_bad_ids ;","title":"variable m_bad_ids"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_normal_angle","text":"double m_normal_angle = itk :: Math :: pi / 2.0 ;","title":"variable m_normal_angle"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_perform_good_bad","text":"bool m_perform_good_bad = false ;","title":"variable m_perform_good_bad"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cutting_planes_per_input","text":"std :: vector < int > m_cutting_planes_per_input ;","title":"variable m_cutting_planes_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_spheres_per_input","text":"std :: vector < int > m_spheres_per_input ;","title":"variable m_spheres_per_input"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_file_output_enabled","text":"bool m_file_output_enabled = true ;","title":"variable m_file_output_enabled"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_aborted","text":"bool m_aborted = false ;","title":"variable m_aborted"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_cut_planes","text":"std :: vector < std :: array < itk :: Point < double > , 3 > > m_cut_planes ;","title":"variable m_cut_planes"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_total_iterations","text":"int m_total_iterations = 0 ;","title":"variable m_total_iterations"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_iteration_count","text":"int m_iteration_count = 0 ;","title":"variable m_iteration_count"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_split_number","text":"int m_split_number = 0 ;","title":"variable m_split_number"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-current_particle_iterations_","text":"int current_particle_iterations_ = 0 ;","title":"variable current_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-total_particle_iterations_","text":"int total_particle_iterations_ = 0 ;","title":"variable total_particle_iterations_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-iteration_callback_","text":"std :: function < void ( void ) > iteration_callback_ ;","title":"variable iteration_callback_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-show_visualizer_","text":"bool show_visualizer_ = false ;","title":"variable show_visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-visualizer_","text":"shapeworks :: OptimizationVisualizer visualizer_ ;","title":"variable visualizer_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-particle_format_","text":"std :: string particle_format_ = \"particles\" ;","title":"variable particle_format_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-project_","text":"std :: shared_ptr < Project > project_ ;","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_start_time","text":"std :: chrono :: system_clock :: time_point m_start_time ;","title":"variable m_start_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_update_time","text":"std :: chrono :: system_clock :: time_point m_last_update_time ;","title":"variable m_last_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_last_remaining_update_time","text":"std :: chrono :: system_clock :: time_point m_last_remaining_update_time ;","title":"variable m_last_remaining_update_time"},{"location":"api/Classes/classshapeworks_1_1Optimize.html#variable-m_remaining_time_message","text":"std :: string m_remaining_time_message ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_remaining_time_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html","text":"shapeworks::OptimizeCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#shapeworksoptimizecommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::OptimizeCommandGroup"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html","text":"shapeworks::OptimizeParameterFile More... #include Public Functions Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object. Detailed Description class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object. Public Functions Documentation function OptimizeParameterFile OptimizeParameterFile () function load_parameter_file bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#shapeworksoptimizeparameterfile","text":"More... #include ","title":"shapeworks::OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions","text":"Name OptimizeParameterFile () bool load_parameter_file (std::string filename, Optimize * optimize) Load a parameter file and set the values on an Optimize object.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#detailed-description","text":"class shapeworks :: OptimizeParameterFile ; Par : Overview of OptimizeParameterFile Implementation of Optimize library parameter file The OptimizeParameterFile class reads in a parameter file and sets the appropriate values for an Optimize object.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-optimizeparameterfile","text":"OptimizeParameterFile ()","title":"function OptimizeParameterFile"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameterFile.html#function-load_parameter_file","text":"bool load_parameter_file ( std :: string filename , Optimize * optimize ) Load a parameter file and set the values on an Optimize object. Updated on 2023-10-25 at 15:40:27 +0000","title":"function load_parameter_file"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html","text":"shapeworks::OptimizeParameters More... #include Public Functions Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format) Detailed Description class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters Public Functions Documentation function OptimizeParameters explicit OptimizeParameters ( ProjectHandle project ) function save_to_project void save_to_project () function get_optimize_output_prefix std :: string get_optimize_output_prefix () function set_optimize_output_prefix void set_optimize_output_prefix ( std :: string prefix ) function get_number_of_particles std :: vector < int > get_number_of_particles () function set_number_of_particles void set_number_of_particles ( std :: vector < int > number_of_particles ) function get_initial_relative_weighting double get_initial_relative_weighting () function set_initial_relative_weighting void set_initial_relative_weighting ( double value ) function get_relative_weighting double get_relative_weighting () function set_relative_weighting void set_relative_weighting ( double value ) function get_starting_regularization double get_starting_regularization () function set_starting_regularization void set_starting_regularization ( double value ) function get_ending_regularization double get_ending_regularization () function set_ending_regularization void set_ending_regularization ( double value ) function get_iterations_per_split int get_iterations_per_split () function set_iterations_per_split void set_iterations_per_split ( int value ) function get_optimization_iterations int get_optimization_iterations () function set_optimization_iterations void set_optimization_iterations ( int value ) function get_use_geodesic_distance bool get_use_geodesic_distance () function set_use_geodesic_distance void set_use_geodesic_distance ( bool value ) function get_geodesic_cache_multiplier int get_geodesic_cache_multiplier () function set_geodesic_cache_multiplier void set_geodesic_cache_multiplier ( int value ) function get_use_normals std :: vector < bool > get_use_normals () function set_use_normals void set_use_normals ( std :: vector < bool > use_normals ) function get_normals_strength double get_normals_strength () function set_normals_strength void set_normals_strength ( double value ) function get_use_disentangled_ssm bool get_use_disentangled_ssm () function set_use_disentangled_ssm void set_use_disentangled_ssm ( bool value ) function get_use_procrustes bool get_use_procrustes () function set_use_procrustes void set_use_procrustes ( bool value ) function get_use_procrustes_scaling bool get_use_procrustes_scaling () function set_use_procrustes_scaling void set_use_procrustes_scaling ( bool value ) function get_use_procrustes_rotation_translation bool get_use_procrustes_rotation_translation () function set_use_procrustes_rotation_translation void set_use_procrustes_rotation_translation ( bool value ) function get_procrustes_interval int get_procrustes_interval () function set_procrustes_interval void set_procrustes_interval ( int value ) function get_use_multiscale bool get_use_multiscale () function set_use_multiscale void set_use_multiscale ( bool value ) function get_multiscale_particles int get_multiscale_particles () function set_multiscale_particles void set_multiscale_particles ( int value ) function get_narrow_band double get_narrow_band () function set_narrow_band void set_narrow_band ( double value ) function get_verbosity int get_verbosity () function set_verbosity void set_verbosity ( int value ) function get_mesh_ffc_mode bool get_mesh_ffc_mode () function set_mesh_ffc_mode void set_mesh_ffc_mode ( bool value ) function get_use_landmarks bool get_use_landmarks () function set_use_landmarks void set_use_landmarks ( bool value ) function get_use_fixed_subjects bool get_use_fixed_subjects () function set_use_fixed_subjects void set_use_fixed_subjects ( bool value ) function get_fixed_subjects_column std :: string get_fixed_subjects_column () function set_fixed_subject_column void set_fixed_subject_column ( std :: string column ) function get_fixed_subjects_choice std :: string get_fixed_subjects_choice () function set_fixed_subjects_choice void set_fixed_subjects_choice ( std :: string choice ) function set_abort_load void set_abort_load ( bool value ) function set_load_callback void set_load_callback ( const std :: function < void ( int ) > & f ) function set_up_optimize bool set_up_optimize ( Optimize * optimize ) function is_subject_fixed bool is_subject_fixed ( std :: shared_ptr < Subject > subject ) function get_checkpoint_interval int get_checkpoint_interval () function set_checkpoint_interval void set_checkpoint_interval ( int iterations ) function get_save_init_splits bool get_save_init_splits () function set_save_init_splits void set_save_init_splits ( bool enabled ) function get_keep_checkpoints bool get_keep_checkpoints () function set_keep_checkpoints void set_keep_checkpoints ( bool enabled ) function get_field_attributes std :: vector < std :: string > get_field_attributes () function set_field_attributes void set_field_attributes ( std :: vector < std :: string > attributes ) function get_field_attribute_weights std :: vector < double > get_field_attribute_weights () function set_field_attribute_weights void set_field_attribute_weights ( std :: vector < double > weights ) function get_use_geodesics_to_landmarks bool get_use_geodesics_to_landmarks () function set_use_geodesics_to_landmarks void set_use_geodesics_to_landmarks ( bool value ) function get_geodesic_to_landmarks_weight double get_geodesic_to_landmarks_weight () function set_geodesic_to_landmarks_weight void set_geodesic_to_landmarks_weight ( double value ) function get_particle_format std :: string get_particle_format () function set_particle_format void set_particle_format ( std :: string format ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#shapeworksoptimizeparameters","text":"More... #include ","title":"shapeworks::OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions","text":"Name OptimizeParameters (ProjectHandle project) void save_to_project () std::string get_optimize_output_prefix () void set_optimize_output_prefix (std::string prefix) std::vector< int > get_number_of_particles () void set_number_of_particles (std::vector< int > number_of_particles) double get_initial_relative_weighting () void set_initial_relative_weighting (double value) double get_relative_weighting () void set_relative_weighting (double value) double get_starting_regularization () void set_starting_regularization (double value) double get_ending_regularization () void set_ending_regularization (double value) int get_iterations_per_split () void set_iterations_per_split (int value) int get_optimization_iterations () void set_optimization_iterations (int value) bool get_use_geodesic_distance () void set_use_geodesic_distance (bool value) int get_geodesic_cache_multiplier () void set_geodesic_cache_multiplier (int value) std::vector< bool > get_use_normals () void set_use_normals (std::vector< bool > use_normals) double get_normals_strength () void set_normals_strength (double value) bool get_use_disentangled_ssm () void set_use_disentangled_ssm (bool value) bool get_use_procrustes () void set_use_procrustes (bool value) bool get_use_procrustes_scaling () void set_use_procrustes_scaling (bool value) bool get_use_procrustes_rotation_translation () void set_use_procrustes_rotation_translation (bool value) int get_procrustes_interval () void set_procrustes_interval (int value) bool get_use_multiscale () void set_use_multiscale (bool value) int get_multiscale_particles () void set_multiscale_particles (int value) double get_narrow_band () void set_narrow_band (double value) int get_verbosity () void set_verbosity (int value) bool get_mesh_ffc_mode () void set_mesh_ffc_mode (bool value) bool get_use_landmarks () void set_use_landmarks (bool value) bool get_use_fixed_subjects () void set_use_fixed_subjects (bool value) std::string get_fixed_subjects_column () void set_fixed_subject_column (std::string column) std::string get_fixed_subjects_choice () void set_fixed_subjects_choice (std::string choice) void set_abort_load (bool value) void set_load_callback (const std::function< void(int)> & f) bool set_up_optimize ( Optimize * optimize) bool is_subject_fixed (std::shared_ptr< Subject > subject) int get_checkpoint_interval () void set_checkpoint_interval (int iterations) bool get_save_init_splits () void set_save_init_splits (bool enabled) bool get_keep_checkpoints () void set_keep_checkpoints (bool enabled) std::vector< std::string > get_field_attributes () void set_field_attributes (std::vector< std::string > attributes) std::vector< double > get_field_attribute_weights () void set_field_attribute_weights (std::vector< double > weights) bool get_use_geodesics_to_landmarks () void set_use_geodesics_to_landmarks (bool value) double get_geodesic_to_landmarks_weight () void set_geodesic_to_landmarks_weight (double value) std::string get_particle_format () void set_particle_format (std::string format)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#detailed-description","text":"class shapeworks :: OptimizeParameters ; This class encapsulated processing of Optimization parameters","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-optimizeparameters","text":"explicit OptimizeParameters ( ProjectHandle project )","title":"function OptimizeParameters"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-save_to_project","text":"void save_to_project ()","title":"function save_to_project"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimize_output_prefix","text":"std :: string get_optimize_output_prefix ()","title":"function get_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimize_output_prefix","text":"void set_optimize_output_prefix ( std :: string prefix )","title":"function set_optimize_output_prefix"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_number_of_particles","text":"std :: vector < int > get_number_of_particles ()","title":"function get_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_number_of_particles","text":"void set_number_of_particles ( std :: vector < int > number_of_particles )","title":"function set_number_of_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_initial_relative_weighting","text":"double get_initial_relative_weighting ()","title":"function get_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_initial_relative_weighting","text":"void set_initial_relative_weighting ( double value )","title":"function set_initial_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_relative_weighting","text":"double get_relative_weighting ()","title":"function get_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_relative_weighting","text":"void set_relative_weighting ( double value )","title":"function set_relative_weighting"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_starting_regularization","text":"double get_starting_regularization ()","title":"function get_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_starting_regularization","text":"void set_starting_regularization ( double value )","title":"function set_starting_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_ending_regularization","text":"double get_ending_regularization ()","title":"function get_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_ending_regularization","text":"void set_ending_regularization ( double value )","title":"function set_ending_regularization"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_iterations_per_split","text":"int get_iterations_per_split ()","title":"function get_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_iterations_per_split","text":"void set_iterations_per_split ( int value )","title":"function set_iterations_per_split"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_optimization_iterations","text":"int get_optimization_iterations ()","title":"function get_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_optimization_iterations","text":"void set_optimization_iterations ( int value )","title":"function set_optimization_iterations"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesic_distance","text":"bool get_use_geodesic_distance ()","title":"function get_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesic_distance","text":"void set_use_geodesic_distance ( bool value )","title":"function set_use_geodesic_distance"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_cache_multiplier","text":"int get_geodesic_cache_multiplier ()","title":"function get_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_cache_multiplier","text":"void set_geodesic_cache_multiplier ( int value )","title":"function set_geodesic_cache_multiplier"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_normals","text":"std :: vector < bool > get_use_normals ()","title":"function get_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_normals","text":"void set_use_normals ( std :: vector < bool > use_normals )","title":"function set_use_normals"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_normals_strength","text":"double get_normals_strength ()","title":"function get_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_normals_strength","text":"void set_normals_strength ( double value )","title":"function set_normals_strength"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_disentangled_ssm","text":"bool get_use_disentangled_ssm ()","title":"function get_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_disentangled_ssm","text":"void set_use_disentangled_ssm ( bool value )","title":"function set_use_disentangled_ssm"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes","text":"bool get_use_procrustes ()","title":"function get_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes","text":"void set_use_procrustes ( bool value )","title":"function set_use_procrustes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_scaling","text":"bool get_use_procrustes_scaling ()","title":"function get_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_scaling","text":"void set_use_procrustes_scaling ( bool value )","title":"function set_use_procrustes_scaling"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_procrustes_rotation_translation","text":"bool get_use_procrustes_rotation_translation ()","title":"function get_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_procrustes_rotation_translation","text":"void set_use_procrustes_rotation_translation ( bool value )","title":"function set_use_procrustes_rotation_translation"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_procrustes_interval","text":"int get_procrustes_interval ()","title":"function get_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_procrustes_interval","text":"void set_procrustes_interval ( int value )","title":"function set_procrustes_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_multiscale","text":"bool get_use_multiscale ()","title":"function get_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_multiscale","text":"void set_use_multiscale ( bool value )","title":"function set_use_multiscale"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_multiscale_particles","text":"int get_multiscale_particles ()","title":"function get_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_multiscale_particles","text":"void set_multiscale_particles ( int value )","title":"function set_multiscale_particles"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_narrow_band","text":"double get_narrow_band ()","title":"function get_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_narrow_band","text":"void set_narrow_band ( double value )","title":"function set_narrow_band"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_verbosity","text":"int get_verbosity ()","title":"function get_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_verbosity","text":"void set_verbosity ( int value )","title":"function set_verbosity"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_mesh_ffc_mode","text":"bool get_mesh_ffc_mode ()","title":"function get_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_mesh_ffc_mode","text":"void set_mesh_ffc_mode ( bool value )","title":"function set_mesh_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_landmarks","text":"bool get_use_landmarks ()","title":"function get_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_landmarks","text":"void set_use_landmarks ( bool value )","title":"function set_use_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_fixed_subjects","text":"bool get_use_fixed_subjects ()","title":"function get_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_fixed_subjects","text":"void set_use_fixed_subjects ( bool value )","title":"function set_use_fixed_subjects"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_column","text":"std :: string get_fixed_subjects_column ()","title":"function get_fixed_subjects_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subject_column","text":"void set_fixed_subject_column ( std :: string column )","title":"function set_fixed_subject_column"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_fixed_subjects_choice","text":"std :: string get_fixed_subjects_choice ()","title":"function get_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_fixed_subjects_choice","text":"void set_fixed_subjects_choice ( std :: string choice )","title":"function set_fixed_subjects_choice"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_abort_load","text":"void set_abort_load ( bool value )","title":"function set_abort_load"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_load_callback","text":"void set_load_callback ( const std :: function < void ( int ) > & f )","title":"function set_load_callback"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_up_optimize","text":"bool set_up_optimize ( Optimize * optimize )","title":"function set_up_optimize"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-is_subject_fixed","text":"bool is_subject_fixed ( std :: shared_ptr < Subject > subject )","title":"function is_subject_fixed"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_checkpoint_interval","text":"int get_checkpoint_interval ()","title":"function get_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_checkpoint_interval","text":"void set_checkpoint_interval ( int iterations )","title":"function set_checkpoint_interval"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_save_init_splits","text":"bool get_save_init_splits ()","title":"function get_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_save_init_splits","text":"void set_save_init_splits ( bool enabled )","title":"function set_save_init_splits"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_keep_checkpoints","text":"bool get_keep_checkpoints ()","title":"function get_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_keep_checkpoints","text":"void set_keep_checkpoints ( bool enabled )","title":"function set_keep_checkpoints"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attributes","text":"std :: vector < std :: string > get_field_attributes ()","title":"function get_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attributes","text":"void set_field_attributes ( std :: vector < std :: string > attributes )","title":"function set_field_attributes"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_field_attribute_weights","text":"std :: vector < double > get_field_attribute_weights ()","title":"function get_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_field_attribute_weights","text":"void set_field_attribute_weights ( std :: vector < double > weights )","title":"function set_field_attribute_weights"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_use_geodesics_to_landmarks","text":"bool get_use_geodesics_to_landmarks ()","title":"function get_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_use_geodesics_to_landmarks","text":"void set_use_geodesics_to_landmarks ( bool value )","title":"function set_use_geodesics_to_landmarks"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_geodesic_to_landmarks_weight","text":"double get_geodesic_to_landmarks_weight ()","title":"function get_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_geodesic_to_landmarks_weight","text":"void set_geodesic_to_landmarks_weight ( double value )","title":"function set_geodesic_to_landmarks_weight"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-get_particle_format","text":"std :: string get_particle_format ()","title":"function get_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeParameters.html#function-set_particle_format","text":"void set_particle_format ( std :: string format ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_particle_format"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html","text":"shapeworks::OptimizeTool Inherits from QWidget Public Slots Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs () Public Signals Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string ) Public Functions Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads Public Slots Documentation slot on_run_optimize_button_clicked void on_run_optimize_button_clicked () Run optimize tool. slot on_restoreDefaults_clicked void on_restoreDefaults_clicked () slot handle_optimize_complete void handle_optimize_complete () slot handle_optimize_failed void handle_optimize_failed () slot handle_progress void handle_progress ( int val , QString message ) slot handle_error void handle_error ( QString ) slot handle_warning void handle_warning ( QString ) slot handle_message void handle_message ( QString ) slot update_ui_elements void update_ui_elements () slot validate_inputs bool validate_inputs () Public Signals Documentation signal optimize_start void optimize_start () signal optimize_complete void optimize_complete () signal progress void progress ( int ) signal status void status ( std :: string ) Public Functions Documentation function OptimizeTool OptimizeTool ( Preferences & prefs , Telemetry & telemetry ) function ~OptimizeTool ~ OptimizeTool () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the project function activate void activate () activate this tool function load_params void load_params () Load params from project. function store_params void store_params () Store params to project. function enable_actions void enable_actions () Enable action buttons. function disable_actions void disable_actions () Disable action buttons. function shutdown_threads void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#shapeworksoptimizetool","text":"Inherits from QWidget","title":"shapeworks::OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots","text":"Name void on_run_optimize_button_clicked () Run optimize tool. void on_restoreDefaults_clicked () void handle_optimize_complete () void handle_optimize_failed () void handle_progress (int val, QString message) void handle_error (QString ) void handle_warning (QString ) void handle_message (QString ) void update_ui_elements () bool validate_inputs ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals","text":"Name void optimize_start () void optimize_complete () void progress (int ) void status (std::string )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions","text":"Name OptimizeTool ( Preferences & prefs, Telemetry & telemetry) ~OptimizeTool () void set_session (QSharedPointer< Session > session) set the pointer to the project void activate () activate this tool void load_params () Load params from project. void store_params () Store params to project. void enable_actions () Enable action buttons. void disable_actions () Disable action buttons. void shutdown_threads () shut down any running threads","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_run_optimize_button_clicked","text":"void on_run_optimize_button_clicked () Run optimize tool.","title":"slot on_run_optimize_button_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-on_restoredefaults_clicked","text":"void on_restoreDefaults_clicked ()","title":"slot on_restoreDefaults_clicked"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_optimize_failed","text":"void handle_optimize_failed ()","title":"slot handle_optimize_failed"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_progress","text":"void handle_progress ( int val , QString message )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_error","text":"void handle_error ( QString )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_warning","text":"void handle_warning ( QString )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-handle_message","text":"void handle_message ( QString )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-update_ui_elements","text":"void update_ui_elements ()","title":"slot update_ui_elements"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#slot-validate_inputs","text":"bool validate_inputs ()","title":"slot validate_inputs"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_start","text":"void optimize_start ()","title":"signal optimize_start"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-optimize_complete","text":"void optimize_complete ()","title":"signal optimize_complete"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#signal-status","text":"void status ( std :: string )","title":"signal status"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool","text":"OptimizeTool ( Preferences & prefs , Telemetry & telemetry )","title":"function OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-optimizetool_1","text":"~ OptimizeTool ()","title":"function ~OptimizeTool"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the project","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-activate","text":"void activate () activate this tool","title":"function activate"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-load_params","text":"void load_params () Load params from project.","title":"function load_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-store_params","text":"void store_params () Store params to project.","title":"function store_params"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-enable_actions","text":"void enable_actions () Enable action buttons.","title":"function enable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-disable_actions","text":"void disable_actions () Disable action buttons.","title":"function disable_actions"},{"location":"api/Classes/classshapeworks_1_1OptimizeTool.html#function-shutdown_threads","text":"void shutdown_threads () shut down any running threads Updated on 2023-10-25 at 15:40:27 +0000","title":"function shutdown_threads"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html","text":"shapeworks::PaintWidget Inherits from vtkAbstractWidget Protected Types Name enum @5 Public Functions Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b) Protected Functions Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w) Protected Attributes Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_ Protected Types Documentation enum @5 Enumerator Value Description Start Paint Erase Public Functions Documentation function New static PaintWidget * New () function vtkTypeMacro vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( PointPlacer , vtkPointPlacer * ) function vtkGetMacro vtkGetMacro ( PointPlacer , vtkPointPlacer * ) function vtkSetMacro vtkSetMacro ( Renderer , vtkRenderer * ) function vtkGetMacro vtkGetMacro ( Renderer , vtkRenderer * ) function set_viewer void set_viewer ( Viewer * viewer ) function SetEnabled virtual void SetEnabled ( int ) function SetRepresentation inline void SetRepresentation ( vtkContourRepresentation * r ) function CreateDefaultRepresentation void CreateDefaultRepresentation () function update_position void update_position () function Initialize virtual void Initialize ( vtkPolyData * poly , int state = 1 ) function Initialize inline virtual void Initialize () function set_brush_size void set_brush_size ( double size ) function get_brush_size double get_brush_size () function set_brush_color void set_brush_color ( float r , float g , float b ) Protected Functions Documentation function PaintWidget PaintWidget () function ~PaintWidget ~ PaintWidget () function use_point_placer bool use_point_placer ( double displayPos [ 2 ], int newState ) function set_cursor void set_cursor ( int requestedShape ) function StartPaintAction static void StartPaintAction ( vtkAbstractWidget * w ) function EndPaintAction static void EndPaintAction ( vtkAbstractWidget * w ) function StartEraseAction static void StartEraseAction ( vtkAbstractWidget * w ) function EndEraseAction static void EndEraseAction ( vtkAbstractWidget * w ) function MoveAction static void MoveAction ( vtkAbstractWidget * w ) function LeaveAction static void LeaveAction ( vtkAbstractWidget * w ) function KeyPressAction static void KeyPressAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable WidgetState int WidgetState ; variable PointPlacer vtkPointPlacer * PointPlacer ; variable Renderer vtkRenderer * Renderer ; variable sphere_cursor_ StudioSphereRepresentation * sphere_cursor_ ; variable mouse_in_window_ bool mouse_in_window_ ; variable viewer_ Viewer * viewer_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#shapeworkspaintwidget","text":"Inherits from vtkAbstractWidget","title":"shapeworks::PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types","text":"Name enum @5","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions","text":"Name PaintWidget * New () vtkTypeMacro ( PaintWidget , vtkAbstractWidget ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (PointPlacer , vtkPointPlacer * ) vtkGetMacro (PointPlacer , vtkPointPlacer * ) vtkSetMacro (Renderer , vtkRenderer * ) vtkGetMacro (Renderer , vtkRenderer * ) void set_viewer ( Viewer * viewer) virtual void SetEnabled (int ) void SetRepresentation (vtkContourRepresentation * r) void CreateDefaultRepresentation () void update_position () virtual void Initialize (vtkPolyData * poly, int state =1) virtual void Initialize () void set_brush_size (double size) double get_brush_size () void set_brush_color (float r, float g, float b)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions","text":"Name PaintWidget () ~PaintWidget () bool use_point_placer (double displayPos[2], int newState) void set_cursor (int requestedShape) void StartPaintAction (vtkAbstractWidget * w) void EndPaintAction (vtkAbstractWidget * w) void StartEraseAction (vtkAbstractWidget * w) void EndEraseAction (vtkAbstractWidget * w) void MoveAction (vtkAbstractWidget * w) void LeaveAction (vtkAbstractWidget * w) void KeyPressAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes","text":"Name int WidgetState vtkPointPlacer * PointPlacer vtkRenderer * Renderer StudioSphereRepresentation * sphere_cursor_ bool mouse_in_window_ Viewer * viewer_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#enum-5","text":"Enumerator Value Description Start Paint Erase","title":"enum @5"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-new","text":"static PaintWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtktypemacro","text":"vtkTypeMacro ( PaintWidget , vtkAbstractWidget )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro","text":"vtkSetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro","text":"vtkGetMacro ( PointPlacer , vtkPointPlacer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtksetmacro_1","text":"vtkSetMacro ( Renderer , vtkRenderer * )","title":"function vtkSetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Renderer , vtkRenderer * )","title":"function vtkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_viewer","text":"void set_viewer ( Viewer * viewer )","title":"function set_viewer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setenabled","text":"virtual void SetEnabled ( int )","title":"function SetEnabled"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-setrepresentation","text":"inline void SetRepresentation ( vtkContourRepresentation * r )","title":"function SetRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-createdefaultrepresentation","text":"void CreateDefaultRepresentation ()","title":"function CreateDefaultRepresentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-update_position","text":"void update_position ()","title":"function update_position"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize","text":"virtual void Initialize ( vtkPolyData * poly , int state = 1 )","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-initialize_1","text":"inline virtual void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_size","text":"void set_brush_size ( double size )","title":"function set_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-get_brush_size","text":"double get_brush_size ()","title":"function get_brush_size"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_brush_color","text":"void set_brush_color ( float r , float g , float b )","title":"function set_brush_color"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget","text":"PaintWidget ()","title":"function PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-paintwidget_1","text":"~ PaintWidget ()","title":"function ~PaintWidget"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-use_point_placer","text":"bool use_point_placer ( double displayPos [ 2 ], int newState )","title":"function use_point_placer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-set_cursor","text":"void set_cursor ( int requestedShape )","title":"function set_cursor"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-startpaintaction","text":"static void StartPaintAction ( vtkAbstractWidget * w )","title":"function StartPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-endpaintaction","text":"static void EndPaintAction ( vtkAbstractWidget * w )","title":"function EndPaintAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-starteraseaction","text":"static void StartEraseAction ( vtkAbstractWidget * w )","title":"function StartEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-enderaseaction","text":"static void EndEraseAction ( vtkAbstractWidget * w )","title":"function EndEraseAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-moveaction","text":"static void MoveAction ( vtkAbstractWidget * w )","title":"function MoveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-leaveaction","text":"static void LeaveAction ( vtkAbstractWidget * w )","title":"function LeaveAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#function-keypressaction","text":"static void KeyPressAction ( vtkAbstractWidget * w )","title":"function KeyPressAction"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-widgetstate","text":"int WidgetState ;","title":"variable WidgetState"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-pointplacer","text":"vtkPointPlacer * PointPlacer ;","title":"variable PointPlacer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-renderer","text":"vtkRenderer * Renderer ;","title":"variable Renderer"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-sphere_cursor_","text":"StudioSphereRepresentation * sphere_cursor_ ;","title":"variable sphere_cursor_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-mouse_in_window_","text":"bool mouse_in_window_ ;","title":"variable mouse_in_window_"},{"location":"api/Classes/classshapeworks_1_1PaintWidget.html#variable-viewer_","text":"Viewer * viewer_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable viewer_"},{"location":"api/Classes/classshapeworks_1_1Parameters.html","text":"shapeworks::Parameters Parameter settings. More... #include Public Functions Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank Public Attributes Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS Detailed Description class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools Public Functions Documentation function Parameters Parameters () default constructor function Parameters explicit Parameters ( StringMap map ) construct from map function get Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist function key_exists bool key_exists ( std :: string key ) return if a key exists or not function set void set ( std :: string key , Variant value ) set a parameter based on a key function remove_entry void remove_entry ( std :: string key ) remove an entry function set_map void set_map ( StringMap map ) set underlying map function get_map StringMap get_map () const get underlying map function reset_parameters void reset_parameters () reset parameters to blank Public Attributes Documentation variable ANALYSIS_PARAMS static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; variable GROOM_PARAMS static constexpr const char * GROOM_PARAMS = \"groom\" ; variable OPTIMIZE_PARAMS static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; variable STUDIO_PARAMS static constexpr const char * STUDIO_PARAMS = \"studio\" ; variable PROJECT_PARAMS static constexpr const char * PROJECT_PARAMS = \"project\" ; variable DEEPSSM_PARAMS static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#shapeworksparameters","text":"Parameter settings. More... #include ","title":"shapeworks::Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions","text":"Name Parameters () default constructor Parameters (StringMap map) construct from map Variant get (std::string key, Variant default_value) get a parameter based on a key, return default if it doesn't exist bool key_exists (std::string key) return if a key exists or not void set (std::string key, Variant value) set a parameter based on a key void remove_entry (std::string key) remove an entry void set_map (StringMap map) set underlying map StringMap get_map () const get underlying map void reset_parameters () reset parameters to blank","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes","text":"Name constexpr const char * ANALYSIS_PARAMS constexpr const char * GROOM_PARAMS constexpr const char * OPTIMIZE_PARAMS constexpr const char * STUDIO_PARAMS constexpr const char * PROJECT_PARAMS constexpr const char * DEEPSSM_PARAMS","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#detailed-description","text":"class shapeworks :: Parameters ; Parameter settings. Store key/variant combinations Used to store parameters for various tools","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters","text":"Parameters () default constructor","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-parameters_1","text":"explicit Parameters ( StringMap map ) construct from map","title":"function Parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get","text":"Variant get ( std :: string key , Variant default_value ) get a parameter based on a key, return default if it doesn't exist","title":"function get"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-key_exists","text":"bool key_exists ( std :: string key ) return if a key exists or not","title":"function key_exists"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set","text":"void set ( std :: string key , Variant value ) set a parameter based on a key","title":"function set"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-remove_entry","text":"void remove_entry ( std :: string key ) remove an entry","title":"function remove_entry"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-set_map","text":"void set_map ( StringMap map ) set underlying map","title":"function set_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-get_map","text":"StringMap get_map () const get underlying map","title":"function get_map"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#function-reset_parameters","text":"void reset_parameters () reset parameters to blank","title":"function reset_parameters"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-analysis_params","text":"static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ;","title":"variable ANALYSIS_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-groom_params","text":"static constexpr const char * GROOM_PARAMS = \"groom\" ;","title":"variable GROOM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-optimize_params","text":"static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ;","title":"variable OPTIMIZE_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-studio_params","text":"static constexpr const char * STUDIO_PARAMS = \"studio\" ;","title":"variable STUDIO_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-project_params","text":"static constexpr const char * PROJECT_PARAMS = \"project\" ;","title":"variable PROJECT_PARAMS"},{"location":"api/Classes/classshapeworks_1_1Parameters.html#variable-deepssm_params","text":"static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable DEEPSSM_PARAMS"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html","text":"shapeworks::ParticleArea Public Functions Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle Public Functions Documentation function assign_vertex_particles static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance function assign_vertex_colors static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids function assign_vertex_areas static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids function colors_from_lut static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors function compute_particle_triangle_areas static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#shapeworksparticlearea","text":"","title":"shapeworks::ParticleArea"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions","text":"Name void assign_vertex_particles (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) assign particle ids for each vertex based on closest geodesic distance void assign_vertex_colors (vtkSmartPointer< vtkPolyData > poly_data, std::vector< QColor > colors) assign vertex colors based on particle ids void assign_vertex_areas (vtkSmartPointer< vtkPolyData > poly_data, Eigen::VectorXd areas) assign vertex areas based on particle ids std::vector< QColor > colors_from_lut (vtkSmartPointer< vtkLookupTable > lut) convert lut to array of colors Eigen::VectorXd compute_particle_triangle_areas (vtkSmartPointer< vtkPolyData > poly_data, std::vector< itk::Point< double > > particles) compute the area assigned to each particle","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_particles","text":"static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) assign particle ids for each vertex based on closest geodesic distance","title":"function assign_vertex_particles"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_colors","text":"static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ) assign vertex colors based on particle ids","title":"function assign_vertex_colors"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-assign_vertex_areas","text":"static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ) assign vertex areas based on particle ids","title":"function assign_vertex_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-colors_from_lut","text":"static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ) convert lut to array of colors","title":"function colors_from_lut"},{"location":"api/Classes/classshapeworks_1_1ParticleArea.html#function-compute_particle_triangle_areas","text":"static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double > > particles ) compute the area assigned to each particle Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_particle_triangle_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html","text":"shapeworks::ParticleAreaJob Inherits from shapeworks::Job , QObject Public Functions Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function ParticleAreaJob ParticleAreaJob ( QSharedPointer < Session > session ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_mean_areas inline const Eigen :: VectorXf & get_mean_areas () const function get_stddev_areas inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#shapeworksparticleareajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions","text":"Name ParticleAreaJob (QSharedPointer< Session > session) virtual void run () override run the job virtual QString name () override get the name of the job const Eigen::VectorXf & get_mean_areas () const const Eigen::VectorXf & get_stddev_areas () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-particleareajob","text":"ParticleAreaJob ( QSharedPointer < Session > session )","title":"function ParticleAreaJob"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-name","text":"inline virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_mean_areas","text":"inline const Eigen :: VectorXf & get_mean_areas () const","title":"function get_mean_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaJob.html#function-get_stddev_areas","text":"inline const Eigen :: VectorXf & get_stddev_areas () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_stddev_areas"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html","text":"shapeworks::ParticleAreaPanel Inherits from QWidget Public Slots Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete () Public Signals Name void update_view () Public Functions Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const Public Slots Documentation slot run_clicked void run_clicked () slot show_particle_area_clicked void show_particle_area_clicked () slot display_option_changed void display_option_changed () slot handle_job_progress void handle_job_progress ( int progress ) slot handle_job_complete void handle_job_complete () Public Signals Documentation signal update_view void update_view () Public Functions Documentation function ParticleAreaPanel ParticleAreaPanel ( QWidget * parent = 0 ) function ~ParticleAreaPanel ~ ParticleAreaPanel () function set_session void set_session ( QSharedPointer < Session > session ) set the pointer to the session function reset void reset () function get_display_particle_area bool get_display_particle_area () const function get_computed_values Eigen :: VectorXf get_computed_values () const function get_computed_value_name std :: string get_computed_value_name () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#shapeworksparticleareapanel","text":"Inherits from QWidget","title":"shapeworks::ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots","text":"Name void run_clicked () void show_particle_area_clicked () void display_option_changed () void handle_job_progress (int progress) void handle_job_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals","text":"Name void update_view ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions","text":"Name ParticleAreaPanel (QWidget * parent =0) ~ParticleAreaPanel () void set_session (QSharedPointer< Session > session) set the pointer to the session void reset () bool get_display_particle_area () const Eigen::VectorXf get_computed_values () const std::string get_computed_value_name () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-run_clicked","text":"void run_clicked ()","title":"slot run_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-show_particle_area_clicked","text":"void show_particle_area_clicked ()","title":"slot show_particle_area_clicked"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-display_option_changed","text":"void display_option_changed ()","title":"slot display_option_changed"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_progress","text":"void handle_job_progress ( int progress )","title":"slot handle_job_progress"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#slot-handle_job_complete","text":"void handle_job_complete ()","title":"slot handle_job_complete"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel","text":"ParticleAreaPanel ( QWidget * parent = 0 )","title":"function ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-particleareapanel_1","text":"~ ParticleAreaPanel ()","title":"function ~ParticleAreaPanel"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session ) set the pointer to the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-reset","text":"void reset ()","title":"function reset"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_display_particle_area","text":"bool get_display_particle_area () const","title":"function get_display_particle_area"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_values","text":"Eigen :: VectorXf get_computed_values () const","title":"function get_computed_values"},{"location":"api/Classes/classshapeworks_1_1ParticleAreaPanel.html#function-get_computed_value_name","text":"std :: string get_computed_value_name () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_computed_value_name"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html","text":"shapeworks::ParticleColors Supplies particle colors. More... #include Inherits from QObject Public Types Name enum ParticleColorsType Public Functions Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct () Detailed Description class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles Public Types Documentation enum ParticleColorsType Enumerator Value Description Distinct 0 Original 1 Public Functions Documentation function Q_ENUM Q_ENUM ( ParticleColorsType ) function construct_distinct static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#shapeworksparticlecolors","text":"Supplies particle colors. More... #include Inherits from QObject","title":"shapeworks::ParticleColors"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types","text":"Name enum ParticleColorsType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions","text":"Name Q_ENUM (ParticleColorsType ) vtkSmartPointer< vtkLookupTable > construct_distinct ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#detailed-description","text":"class shapeworks :: ParticleColors ; Supplies particle colors. The ParticleColors supplies distinct colors for particles","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#enum-particlecolorstype","text":"Enumerator Value Description Distinct 0 Original 1","title":"enum ParticleColorsType"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-q_enum","text":"Q_ENUM ( ParticleColorsType )","title":"function Q_ENUM"},{"location":"api/Classes/classshapeworks_1_1ParticleColors.html#function-construct_distinct","text":"static vtkSmartPointer < vtkLookupTable > construct_distinct () Updated on 2023-10-25 at 15:40:27 +0000","title":"function construct_distinct"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html","text":"shapeworks::ParticleDomain Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain Public Types Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation typedef Pointer typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ; using PointType using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations. using GradNType using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ; Public Functions Documentation function ApplyConstraints virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints. function UpdateParticlePosition virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position. function InvalidateParticlePosition inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition function ProjectVectorToSurfaceTangent virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point. function SampleGradientAtPoint virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint function SampleNormalAtPoint virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint function Distance inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance function SquaredDistance inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma. function IsWithinDistance inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance function GetCurvature virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceMeanCurvature virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute function GetSurfaceStdDevCurvature virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute function GetLowerBound virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetUpperBound virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetZeroCrossingPoint virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle. function GetSurfaceArea virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius. function GetValidLocationNear virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle. function GetMaxDiameter virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma function DeleteImages virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages function DeletePartialDerivativeImages virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages function UpdateZeroCrossingPoint virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint function IsDomainFixed inline bool IsDomainFixed () const function GetDomainType virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType function GetConstraints inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const function GetPositionAfterSplit inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit function SetDomainID inline void SetDomainID ( int id ) function SetDomainName inline void SetDomainName ( std :: string name ) Protected Functions Documentation function ParticleDomain inline ParticleDomain () function ~ParticleDomain inline virtual ~ ParticleDomain () Protected Attributes Documentation variable m_FixedDomain bool m_FixedDomain { true }; variable m_DomainID int m_DomainID { -1 }; variable m_DomainName std :: string m_DomainName ; variable constraints std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#shapeworksparticledomain","text":"Inherited by shapeworks::ContourDomain , shapeworks::MeshDomain , shapeworks::ParticleRegionDomain","title":"shapeworks::ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types","text":"Name typedef std::shared_ptr< ParticleDomain > Pointer using itk::Point< double, 3 > PointType using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p, int idx, bool dbg =false) const =0 virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual const PointType & GetLowerBound () const =0 virtual const PointType & GetUpperBound () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions","text":"Name ParticleDomain () virtual ~ParticleDomain ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes","text":"Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#typedef-pointer","text":"typedef std :: shared_ptr < ParticleDomain > shapeworks :: ParticleDomain :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-pointtype","text":"using shapeworks :: ParticleDomain :: PointType = itk :: Point < double , 3 > ; Point type used to store particle locations.","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-gradntype","text":"using shapeworks :: ParticleDomain :: GradNType = vnl_matrix_fixed < float , 3 , 3 > ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectordoubletype","text":"using shapeworks :: ParticleDomain :: VectorDoubleType = vnl_vector_fixed < double , 3 > ;","title":"using VectorDoubleType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#using-vectorfloattype","text":"using shapeworks :: ParticleDomain :: VectorFloatType = vnl_vector_fixed < float , 3 > ;","title":"using VectorFloatType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-applyconstraints","text":"virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 Reimplemented by : shapeworks::ContourDomain::ApplyConstraints , shapeworks::ImplicitSurfaceDomain::ApplyConstraints , shapeworks::MeshDomain::ApplyConstraints Apply any constraints to the given point location. This should force the point to a position on the surface that satisfies all constraints.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updateparticleposition","text":"virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 Reimplemented by : shapeworks::ContourDomain::UpdateParticlePosition , shapeworks::MeshDomain::UpdateParticlePosition Applies the update to the point and returns the new point position.","title":"function UpdateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-invalidateparticleposition","text":"inline virtual void InvalidateParticlePosition ( int idx ) const Reimplemented by : shapeworks::ContourDomain::InvalidateParticlePosition , shapeworks::MeshDomain::InvalidateParticlePosition","title":"function InvalidateParticlePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-projectvectortosurfacetangent","text":"virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::ProjectVectorToSurfaceTangent , shapeworks::MeshDomain::ProjectVectorToSurfaceTangent Projects the vector to the surface tangent at the point.","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradientatpoint","text":"virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleGradientAtPoint , shapeworks::ContourDomain::SampleGradientAtPoint , shapeworks::MeshDomain::SampleGradientAtPoint","title":"function SampleGradientAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplenormalatpoint","text":"virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 Reimplemented by : shapeworks::ImageDomainWithGradients::SampleNormalAtPoint , shapeworks::ContourDomain::SampleNormalAtPoint , shapeworks::MeshDomain::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::SampleGradNAtPoint , shapeworks::ImageDomainWithGradN::SampleGradNAtPoint , shapeworks::MeshDomain::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-distance","text":"inline virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const Reimplemented by : shapeworks::ContourDomain::Distance Distance between locations is used for computing energy and neighborhoods. Optionally return the gradient of the distance","title":"function Distance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-squareddistance","text":"inline virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const Reimplemented by : shapeworks::ContourDomain::SquaredDistance , shapeworks::MeshDomain::SquaredDistance Squared Distance between locations is used for computing sigma.","title":"function SquaredDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-iswithindistance","text":"inline virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const Reimplemented by : shapeworks::MeshDomain::IsWithinDistance Returns whether or not the two points are separated by the given distance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getcurvature","text":"virtual double GetCurvature ( const PointType & p , int idx ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetCurvature , shapeworks::ImageDomainWithCurvature::GetCurvature , shapeworks::MeshDomain::GetCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacemeancurvature","text":"virtual double GetSurfaceMeanCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceMeanCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceMeanCurvature , shapeworks::MeshDomain::GetSurfaceMeanCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceMeanCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacestddevcurvature","text":"virtual double GetSurfaceStdDevCurvature () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceStdDevCurvature , shapeworks::ImageDomainWithCurvature::GetSurfaceStdDevCurvature , shapeworks::MeshDomain::GetSurfaceStdDevCurvature Used in ParticleMeanCurvatureAttribute","title":"function GetSurfaceStdDevCurvature"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getlowerbound","text":"virtual const PointType & GetLowerBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetLowerBound , shapeworks::ContourDomain::GetLowerBound , shapeworks::MeshDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getupperbound","text":"virtual const PointType & GetUpperBound () const = 0 Reimplemented by : shapeworks::ParticleRegionDomain::GetUpperBound , shapeworks::ContourDomain::GetUpperBound , shapeworks::MeshDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getzerocrossingpoint","text":"virtual PointType GetZeroCrossingPoint () const = 0 Reimplemented by : shapeworks::ContourDomain::GetZeroCrossingPoint , shapeworks::ImplicitSurfaceDomain::GetZeroCrossingPoint , shapeworks::MeshDomain::GetZeroCrossingPoint Get any valid point on the domain. This is used to place the first particle.","title":"function GetZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getsurfacearea","text":"virtual double GetSurfaceArea () const = 0 Reimplemented by : shapeworks::ContourDomain::GetSurfaceArea , shapeworks::ImageDomain::GetSurfaceArea , shapeworks::MeshDomain::GetSurfaceArea Use for neighborhood radius.","title":"function GetSurfaceArea"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getvalidlocationnear","text":"virtual PointType GetValidLocationNear ( PointType p ) const = 0 Reimplemented by : shapeworks::ContourDomain::GetValidLocationNear , shapeworks::ImageDomain::GetValidLocationNear , shapeworks::MeshDomain::GetValidLocationNear GetValidLocation returns a PointType location on the surface. Used for placing the first particle.","title":"function GetValidLocationNear"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getmaxdiameter","text":"virtual double GetMaxDiameter () const = 0 Reimplemented by : shapeworks::ContourDomain::GetMaxDiameter , shapeworks::ImageDomain::GetMaxDiameter , shapeworks::MeshDomain::GetMaxDiameter GetMaxDiameter returns the maximum diameter of the domain and is used for computing sigma","title":"function GetMaxDiameter"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deleteimages","text":"virtual void DeleteImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeleteImages , shapeworks::ImageDomain::DeleteImages , shapeworks::ImageDomainWithGradients::DeleteImages , shapeworks::ImageDomainWithGradN::DeleteImages , shapeworks::MeshDomain::DeleteImages","title":"function DeleteImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-deletepartialderivativeimages","text":"virtual void DeletePartialDerivativeImages () = 0 Reimplemented by : shapeworks::ContourDomain::DeletePartialDerivativeImages , shapeworks::ImageDomainWithGradN::DeletePartialDerivativeImages , shapeworks::MeshDomain::DeletePartialDerivativeImages","title":"function DeletePartialDerivativeImages"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-updatezerocrossingpoint","text":"virtual void UpdateZeroCrossingPoint () = 0 Reimplemented by : shapeworks::ContourDomain::UpdateZeroCrossingPoint , shapeworks::ImageDomain::UpdateZeroCrossingPoint , shapeworks::MeshDomain::UpdateZeroCrossingPoint","title":"function UpdateZeroCrossingPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-isdomainfixed","text":"inline bool IsDomainFixed () const","title":"function IsDomainFixed"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getdomaintype","text":"virtual shapeworks :: DomainType GetDomainType () const = 0 Reimplemented by : shapeworks::ContourDomain::GetDomainType , shapeworks::ImplicitSurfaceDomain::GetDomainType , shapeworks::MeshDomain::GetDomainType","title":"function GetDomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getconstraints","text":"inline std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const","title":"function GetConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-getpositionaftersplit","text":"inline virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const Reimplemented by : shapeworks::ContourDomain::GetPositionAfterSplit","title":"function GetPositionAfterSplit"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainid","text":"inline void SetDomainID ( int id )","title":"function SetDomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-setdomainname","text":"inline void SetDomainName ( std :: string name )","title":"function SetDomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain","text":"inline ParticleDomain ()","title":"function ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#function-particledomain_1","text":"inline virtual ~ ParticleDomain ()","title":"function ~ParticleDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_fixeddomain","text":"bool m_FixedDomain { true };","title":"variable m_FixedDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainid","text":"int m_DomainID { -1 };","title":"variable m_DomainID"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-m_domainname","text":"std :: string m_DomainName ;","title":"variable m_DomainName"},{"location":"api/Classes/classshapeworks_1_1ParticleDomain.html#variable-constraints","text":"std :: shared_ptr < shapeworks :: Constraints > constraints ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable constraints"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html","text":"shapeworks::ParticleEvent Inherits from itk::EventObject Public Types Name typedef ParticleEvent Self Public Functions Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const Public Types Documentation typedef Self typedef ParticleEvent shapeworks :: ParticleEvent :: Self ; Public Functions Documentation function ParticleEvent inline ParticleEvent () function ~ParticleEvent inline virtual ~ ParticleEvent () function ParticleEvent inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator= function operator= inline const ParticleEvent & operator = ( const ParticleEvent & v ) function GetEventName inline virtual const char * GetEventName () const Standard ITK event members. function CheckEvent inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const function MakeObject inline :: itk :: EventObject * MakeObject () const function SetPositionIndex inline void SetPositionIndex ( int i ) Get/Set the index value. function GetPositionIndex inline int GetPositionIndex () const function SetDomainIndex inline void SetDomainIndex ( int i ) Get/Set the Domain index value. function GetDomainIndex inline int GetDomainIndex () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#shapeworksparticleevent","text":"Inherits from itk::EventObject","title":"shapeworks::ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types","text":"Name typedef ParticleEvent Self","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions","text":"Name ParticleEvent () virtual ~ParticleEvent () ParticleEvent (const ParticleEvent & v) const ParticleEvent & operator= (const ParticleEvent & v) virtual const char * GetEventName () const virtual bool CheckEvent (const ::itk::EventObject * e) const ::itk::EventObject * MakeObject () const void SetPositionIndex (int i) int GetPositionIndex () const void SetDomainIndex (int i) int GetDomainIndex () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#typedef-self","text":"typedef ParticleEvent shapeworks :: ParticleEvent :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent","text":"inline ParticleEvent ()","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_1","text":"inline virtual ~ ParticleEvent ()","title":"function ~ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-particleevent_2","text":"inline ParticleEvent ( const ParticleEvent & v ) Copy constructor and operator=","title":"function ParticleEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-operator","text":"inline const ParticleEvent & operator = ( const ParticleEvent & v )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-geteventname","text":"inline virtual const char * GetEventName () const Standard ITK event members.","title":"function GetEventName"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-checkevent","text":"inline virtual bool CheckEvent ( const :: itk :: EventObject * e ) const","title":"function CheckEvent"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-makeobject","text":"inline :: itk :: EventObject * MakeObject () const","title":"function MakeObject"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setpositionindex","text":"inline void SetPositionIndex ( int i ) Get/Set the index value.","title":"function SetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getpositionindex","text":"inline int GetPositionIndex () const","title":"function GetPositionIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-setdomainindex","text":"inline void SetDomainIndex ( int i ) Get/Set the Domain index value.","title":"function SetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleEvent.html#function-getdomainindex","text":"inline int GetDomainIndex () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetDomainIndex"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html","text":"shapeworks::ParticleGaussianModeWriter More... Inherits from itk::DataObject Public Types Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type Public Functions Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const Protected Functions Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & ) Protected Attributes Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName Detailed Description template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ; Public Types Documentation typedef Self typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ; typedef Superclass typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes. typedef ShapeMatrixType typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ; typedef DataType typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ; typedef PointType typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types. typedef vnl_vector_type typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ; typedef vnl_matrix_type typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Update void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix. function GetNumberOfModes inline int GetNumberOfModes () const function SetNumberOfModes inline void SetNumberOfModes ( int b ) function SetShapeMatrix inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix. function GetShapeMatrix inline ShapeMatrixType * GetShapeMatrix () function GetShapeMatrix inline const ShapeMatrixType * GetShapeMatrix () const function SetFileName inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix. function SetFileName inline void SetFileName ( const char * s ) function GetFileName inline const std :: string & GetFileName () const Protected Functions Documentation function ParticleGaussianModeWriter inline ParticleGaussianModeWriter () function ~ParticleGaussianModeWriter inline virtual ~ ParticleGaussianModeWriter () function operator= void operator = ( const ParticleGaussianModeWriter & ) function ParticleGaussianModeWriter ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ) Protected Attributes Documentation variable m_ShapeMatrix ShapeMatrixType :: Pointer m_ShapeMatrix ; variable m_NumberOfModes int m_NumberOfModes ; variable m_FileName std :: string m_FileName ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#shapeworksparticlegaussianmodewriter","text":"More... Inherits from itk::DataObject","title":"shapeworks::ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types","text":"Name typedef ParticleGaussianModeWriter Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef DataObject Superclass typedef ParticleSystem ParticleSystemType typedef LegacyShapeMatrix ShapeMatrixType typedef ShapeMatrixType::DataType DataType typedef ParticleSystemType::PointType PointType typedef vnl_vector< DataType > vnl_vector_type typedef vnl_matrix< DataType > vnl_matrix_type","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions","text":"Name itkTypeMacro ( ParticleGaussianModeWriter , DataObject ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void Update () const int GetNumberOfModes () const void SetNumberOfModes (int b) void SetShapeMatrix ( ShapeMatrixType * s) ShapeMatrixType * GetShapeMatrix () const ShapeMatrixType * GetShapeMatrix () const void SetFileName (const std::string & s) void SetFileName (const char * s) const std::string & GetFileName () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions","text":"Name ParticleGaussianModeWriter () virtual ~ParticleGaussianModeWriter () void operator= (const ParticleGaussianModeWriter & ) ParticleGaussianModeWriter (const ParticleGaussianModeWriter & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes","text":"Name ShapeMatrixType::Pointer m_ShapeMatrix int m_NumberOfModes std::string m_FileName","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#detailed-description","text":"template < unsigned int VDimension > class shapeworks :: ParticleGaussianModeWriter ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-self","text":"typedef ParticleGaussianModeWriter shapeworks :: ParticleGaussianModeWriter < VDimension >:: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleGaussianModeWriter < VDimension >:: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleGaussianModeWriter < VDimension >:: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ParticleGaussianModeWriter < VDimension >:: ParticleSystemType ; Type of particle system and associated classes.","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-shapematrixtype","text":"typedef LegacyShapeMatrix shapeworks :: ParticleGaussianModeWriter < VDimension >:: ShapeMatrixType ;","title":"typedef ShapeMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-datatype","text":"typedef ShapeMatrixType :: DataType shapeworks :: ParticleGaussianModeWriter < VDimension >:: DataType ;","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-pointtype","text":"typedef ParticleSystemType :: PointType shapeworks :: ParticleGaussianModeWriter < VDimension >:: PointType ; Vector & Point types.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_vector_type","text":"typedef vnl_vector < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_vector_type ;","title":"typedef vnl_vector_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#typedef-vnl_matrix_type","text":"typedef vnl_matrix < DataType > shapeworks :: ParticleGaussianModeWriter < VDimension >:: vnl_matrix_type ;","title":"typedef vnl_matrix_type"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itktypemacro","text":"itkTypeMacro ( ParticleGaussianModeWriter , DataObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-update","text":"void Update () const Write the first n modes to +- 3 std dev and the mean of the model described by the covariance matrix.","title":"function Update"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getnumberofmodes","text":"inline int GetNumberOfModes () const","title":"function GetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setnumberofmodes","text":"inline void SetNumberOfModes ( int b )","title":"function SetNumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setshapematrix","text":"inline void SetShapeMatrix ( ShapeMatrixType * s ) Access the shape matrix.","title":"function SetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix","text":"inline ShapeMatrixType * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getshapematrix_1","text":"inline const ShapeMatrixType * GetShapeMatrix () const","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename","text":"inline void SetFileName ( const std :: string & s ) Set/Get the filename prefix.","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-setfilename_1","text":"inline void SetFileName ( const char * s )","title":"function SetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-getfilename","text":"inline const std :: string & GetFileName () const","title":"function GetFileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter","text":"inline ParticleGaussianModeWriter ()","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_1","text":"inline virtual ~ ParticleGaussianModeWriter ()","title":"function ~ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-operator","text":"void operator = ( const ParticleGaussianModeWriter & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#function-particlegaussianmodewriter_2","text":"ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & )","title":"function ParticleGaussianModeWriter"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_shapematrix","text":"ShapeMatrixType :: Pointer m_ShapeMatrix ;","title":"variable m_ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_numberofmodes","text":"int m_NumberOfModes ;","title":"variable m_NumberOfModes"},{"location":"api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html#variable-m_filename","text":"std :: string m_FileName ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_FileName"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html","text":"shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. #include Public Types Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType Public Functions Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache) Public Types Documentation using MeanCurvatureCacheType using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; Public Functions Documentation function set_domains_per_shape inline void set_domains_per_shape ( int i ) function set_criterion_angle inline void set_criterion_angle ( double a ) function run_assessment std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#shapeworksparticlegoodbadassessment","text":"Performs good/bad points assessment and reports the bad positions of the particle system. #include ","title":"shapeworks::ParticleGoodBadAssessment"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types","text":"Name using MeanCurvatureContainer < float, 3 > MeanCurvatureCacheType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions","text":"Name void set_domains_per_shape (int i) void set_criterion_angle (double a) std::vector< std::vector< int > > run_assessment (const ParticleSystem * ps, MeanCurvatureCacheType * mean_curvature_cache)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#using-meancurvaturecachetype","text":"using shapeworks :: ParticleGoodBadAssessment :: MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_domains_per_shape","text":"inline void set_domains_per_shape ( int i )","title":"function set_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-set_criterion_angle","text":"inline void set_criterion_angle ( double a )","title":"function set_criterion_angle"},{"location":"api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html#function-run_assessment","text":"std :: vector < std :: vector < int > > run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function run_assessment"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html","text":"shapeworks::ParticleNeighborhood More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood Public Types Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called. Public Types Documentation typedef Self typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations. using DomainType using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type. typedef PointVectorType typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints. Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function itkSetObjectMacro itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called. function itkGetConstObjectMacro itkGetConstObjectMacro ( PointContainer , PointContainerType ) function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function FindNeighborhoodPoints inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points. function FindNeighborhoodPoints inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const function SetDomain inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures. function GetDomain inline DomainType :: Pointer GetDomain () const function AddPosition inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition function RemovePosition inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition Protected Functions Documentation function ParticleNeighborhood inline ParticleNeighborhood () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleNeighborhood inline virtual ~ ParticleNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#shapeworksparticleneighborhood","text":"More... #include Inherits from itk::DataObject Inherited by shapeworks::ParticleRegionNeighborhood","title":"shapeworks::ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types","text":"Name typedef ParticleNeighborhood Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef itk::Point< double, VDimension > PointType using shapeworks::ParticleDomain DomainType typedef GenericContainer < PointType > PointContainerType typedef std::vector< ParticlePointIndexPair > PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleNeighborhood , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const virtual unsigned int FindNeighborhoodPoints (const PointType & , int idx, double , PointVectorType & ) const virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions","text":"Name ParticleNeighborhood () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleNeighborhood ; A ParticleNeighborhood is responsible for computing neighborhoods of particles. Given a point position in a domain, and a neighborhood radius, the ParticleNeighborhood returns a list of points that are neighbors of that point. The base class, ParticleNeighborhood , must be subclassed to provide functionality; the base class will throw an exception when FindNeighborhoodPoints is called.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-self","text":"typedef ParticleNeighborhood shapeworks :: ParticleNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleNeighborhood :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleNeighborhood :: DomainType = shapeworks :: ParticleDomain ; Domain type. The Domain object provides bounds and distance information.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleNeighborhood :: PointContainerType ; Container type for points. This matches the itkParticleSystem container type.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#typedef-pointvectortype","text":"typedef std :: vector < ParticlePointIndexPair > shapeworks :: ParticleNeighborhood :: PointVectorType ; Point list (vector) type. This is the type of list returned by FindNeighborhoodPoints.","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleNeighborhood , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( PointContainer , PointContainerType ) Set/Get the point container. These are the points parsed by the Neighborhood class when FindNeighborhoodPoints is called.","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-itkgetconstobjectmacro","text":"itkGetConstObjectMacro ( PointContainer , PointContainerType )","title":"function itkGetConstObjectMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplemented by : shapeworks::ParticleRegionNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. The default implementation will throw an exception.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_1","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_2","text":"inline virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const Reimplemented by : shapeworks::ParticleSurfaceNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of distances associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-findneighborhoodpoints_3","text":"inline virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setdomain","text":"inline virtual void SetDomain ( DomainType :: Pointer domain ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetDomain Set the Domain that this neighborhood will use. The Domain object is important because it defines bounds and distance measures.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-getdomain","text":"inline DomainType :: Pointer GetDomain () const","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-addposition","text":"inline virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-setposition","text":"inline virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-removeposition","text":"inline virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplemented by : shapeworks::ParticleRegionNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood","text":"inline ParticleNeighborhood ()","title":"function ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#function-particleneighborhood_1","text":"inline virtual ~ ParticleNeighborhood ()","title":"function ~ParticleNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html","text":"shapeworks::ParticleNormalEvaluation Public Functions Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions. Public Functions Documentation function evaluate_particle_normals static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ) function threshold_particle_normals static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ) function compute_particle_normals static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#shapeworksparticlenormalevaluation","text":"","title":"shapeworks::ParticleNormalEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions","text":"Name std::vector< double > evaluate_particle_normals (const Eigen::MatrixXd & particles, const Eigen::MatrixXd & normals) std::vector< bool > threshold_particle_normals (std::vector< double > angles, double max_angle_degrees) Eigen::MatrixXd compute_particle_normals (const Eigen::MatrixXd & particles, std::vector< std::shared_ptr< VtkMeshWrapper > > meshes) Compute normals at particle positions.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-evaluate_particle_normals","text":"static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals )","title":"function evaluate_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-threshold_particle_normals","text":"static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees )","title":"function threshold_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html#function-compute_particle_normals","text":"static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper > > meshes ) Compute normals at particle positions. Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_particle_normals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html","text":"shapeworks::ParticleNormalEvaluationJob Inherits from shapeworks::Job , QObject Public Signals Name void result_ready (std::vector< bool > good_bad) Public Functions Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad () Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Signals Documentation signal result_ready void result_ready ( std :: vector < bool > good_bad ) Public Functions Documentation function ParticleNormalEvaluationJob ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_good_bad std :: vector < bool > get_good_bad () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#shapeworksparticlenormalevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals","text":"Name void result_ready (std::vector< bool > good_bad)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions","text":"Name ParticleNormalEvaluationJob (QSharedPointer< Session > session, double max_angle_degrees) virtual void run () override run the job virtual QString name () override get the name of the job std::vector< bool > get_good_bad ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#signal-result_ready","text":"void result_ready ( std :: vector < bool > good_bad )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-particlenormalevaluationjob","text":"ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees )","title":"function ParticleNormalEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html#function-get_good_bad","text":"std :: vector < bool > get_good_bad () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_good_bad"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html","text":"shapeworks::ParticleRegionDomain Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T > Public Types Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType Public Functions Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound) Protected Functions Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const Additional inherited members Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints Public Types Documentation using Pointer using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs typedef PointType typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations. Public Functions Documentation function ApplyConstraints inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries. function GetUpperBound inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function GetLowerBound inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree . function SetUpperBound inline void SetUpperBound ( const PointType _UpperBound ) function SetLowerBound inline void SetLowerBound ( const PointType _LowerBound ) function SetRegion inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) Protected Functions Documentation function ParticleRegionDomain inline ParticleRegionDomain () function ~ParticleRegionDomain inline virtual ~ ParticleRegionDomain () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function IsInsideBuffer inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#shapeworksparticleregiondomain","text":"Inherits from shapeworks::ParticleDomain Inherited by shapeworks::ImageDomain< T >","title":"shapeworks::ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types","text":"Name using std::shared_ptr< ParticleRegionDomain > Pointer typedef ParticleDomain::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions","text":"Name virtual bool ApplyConstraints ( PointType & p) const virtual const PointType & GetUpperBound () const virtual const PointType & GetLowerBound () const void SetUpperBound (const PointType _UpperBound) void SetLowerBound (const PointType _LowerBound) void SetRegion (const PointType & lowerBound, const PointType & upperBound)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions","text":"Name ParticleRegionDomain () virtual ~ParticleRegionDomain () void PrintSelf (std::ostream & os, itk::Indent indent) const bool IsInsideBuffer (const PointType & p) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#additional-inherited-members","text":"Public Types inherited from shapeworks::ParticleDomain Name using vnl_matrix_fixed< float, 3, 3 > GradNType using vnl_vector_fixed< double, 3 > VectorDoubleType using vnl_vector_fixed< float, 3 > VectorFloatType Public Functions inherited from shapeworks::ParticleDomain Name virtual PointType UpdateParticlePosition (const PointType & point, int idx, VectorDoubleType & update) const =0 virtual void InvalidateParticlePosition (int idx) const virtual VectorDoubleType ProjectVectorToSurfaceTangent (VectorDoubleType & gradE, const PointType & pos, int idx) const =0 virtual VectorFloatType SampleGradientAtPoint (const PointType & point, int idx) const =0 virtual VectorFloatType SampleNormalAtPoint (const PointType & point, int idx) const =0 virtual GradNType SampleGradNAtPoint (const PointType & p, int idx) const =0 virtual double Distance (const PointType & a, int idx_a, const PointType & b, int idx_b, VectorDoubleType * out_grad =nullptr) const virtual double SquaredDistance (const PointType & a, int idx_a, const PointType & b, int idx_b) const virtual bool IsWithinDistance (const PointType & a, int idx_a, const PointType & b, int idx_b, double test_dist, double & distance) const virtual double GetCurvature (const PointType & p, int idx) const =0 virtual double GetSurfaceMeanCurvature () const =0 virtual double GetSurfaceStdDevCurvature () const =0 virtual PointType GetZeroCrossingPoint () const =0 virtual double GetSurfaceArea () const =0 virtual PointType GetValidLocationNear ( PointType p) const =0 virtual double GetMaxDiameter () const =0 virtual void DeleteImages () =0 virtual void DeletePartialDerivativeImages () =0 virtual void UpdateZeroCrossingPoint () =0 bool IsDomainFixed () const virtual shapeworks::DomainType GetDomainType () const =0 std::shared_ptr< shapeworks::Constraints > GetConstraints () const virtual PointType GetPositionAfterSplit (const PointType & pt, const VectorDoubleType & local_direction, const VectorDoubleType & global_direction, double epsilon) const void SetDomainID (int id) void SetDomainName (std::string name) Protected Functions inherited from shapeworks::ParticleDomain Name ParticleDomain () virtual ~ParticleDomain () Protected Attributes inherited from shapeworks::ParticleDomain Name bool m_FixedDomain int m_DomainID std::string m_DomainName std::shared_ptr< shapeworks::Constraints > constraints","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#using-pointer","text":"using shapeworks :: ParticleRegionDomain :: Pointer = std :: shared_ptr < ParticleRegionDomain > ; Standard class typedefs","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#typedef-pointtype","text":"typedef ParticleDomain :: PointType shapeworks :: ParticleRegionDomain :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-applyconstraints","text":"inline virtual bool ApplyConstraints ( PointType & p ) const Apply any constraints to the given point location. This method may, for example, implement boundary conditions or restrict points to lie on a surface. This function will clip the point to the boundaries.","title":"function ApplyConstraints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getupperbound","text":"inline virtual const PointType & GetUpperBound () const Reimplements : shapeworks::ParticleDomain::GetUpperBound Gets the maximum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-getlowerbound","text":"inline virtual const PointType & GetLowerBound () const Reimplements : shapeworks::ParticleDomain::GetLowerBound Gets the minimum x, y, z values of the bounding box for the domain. This is used for setting up the PowerOfTwoPointTree .","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType _UpperBound )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType _LowerBound )","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-setregion","text":"inline void SetRegion ( const PointType & lowerBound , const PointType & upperBound )","title":"function SetRegion"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain","text":"inline ParticleRegionDomain ()","title":"function ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-particleregiondomain_1","text":"inline virtual ~ ParticleRegionDomain ()","title":"function ~ParticleRegionDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionDomain.html#function-isinsidebuffer","text":"inline bool IsInsideBuffer ( const PointType & p ) const Check whether the point p may be sampled in this domain. Updated on 2023-10-25 at 15:40:27 +0000","title":"function IsInsideBuffer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html","text":"shapeworks::ParticleRegionNeighborhood More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood Protected Classes Name struct IteratorNodePair Public Types Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType Protected Types Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Additional inherited members Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Detailed Description class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef Self typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs typedef Superclass typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ; typedef PointTreeType typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location. Protected Types Documentation typedef IteratorMapType typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function SetDomain virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree. function itkSetMacro itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree. function itkGetMacro itkGetMacro ( TreeLevels , unsigned int ) function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function AddPosition virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed. function SetPosition virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition function RemovePosition virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition Protected Functions Documentation function ParticleRegionNeighborhood inline ParticleRegionNeighborhood () function ~ParticleRegionNeighborhood inline virtual ~ ParticleRegionNeighborhood () Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_Tree PointTreeType :: Pointer m_Tree ; variable m_IteratorMap IteratorMapType :: Pointer m_IteratorMap ; variable m_TreeLevels unsigned int m_TreeLevels ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#shapeworksparticleregionneighborhood","text":"More... #include Inherits from shapeworks::ParticleNeighborhood , itk::DataObject Inherited by shapeworks::ParticleSurfaceNeighborhood","title":"shapeworks::ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-classes","text":"Name struct IteratorNodePair","title":"Protected Classes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types","text":"Name typedef ParticleRegionNeighborhood Self typedef ParticleNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using ParticleDomain DomainType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef Superclass::PointVectorType PointVectorType typedef PowerOfTwoPointTree PointTreeType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types","text":"Name typedef GenericContainer < IteratorNodePair > IteratorMapType","title":"Protected Types"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, double ) const virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) void PrintSelf (std::ostream & os, itk::Indent indent) const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions","text":"Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes","text":"Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) DomainType::Pointer GetDomain () const Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood ()","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleRegionNeighborhood ; ParticleRegionNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-self","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleRegionNeighborhood :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-superclass","text":"typedef ParticleNeighborhood shapeworks :: ParticleRegionNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleRegionNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleRegionNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#using-domaintype","text":"using shapeworks :: ParticleRegionNeighborhood :: DomainType = ParticleDomain ;","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleRegionNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleRegionNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleRegionNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-pointtreetype","text":"typedef PowerOfTwoPointTree shapeworks :: ParticleRegionNeighborhood :: PointTreeType ; PowerOfTwoTree type used to sort points according to location.","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-types-documentation","text":"","title":"Protected Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#typedef-iteratormaptype","text":"typedef GenericContainer < IteratorNodePair > shapeworks :: ParticleRegionNeighborhood :: IteratorMapType ;","title":"typedef IteratorMapType"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setdomain","text":"virtual void SetDomain ( DomainType :: Pointer p ) override Reimplements : shapeworks::ParticleNeighborhood::SetDomain Override SetDomain so that we can grab the region extent info and construct our tree.","title":"function SetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itksetmacro","text":"itkSetMacro ( TreeLevels , unsigned int ) Set/Get the number of levels in the sorting tree.","title":"function itkSetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-itkgetmacro","text":"itkGetMacro ( TreeLevels , unsigned int )","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-addposition","text":"virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::AddPosition For efficiency, itkNeighborhoods are not necessarily observers of itkParticleSystem, but have specific methods invoked for various events. AddPosition is called by itkParticleSystem when a particle location is added. SetPosition is called when a particle location is set. RemovePosition is called when a particle location is removed.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-setposition","text":"virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::SetPosition","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-removeposition","text":"virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) Reimplements : shapeworks::ParticleNeighborhood::RemovePosition","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood","text":"inline ParticleRegionNeighborhood ()","title":"function ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#function-particleregionneighborhood_1","text":"inline virtual ~ ParticleRegionNeighborhood ()","title":"function ~ParticleRegionNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_tree","text":"PointTreeType :: Pointer m_Tree ;","title":"variable m_Tree"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_iteratormap","text":"IteratorMapType :: Pointer m_IteratorMap ;","title":"variable m_IteratorMap"},{"location":"api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html#variable-m_treelevels","text":"unsigned int m_TreeLevels ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_TreeLevels"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html","text":"shapeworks::ParticleShapeStatistics More... #include Public Functions Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix () Public Attributes Name constexpr static int VDimension Detailed Description class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids. Public Functions Documentation function ParticleShapeStatistics inline ParticleShapeStatistics () function ParticleShapeStatistics ParticleShapeStatistics ( std :: shared_ptr < Project > project ) function ~ParticleShapeStatistics inline ~ ParticleShapeStatistics () function DoPCA int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 ) function DoPCA int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function ImportPoints int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics. function ComputeMultiLevelAnalysisStatistics void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis. function ComputeShapeDevModesForMca int ComputeShapeDevModesForMca () Compute shape variations for MLCA. function ComputeRelPoseModesForMca int ComputeRelPoseModesForMca () Compute pose variations for MLCA. function SetNumberOfParticlesArray void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis) function ReadPointFiles int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics. function ReloadPointFiles int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. function WriteCSVFile int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. function WriteCSVFile2 int WriteCSVFile2 ( const std :: string & s ) function ComputeModes int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. function get_num_modes int get_num_modes () const Return the number of modes. function PrincipalComponentProjections int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first. function FisherLinearDiscriminant int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation. function SampleSize inline int SampleSize () const Returns the sample size. function Group1SampleSize inline int Group1SampleSize () const function Group2SampleSize inline int Group2SampleSize () const function NumberOfDimensions inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) function NumberOfObjects inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. function NumberOfPointsArray inline std :: vector < int > NumberOfPointsArray () function GroupID inline int GroupID ( unsigned int i ) const Returns the group ids. function GroupID inline const std :: vector < int > & GroupID () const function Eigenvectors inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values. function Eigenvalues inline const std :: vector < double > & Eigenvalues () const function EigenvectorsRelPose inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. function EigenvaluesShapeDev inline const std :: vector < double > & EigenvaluesShapeDev () function EigenvectorsShapeDev inline const Eigen :: MatrixXd & EigenvectorsShapeDev () function EigenvaluesRelPose inline const std :: vector < double > & EigenvaluesRelPose () function MeanShapeDev inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. function MeanRelPose inline const Eigen :: VectorXd & MeanRelPose () function Mean inline const Eigen :: VectorXd & Mean () const Returns the mean shape. function Group1Mean inline const Eigen :: VectorXd & Group1Mean () const function Group2Mean inline const Eigen :: VectorXd & Group2Mean () const function NormalizedGroupDifference inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. function GroupDifference inline const Eigen :: VectorXd & GroupDifference () const function ComputeMedianShape int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/ function L1Norm double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b. function PCALoadings inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings. function FishersLDA inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant. function ShapeMatrix inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix. function RecenteredShape inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. function PercentVarByMode inline const std :: vector < double > & PercentVarByMode () const function SimpleLinearRegression int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/ function get_compactness Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_specificity Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_generalization Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const function get_group1_matrix Eigen :: MatrixXd get_group1_matrix () const function get_group2_matrix Eigen :: MatrixXd get_group2_matrix () const function matrix inline Eigen :: MatrixXd & matrix () Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#shapeworksparticleshapestatistics","text":"More... #include ","title":"shapeworks::ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions","text":"Name ParticleShapeStatistics () ParticleShapeStatistics (std::shared_ptr< Project > project) ~ParticleShapeStatistics () int DoPCA (std::vector< std::vector< Point > > global_pts, int domainsPerShape =1) int DoPCA ( ParticleSystemEvaluation particleSystem, int domainsPerShape =1) itkStaticConstMacro (Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. int ImportPoints (std::vector< Eigen::VectorXd > points, std::vector< int > group_ids) Loads a set of point files and pre-computes some statistics. void ComputeMultiLevelAnalysisStatistics (std::vector< Eigen::VectorXd > points, unsigned int dps) Loads a set of point files and pre-computes statistics for multi-level analysis. int ComputeShapeDevModesForMca () Compute shape variations for MLCA. int ComputeRelPoseModesForMca () Compute pose variations for MLCA. void SetNumberOfParticlesArray (const std::vector< int > & num_particles_array) Set number of particles per domain/object (required for multi-level analysis) int ReadPointFiles (const std::string & s) Loads a set of point files and pre-computes some statistics. int ReloadPointFiles () Reloads a set of point files and recomputes some statistics. int WriteCSVFile (const std::string & s) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis. int WriteCSVFile2 (const std::string & s) int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first. int get_num_modes () const Return the number of modes. int PrincipalComponentProjections () int FisherLinearDiscriminant (unsigned int numModes) Computes fishers linear discriminant line for best group separation. int SampleSize () const Returns the sample size. int Group1SampleSize () const int Group2SampleSize () const int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension) int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure. std::vector< int > NumberOfPointsArray () int GroupID (unsigned int i) const Returns the group ids. const std::vector< int > & GroupID () const const Eigen::MatrixXd & Eigenvectors () const Returns the eigenvectors/values. const std::vector< double > & Eigenvalues () const const Eigen::MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA. const std::vector< double > & EigenvaluesShapeDev () const Eigen::MatrixXd & EigenvectorsShapeDev () const std::vector< double > & EigenvaluesRelPose () const Eigen::VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace. const Eigen::VectorXd & MeanRelPose () const Eigen::VectorXd & Mean () const Returns the mean shape. const Eigen::VectorXd & Group1Mean () const const Eigen::VectorXd & Group2Mean () const const Eigen::VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean. const Eigen::VectorXd & GroupDifference () const int ComputeMedianShape (const int ID) double L1Norm (unsigned int a, unsigned int b) Returns the euclidean L1 norm between shape a and b. Eigen::MatrixXd & PCALoadings () Returns the component loadings. const Eigen::VectorXd & FishersLDA () const Returns the Fisher linear discriminant. const Eigen::MatrixXd & ShapeMatrix () const Returns the shape matrix. const Eigen::MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted. const std::vector< double > & PercentVarByMode () const int SimpleLinearRegression (const std::vector< double > & y, const std::vector< double > & x, double & a, double & b) const Eigen::VectorXd get_compactness (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_specificity (const std::function< void(float)> & progress_callback =nullptr) const Eigen::VectorXd get_generalization (const std::function< void(float)> & progress_callback =nullptr) const Eigen::MatrixXd get_group1_matrix () const Eigen::MatrixXd get_group2_matrix () const Eigen::MatrixXd & matrix ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#detailed-description","text":"class shapeworks :: ParticleShapeStatistics ; This class computes various statistics for a set of correspondence positions and group ids.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics","text":"inline ParticleShapeStatistics ()","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_1","text":"ParticleShapeStatistics ( std :: shared_ptr < Project > project )","title":"function ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-particleshapestatistics_2","text":"inline ~ ParticleShapeStatistics ()","title":"function ~ParticleShapeStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca","text":"int DoPCA ( std :: vector < std :: vector < Point > > global_pts , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-dopca_1","text":"int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 )","title":"function DoPCA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-importpoints","text":"int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ) Loads a set of point files and pre-computes some statistics.","title":"function ImportPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemultilevelanalysisstatistics","text":"void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ) Loads a set of point files and pre-computes statistics for multi-level analysis.","title":"function ComputeMultiLevelAnalysisStatistics"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computeshapedevmodesformca","text":"int ComputeShapeDevModesForMca () Compute shape variations for MLCA.","title":"function ComputeShapeDevModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computerelposemodesformca","text":"int ComputeRelPoseModesForMca () Compute pose variations for MLCA.","title":"function ComputeRelPoseModesForMca"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-setnumberofparticlesarray","text":"void SetNumberOfParticlesArray ( const std :: vector < int > & num_particles_array ) Set number of particles per domain/object (required for multi-level analysis)","title":"function SetNumberOfParticlesArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-readpointfiles","text":"int ReadPointFiles ( const std :: string & s ) Loads a set of point files and pre-computes some statistics.","title":"function ReadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-reloadpointfiles","text":"int ReloadPointFiles () Reloads a set of point files and recomputes some statistics.","title":"function ReloadPointFiles"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile","text":"int WriteCSVFile ( const std :: string & s ) Writes a text file in comma-separated format. Suitable for reading into excel or R or Matlab for analysis.","title":"function WriteCSVFile"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-writecsvfile2","text":"int WriteCSVFile2 ( const std :: string & s )","title":"function WriteCSVFile2"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemodes","text":"int ComputeModes () Computes PCA modes from the set of correspondence mode positions. Requires that ReadPointFiles be called first.","title":"function ComputeModes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_num_modes","text":"int get_num_modes () const Return the number of modes.","title":"function get_num_modes"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-principalcomponentprojections","text":"int PrincipalComponentProjections () Computes the principal component loadings, or projections onto the principal componenent axes for each of the samples. ComputeModes must be called first.","title":"function PrincipalComponentProjections"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherlineardiscriminant","text":"int FisherLinearDiscriminant ( unsigned int numModes ) Computes fishers linear discriminant line for best group separation.","title":"function FisherLinearDiscriminant"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-samplesize","text":"inline int SampleSize () const Returns the sample size.","title":"function SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1samplesize","text":"inline int Group1SampleSize () const","title":"function Group1SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2samplesize","text":"inline int Group2SampleSize () const","title":"function Group2SampleSize"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofdimensions","text":"inline int NumberOfDimensions () const Returns the number of dimensions (this is number of points times Dimension)","title":"function NumberOfDimensions"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofobjects","text":"inline int NumberOfObjects () Return Number of objects present in Multi-Object Shape Structure.","title":"function NumberOfObjects"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-numberofpointsarray","text":"inline std :: vector < int > NumberOfPointsArray ()","title":"function NumberOfPointsArray"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid","text":"inline int GroupID ( unsigned int i ) const Returns the group ids.","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupid_1","text":"inline const std :: vector < int > & GroupID () const","title":"function GroupID"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectors","text":"inline const Eigen :: MatrixXd & Eigenvectors () const Returns the eigenvectors/values.","title":"function Eigenvectors"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvalues","text":"inline const std :: vector < double > & Eigenvalues () const","title":"function Eigenvalues"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsrelpose","text":"inline const Eigen :: MatrixXd & EigenvectorsRelPose () Returns the eigenvectors/eigenvalues for morphological and relative pose pariations of MLCA.","title":"function EigenvectorsRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesshapedev","text":"inline const std :: vector < double > & EigenvaluesShapeDev ()","title":"function EigenvaluesShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvectorsshapedev","text":"inline const Eigen :: MatrixXd & EigenvectorsShapeDev ()","title":"function EigenvectorsShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-eigenvaluesrelpose","text":"inline const std :: vector < double > & EigenvaluesRelPose ()","title":"function EigenvaluesRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanshapedev","text":"inline const Eigen :: VectorXd & MeanShapeDev () Returns the mean vector of within and between subspace.","title":"function MeanShapeDev"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-meanrelpose","text":"inline const Eigen :: VectorXd & MeanRelPose ()","title":"function MeanRelPose"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-mean","text":"inline const Eigen :: VectorXd & Mean () const Returns the mean shape.","title":"function Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group1mean","text":"inline const Eigen :: VectorXd & Group1Mean () const","title":"function Group1Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-group2mean","text":"inline const Eigen :: VectorXd & Group2Mean () const","title":"function Group2Mean"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-normalizedgroupdifference","text":"inline const Eigen :: VectorXd & NormalizedGroupDifference () const Returns group2 - group1 mean.","title":"function NormalizedGroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-groupdifference","text":"inline const Eigen :: VectorXd & GroupDifference () const","title":"function GroupDifference"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-computemedianshape","text":"int ComputeMedianShape ( const int ID ) Returns the median shape for the set of shapes with Group ID equal to the integer argument. For example, ComputeMedianShape(0) returns the median shape for the set of shapes with m_groupIDs == 0. The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. Arguments passed to this function are set to the index number of the median shape for Group A and Group B, respectively.*/","title":"function ComputeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-l1norm","text":"double L1Norm ( unsigned int a , unsigned int b ) Returns the euclidean L1 norm between shape a and b.","title":"function L1Norm"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-pcaloadings","text":"inline Eigen :: MatrixXd & PCALoadings () Returns the component loadings.","title":"function PCALoadings"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-fisherslda","text":"inline const Eigen :: VectorXd & FishersLDA () const Returns the Fisher linear discriminant.","title":"function FishersLDA"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-shapematrix","text":"inline const Eigen :: MatrixXd & ShapeMatrix () const Returns the shape matrix.","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-recenteredshape","text":"inline const Eigen :: MatrixXd & RecenteredShape () const Returns the shape with the mean subtracted.","title":"function RecenteredShape"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-percentvarbymode","text":"inline const std :: vector < double > & PercentVarByMode () const","title":"function PercentVarByMode"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-simplelinearregression","text":"int SimpleLinearRegression ( const std :: vector < double > & y , const std :: vector < double > & x , double & a , double & b ) const Computes a simple linear regression of the first list of values with respect to the second y=a + bx. Returns the estimated parameters a & b. Returns 0 on success and -1 on fail.*/","title":"function SimpleLinearRegression"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_compactness","text":"Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_compactness"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_specificity","text":"Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_specificity"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_generalization","text":"Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) > & progress_callback = nullptr ) const","title":"function get_generalization"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group1_matrix","text":"Eigen :: MatrixXd get_group1_matrix () const","title":"function get_group1_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-get_group2_matrix","text":"Eigen :: MatrixXd get_group2_matrix () const","title":"function get_group2_matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#function-matrix","text":"inline Eigen :: MatrixXd & matrix ()","title":"function matrix"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleShapeStatistics.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html","text":"shapeworks::ParticleSurfaceNeighborhood More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject Public Types Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType Public Functions Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood () Additional inherited members Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized. Public Types Documentation typedef TImage typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs typedef ImageType typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ; typedef Self typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ; typedef Superclass typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ; typedef NumericType typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ; typedef PointTreeType typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ; typedef GradientVectorType typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ; typedef PointType typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class. typedef PointContainerType typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ; typedef DomainType typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ; typedef PointVectorType typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ; Public Functions Documentation function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension. function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods). function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location. function FindNeighborhoodPoints virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points. function SetWeightingEnabled inline void SetWeightingEnabled ( bool is_enabled ) function IsWeightingEnabled inline bool IsWeightingEnabled () const function SetForceEuclidean inline void SetForceEuclidean ( bool is_enabled ) function IsForceEuclidean inline bool IsForceEuclidean () const function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function ParticleSurfaceNeighborhood inline ParticleSurfaceNeighborhood () function ~ParticleSurfaceNeighborhood inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#shapeworksparticlesurfaceneighborhood","text":"More... #include Inherits from shapeworks::ParticleRegionNeighborhood , shapeworks::ParticleNeighborhood , itk::DataObject","title":"shapeworks::ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types","text":"Name typedef itk::Image< float, 3 > TImage typedef TImage ImageType typedef ParticleSurfaceNeighborhood Self typedef ParticleRegionNeighborhood Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ImageType::PixelType NumericType typedef Superclass::PointTreeType PointTreeType typedef vnl_vector_fixed< NumericType, TImage::ImageDimension > GradientVectorType typedef Superclass::PointType PointType typedef Superclass::PointContainerType PointContainerType typedef shapeworks::ImplicitSurfaceDomain < typename TImage::PixelType > DomainType typedef Superclass::PointVectorType PointVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions","text":"Name itkStaticConstMacro (Dimension , unsigned int , 3 ) itkNewMacro ( Self ) itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , std::vector< double > & , double ) const override virtual PointVectorType FindNeighborhoodPoints (const PointType & , int idx, std::vector< double > & , double ) const override void SetWeightingEnabled (bool is_enabled) bool IsWeightingEnabled () const void SetForceEuclidean (bool is_enabled) bool IsForceEuclidean () const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions","text":"Name ParticleSurfaceNeighborhood () virtual ~ParticleSurfaceNeighborhood ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#additional-inherited-members","text":"Protected Classes inherited from shapeworks::ParticleRegionNeighborhood Name struct IteratorNodePair Protected Types inherited from shapeworks::ParticleRegionNeighborhood Name typedef GenericContainer < IteratorNodePair > IteratorMapType Public Functions inherited from shapeworks::ParticleRegionNeighborhood Name virtual void SetDomain (DomainType::Pointer p) override itkSetMacro (TreeLevels , unsigned int ) itkGetMacro (TreeLevels , unsigned int ) virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleRegionNeighborhood Name ParticleRegionNeighborhood () virtual ~ParticleRegionNeighborhood () Public Attributes inherited from shapeworks::ParticleRegionNeighborhood Name constexpr static unsigned int VDimension Protected Attributes inherited from shapeworks::ParticleRegionNeighborhood Name PointTreeType::Pointer m_Tree IteratorMapType::Pointer m_IteratorMap unsigned int m_TreeLevels Public Functions inherited from shapeworks::ParticleNeighborhood Name itkSetObjectMacro (PointContainer , PointContainerType ) itkGetConstObjectMacro (PointContainer , PointContainerType ) virtual void SetDomain (DomainType::Pointer domain) DomainType::Pointer GetDomain () const virtual void AddPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void SetPosition (const PointType & p, unsigned int idx, int threadId =0) virtual void RemovePosition (unsigned int idx, int threadId =0) Protected Functions inherited from shapeworks::ParticleNeighborhood Name ParticleNeighborhood () virtual ~ParticleNeighborhood () Public Attributes inherited from shapeworks::ParticleNeighborhood Name constexpr static unsigned int VDimension","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#detailed-description","text":"class shapeworks :: ParticleSurfaceNeighborhood ; ParticleSurfaceNeighborhood is a general purpose neighborhood object that computes neighborhoods based on distance from a point. It requires a domain that provides bounds information and a distance metric. This class uses a PowerOfTwoPointTree to cache point and index values so that FindNeighborhoodPoints is somewhat optimized.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-timage","text":"typedef itk :: Image < float , 3 > shapeworks :: ParticleSurfaceNeighborhood :: TImage ; Standard class typedefs","title":"typedef TImage"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-imagetype","text":"typedef TImage shapeworks :: ParticleSurfaceNeighborhood :: ImageType ;","title":"typedef ImageType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-self","text":"typedef ParticleSurfaceNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-superclass","text":"typedef ParticleRegionNeighborhood shapeworks :: ParticleSurfaceNeighborhood :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSurfaceNeighborhood :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSurfaceNeighborhood :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-numerictype","text":"typedef ImageType :: PixelType shapeworks :: ParticleSurfaceNeighborhood :: NumericType ;","title":"typedef NumericType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtreetype","text":"typedef Superclass :: PointTreeType shapeworks :: ParticleSurfaceNeighborhood :: PointTreeType ;","title":"typedef PointTreeType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > shapeworks :: ParticleSurfaceNeighborhood :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointtype","text":"typedef Superclass :: PointType shapeworks :: ParticleSurfaceNeighborhood :: PointType ; Inherited typedefs from parent class.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointcontainertype","text":"typedef Superclass :: PointContainerType shapeworks :: ParticleSurfaceNeighborhood :: PointContainerType ;","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-domaintype","text":"typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > shapeworks :: ParticleSurfaceNeighborhood :: DomainType ;","title":"typedef DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#typedef-pointvectortype","text":"typedef Superclass :: PointVectorType shapeworks :: ParticleSurfaceNeighborhood :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , 3 ) Expose the image dimension.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints Compile a list of points that are within a specified radius of a given point. This implementation uses a PowerOfTwoTree to sort points according to location.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-findneighborhoodpoints_1","text":"virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double > & , double ) const override Reimplements : shapeworks::ParticleNeighborhood::FindNeighborhoodPoints This method finds neighborhood points as in the previous method, but also computes a vector of weights associated with each of those points.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setweightingenabled","text":"inline void SetWeightingEnabled ( bool is_enabled )","title":"function SetWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isweightingenabled","text":"inline bool IsWeightingEnabled () const","title":"function IsWeightingEnabled"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-setforceeuclidean","text":"inline void SetForceEuclidean ( bool is_enabled )","title":"function SetForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-isforceeuclidean","text":"inline bool IsForceEuclidean () const","title":"function IsForceEuclidean"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood","text":"inline ParticleSurfaceNeighborhood ()","title":"function ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html#function-particlesurfaceneighborhood_1","text":"inline virtual ~ ParticleSurfaceNeighborhood () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ParticleSurfaceNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html","text":"shapeworks::ParticleSystem A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject Public Types Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const Protected Functions Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform () Public Attributes Name constexpr int VDimension Detailed Description class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame. Public Types Documentation typedef Self typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: ParticleSystem :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ; using DomainType using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type. typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations. typedef NeighborhoodType typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain. typedef PointContainerType typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain. typedef PointVectorType typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ; typedef TransformType typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used. typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ; typedef VnlMatrixType typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function RegisterObserver void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events. function SynchronizePositions inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync. function GetNumberOfParticles inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k. function AddPosition const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain. function SetPosition const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ) function RemovePosition void RemovePosition ( unsigned long int k , unsigned int d = 0 ) function GetPosition inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain. function GetPosition inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const function GetTransformedPosition inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function GetPrefixTransformedPosition inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const function SplitAllParticles void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked. function SplitParticle void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ) function AdvancedAllParticleSplitting void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ) function PrintParticleSystem void PrintParticleSystem () function SetNeighborhood void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k. function SetNeighborhood inline void SetNeighborhood ( NeighborhoodType * n ) function GetNeighborhood inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain. function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const function FindNeighborhoodPoints inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const function AddDomain void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id. function GetDomainsBegin inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains. function GetDomainsEnd inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains. function GetDomain inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object. function GetDomain inline DomainType * GetDomain () API for the single domain case. function GetDomain inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object. function GetDomain inline const DomainType * GetDomain () const API for the single domain case. function GetNumberOfDomains inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system. function SetTransform void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed. function SetTransform inline void SetTransform ( const TransformType & p ) function SetPrefixTransform void SetPrefixTransform ( unsigned int i , const TransformType & ) function SetPrefixTransform inline void SetPrefixTransform ( const TransformType & p ) function GetTransformsBegin inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms. function GetTransformsEnd inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetTransform inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object. function GetTransform inline const TransformType & GetTransform () const API for the single transform case. function GetTransform inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object. function GetTransform inline TransformType GetTransform () API for the single transform case. function GetPrefixTransform inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetPrefixTransform inline const TransformType & GetPrefixTransform () const API for the single transform case. function GetPrefixTransform inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object. function GetPrefixTransform inline TransformType GetPrefixTransform () API for the single transform case. function GetInverseTransformsBegin inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms. function GetInverseTransformsEnd inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms. function GetInverseTransform inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object. function GetInverseTransform inline const TransformType & GetInverseTransform () const API for the single transform case. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object. function GetInversePrefixTransform inline const TransformType & GetInversePrefixTransform () const API for the single transform case. function GetPositions inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions. function GetPositions inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const function AddPositionList void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number. function TransformPoint PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.) function TransformVector VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported. function TransformNormalDerivative VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space. function InvertTransform inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix. function FlagDomain inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system. function UnflagDomain inline void UnflagDomain ( unsigned int i ) function GetDomainFlag inline bool GetDomainFlag ( unsigned int i ) const function GetDomainFlags inline const std :: vector < bool > & GetDomainFlags () const function SetDomainFlags inline void SetDomainFlags () function ResetDomainFlags inline void ResetDomainFlags () function SetFixedParticleFlag inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed. function ResetFixedParticleFlag inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) function GetFixedParticleFlag inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const function ResetFixedParticleFlags inline void ResetFixedParticleFlags () function SetDomainsPerShape inline void SetDomainsPerShape ( unsigned int num ) function GetDomainsPerShape inline unsigned int GetDomainsPerShape () const function SetNumberOfDomains void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists. function ComputeMaxDistNearestNeighbors double ComputeMaxDistNearestNeighbors ( size_t dom ) function SetFieldAttributes inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) function GetFieldAttributes inline const std :: vector < std :: string > & GetFieldAttributes () const Protected Functions Documentation function ParticleSystem ParticleSystem () function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const function ~ParticleSystem inline virtual ~ ParticleSystem () function GetInverseTransform inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object. function GetInverseTransform inline TransformType & GetInverseTransform () API for the single transform case. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object. function GetInversePrefixTransform inline TransformType & GetInversePrefixTransform () API for the single transform case. Public Attributes Documentation variable VDimension static constexpr int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#shapeworksparticlesystem","text":"A facade class managing interactions with a particle system. More... #include Inherits from itk::DataObject","title":"shapeworks::ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types","text":"Name typedef ParticleSystem Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer using shapeworks::ParticleDomain DomainType typedef itk::Point< double, VDimension > PointType typedef ParticleNeighborhood NeighborhoodType typedef GenericContainer < PointType > PointContainerType typedef NeighborhoodType::PointVectorType PointVectorType typedef vnl_matrix_fixed< double, VDimension+1, VDimension+1 > TransformType typedef vnl_vector_fixed< double, VDimension > VectorType typedef vnl_matrix< double > VnlMatrixType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ParticleSystem , itk::DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) void RegisterObserver ( Observer * attr) void SynchronizePositions () unsigned long int GetNumberOfParticles (unsigned int d =0) const const PointType & AddPosition (const PointType & , unsigned int d =0) const PointType & SetPosition (const PointType & , unsigned long int k, unsigned int d =0) void RemovePosition (unsigned long int k, unsigned int d =0) PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType & GetPosition (unsigned long int k, unsigned int d =0) const PointType GetTransformedPosition (unsigned long int k, unsigned int d =0) const PointType GetPrefixTransformedPosition (unsigned long int k, unsigned int d =0) const void SplitAllParticles (double epsilon) void SplitParticle (double epsilon, unsigned int idx, unsigned int d =0) void AdvancedAllParticleSplitting (double epsilon, unsigned int domains_per_shape, unsigned int dom_to_process) void PrintParticleSystem () void SetNeighborhood (unsigned int , NeighborhoodType * ) void SetNeighborhood ( NeighborhoodType * n) NeighborhoodType::ConstPointer GetNeighborhood (unsigned int k) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (const PointType & p, int idx, std::vector< double > & w, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, std::vector< double > & distances, double r, unsigned int d =0) const PointVectorType FindNeighborhoodPoints (unsigned int idx, std::vector< double > & w, double r, unsigned int d =0) const void AddDomain (DomainType::Pointer input) std::vector< DomainType::Pointer >::const_iterator GetDomainsBegin () const std::vector< DomainType::Pointer >::const_iterator GetDomainsEnd () const DomainType * GetDomain (unsigned int i) DomainType * GetDomain () const DomainType * GetDomain (unsigned int i) const const DomainType * GetDomain () const unsigned int GetNumberOfDomains () const void SetTransform (unsigned int i, const TransformType & ) void SetTransform (const TransformType & p) void SetPrefixTransform (unsigned int i, const TransformType & ) void SetPrefixTransform (const TransformType & p) std::vector< TransformType >::const_iterator GetTransformsBegin () const std::vector< TransformType >::const_iterator GetTransformsEnd () const const TransformType & GetTransform (unsigned int i) const const TransformType & GetTransform () const TransformType GetTransform (unsigned int i) TransformType GetTransform () const TransformType & GetPrefixTransform (unsigned int i) const const TransformType & GetPrefixTransform () const TransformType GetPrefixTransform (unsigned int i) TransformType GetPrefixTransform () std::vector< TransformType >::const_iterator GetInverseTransformsBegin () const std::vector< TransformType >::const_iterator GetInverseTransformsEnd () const const TransformType & GetInverseTransform (unsigned int i) const const TransformType & GetInverseTransform () const const TransformType & GetInversePrefixTransform (unsigned int i) const const TransformType & GetInversePrefixTransform () const const std::vector< PointContainerType::Pointer > & GetPositions () const const PointContainerType::Pointer & GetPositions (unsigned int d) const void AddPositionList (const std::vector< PointType > & , unsigned int d =0) PointType TransformPoint (const PointType & , const TransformType & ) const VectorType TransformVector (const VectorType & , const TransformType & ) const VnlMatrixType TransformNormalDerivative (const VnlMatrixType & , const TransformType & ) const TransformType InvertTransform (const TransformType & T) const void FlagDomain (unsigned int i) void UnflagDomain (unsigned int i) bool GetDomainFlag (unsigned int i) const const std::vector< bool > & GetDomainFlags () const void SetDomainFlags () void ResetDomainFlags () void SetFixedParticleFlag (unsigned int d, unsigned int i) void ResetFixedParticleFlag (unsigned int d, unsigned int i) bool GetFixedParticleFlag (unsigned int d, unsigned int i) const void ResetFixedParticleFlags () void SetDomainsPerShape (unsigned int num) unsigned int GetDomainsPerShape () const void SetNumberOfDomains (unsigned int ) double ComputeMaxDistNearestNeighbors (size_t dom) void SetFieldAttributes (const std::vector< std::string > & field_attributes) const std::vector< std::string > & GetFieldAttributes () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions","text":"Name ParticleSystem () void PrintSelf (std::ostream & os, itk::Indent indent) const virtual ~ParticleSystem () TransformType & GetInverseTransform (unsigned int i) TransformType & GetInverseTransform () TransformType & GetInversePrefixTransform (unsigned int i) TransformType & GetInversePrefixTransform ()","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes","text":"Name constexpr int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#detailed-description","text":"class shapeworks :: ParticleSystem ; A facade class managing interactions with a particle system. A particle system consists of a set of particle locations and domains in which those locations are defined. For example, a particle system may simply be a set of points in 3D Euclidean space that are constrained to a specified bounding box. A more complex example is a set of 3D points constrained to a given surface. The itkParticleSystem class is also designed to manage multiple sets of points across multiple domains. For example, one may create a system of dozens of point sets that are each defined in different spaces. The itkParticleSystem class can also maintain a set of transformations associated with each domain that map that particular domain into another coordinate frame, for example, a common coordinate frame.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-self","text":"typedef ParticleSystem shapeworks :: ParticleSystem :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-superclass","text":"typedef DataObject shapeworks :: ParticleSystem :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ParticleSystem :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ParticleSystem :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ParticleSystem :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#using-domaintype","text":"using shapeworks :: ParticleSystem :: DomainType = shapeworks :: ParticleDomain ; Define the base domain type.","title":"using DomainType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: ParticleSystem :: PointType ; Point type used to store particle locations.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-neighborhoodtype","text":"typedef ParticleNeighborhood shapeworks :: ParticleSystem :: NeighborhoodType ; Class used to compute neighborhoods of points. One is associated with each domain.","title":"typedef NeighborhoodType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointcontainertype","text":"typedef GenericContainer < PointType > shapeworks :: ParticleSystem :: PointContainerType ; Point container type. One is associated with each domain.","title":"typedef PointContainerType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-pointvectortype","text":"typedef NeighborhoodType :: PointVectorType shapeworks :: ParticleSystem :: PointVectorType ;","title":"typedef PointVectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-transformtype","text":"typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > shapeworks :: ParticleSystem :: TransformType ; Defines a transform class type. One is associated with each domain. Transforms are affine for simplicity. This could be extended by using the itk::Transform base type so that a variety of transform types may be used.","title":"typedef TransformType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: ParticleSystem :: VectorType ;","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#typedef-vnlmatrixtype","text":"typedef vnl_matrix < double > shapeworks :: ParticleSystem :: VnlMatrixType ;","title":"typedef VnlMatrixType"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itktypemacro","text":"itkTypeMacro ( ParticleSystem , itk :: DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-registerobserver","text":"void RegisterObserver ( Observer * attr ) Register an attribute object with this particle system. This action adds the attribute object as an observer for the particle system so that it will receive published updates. For example, a gradient attribute object may need to know when particle positions have changed so that it can update its internal state appropriately (e.g. precompute a gradient that corresponds to the new particle position). Internally, this method manages registering the appropriate itk::Command and itk::Object as an observer of this itk::Object (AddObserver). Relevant state information is passed to objects in particle events.","title":"function RegisterObserver"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-synchronizepositions","text":"inline void SynchronizePositions () Invokes the set event on all particle positions, resetting them to their current value. This method may be called to synchronize positional information among various observers which may have gone out of sync.","title":"function SynchronizePositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofparticles","text":"inline unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const Returns the number of particles in domain k.","title":"function GetNumberOfParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addposition","text":"const PointType & AddPosition ( const PointType & , unsigned int d = 0 ) Add/Set/Remove a single particle position. The actual position added or set will be returned. If, for example, the domain imposes any constraints on this location (e.g. out-of-bounds, projection onto a surface), then the method returns the location after constraints are applied. Both the Add and Set methods require a domain index. If unspecified, the domain index is zero. The Set method requires a specific particle index. If the given index does not exist, an exception is thrown. Set is intended to be used for moving particles. The SetTransformedPosition sets the position using a Point transformed by the m_Transform associated with the given domain.","title":"function AddPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setposition","text":"const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 )","title":"function SetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-removeposition","text":"void RemovePosition ( unsigned long int k , unsigned int d = 0 )","title":"function RemovePosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition","text":"inline PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) Return a position with index k from domain d. Note the order in which the 2 integers must be specified! The domain number is specified second and the position index within the domain is specified first. Note that the domain index may be omitted if the particle system only contains a single domain. GetTransformedPosition returns the position premultiplied by the transform matrix for the given domain.","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getposition_1","text":"inline const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformedposition","text":"inline PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransformedposition","text":"inline PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const","title":"function GetPrefixTransformedPosition"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitallparticles","text":"void SplitAllParticles ( double epsilon ) Doubles the number of particles of the system by splitting each particle into 2 particles. Each new particle position is added to the system at a random epsilon distance on the surface from the original particle. The new particles are added using the AddPosition method, so all appropriate callbacks are invoked.","title":"function SplitAllParticles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-splitparticle","text":"void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 )","title":"function SplitParticle"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-advancedallparticlesplitting","text":"void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process )","title":"function AdvancedAllParticleSplitting"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printparticlesystem","text":"void PrintParticleSystem ()","title":"function PrintParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood","text":"void SetNeighborhood ( unsigned int , NeighborhoodType * ) Set/Get the neighborhood object associated with domain k.","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setneighborhood_1","text":"inline void SetNeighborhood ( NeighborhoodType * n )","title":"function SetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getneighborhood","text":"inline NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const","title":"function GetNeighborhood"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const Return the neighborhood of points with radius r around point p in domain k. This is just a convenience method to avoid exposing the underlying Neighborhood objects. FindTransformedNeighborhoodPoints returns the list with all points transformed by the transform associated with the given domain.","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_1","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_2","text":"inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_3","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_4","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-findneighborhoodpoints_5","text":"inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const","title":"function FindNeighborhoodPoints"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-adddomain","text":"void AddDomain ( DomainType :: Pointer input ) Add a domain to the particle system. This method also allocates space for a list of positions that are contained within the domain, and a default neighborhood calculator. The final, optional argument indicates the calling thread id.","title":"function AddDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsbegin","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const Return an iterator that points to the first element of the list of the domains.","title":"function GetDomainsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainsend","text":"inline std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const Return an iterator that points one position past the last element of the list of the domains.","title":"function GetDomainsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain","text":"inline DomainType * GetDomain ( unsigned int i ) Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_1","text":"inline DomainType * GetDomain () API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_2","text":"inline const DomainType * GetDomain ( unsigned int i ) const Return the i'th domain object.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomain_3","text":"inline const DomainType * GetDomain () const API for the single domain case.","title":"function GetDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getnumberofdomains","text":"inline unsigned int GetNumberOfDomains () const Returns the number of domains contained in the particle system.","title":"function GetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform","text":"void SetTransform ( unsigned int i , const TransformType & ) Set the transform associated with domain i. This method will also compute and set the corresponding inverse transform if possible. If the inverse transform cannot be computed, the exception is quietly handled by this method and an identity transform is set in its place. The calling program is responsible for knowing when an inverse transform cannot be computed.","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-settransform_1","text":"inline void SetTransform ( const TransformType & p )","title":"function SetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform","text":"void SetPrefixTransform ( unsigned int i , const TransformType & )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setprefixtransform_1","text":"inline void SetPrefixTransform ( const TransformType & p )","title":"function SetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsBegin () const Return an iterator that points to the first element of the list of the transforms.","title":"function GetTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform","text":"inline const TransformType & GetTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_1","text":"inline const TransformType & GetTransform () const API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_2","text":"inline TransformType GetTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-gettransform_3","text":"inline TransformType GetTransform () API for the single transform case.","title":"function GetTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform","text":"inline const TransformType & GetPrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_1","text":"inline const TransformType & GetPrefixTransform () const API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_2","text":"inline TransformType GetPrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getprefixtransform_3","text":"inline TransformType GetPrefixTransform () API for the single transform case.","title":"function GetPrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsbegin","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const Return an iterator that points to the first element of the list of the inverse transforms.","title":"function GetInverseTransformsBegin"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransformsend","text":"inline std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const Return an iterator that points one position past the last element of the list of the transforms.","title":"function GetInverseTransformsEnd"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform","text":"inline const TransformType & GetInverseTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_1","text":"inline const TransformType & GetInverseTransform () const API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform","text":"inline const TransformType & GetInversePrefixTransform ( unsigned int i ) const Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_1","text":"inline const TransformType & GetInversePrefixTransform () const API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions","text":"inline const std :: vector < PointContainerType :: Pointer > & GetPositions () const Return the array of particle positions.","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getpositions_1","text":"inline const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const","title":"function GetPositions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-addpositionlist","text":"void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ) Adds a list of points to the specified domain. The arguments are the std::vector of points and the domain number.","title":"function AddPositionList"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformpoint","text":"PointType TransformPoint ( const PointType & , const TransformType & ) const Transforms a point using the given transform. NOTE: Scaling is not currently implemented. (This method may be converted to virtual and overridden if tranform type is generalized.)","title":"function TransformPoint"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformvector","text":"VectorType TransformVector ( const VectorType & , const TransformType & ) const Transforms a vector using the given transform. Only the rotational part of the transform is applied. NOTE: Scaling is not currently supported.","title":"function TransformVector"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-transformnormalderivative","text":"VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const Transforms the derivative of normals to new space.","title":"function TransformNormalDerivative"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-inverttransform","text":"inline TransformType InvertTransform ( const TransformType & T ) const Returns the inverse of a transformation matrix.","title":"function InvertTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-flagdomain","text":"inline void FlagDomain ( unsigned int i ) Flag/Unflag a domain. Flagging a domain has different meanings according to the application using this particle system.","title":"function FlagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-unflagdomain","text":"inline void UnflagDomain ( unsigned int i )","title":"function UnflagDomain"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflag","text":"inline bool GetDomainFlag ( unsigned int i ) const","title":"function GetDomainFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainflags","text":"inline const std :: vector < bool > & GetDomainFlags () const","title":"function GetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainflags","text":"inline void SetDomainFlags ()","title":"function SetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetdomainflags","text":"inline void ResetDomainFlags ()","title":"function ResetDomainFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfixedparticleflag","text":"inline void SetFixedParticleFlag ( unsigned int d , unsigned int i ) The following methods provide functionality for specifying particle indices that are fixed landmarks. SetPosition() calls to these particle indices will silently fail. For simplicity, only one list of indices is maintained for all dimensions. If particle index n is flagged, for example, then particle index n in all domains is fixed.","title":"function SetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflag","text":"inline void ResetFixedParticleFlag ( unsigned int d , unsigned int i )","title":"function ResetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfixedparticleflag","text":"inline bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const","title":"function GetFixedParticleFlag"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-resetfixedparticleflags","text":"inline void ResetFixedParticleFlags ()","title":"function ResetFixedParticleFlags"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( unsigned int num )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getdomainspershape","text":"inline unsigned int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setnumberofdomains","text":"void SetNumberOfDomains ( unsigned int ) Set the number of domains. This method modifies the size of the m_Domains, m_Positions, and m_Transform lists.","title":"function SetNumberOfDomains"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-computemaxdistnearestneighbors","text":"double ComputeMaxDistNearestNeighbors ( size_t dom )","title":"function ComputeMaxDistNearestNeighbors"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-setfieldattributes","text":"inline void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getfieldattributes","text":"inline const std :: vector < std :: string > & GetFieldAttributes () const","title":"function GetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem","text":"ParticleSystem ()","title":"function ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-particlesystem_1","text":"inline virtual ~ ParticleSystem ()","title":"function ~ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_2","text":"inline TransformType & GetInverseTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinversetransform_3","text":"inline TransformType & GetInverseTransform () API for the single transform case.","title":"function GetInverseTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_2","text":"inline TransformType & GetInversePrefixTransform ( unsigned int i ) Return the i'th transform object.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#function-getinverseprefixtransform_3","text":"inline TransformType & GetInversePrefixTransform () API for the single transform case.","title":"function GetInversePrefixTransform"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystem.html#variable-vdimension","text":"static constexpr int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html","text":"shapeworks::ParticleSystemCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#shapeworksparticlesystemcommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ParticleSystemCommand"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html","text":"shapeworks::ParticleSystemEvaluation Public Functions Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points) Friends Name struct SharedCommandData Public Functions Documentation function ParticleSystemEvaluation ParticleSystemEvaluation ( const std :: vector < std :: string > & paths ) function ParticleSystemEvaluation ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ) function Particles inline const Eigen :: MatrixXd & Particles () const function Paths inline const std :: vector < std :: string > & Paths () const function N inline int N () const Number of samples. function D inline int D () const Dimensions (e.g. x/y/z * number of particles) function ExactCompare bool ExactCompare ( const ParticleSystemEvaluation & other ) const function EvaluationCompare bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const function ReadParticleFile static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ) Friends friend SharedCommandData friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#shapeworksparticlesystemevaluation","text":"","title":"shapeworks::ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions","text":"Name ParticleSystemEvaluation (const std::vector< std::string > & paths) ParticleSystemEvaluation (const Eigen::MatrixXd & matrix) const Eigen::MatrixXd & Particles () const const std::vector< std::string > & Paths () const int N () const Number of samples. int D () const Dimensions (e.g. x/y/z * number of particles) bool ExactCompare (const ParticleSystemEvaluation & other) const bool EvaluationCompare (const ParticleSystemEvaluation & other) const bool ReadParticleFile (std::string filename, Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends","text":"Name struct SharedCommandData","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation","text":"ParticleSystemEvaluation ( const std :: vector < std :: string > & paths )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particlesystemevaluation_1","text":"ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix )","title":"function ParticleSystemEvaluation"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-particles","text":"inline const Eigen :: MatrixXd & Particles () const","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-paths","text":"inline const std :: vector < std :: string > & Paths () const","title":"function Paths"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-n","text":"inline int N () const Number of samples.","title":"function N"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-d","text":"inline int D () const Dimensions (e.g. x/y/z * number of particles)","title":"function D"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-exactcompare","text":"bool ExactCompare ( const ParticleSystemEvaluation & other ) const","title":"function ExactCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-evaluationcompare","text":"bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const","title":"function EvaluationCompare"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#function-readparticlefile","text":"static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points )","title":"function ReadParticleFile"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friends_1","text":"","title":"Friends"},{"location":"api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html#friend-sharedcommanddata","text":"friend struct SharedCommandData ( SharedCommandData ); Updated on 2023-10-25 at 15:40:27 +0000","title":"friend SharedCommandData"},{"location":"api/Classes/classshapeworks_1_1Particles.html","text":"shapeworks::Particles Representation of correspondence points for a shape including multiple domains. More... #include Public Functions Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points) Detailed Description class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points Public Functions Documentation function Particles Particles () = default function set_local_particles void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_world_particles void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles ) function set_local_particles void set_local_particles ( int domain , Eigen :: VectorXd particles ) function set_world_particles void set_world_particles ( int domain , Eigen :: VectorXd particles ) function get_local_particles std :: vector < Eigen :: VectorXd > get_local_particles () const function get_world_particles std :: vector < Eigen :: VectorXd > get_world_particles () const function get_local_particles Eigen :: VectorXd get_local_particles ( int domain ) function get_world_particles Eigen :: VectorXd get_world_particles ( int domain ) function get_raw_world_particles Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer. function get_combined_local_particles Eigen :: VectorXd get_combined_local_particles () const function get_combined_global_particles Eigen :: VectorXd get_combined_global_particles () const function set_combined_global_particles void set_combined_global_particles ( const Eigen :: VectorXd & particles ) function get_local_points std :: vector < itk :: Point < double > > get_local_points ( int domain ) function get_world_points std :: vector < itk :: Point < double > > get_world_points ( int domain ) function get_domain_for_combined_id int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together. function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function set_procrustes_transforms void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms ) function set_alignment_type void set_alignment_type ( int alignment ) function get_difference_vectors Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const function save_particles_file static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#shapeworksparticles","text":"Representation of correspondence points for a shape including multiple domains. More... #include ","title":"shapeworks::Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions","text":"Name Particles () =default void set_local_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_world_particles (int domain, const std::vector< itk::Point< double > > & particles) void set_local_particles (int domain, Eigen::VectorXd particles) void set_world_particles (int domain, Eigen::VectorXd particles) std::vector< Eigen::VectorXd > get_local_particles () const std::vector< Eigen::VectorXd > get_world_particles () const Eigen::VectorXd get_local_particles (int domain) Eigen::VectorXd get_world_particles (int domain) Eigen::VectorXd get_raw_world_particles (int domain) Get untransformed original world particles from optimizer. Eigen::VectorXd get_combined_local_particles () const Eigen::VectorXd get_combined_global_particles () const void set_combined_global_particles (const Eigen::VectorXd & particles) std::vector< itk::Point< double > > get_local_points (int domain) std::vector< itk::Point< double > > get_world_points (int domain) int get_domain_for_combined_id (int id) Return which domain a particle belongs to when they are concatenated together. void set_transform (vtkSmartPointer< vtkTransform > transform) void set_procrustes_transforms (const std::vector< vtkSmartPointer< vtkTransform > > & transforms) void set_alignment_type (int alignment) Eigen::VectorXd get_difference_vectors (const Particles & other) const void save_particles_file (std::string filename, const Eigen::VectorXd & points)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Particles.html#detailed-description","text":"class shapeworks :: Particles ; Representation of correspondence points for a shape including multiple domains. The StudioParticles class encapsulates the correspondence points for a shape, including multiple domains, local and global points","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Particles.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-particles","text":"Particles () = default","title":"function Particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles","text":"void set_local_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles","text":"void set_world_particles ( int domain , const std :: vector < itk :: Point < double > > & particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_local_particles_1","text":"void set_local_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_world_particles_1","text":"void set_world_particles ( int domain , Eigen :: VectorXd particles )","title":"function set_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles","text":"std :: vector < Eigen :: VectorXd > get_local_particles () const","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles","text":"std :: vector < Eigen :: VectorXd > get_world_particles () const","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_particles_1","text":"Eigen :: VectorXd get_local_particles ( int domain )","title":"function get_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_particles_1","text":"Eigen :: VectorXd get_world_particles ( int domain )","title":"function get_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_raw_world_particles","text":"Eigen :: VectorXd get_raw_world_particles ( int domain ) Get untransformed original world particles from optimizer.","title":"function get_raw_world_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_local_particles","text":"Eigen :: VectorXd get_combined_local_particles () const","title":"function get_combined_local_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_combined_global_particles","text":"Eigen :: VectorXd get_combined_global_particles () const","title":"function get_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_combined_global_particles","text":"void set_combined_global_particles ( const Eigen :: VectorXd & particles )","title":"function set_combined_global_particles"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_local_points","text":"std :: vector < itk :: Point < double > > get_local_points ( int domain )","title":"function get_local_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_world_points","text":"std :: vector < itk :: Point < double > > get_world_points ( int domain )","title":"function get_world_points"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_domain_for_combined_id","text":"int get_domain_for_combined_id ( int id ) Return which domain a particle belongs to when they are concatenated together.","title":"function get_domain_for_combined_id"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform > > & transforms )","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment )","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-get_difference_vectors","text":"Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const","title":"function get_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Particles.html#function-save_particles_file","text":"static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function save_particles_file"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html","text":"shapeworks::PhysicalRegion physical bounds of a 3d region of space #include Public Functions Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount Public Attributes Name Point min Point max Public Functions Documentation function PhysicalRegion PhysicalRegion ( const PhysicalRegion & ) = default function PhysicalRegion inline PhysicalRegion ( const Point & _min , const Point & _max ) function PhysicalRegion inline PhysicalRegion () function operator== inline bool operator == ( const PhysicalRegion & other ) const function valid inline bool valid () const verified min/max do not create an inverted or an empty region function origin inline Point origin () const function size inline Point size () const function shrink PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both function expand PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both function expand PhysicalRegion & expand ( const Point & pt ) expand this region to include this point function pad PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount Public Attributes Documentation variable min Point min ; variable max Point max ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#shapeworksphysicalregion","text":"physical bounds of a 3d region of space #include ","title":"shapeworks::PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions","text":"Name PhysicalRegion (const PhysicalRegion & ) =default PhysicalRegion (const Point & _min, const Point & _max) PhysicalRegion () bool operator== (const PhysicalRegion & other) const bool valid () const verified min/max do not create an inverted or an empty region Point origin () const Point size () const PhysicalRegion & shrink (const PhysicalRegion & other) shrink this region down to the smallest portions of both PhysicalRegion & expand (const PhysicalRegion & other) expand this region to include the largest portions of both PhysicalRegion & expand (const Point & pt) expand this region to include this point PhysicalRegion & pad (double padding) uniformly grows or shrinks the region by the specified amount","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes","text":"Name Point min Point max","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion","text":"PhysicalRegion ( const PhysicalRegion & ) = default","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_1","text":"inline PhysicalRegion ( const Point & _min , const Point & _max )","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-physicalregion_2","text":"inline PhysicalRegion ()","title":"function PhysicalRegion"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-operator","text":"inline bool operator == ( const PhysicalRegion & other ) const","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-valid","text":"inline bool valid () const verified min/max do not create an inverted or an empty region","title":"function valid"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-origin","text":"inline Point origin () const","title":"function origin"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-size","text":"inline Point size () const","title":"function size"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-shrink","text":"PhysicalRegion & shrink ( const PhysicalRegion & other ) shrink this region down to the smallest portions of both","title":"function shrink"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand","text":"PhysicalRegion & expand ( const PhysicalRegion & other ) expand this region to include the largest portions of both","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-expand_1","text":"PhysicalRegion & expand ( const Point & pt ) expand this region to include this point","title":"function expand"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#function-pad","text":"PhysicalRegion & pad ( double padding ) uniformly grows or shrinks the region by the specified amount","title":"function pad"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-min","text":"Point min ;","title":"variable min"},{"location":"api/Classes/classshapeworks_1_1PhysicalRegion.html#variable-max","text":"Point max ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable max"},{"location":"api/Classes/classshapeworks_1_1PickResult.html","text":"shapeworks::PickResult Public Attributes Name Shape::Point pos_ int domain_ int subject_ Public Attributes Documentation variable pos_ Shape :: Point pos_ ; variable domain_ int domain_ = -1 ; variable subject_ int subject_ = -1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#shapeworkspickresult","text":"","title":"shapeworks::PickResult"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes","text":"Name Shape::Point pos_ int domain_ int subject_","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-pos_","text":"Shape :: Point pos_ ;","title":"variable pos_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1PickResult.html#variable-subject_","text":"int subject_ = -1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable subject_"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html","text":"shapeworks::PlaneConstraint More... #include Inherits from shapeworks::Constraint Public Functions Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Additional inherited members Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term. Detailed Description class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information Public Functions Documentation function isViolated virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated function print virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print function getPlaneNormal inline Eigen :: Vector3d getPlaneNormal () Get plane normal. function setPlaneNormal inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal. function getPlanePoint inline Eigen :: Vector3d getPlanePoint () Get plane center point. function setPlanePoint inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point. function setPlanePoint inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point. function constraintGradient inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient function points inline std :: vector < Eigen :: Vector3d > & points () function getOffset double getOffset () function setOffset void setOffset ( double offset ) function constraintEval virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval function updatePlaneFromPoints void updatePlaneFromPoints () function getVTKPlane vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#shapeworksplaneconstraint","text":"More... #include Inherits from shapeworks::Constraint","title":"shapeworks::PlaneConstraint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions","text":"Name virtual bool isViolated (const Eigen::Vector3d & pt) const override Returns if pt in Eigen format is violated by the constraint. virtual void print () const override Prints the constraint neatly. Eigen::Vector3d getPlaneNormal () Get plane normal. void setPlaneNormal (const Eigen::Vector3d & inPlane) Set plane normal. Eigen::Vector3d getPlanePoint () Get plane center point. void setPlanePoint (const vnl_vector< double > & point) Set plane center point. void setPlanePoint (const Eigen::Vector3d & p) Set plane center point. virtual Eigen::Vector3d constraintGradient (const Eigen::Vector3d & pt) const override Returns the gradient of the constraint. std::vector< Eigen::Vector3d > & points () double getOffset () void setOffset (double offset) virtual double constraintEval (const Eigen::Vector3d & pt) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. void updatePlaneFromPoints () vtkSmartPointer< vtkPlane > getVTKPlane () Return this plane as a vtkPlane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Constraint Name void setMus (std::vector< double > inmu) Initializes mu. std::vector< double > getMus () Gets mu. void updateMu (const Eigen::Vector3d & pt, double C, size_t index) Updates the value of mu according to the augmented lagrangian update. Eigen::Vector3d lagragianGradient (const Eigen::Vector3d & pt, double C, size_t index) const Computes the lagrangian gradient based on lagrangian inequality equations. NOTE: Not actually lagrangian. We are using quadratic penalty and not lagrangian because it works better. Protected Functions inherited from shapeworks::Constraint Name int sgn (double val) Returns the sign of the double. Protected Attributes inherited from shapeworks::Constraint Name std::vector< double > mus_ Mu is the lagrangian momentum term.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#detailed-description","text":"class shapeworks :: PlaneConstraint ; Encapsulate functionality related to cutting-plane constraints. Inherits from Constraint . See [Constraint.h] for more information","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-isviolated","text":"virtual bool isViolated ( const Eigen :: Vector3d & pt ) const override Returns if pt in Eigen format is violated by the constraint. Reimplements : shapeworks::Constraint::isViolated","title":"function isViolated"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-print","text":"virtual void print () const override Prints the constraint neatly. Reimplements : shapeworks::Constraint::print","title":"function print"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanenormal","text":"inline Eigen :: Vector3d getPlaneNormal () Get plane normal.","title":"function getPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanenormal","text":"inline void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) Set plane normal.","title":"function setPlaneNormal"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getplanepoint","text":"inline Eigen :: Vector3d getPlanePoint () Get plane center point.","title":"function getPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint","text":"inline void setPlanePoint ( const vnl_vector < double > & point ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setplanepoint_1","text":"inline void setPlanePoint ( const Eigen :: Vector3d & p ) Set plane center point.","title":"function setPlanePoint"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constraintgradient","text":"inline virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override Returns the gradient of the constraint. Reimplements : shapeworks::Constraint::constraintGradient","title":"function constraintGradient"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-points","text":"inline std :: vector < Eigen :: Vector3d > & points ()","title":"function points"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getoffset","text":"double getOffset ()","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-setoffset","text":"void setOffset ( double offset )","title":"function setOffset"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-constrainteval","text":"virtual double constraintEval ( const Eigen :: Vector3d & pt ) const override Returns the evaluation on the constraint, i.e. the signed distance to the constraint boundary. Reimplements : shapeworks::Constraint::constraintEval","title":"function constraintEval"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-updateplanefrompoints","text":"void updatePlaneFromPoints ()","title":"function updatePlaneFromPoints"},{"location":"api/Classes/classshapeworks_1_1PlaneConstraint.html#function-getvtkplane","text":"vtkSmartPointer < vtkPlane > getVTKPlane () Return this plane as a vtkPlane. Updated on 2023-10-25 at 15:40:27 +0000","title":"function getVTKPlane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html","text":"shapeworks::PlaneWidget PlaneWidget . More... #include Public Functions Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane. Detailed Description class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes Public Functions Documentation function PlaneWidget PlaneWidget ( Viewer * viewer ) function ~PlaneWidget ~ PlaneWidget () function update void update () Update the widget from shape data. function store_positions void store_positions () Store positions back to shape data (this is called by callback) function update_glyph_properties void update_glyph_properties () Update the sizes and detail of control spheres. function clear_planes void clear_planes () Clear point handles and planes. function handle_right_click void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point. function delete_plane void delete_plane ( int domain , int plane_id ) Delete a particular plane. function flip_plane void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane. function apply_plane void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste) function set_plane_offset void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane. function finalize_plane_offset void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#shapeworksplanewidget","text":"PlaneWidget . More... #include ","title":"shapeworks::PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions","text":"Name PlaneWidget ( Viewer * viewer) ~PlaneWidget () void update () Update the widget from shape data. void store_positions () Store positions back to shape data (this is called by callback) void update_glyph_properties () Update the sizes and detail of control spheres. void clear_planes () Clear point handles and planes. void handle_right_click (int domain, int plane, int point) Handle a right click on a particular point. void delete_plane (int domain, int plane_id) Delete a particular plane. void flip_plane (int domain, int plane_id) Flip the normal for a given plane. void apply_plane (int domain, int plane_id) Apply a plane from one shape to all others (e.g. copy and paste) void set_plane_offset (int domain, int plane_id, int offset) Set an offset for a given plane. void finalize_plane_offset (int domain, int plane_id) Finalize the offset for a given plane.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#detailed-description","text":"class shapeworks :: PlaneWidget ; PlaneWidget . Widget to display and manipulate constraint planes","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget","text":"PlaneWidget ( Viewer * viewer )","title":"function PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-planewidget_1","text":"~ PlaneWidget ()","title":"function ~PlaneWidget"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update","text":"void update () Update the widget from shape data.","title":"function update"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-store_positions","text":"void store_positions () Store positions back to shape data (this is called by callback)","title":"function store_positions"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-update_glyph_properties","text":"void update_glyph_properties () Update the sizes and detail of control spheres.","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-clear_planes","text":"void clear_planes () Clear point handles and planes.","title":"function clear_planes"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-handle_right_click","text":"void handle_right_click ( int domain , int plane , int point ) Handle a right click on a particular point.","title":"function handle_right_click"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-delete_plane","text":"void delete_plane ( int domain , int plane_id ) Delete a particular plane.","title":"function delete_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-flip_plane","text":"void flip_plane ( int domain , int plane_id ) Flip the normal for a given plane.","title":"function flip_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-apply_plane","text":"void apply_plane ( int domain , int plane_id ) Apply a plane from one shape to all others (e.g. copy and paste)","title":"function apply_plane"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-set_plane_offset","text":"void set_plane_offset ( int domain , int plane_id , int offset ) Set an offset for a given plane.","title":"function set_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PlaneWidget.html#function-finalize_plane_offset","text":"void finalize_plane_offset ( int domain , int plane_id ) Finalize the offset for a given plane. Updated on 2023-10-25 at 15:40:27 +0000","title":"function finalize_plane_offset"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html","text":"shapeworks::PowerOfTwoPointTree More... #include Inherits from itk::DataObject Public Types Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Functions Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs typedef Superclass typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ; typedef NodeType typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node. typedef NodePointerType typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes. typedef PointType typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds. typedef PointListType typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType. typedef PointIteratorListType typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods). function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node. function itkGetMacro itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree. function ConstructTree void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively. function FindPointsInRegion PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound. function FindPointsInRegion unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const function GetNode NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point. function GetNode const NodePointerType GetNode ( const PointType & ) const function itkGetObjectMacro itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree. function itkSetObjectMacro itkSetObjectMacro ( Root , NodeType ) function AddPoint PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception. function AddPoint inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) function Overlap bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise. function RegionContains inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Functions Documentation function PowerOfTwoPointTree inline PowerOfTwoPointTree () function ~PowerOfTwoPointTree inline virtual ~ PowerOfTwoPointTree () function BranchNode void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree. function FindOneNodeInRegion void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively. Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#shapeworkspoweroftwopointtree","text":"More... #include Inherits from itk::DataObject","title":"shapeworks::PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types","text":"Name typedef PowerOfTwoPointTree Self typedef DataObject Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef PowerOfTwoPointTreeNode NodeType typedef NodeType::Pointer NodePointerType typedef PowerOfTwoPointTreeNode::PointType PointType typedef NodeType::PointListType PointListType typedef std::vector< typename PointListType::const_iterator > PointIteratorListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( PowerOfTwoPointTree , DataObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) itkGetMacro (Depth , unsigned int ) void ConstructTree (const PointType & , const PointType & , unsigned int ) PointIteratorListType FindPointsInRegion (const PointType & , const PointType & ) const unsigned int FindPointsInRegion (const PointType & , const PointType & , PointIteratorListType & ) const NodePointerType GetNode (const PointType & ) const NodePointerType GetNode (const PointType & ) const itkGetObjectMacro (Root , NodeType ) itkSetObjectMacro (Root , NodeType ) PointListType::iterator AddPoint (const PointType & , unsigned int , NodePointerType & ) PointListType::iterator AddPoint (const PointType & p, unsigned int i) bool Overlap (const NodePointerType & , const PointType & , const PointType & ) const bool RegionContains (const PointType & p, const PointType & lowerbound, const PointType & upperbound) const void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions","text":"Name PowerOfTwoPointTree () virtual ~PowerOfTwoPointTree () void BranchNode ( NodePointerType & , unsigned int ) void FindOneNodeInRegion (const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTree ; A tree data container, templated over node type, whose nodes are associated with bounding boxes in a rectangular domain, and that has 2^D branches at each node, where D is the dimensionality of the domain. In 2D this is a quad-tree, and in 3D this is an octree, etc. The tree is constructed by specifying a region and a tree depth, then calling ConstructTree() . This class was designed for use as a quad/octree binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-self","text":"typedef PowerOfTwoPointTree shapeworks :: PowerOfTwoPointTree :: Self ; Standard class typedefs","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-superclass","text":"typedef DataObject shapeworks :: PowerOfTwoPointTree :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTree :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: PowerOfTwoPointTree :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodetype","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTree :: NodeType ; Shorthand for the object pointed to by each node.","title":"typedef NodeType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-nodepointertype","text":"typedef NodeType :: Pointer shapeworks :: PowerOfTwoPointTree :: NodePointerType ; The real node type, which is a actually pointer to what we are calling NodeTypes.","title":"typedef NodePointerType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointtype","text":"typedef PowerOfTwoPointTreeNode :: PointType shapeworks :: PowerOfTwoPointTree :: PointType ; Point type used by nodes for upper and lower bounds.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointlisttype","text":"typedef NodeType :: PointListType shapeworks :: PowerOfTwoPointTree :: PointListType ; Types defined by the NodeType.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#typedef-pointiteratorlisttype","text":"typedef std :: vector < typename PointListType :: const_iterator > shapeworks :: PowerOfTwoPointTree :: PointIteratorListType ;","title":"typedef PointIteratorListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTree , DataObject ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkstaticconstmacro_1","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) Number of children per node.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetmacro","text":"itkGetMacro ( Depth , unsigned int ) Set/Get the depth of the tree. This is the number of levels in the tree.","title":"function itkGetMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-constructtree","text":"void ConstructTree ( const PointType & , const PointType & , unsigned int ) Construct the tree to the specified depth. The bounding box of the root node is specified with the lower bound and upper bound points respectively.","title":"function ConstructTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion","text":"PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const Return a list of PointListType iterators (effectively pointers to points, see PowerOfTwoPointTreeNode ) to points and their associated indicies that are stored in this tree and are contained within the specified bounding box region. The bounding box is specified with two points, in this order: a lower bound followed by an upper bound.","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findpointsinregion_1","text":"unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const","title":"function FindPointsInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode","text":"NodePointerType GetNode ( const PointType & ) Return the node associated with the domain region that contains the given point.","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-getnode_1","text":"const NodePointerType GetNode ( const PointType & ) const","title":"function GetNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itkgetobjectmacro","text":"itkGetObjectMacro ( Root , NodeType ) Set/Get the root node of the tree.","title":"function itkGetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-itksetobjectmacro","text":"itkSetObjectMacro ( Root , NodeType )","title":"function itkSetObjectMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint","text":"PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ) Associates a point and, optionally, an index with the appropriate leaf node. This method starts at the root of the tree and uses the Contains method to query branches at each node, following the first branch it finds whose bounding box contains this point. When it reaches a leaf node, the point is added to that node's list, along with the specified index (if any). This method returns an iterator pointing to the new list element (e.g., for quick deletion or reference of the point) and, optionally, will set a given smart pointer to point to the leaf node. If the specified point is not contained within the domain, then this method will throw an exception.","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-addpoint_1","text":"inline PointListType :: iterator AddPoint ( const PointType & p , unsigned int i )","title":"function AddPoint"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-overlap","text":"bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const Returns true if the specified node region overlaps the given region and false otherwise.","title":"function Overlap"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-regioncontains","text":"inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const","title":"function RegionContains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree","text":"inline PowerOfTwoPointTree ()","title":"function PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-poweroftwopointtree_1","text":"inline virtual ~ PowerOfTwoPointTree ()","title":"function ~PowerOfTwoPointTree"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-branchnode","text":"void BranchNode ( NodePointerType & , unsigned int ) Add the appropriate number of empty child nodes to a given node. The second parameter is the level in the tree.","title":"function BranchNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#function-findonenodeinregion","text":"void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const Find one of the nodes that overlaps the specified region and appends all of its points to the specified list. The method is used by FindPointsInRegion and is called recursively.","title":"function FindOneNodeInRegion"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html","text":"shapeworks::PowerOfTwoPointTreeNode More... #include Inherits from itk::LightObject Public Types Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType Public Functions Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList () Protected Functions Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o) Public Attributes Name constexpr static unsigned int VDimension Detailed Description class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes. Public Types Documentation typedef Self typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ; typedef PointType typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes. typedef PointListType typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices. Public Functions Documentation function itkTypeMacro itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc. function operator== inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type. function IsLeaf inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing. function InsertElement inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node. function Contains inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise. function SetLowerBound inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node. function GetLowerBound inline const PointType & GetLowerBound () const function SetUpperBound inline void SetUpperBound ( const PointType & p ) function GetUpperBound inline const PointType & GetUpperBound () const function GetBranches inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes. function GetBranches inline const Self :: Pointer * GetBranches () const function GetBranch inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch function GetBranch inline const Self :: Pointer & GetBranch ( unsigned int i ) const function SetBranch inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node. function PrintSelf void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method. function GetList inline const PointListType & GetList () const Get the list of elements which contain points and associated indices. function GetList inline PointListType & GetList () Protected Functions Documentation function PowerOfTwoPointTreeNode inline PowerOfTwoPointTreeNode () function ~PowerOfTwoPointTreeNode inline ~ PowerOfTwoPointTreeNode () function PowerOfTwoPointTreeNode PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ) function operator= const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#shapeworkspoweroftwopointtreenode","text":"More... #include Inherits from itk::LightObject","title":"shapeworks::PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types","text":"Name typedef PowerOfTwoPointTreeNode Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef itk::Point< double, VDimension > PointType typedef std::list< ParticlePointIndexPair > PointListType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions","text":"Name itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ) itkNewMacro ( Self ) itkStaticConstMacro (BranchesPerNode , int , ( powstruct < 2, VDimension >::c) ) bool operator== (const PowerOfTwoPointTreeNode & o) const bool IsLeaf () const PointListType::iterator InsertElement (const ParticlePointIndexPair & elem) bool Contains (const PointType & p) const void SetLowerBound (const PointType & p) const PointType & GetLowerBound () const void SetUpperBound (const PointType & p) const PointType & GetUpperBound () const Self::Pointer * GetBranches () const Self::Pointer * GetBranches () const Self::Pointer & GetBranch (unsigned int i) const Self::Pointer & GetBranch (unsigned int i) const void SetBranch (unsigned int b, typename Self::Pointer n) void PrintSelf (std::ostream & os, itk::Indent indent) const const PointListType & GetList () const PointListType & GetList ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions","text":"Name PowerOfTwoPointTreeNode () ~PowerOfTwoPointTreeNode () PowerOfTwoPointTreeNode (const PowerOfTwoPointTreeNode & o) const PowerOfTwoPointTreeNode & operator= (const PowerOfTwoPointTreeNode & o)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#detailed-description","text":"class shapeworks :: PowerOfTwoPointTreeNode ; A node object for use in the PowerOfTwoPointTree . This class contains a bounding box, a set of child (branch) node pointers, and a linked list that may be filled with Points and Indices (unsigned ints). The single template parameter is the dimensionality of the Points. This class was designed for use as a binning structure for ParticleNeighborhoodr.h classes.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-self","text":"typedef PowerOfTwoPointTreeNode shapeworks :: PowerOfTwoPointTreeNode :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: PowerOfTwoPointTreeNode :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: PowerOfTwoPointTreeNode :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: PowerOfTwoPointTreeNode :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointtype","text":"typedef itk :: Point < double , VDimension > shapeworks :: PowerOfTwoPointTreeNode :: PointType ; Point type stored in the leaf nodes.","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#typedef-pointlisttype","text":"typedef std :: list < ParticlePointIndexPair > shapeworks :: PowerOfTwoPointTreeNode :: PointListType ; List type for storing lists of points+indices.","title":"typedef PointListType"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itktypemacro","text":"itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c ) ) The number of branches at each node of the tree, which is 2^VDimension, e.g. 4 in 2D, 8 in 3D, etc.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator","text":"inline bool operator == ( const PowerOfTwoPointTreeNode & o ) const Equivalence operator, ignores value type.","title":"function operator=="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-isleaf","text":"inline bool IsLeaf () const Returns true if this is a leaf node (has no branches) and false otherwise. The assumption is that a non-leaf node cannot have any empty branches. Each level of the tree must contain BranchesPerNode divisions. This assumption speeds up certain types of processing.","title":"function IsLeaf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-insertelement","text":"inline PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) Insert a PointIndexPair into the list associated with this node.","title":"function InsertElement"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-contains","text":"inline bool Contains ( const PointType & p ) const Returns true if the bounding box in this node contains the given point and false otherwise.","title":"function Contains"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setlowerbound","text":"inline void SetLowerBound ( const PointType & p ) Set/Get the lower and upper bounds of the region described by this node.","title":"function SetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlowerbound","text":"inline const PointType & GetLowerBound () const","title":"function GetLowerBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setupperbound","text":"inline void SetUpperBound ( const PointType & p )","title":"function SetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getupperbound","text":"inline const PointType & GetUpperBound () const","title":"function GetUpperBound"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches","text":"inline Self :: Pointer * GetBranches () Return the data structure holding branch (child) nodes.","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranches_1","text":"inline const Self :: Pointer * GetBranches () const","title":"function GetBranches"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch","text":"inline Self :: Pointer & GetBranch ( unsigned int i ) Return a specific branch","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getbranch_1","text":"inline const Self :: Pointer & GetBranch ( unsigned int i ) const","title":"function GetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-setbranch","text":"inline void SetBranch ( unsigned int b , typename Self :: Pointer n ) Set the node for a specific branch of this node.","title":"function SetBranch"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-printself","text":"void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Standard ITK PrintSelf method.","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist","text":"inline const PointListType & GetList () const Get the list of elements which contain points and associated indices.","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-getlist_1","text":"inline PointListType & GetList ()","title":"function GetList"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode","text":"inline PowerOfTwoPointTreeNode ()","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_1","text":"inline ~ PowerOfTwoPointTreeNode ()","title":"function ~PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-poweroftwopointtreenode_2","text":"PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o )","title":"function PowerOfTwoPointTreeNode"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#function-operator_1","text":"const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html","text":"shapeworks::PreferencesWindow Qt UI dialog to control preferences. More... #include Inherits from QDialog Public Slots Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences () Public Signals Name void clear_cache () void update_view () void slider_update () Public Functions Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override Detailed Description class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object Public Slots Documentation slot on_mesh_cache_enabled_stateChanged void on_mesh_cache_enabled_stateChanged ( int state ) slot on_mesh_cache_memory_valueChanged void on_mesh_cache_memory_valueChanged ( int value ) slot on_color_scheme_currentIndexChanged void on_color_scheme_currentIndexChanged ( int index ) slot on_pca_range_valueChanged void on_pca_range_valueChanged ( double value ) slot on_pca_steps_valueChanged void on_pca_steps_valueChanged ( int value ) slot on_parallel_enabled_toggled void on_parallel_enabled_toggled ( bool b ) slot on_num_threads_valueChanged void on_num_threads_valueChanged ( int i ) slot accept void accept () override slot restore_defaults void restore_defaults () slot save_to_preferences void save_to_preferences () Public Signals Documentation signal clear_cache void clear_cache () signal update_view void update_view () signal slider_update void slider_update () Public Functions Documentation function PreferencesWindow PreferencesWindow ( QWidget * parent , Preferences & prefs ) function set_values_from_preferences void set_values_from_preferences () function closeEvent void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#shapeworkspreferenceswindow","text":"Qt UI dialog to control preferences. More... #include Inherits from QDialog","title":"shapeworks::PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots","text":"Name void on_mesh_cache_enabled_stateChanged (int state) void on_mesh_cache_memory_valueChanged (int value) void on_color_scheme_currentIndexChanged (int index) void on_pca_range_valueChanged (double value) void on_pca_steps_valueChanged (int value) void on_parallel_enabled_toggled (bool b) void on_num_threads_valueChanged (int i) void accept () override void restore_defaults () void save_to_preferences ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals","text":"Name void clear_cache () void update_view () void slider_update ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions","text":"Name PreferencesWindow (QWidget * parent, Preferences & prefs) void set_values_from_preferences () void closeEvent (QCloseEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#detailed-description","text":"class shapeworks :: PreferencesWindow ; Qt UI dialog to control preferences. The PreferenceWindow provides controls over preferences for the application. It is synchronized with the singleton Preference object","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_enabled_statechanged","text":"void on_mesh_cache_enabled_stateChanged ( int state )","title":"slot on_mesh_cache_enabled_stateChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_mesh_cache_memory_valuechanged","text":"void on_mesh_cache_memory_valueChanged ( int value )","title":"slot on_mesh_cache_memory_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_color_scheme_currentindexchanged","text":"void on_color_scheme_currentIndexChanged ( int index )","title":"slot on_color_scheme_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_range_valuechanged","text":"void on_pca_range_valueChanged ( double value )","title":"slot on_pca_range_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_pca_steps_valuechanged","text":"void on_pca_steps_valueChanged ( int value )","title":"slot on_pca_steps_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_parallel_enabled_toggled","text":"void on_parallel_enabled_toggled ( bool b )","title":"slot on_parallel_enabled_toggled"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-on_num_threads_valuechanged","text":"void on_num_threads_valueChanged ( int i )","title":"slot on_num_threads_valueChanged"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-accept","text":"void accept () override","title":"slot accept"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-restore_defaults","text":"void restore_defaults ()","title":"slot restore_defaults"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#slot-save_to_preferences","text":"void save_to_preferences ()","title":"slot save_to_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-clear_cache","text":"void clear_cache ()","title":"signal clear_cache"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-update_view","text":"void update_view ()","title":"signal update_view"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#signal-slider_update","text":"void slider_update ()","title":"signal slider_update"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-preferenceswindow","text":"PreferencesWindow ( QWidget * parent , Preferences & prefs )","title":"function PreferencesWindow"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-set_values_from_preferences","text":"void set_values_from_preferences ()","title":"function set_values_from_preferences"},{"location":"api/Classes/classshapeworks_1_1PreferencesWindow.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html","text":"shapeworks::ProcrustesRegistration Public Types Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType Public Functions Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation) Public Types Documentation using Pointer using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ; using ParticleSystemType using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ; using PointType using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ; Public Functions Documentation function SetParticleSystem inline void SetParticleSystem ( ParticleSystemType * p ) function GetParticleSystem inline ParticleSystemType * GetParticleSystem () const function GetParticleSystem inline ParticleSystemType * GetParticleSystem () function RunRegistration void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object. function RunRegistration void RunRegistration () Run registration on all domains. function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. function GetDomainsPerShape inline int GetDomainsPerShape () const function GetScaling inline bool GetScaling () const function SetScaling inline void SetScaling ( bool scaling ) function GetRotationTranslation inline bool GetRotationTranslation () const function SetRotationTranslation inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#shapeworksprocrustesregistration","text":"","title":"shapeworks::ProcrustesRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types","text":"Name using std::shared_ptr< ProcrustesRegistration > Pointer using ParticleSystem ParticleSystemType using ParticleSystemType::PointType PointType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions","text":"Name void SetParticleSystem ( ParticleSystemType * p) ParticleSystemType * GetParticleSystem () const ParticleSystemType * GetParticleSystem () void RunRegistration (int i) void RunRegistration () Run registration on all domains. void SetDomainsPerShape (int i) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain. int GetDomainsPerShape () const bool GetScaling () const void SetScaling (bool scaling) bool GetRotationTranslation () const void SetRotationTranslation (bool rotationTranslation)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointer","text":"using shapeworks :: ProcrustesRegistration :: Pointer = std :: shared_ptr < ProcrustesRegistration > ;","title":"using Pointer"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-particlesystemtype","text":"using shapeworks :: ProcrustesRegistration :: ParticleSystemType = ParticleSystem ;","title":"using ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#using-pointtype","text":"using shapeworks :: ProcrustesRegistration :: PointType = ParticleSystemType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setparticlesystem","text":"inline void SetParticleSystem ( ParticleSystemType * p )","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem","text":"inline ParticleSystemType * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getparticlesystem_1","text":"inline ParticleSystemType * GetParticleSystem ()","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration","text":"void RunRegistration ( int i ) Performs a procrustes registration and modifies the transforms of the particle system accordingly. Assumes m_ParticleSystem has been set to point to a valid object.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-runregistration_1","text":"void RunRegistration () Run registration on all domains.","title":"function RunRegistration"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of Domains in each shape. Procrustes will be performed separately for each domain.","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getscaling","text":"inline bool GetScaling () const","title":"function GetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setscaling","text":"inline void SetScaling ( bool scaling )","title":"function SetScaling"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-getrotationtranslation","text":"inline bool GetRotationTranslation () const","title":"function GetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1ProcrustesRegistration.html#function-setrotationtranslation","text":"inline void SetRotationTranslation ( bool rotationTranslation ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function SetRotationTranslation"},{"location":"api/Classes/classshapeworks_1_1Project.html","text":"shapeworks::Project Representation of a project. More... #include Public Types Name using std::map< std::string, std::string > StringMap Public Functions Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types. Detailed Description class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data. Public Types Documentation using StringMap using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ; Public Functions Documentation function Project Project () function ~Project ~ Project () function load bool load ( const std :: string & filename ) Load from project file. function save bool save ( const std :: string & filename ) Save to project file. function set_project_path void set_project_path ( const std :: string & path ) Set the project path. function get_filename std :: string get_filename () Return the filename. function set_filename void set_filename ( std :: string filename ) Set project filename. function get_headers std :: vector < std :: string > get_headers () Return the headers of the subject sheet. function get_string_column std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name. function get_number_of_subjects int get_number_of_subjects () Return the number of subjects in the project. function get_number_of_domains_per_subject int get_number_of_domains_per_subject () Return the number of domains. function get_domain_names std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) function set_domain_names void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names. function get_subjects std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference) function set_subjects void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects. function update_subjects void update_subjects () function get_originals_present bool get_originals_present () const Return if originals are present. function get_groomed_present bool get_groomed_present () const Return if groomed files are present. function get_particles_present bool get_particles_present () const Return if particle files are present. function get_images_present bool get_images_present () Return if images are present (e.g. CT/MRI) function get_fixed_subjects_present bool get_fixed_subjects_present () Return if there are fixed subjects present. function get_feature_names std :: vector < std :: string > get_feature_names () Get feature names. function get_image_names std :: vector < std :: string > get_image_names () Get image names. function get_group_names std :: vector < std :: string > get_group_names () Get group names. function get_group_values std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values. function get_parameters Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key. function get_parameter_map std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name. function set_parameter_map void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name. function set_parameters void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key. function clear_parameters void clear_parameters ( const std :: string & name ) Clear parameters based on key. function get_supported_version int get_supported_version () const Get the supported version (this version of the code) function get_version int get_version () const Get the version of the currently loaded project. function get_landmarks std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain. function get_all_landmark_definitions std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. function set_landmark_definitions void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions. function get_landmarks_present bool get_landmarks_present () Return if landmarks are present. function set_landmarks void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project. function new_landmark void new_landmark ( int domain_id ) Add a new landmark. function get_original_domain_types std :: vector < DomainType > get_original_domain_types () Return the original domain types. function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types. function set_original_domain_types void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types. function set_groomed_domain_types void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#shapeworksproject","text":"Representation of a project. More... #include ","title":"shapeworks::Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types","text":"Name using std::map< std::string, std::string > StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions","text":"Name Project () ~Project () bool load (const std::string & filename) Load from project file. bool save (const std::string & filename) Save to project file. void set_project_path (const std::string & path) Set the project path. std::string get_filename () Return the filename. void set_filename (std::string filename) Set project filename. std::vector< std::string > get_headers () Return the headers of the subject sheet. std::vector< std::string > get_string_column (const std::string & name) const Return a column by name. int get_number_of_subjects () Return the number of subjects in the project. int get_number_of_domains_per_subject () Return the number of domains. std::vector< std::string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc) void set_domain_names (std::vector< std::string > domain_names) Set the domain names. std::vector< std::shared_ptr< Subject > > & get_subjects () Return the Subjects (as a reference) void set_subjects (const std::vector< std::shared_ptr< Subject > > & subjects) Set the Subjects. void update_subjects () bool get_originals_present () const Return if originals are present. bool get_groomed_present () const Return if groomed files are present. bool get_particles_present () const Return if particle files are present. bool get_images_present () Return if images are present (e.g. CT/MRI) bool get_fixed_subjects_present () Return if there are fixed subjects present. std::vector< std::string > get_feature_names () Get feature names. std::vector< std::string > get_image_names () Get image names. std::vector< std::string > get_group_names () Get group names. std::vector< std::string > get_group_values (const std::string & group_name) const Get possible group values. Parameters get_parameters (const std::string & name, std::string domain_name =\"\") Retrieve parameters based on key. std::map< std::string, Parameters > get_parameter_map (const std::string & name) Retrieve full parameter map for a given name. void set_parameter_map (const std::string & name, std::map< std::string, Parameters > map) Set parameter map for a given name. void set_parameters (const std::string & name, Parameters params, std::string domain_name =\"\") Store parameters based on key. void clear_parameters (const std::string & name) Clear parameters based on key. int get_supported_version () const Get the supported version (this version of the code) int get_version () const Get the version of the currently loaded project. std::vector< LandmarkDefinition > get_landmarks (int domain_id) Return the set of landmarks definitions for a particular domain. std::vector< std::vector< LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions. void set_landmark_definitions (std::vector< std::vector< LandmarkDefinition > > defs) Set all landmark definitions. bool get_landmarks_present () Return if landmarks are present. void set_landmarks (int domain_id, std::vector< LandmarkDefinition > landmarks) Set landmarks for this project. void new_landmark (int domain_id) Add a new landmark. std::vector< DomainType > get_original_domain_types () Return the original domain types. std::vector< DomainType > get_groomed_domain_types () Return the groomed domain types. void set_original_domain_types (std::vector< DomainType > domain_types) Set the original domain types. void set_groomed_domain_types (std::vector< DomainType > domain_types) Get the groomed domain types.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Project.html#detailed-description","text":"class shapeworks :: Project ; Representation of a project. The Project class encapsulates the spreadsheet based file format for storing project data.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#using-stringmap","text":"using shapeworks :: Project :: StringMap = std :: map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Project.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project","text":"Project ()","title":"function Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-project_1","text":"~ Project ()","title":"function ~Project"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-load","text":"bool load ( const std :: string & filename ) Load from project file.","title":"function load"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-save","text":"bool save ( const std :: string & filename ) Save to project file.","title":"function save"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_project_path","text":"void set_project_path ( const std :: string & path ) Set the project path.","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_filename","text":"std :: string get_filename () Return the filename.","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_filename","text":"void set_filename ( std :: string filename ) Set project filename.","title":"function set_filename"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_headers","text":"std :: vector < std :: string > get_headers () Return the headers of the subject sheet.","title":"function get_headers"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_string_column","text":"std :: vector < std :: string > get_string_column ( const std :: string & name ) const Return a column by name.","title":"function get_string_column"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_subjects","text":"int get_number_of_subjects () Return the number of subjects in the project.","title":"function get_number_of_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_number_of_domains_per_subject","text":"int get_number_of_domains_per_subject () Return the number of domains.","title":"function get_number_of_domains_per_subject"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_domain_names","text":"std :: vector < std :: string > get_domain_names () Return the domain names (e.g. femur, pelvis, etc)","title":"function get_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_domain_names","text":"void set_domain_names ( std :: vector < std :: string > domain_names ) Set the domain names.","title":"function set_domain_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_subjects","text":"std :: vector < std :: shared_ptr < Subject > > & get_subjects () Return the Subjects (as a reference)","title":"function get_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_subjects","text":"void set_subjects ( const std :: vector < std :: shared_ptr < Subject > > & subjects ) Set the Subjects.","title":"function set_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-update_subjects","text":"void update_subjects ()","title":"function update_subjects"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_originals_present","text":"bool get_originals_present () const Return if originals are present.","title":"function get_originals_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_present","text":"bool get_groomed_present () const Return if groomed files are present.","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_particles_present","text":"bool get_particles_present () const Return if particle files are present.","title":"function get_particles_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_images_present","text":"bool get_images_present () Return if images are present (e.g. CT/MRI)","title":"function get_images_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_fixed_subjects_present","text":"bool get_fixed_subjects_present () Return if there are fixed subjects present.","title":"function get_fixed_subjects_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_feature_names","text":"std :: vector < std :: string > get_feature_names () Get feature names.","title":"function get_feature_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_image_names","text":"std :: vector < std :: string > get_image_names () Get image names.","title":"function get_image_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_names","text":"std :: vector < std :: string > get_group_names () Get group names.","title":"function get_group_names"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_group_values","text":"std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const Get possible group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameters","text":"Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ) Retrieve parameters based on key.","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_parameter_map","text":"std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ) Retrieve full parameter map for a given name.","title":"function get_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameter_map","text":"void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ) Set parameter map for a given name.","title":"function set_parameter_map"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_parameters","text":"void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ) Store parameters based on key.","title":"function set_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-clear_parameters","text":"void clear_parameters ( const std :: string & name ) Clear parameters based on key.","title":"function clear_parameters"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_supported_version","text":"int get_supported_version () const Get the supported version (this version of the code)","title":"function get_supported_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_version","text":"int get_version () const Get the version of the currently loaded project.","title":"function get_version"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks","text":"std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ) Return the set of landmarks definitions for a particular domain.","title":"function get_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_all_landmark_definitions","text":"std :: vector < std :: vector < LandmarkDefinition > > get_all_landmark_definitions () Return all landmark definitions.","title":"function get_all_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmark_definitions","text":"void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition > > defs ) Set all landmark definitions.","title":"function set_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_landmarks_present","text":"bool get_landmarks_present () Return if landmarks are present.","title":"function get_landmarks_present"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_landmarks","text":"void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ) Set landmarks for this project.","title":"function set_landmarks"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-new_landmark","text":"void new_landmark ( int domain_id ) Add a new landmark.","title":"function new_landmark"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_original_domain_types","text":"std :: vector < DomainType > get_original_domain_types () Return the original domain types.","title":"function get_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types () Return the groomed domain types.","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_original_domain_types","text":"void set_original_domain_types ( std :: vector < DomainType > domain_types ) Set the original domain types.","title":"function set_original_domain_types"},{"location":"api/Classes/classshapeworks_1_1Project.html#function-set_groomed_domain_types","text":"void set_groomed_domain_types ( std :: vector < DomainType > domain_types ) Get the groomed domain types. Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html","text":"shapeworks::ProjectCommandGroup Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#shapeworksprojectcommandgroup","text":"Inherits from shapeworks::Command","title":"shapeworks::ProjectCommandGroup"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectCommandGroup.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html","text":"shapeworks::ProjectReader Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader Public Types Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap Public Functions Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0 Protected Functions Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map) Protected Attributes Name Project & project_ Detailed Description class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers Public Types Documentation using StringMapList using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ; using StringMap using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ; using StringMultiMap using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ; Public Functions Documentation function ProjectReader ProjectReader ( Project & project ) Constructor. function ~ProjectReader virtual ~ ProjectReader () = default Destructor. function read_project virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project function get_parameters virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters function get_multi_parameters virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters Protected Functions Documentation function load_subjects void load_subjects ( StringMapList list ) Load subjects from string map list. function load_parameters void load_parameters () function load_parameter void load_parameter ( std :: string name , StringMap map ) function load_landmark_definitions void load_landmark_definitions ( StringMapList list ) function contains bool contains ( StringMap map , std :: string key ) function get_keys static StringList get_keys ( StringMap map ) Protected Attributes Documentation variable project_ Project & project_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#shapeworksprojectreader","text":"Base class for Project readers. More... #include Inherited by shapeworks::ExcelProjectReader , shapeworks::JsonProjectReader","title":"shapeworks::ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types","text":"Name using project::types::StringMapList StringMapList using project::types::StringMap StringMap using project::types::StringList StringList using project::types::StringMultiMap StringMultiMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions","text":"Name ProjectReader ( Project & project) Constructor. virtual ~ProjectReader () =default Destructor. virtual bool read_project (std::string filename) =0 Read a project from a file. virtual StringMap get_parameters (std::string name) =0 virtual StringMultiMap get_multi_parameters (std::string name) =0","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions","text":"Name void load_subjects (StringMapList list) Load subjects from string map list. void load_parameters () void load_parameter (std::string name, StringMap map) void load_landmark_definitions (StringMapList list) bool contains (StringMap map, std::string key) StringList get_keys (StringMap map)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes","text":"Name Project & project_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#detailed-description","text":"class shapeworks :: ProjectReader ; Base class for Project readers. This class serves as an abstract base class for project readers","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmaplist","text":"using shapeworks :: ProjectReader :: StringMapList = project :: types :: StringMapList ;","title":"using StringMapList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmap","text":"using shapeworks :: ProjectReader :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringlist","text":"using shapeworks :: ProjectReader :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#using-stringmultimap","text":"using shapeworks :: ProjectReader :: StringMultiMap = project :: types :: StringMultiMap ;","title":"using StringMultiMap"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader","text":"ProjectReader ( Project & project ) Constructor.","title":"function ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-projectreader_1","text":"virtual ~ ProjectReader () = default Destructor.","title":"function ~ProjectReader"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-read_project","text":"virtual bool read_project ( std :: string filename ) = 0 Read a project from a file. Reimplemented by : shapeworks::ExcelProjectReader::read_project , shapeworks::JsonProjectReader::read_project","title":"function read_project"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_parameters","text":"virtual StringMap get_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_parameters , shapeworks::JsonProjectReader::get_parameters","title":"function get_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_multi_parameters","text":"virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 Reimplemented by : shapeworks::ExcelProjectReader::get_multi_parameters , shapeworks::JsonProjectReader::get_multi_parameters","title":"function get_multi_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_subjects","text":"void load_subjects ( StringMapList list ) Load subjects from string map list.","title":"function load_subjects"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameters","text":"void load_parameters ()","title":"function load_parameters"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_parameter","text":"void load_parameter ( std :: string name , StringMap map )","title":"function load_parameter"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-load_landmark_definitions","text":"void load_landmark_definitions ( StringMapList list )","title":"function load_landmark_definitions"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-contains","text":"bool contains ( StringMap map , std :: string key )","title":"function contains"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#function-get_keys","text":"static StringList get_keys ( StringMap map )","title":"function get_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectReader.html#variable-project_","text":"Project & project_ ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable project_"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html","text":"shapeworks::ProjectUtils Public Types Name using project::types::StringList StringList using project::types::StringMap StringMap Public Functions Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject) Public Types Documentation using StringList using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ; using StringMap using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ; Public Functions Documentation function convert_transform static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform function convert_transform static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) function determine_domain_names static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys function determine_domain_types static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types function get_input_prefixes static StringList get_input_prefixes () return a list of the input prefixes function get_groomed_prefixes static StringList get_groomed_prefixes () return a list of the groomed prefixes function get_original_keys static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names function get_values static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names function get_transforms static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names function get_value_map static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) function get_extra_columns static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes function determine_domain_type static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename function starts_with static bool starts_with ( std :: string str , std :: string prefix ) function transform_to_string static std :: string transform_to_string ( std :: vector < double > transform ) function convert_domain_types static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ) function convert_groomed_domain_types static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ) function convert_subject_to_map static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#shapeworksprojectutils","text":"","title":"shapeworks::ProjectUtils"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types","text":"Name using project::types::StringList StringList using project::types::StringMap StringMap","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions","text":"Name vtkSmartPointer< vtkTransform > convert_transform (std::vector< double > list) convert a list of doubles from a spreadsheet to a vtkTransform std::vector< double > convert_transform (vtkSmartPointer< vtkTransform > transform) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet) StringList determine_domain_names (StringList keys) determine domain names from a subject's keys void determine_domain_types ( Project * project, StringMap key_map) determine and set domain types StringList get_input_prefixes () return a list of the input prefixes StringList get_groomed_prefixes () return a list of the groomed prefixes StringList get_original_keys (StringList domain_names, StringMap key_map) extract original keys from key_map given an ordered list of domain names StringList get_values (StringList prefixes, StringList domain_names, StringMap key_map) get the values for a list of prefixes from key_map, ordered by domain_names std::vector< std::vector< double > > get_transforms (std::string prefix, StringList domain_names, StringMap key_map) get the transforms for a prefix from key_map, ordered by domain_names StringMap get_value_map (std::vector< std::string > prefix, StringMap key_map) get a map for a list of prefixes from a key_map (e.g. group_, or feature_) StringMap get_extra_columns (StringMap key_map) get any extra columns that don't match prefixes DomainType determine_domain_type (std::string filename) determine the domain type, given a filename bool starts_with (std::string str, std::string prefix) std::string transform_to_string (std::vector< double > transform) std::vector< std::string > convert_domain_types (std::vector< DomainType > domain_types) std::vector< std::string > convert_groomed_domain_types (std::vector< DomainType > domain_types) StringMap convert_subject_to_map ( Project * project, Subject * subject)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringlist","text":"using shapeworks :: ProjectUtils :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#using-stringmap","text":"using shapeworks :: ProjectUtils :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform","text":"static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ) convert a list of doubles from a spreadsheet to a vtkTransform","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_transform_1","text":"static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ) convert a vtkTransform to a list of doubles (e.g. for project spreadsheet)","title":"function convert_transform"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_names","text":"static StringList determine_domain_names ( StringList keys ) determine domain names from a subject's keys","title":"function determine_domain_names"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_types","text":"static void determine_domain_types ( Project * project , StringMap key_map ) determine and set domain types","title":"function determine_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_input_prefixes","text":"static StringList get_input_prefixes () return a list of the input prefixes","title":"function get_input_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_groomed_prefixes","text":"static StringList get_groomed_prefixes () return a list of the groomed prefixes","title":"function get_groomed_prefixes"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_original_keys","text":"static StringList get_original_keys ( StringList domain_names , StringMap key_map ) extract original keys from key_map given an ordered list of domain names","title":"function get_original_keys"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_values","text":"static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ) get the values for a list of prefixes from key_map, ordered by domain_names","title":"function get_values"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_transforms","text":"static std :: vector < std :: vector < double > > get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ) get the transforms for a prefix from key_map, ordered by domain_names","title":"function get_transforms"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_value_map","text":"static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ) get a map for a list of prefixes from a key_map (e.g. group_, or feature_)","title":"function get_value_map"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-get_extra_columns","text":"static StringMap get_extra_columns ( StringMap key_map ) get any extra columns that don't match prefixes","title":"function get_extra_columns"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-determine_domain_type","text":"static DomainType determine_domain_type ( std :: string filename ) determine the domain type, given a filename","title":"function determine_domain_type"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-starts_with","text":"static bool starts_with ( std :: string str , std :: string prefix )","title":"function starts_with"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-transform_to_string","text":"static std :: string transform_to_string ( std :: vector < double > transform )","title":"function transform_to_string"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_domain_types","text":"static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_groomed_domain_types","text":"static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types )","title":"function convert_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1ProjectUtils.html#function-convert_subject_to_map","text":"static StringMap convert_subject_to_map ( Project * project , Subject * subject ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function convert_subject_to_map"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html","text":"shapeworks::PythonWorker Inherits from QObject Public Slots Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python () Public Signals Name void result_ready () void finished () Public Functions Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job () Public Attributes Name constexpr static const char * python_api_version Public Slots Documentation slot init bool init () slot start_job void start_job ( QSharedPointer < Job > job ) slot finalize_python void finalize_python () Public Signals Documentation signal result_ready void result_ready () signal finished void finished () Public Functions Documentation function PythonWorker PythonWorker () function ~PythonWorker ~ PythonWorker () function set_vtk_output_window void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ) function run_job void run_job ( QSharedPointer < Job > job ) function incoming_python_message void incoming_python_message ( std :: string message_string ) function incoming_python_progress void incoming_python_progress ( double value ) function end_python void end_python () function abort_job void abort_job () Public Attributes Documentation variable python_api_version static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#shapeworkspythonworker","text":"Inherits from QObject","title":"shapeworks::PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots","text":"Name bool init () void start_job (QSharedPointer< Job > job) void finalize_python ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals","text":"Name void result_ready () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions","text":"Name PythonWorker () ~PythonWorker () void set_vtk_output_window (vtkSmartPointer< StudioVtkOutputWindow > output_window) void run_job (QSharedPointer< Job > job) void incoming_python_message (std::string message_string) void incoming_python_progress (double value) void end_python () void abort_job ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes","text":"Name constexpr static const char * python_api_version","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-init","text":"bool init ()","title":"slot init"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-start_job","text":"void start_job ( QSharedPointer < Job > job )","title":"slot start_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#slot-finalize_python","text":"void finalize_python ()","title":"slot finalize_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker","text":"PythonWorker ()","title":"function PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-pythonworker_1","text":"~ PythonWorker ()","title":"function ~PythonWorker"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-set_vtk_output_window","text":"void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window )","title":"function set_vtk_output_window"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_message","text":"void incoming_python_message ( std :: string message_string )","title":"function incoming_python_message"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-incoming_python_progress","text":"void incoming_python_progress ( double value )","title":"function incoming_python_progress"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-end_python","text":"void end_python ()","title":"function end_python"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#function-abort_job","text":"void abort_job ()","title":"function abort_job"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1PythonWorker.html#variable-python_api_version","text":"static constexpr static const char * python_api_version = \"6.5\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable python_api_version"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html","text":"shapeworks::QMeshWarper Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper Public Signals Name void progress () Public Functions Name QMeshWarper (QObject * parent =nullptr) float get_progress () Protected Functions Name virtual void update_progress (float p) override For overriding to handle progress updates. Additional inherited members Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh. Public Signals Documentation signal progress void progress () Public Functions Documentation function QMeshWarper QMeshWarper ( QObject * parent = nullptr ) function get_progress float get_progress () Protected Functions Documentation function update_progress virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#shapeworksqmeshwarper","text":"Wraps MeshWarper as a QObject. #include Inherits from QObject, shapeworks::MeshWarper","title":"shapeworks::QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals","text":"Name void progress ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions","text":"Name QMeshWarper (QObject * parent =nullptr) float get_progress ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions","text":"Name virtual void update_progress (float p) override For overriding to handle progress updates.","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::MeshWarper Name void set_reference_mesh (vtkSmartPointer< vtkPolyData > reference_mesh, const Eigen::MatrixXd & reference_particles, const Eigen::MatrixXd & landmarks ={}) Set the reference mesh and particles. bool generate_warp () Generate warp, return true on success. bool get_warp_available () Return if the warp is available. bool is_contour () const vtkSmartPointer< vtkPolyData > build_mesh (const Eigen::MatrixXd & particles) Build a mesh for a given set of particles. Eigen::MatrixXd extract_landmarks (vtkSmartPointer< vtkPolyData > warped_mesh) Return the landmarks (matrix [Nx3]) from the warped builded mesh. bool is_contour () Return if set as a contour. std::map< int, int > get_landmarks_map () const Return the map of landmarks id (Key) to vertice index (Value) std::vector< int > get_good_particle_indices () const Return the indexes of good particles (those that really control the warping) const Eigen::MatrixXd & get_warp_matrix () const Return the warp matrix. bool has_bad_particles () const Return true if warping has removed any bad particle(s) vtkSmartPointer< vtkPolyData > get_reference_mesh () Return the reference mesh which has been cleaned and vertices added. const Eigen::MatrixXd & get_reference_particles () const Return the reference particles. vtkSmartPointer< vtkPolyData > prep_mesh (vtkSmartPointer< vtkPolyData > mesh) Prep incoming mesh.","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#signal-progress","text":"void progress ()","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-qmeshwarper","text":"QMeshWarper ( QObject * parent = nullptr )","title":"function QMeshWarper"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-get_progress","text":"float get_progress ()","title":"function get_progress"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QMeshWarper.html#function-update_progress","text":"virtual void update_progress ( float p ) override For overriding to handle progress updates. Reimplements : shapeworks::MeshWarper::update_progress Updated on 2023-10-25 at 15:40:27 +0000","title":"function update_progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html","text":"shapeworks::QOptimize Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize Public Signals Name void progress (int , QString ) Public Functions Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override Protected Functions Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override Additional inherited members Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message Public Signals Documentation signal progress void progress ( int , QString ) Public Functions Documentation function QOptimize QOptimize ( QObject * parent = nullptr ) function ~QOptimize virtual ~ QOptimize () function GetLocalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints function GetGlobalPoints virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints function GetParticles std :: vector < Particles > GetParticles () function GetProcrustesTransforms virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms function UpdateExportablePoints virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints Protected Functions Documentation function SetIterationCallback virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback function IterateCallback virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#shapeworksqoptimize","text":"Wraps Optimize as a QObject. #include Inherits from QObject, shapeworks::Optimize","title":"shapeworks::QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals","text":"Name void progress (int , QString )","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions","text":"Name QOptimize (QObject * parent =nullptr) virtual ~QOptimize () virtual std::vector< std::vector< itk::Point< double > > > GetLocalPoints () override Return the local points. virtual std::vector< std::vector< itk::Point< double > > > GetGlobalPoints () override Return the global points. std::vector< Particles > GetParticles () virtual std::vector< std::vector< std::vector< double > > > GetProcrustesTransforms () override virtual void UpdateExportablePoints () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions","text":"Name virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. virtual void IterateCallback (itk::Object * caller, const itk::EventObject & ) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#additional-inherited-members","text":"Public Types inherited from shapeworks::Optimize Name using itk::Image< float, 3 > ImageType using VectorFunction::VectorType VectorType using Eigen::MatrixXd MatrixType Public Functions inherited from shapeworks::Optimize Name Optimize () Constructor. virtual ~Optimize () Destructor. bool Run () Run the optimization. bool LoadParameterFile (std::string filename) Load a parameter file. bool SetUpOptimize (ProjectHandle project) Set up this Optimize object using a ShapeWorks project. void SetProject (std::shared_ptr< Project > project) Set the Project object. void SetIterationCallbackFunction (const std::function< void(void)> & f) Set an iteration callback function to be called after each iteration. void AbortOptimization () Abort optimization. bool GetAborted () Return if the optimization was aborted. void SetCutPlanes (std::vector< std::array< itk::Point< double >, 3 > > cut_planes) Set cutting planes. void SetVerbosity (int verbosity_level) Set the verbosity level (0-5) void SetDomainsPerShape (int domains_per_shape) Set the number of domains per shape. int GetDomainsPerShape () Return the number of domains per shape. void SetDomainType (shapeworks::DomainType type) shapeworks::DomainType GetDomainType () void SetNumberOfParticles (std::vector< int > number_of_particles) Set the numbers of particles (vector of numbers, one for each domain) std::vector< int > GetNumberOfParticles () Return the numbers of particles per domain. void SetTransformFile (std::string filename) Set the transform file. std::string GetTransformFile () Get the transform file. void SetPrefixTransformFile (std::string prefix_transform_file) Set the prefix transform file (TODO: details) std::string GetPrefixTransformFile () Get the prefix transform file. void SetOutputDir (std::string output_dir) Set the output directory. void SetOutputTransformFile (std::string output_transform_file) Set the output transform file. void SetOutputIndividualTransformFiles (bool value) Set whether individual transforms should be written. void SetUseMeshBasedAttributes (bool use_mesh_based_attributes) Set if mesh based attributes should be used. bool GetUseMeshBasedAttributes () Get if mesh based attributes are being used. void SetUseXYZ (std::vector< bool > use_xyz) Set if XYZ is used, one value per domain. void SetUseNormals (std::vector< bool > use_normals) Set if Normals are being used, one value per domain. void SetAttributesPerDomain (std::vector< int > attributes_per_domain) Set the attributes per domain. std::vector< int > GetAttributesPerDomain () Get attributes per domain. void SetDistributionDomainID (int distribution_domain_id) Set the distribution domain ID (TODO: details) int GetDistributionDomainID () Get the distribution domain ID. void SetOutputCuttingPlaneFile (std::string output_cutting_plane_file) Set the output cutting plane file. void SetUseCuttingPlanes (bool use_cutting_planes) Set if using cutting planes. void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, 3 > & va, const vnl_vector_fixed< double, 3 > & vb, const vnl_vector_fixed< double, 3 > & vc) Set a given cutting plane for a shape. void SetProcessingMode (int mode) Set processing mode (TODO: details) void SetAdaptivityMode (int adaptivity_mode) Set adaptivity mode (TODO: details) void SetMeshFFCMode (int mesh_ffc_mode) Set Mesh FFC Mode false/0 = mesh clipping mode, true/1 = mesh augmented lagrangian mode. void SetAdaptivityStrength (double adaptivity_strength) Set adaptivity strength (TODO: details) void SetTimePtsPerSubject (int time_pts_per_subject) Set the number of time points per subject (TODO: details) int GetTimePtsPerSubject () Get the number of time points per subject (TODO: details) void SetOptimizationIterations (int optimization_iterations) Set the number of optimization iterations. void SetOptimizationIterationsCompleted (int optimization_iterations_completed) Set the number of optimization iterations already completed (TODO: details) void SetIterationsPerSplit (int iterations_per_split) Set the number of iterations per split. void SetUseShapeStatisticsInInit (bool use_shape_statistics_in_init) Set if shape statistics should be used in initialization. void SetProcrustesInterval (int procrustes_interval) Set the interval for running procrustes (0 to disable) void SetProcrustesScaling (bool procrustes_scaling) Set if procrustes scaling should be used. void SetProcrustesRotationTranslation (bool procrustes_rotation_translation) Set if procrustes rotation/translation should be used. void SetRelativeWeighting (double relative_weighting) Set the relative weighting (TODO: details) void SetInitialRelativeWeighting (double initial_relative_weighting) Set the initial relative weigting (TODO: details) void SetStartingRegularization (double starting_regularization) Set the starting regularization (TODO: details) void SetEndingRegularization (double ending_regularization) Set the ending regularization (TODO: details) void SetRecomputeRegularizationInterval (int recompute_regularization_interval) Set the interval for recomputing regularization (TODO: details) void SetSaveInitSplits (bool save_init_splits) Set if initialization splits should be saved or not. void SetCheckpointingInterval (int checkpointing_interval) Set the checkpointing interval. void SetKeepCheckpoints (int keep_checkpoints) Set if checkpoints should be kept (0=disable, 1=enable) void SetUseRegression (bool use_regression) Set if regression should be used (TODO: details) void SetUseMixedEffects (bool use_mixed_effects) Set if mixed effects should be used (TODO: details) void SetUseDisentangledSpatiotemporalSSM (bool use_disentangled_ssm_4d) Set if optimization should be done using disentangled spatiotemporal SSM method. bool GetUseDisentangledSpatiotemporalSSM () Returns true if optimization is to be done using disentangled spatiotemporal SSM method. void SetNormalAngle (double normal_angle) For good/bad analysis, set the normal angle to use (TODO: details) void SetPerformGoodBad (bool perform_good_bad) Set if good/bad analysis should be done (TODO: details) void SetLogEnergy (bool log_energy) Set the log energy (TODO: details) void AddImage (ImageType::Pointer image, std::string name =\"\") Set the shape input images. void AddMesh (vtkSmartPointer< vtkPolyData > poly_data) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFilenames (const std::vector< std::string > & filenames) Set the shape filenames (TODO: details) void SetPointFiles (const std::vector< std::string > & point_files) Set starting point files (TODO: details) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) int GetNumShapes () Get number of shapes. void SetAttributeScales (const std::vector< double > & scales) Set attribute scales (TODO: details) void SetFieldAttributes (const std::vector< std::string > & field_attributes) Set the field attributes. void SetParticleFlags (std::vector< int > flags) Set Particle Flags (TODO: details) void SetFixedDomains (std::vector< int > flags) Set Domain Flags (TODO: details) void SetSharedBoundaryEnabled (bool enabled) Shared boundary settings. void SetSharedBoundaryWeight (double weight) const std::vector< int > & GetDomainFlags () void SetFileOutputEnabled (bool enabled) Set if file output is enabled. std::vector< bool > GetUseXYZ () Return if XYZ is used, per shape. std::vector< bool > GetUseNormals () Return if Normals are used, per shape. void SetNarrowBand (double v) Set the narrow band used to be +/- the given value as a multiple of the spacing. double GetNarrowBand () Return the narrow band to be used. void SetUseShapeStatisticsAfter (int num_particles) Set the number of particles when correspondence based multiscale takes over. int GetUseShapeStatisticsAfter () Return the number of particles when correspondence based multiscale takes over. void PrintParamInfo () Print parameter info to stdout. std::shared_ptr< Sampler > GetSampler () Return the Sampler . MatrixContainer GetParticleSystem () Return the particle system as a matrix. void SetPythonFile (std::string filename) Set the python file to run at startup. void SetGeodesicsEnabled (bool is_enabled) Set whether or not geodesics are enabled. void SetGeodesicsCacheSizeMultiplier (size_t n) OptimizationVisualizer & GetVisualizer () void SetShowVisualizer (bool show) bool GetShowVisualizer () bool GetMeshFFCMode () vnl_vector_fixed< double, 3 > TransformPoint (int domain, vnl_vector_fixed< double, 3 > input) transform a point if necessary void UpdateProgress () void set_particle_format (std::string format) Protected Functions inherited from shapeworks::Optimize Name void ComputeTotalIterations () void OptimizerStop () void ReadTransformFile () void ReadPrefixTransformFile (const std::string & s) void InitializeSampler () double GetMinNeighborhoodRadius () void AddSinglePoint () void Initialize () void AddAdaptivity () void RunOptimize () void ComputeEnergyAfterIteration () void SetCotanSigma () void WriteTransformFile (int iter =-1) const void WriteTransformFile (std::string iter_prefix) const void WriteTransformFiles (int iter =-1) const void WriteTransformFiles (std::string iter_prefix) const void WritePointFiles (int iter =-1) void WritePointFiles (std::string iter_prefix) void WritePointFilesWithFeatures (int iter =-1) void WritePointFilesWithFeatures (std::string iter_prefix) void WriteEnergyFiles () void WriteSplitFiles (std::string name) void WriteCuttingPlanePoints (int iter =-1) void WriteParameters (std::string output_dir =\"\") void ReportBadParticles () int SetParameters () void WriteModes () void PrintStartMessage (std::string str, unsigned int vlevel =0) const void PrintDoneMessage (unsigned int vlevel =0) const void UpdateProject () std::string GetCheckpointDir () Protected Attributes inherited from shapeworks::Optimize Name std::shared_ptr< Sampler > m_sampler ProcrustesRegistration::Pointer m_procrustes std::shared_ptr< ParticleGoodBadAssessment > m_good_bad unsigned int m_verbosity_level std::vector< std::vector< itk::Point< double > > > m_local_points std::vector< std::vector< itk::Point< double > > > m_global_points int m_checkpoint_counter int m_procrustes_counter bool m_use_cutting_planes bool m_optimizing bool m_use_regression bool m_use_mixed_effects bool m_use_disentangled_ssm unsigned int m_domains_per_shape shapeworks::DomainType m_domain_type std::vector< int > m_number_of_particles std::string m_transform_file std::string m_prefix_transform_file std::string m_output_dir std::string m_output_transform_file bool m_output_transform_files bool m_mesh_based_attributes std::vector< bool > m_use_xyz std::vector< bool > m_use_normals std::vector< int > m_attributes_per_domain int m_distribution_domain_id std::string m_output_cutting_plane_file int m_processing_mode int m_adaptivity_mode double m_adaptivity_strength bool m_mesh_ffc_mode unsigned int m_timepts_per_subject int m_optimization_iterations int m_optimization_iterations_completed int m_iterations_per_split bool m_use_shape_statistics_in_init unsigned int m_procrustes_interval bool m_procrustes_scaling bool m_procrustes_rotation_translation double m_relative_weighting double m_initial_relative_weighting double m_starting_regularization double m_ending_regularization int m_recompute_regularization_interval bool m_save_init_splits unsigned int m_checkpointing_interval int m_keep_checkpoints double m_cotan_sigma_factor std::vector< int > m_particle_flags std::vector< int > m_domain_flags double m_narrow_band bool m_narrow_band_set bool m_fixed_domains_present int m_use_shape_statistics_after std::string m_python_filename bool m_geodesics_enabled size_t m_geodesic_cache_size_multiplier double m_spacing std::vector< std::string > m_filenames int m_num_shapes std::vector< double > m_energy_a std::vector< double > m_energy_b std::vector< double > m_total_energy bool m_log_energy std::string m_str_energy std::vector< std::vector< int > > m_bad_ids double m_normal_angle bool m_perform_good_bad std::vector< int > m_cutting_planes_per_input std::vector< int > m_spheres_per_input bool m_file_output_enabled bool m_aborted std::vector< std::array< itk::Point< double >, 3 > > m_cut_planes int m_total_iterations int m_iteration_count int m_split_number int current_particle_iterations_ int total_particle_iterations_ std::function< void(void)> iteration_callback_ bool show_visualizer_ shapeworks::OptimizationVisualizer visualizer_ std::string particle_format_ std::shared_ptr< Project > project_ std::chrono::system_clock::time_point m_start_time std::chrono::system_clock::time_point m_last_update_time std::chrono::system_clock::time_point m_last_remaining_update_time std::string m_remaining_time_message","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#signal-progress","text":"void progress ( int , QString )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize","text":"QOptimize ( QObject * parent = nullptr )","title":"function QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-qoptimize_1","text":"virtual ~ QOptimize ()","title":"function ~QOptimize"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getlocalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetLocalPoints () override Return the local points. Reimplements : shapeworks::Optimize::GetLocalPoints","title":"function GetLocalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getglobalpoints","text":"virtual std :: vector < std :: vector < itk :: Point < double > > > GetGlobalPoints () override Return the global points. Reimplements : shapeworks::Optimize::GetGlobalPoints","title":"function GetGlobalPoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getparticles","text":"std :: vector < Particles > GetParticles ()","title":"function GetParticles"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-getprocrustestransforms","text":"virtual std :: vector < std :: vector < std :: vector < double > > > GetProcrustesTransforms () override Reimplements : shapeworks::Optimize::GetProcrustesTransforms","title":"function GetProcrustesTransforms"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-updateexportablepoints","text":"virtual void UpdateExportablePoints () override Reimplements : shapeworks::Optimize::UpdateExportablePoints","title":"function UpdateExportablePoints"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-setiterationcallback","text":"virtual void SetIterationCallback () override Set the iteration callback. Derived classes should override to set their own callback. Reimplements : shapeworks::Optimize::SetIterationCallback","title":"function SetIterationCallback"},{"location":"api/Classes/classshapeworks_1_1QOptimize.html#function-iteratecallback","text":"virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override Reimplements : shapeworks::Optimize::IterateCallback Updated on 2023-10-25 at 15:40:27 +0000","title":"function IterateCallback"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html","text":"shapeworks::ReconstructSurface More... Public Types Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType Public Functions Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees) Detailed Description template < class TransformType > class shapeworks :: ReconstructSurface ; Public Types Documentation using TransformTypePtr using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ; using PointSetType using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ; using PointIdType using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ; Public Functions Documentation function ReconstructSurface ReconstructSurface () = default function ReconstructSurface ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ) function computeAverageDistanceToNeighbors double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ) function checkMapping void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ) function generateWarpedMeshes void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh ) function getMesh Mesh getMesh ( PointArray localPoints ) function convertToImageCoordinates Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ) function computeMedianShape int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList ) function performKMeansClustering void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices ) function computeParticlesNormals Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ) function getDenseMean vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ) function computeDenseMean void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ) function computeSparseMean std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ) function writeMeanInfo void writeMeanInfo () function surface void surface ( const std :: vector < std :: string > localPointsFiles ) function samplesAlongPCAModes void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ) function meanSurface void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ) function setOutPrefix inline void setOutPrefix ( std :: string prefix ) function setOutPath inline void setOutPath ( std :: string path ) function setDoProcrustes inline void setDoProcrustes ( bool doProcrusts ) function setDoProcrustesScaling inline void setDoProcrustesScaling ( bool doProcrustsScaling ) function setPairwiseNormalsDiffForGoodBad inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) function setMeanBeforeWarp inline void setMeanBeforeWarp ( bool meanBeforeWarp ) function setEnableOutput inline void setEnableOutput ( bool enableOutput ) function setModeIndex inline void setModeIndex ( int modeIndex ) function setNumOfModes inline void setNumOfModes ( int numOfModes ) function setNumOfSamplesPerMode inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) function setNumOfParticles inline void setNumOfParticles ( int numOfParticles ) function setNumOfClusters inline void setNumOfClusters ( int numOfClusters ) function setMaxStdDev inline void setMaxStdDev ( float maxStdDev ) function setMaxVarianceCaptured inline void setMaxVarianceCaptured ( float maxVarianceCaptured ) function setMaxAngleDegrees inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#shapeworksreconstructsurface","text":"More...","title":"shapeworks::ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types","text":"Name using typename TransformType::Pointer TransformTypePtr using typename TransformType::PointSetType PointSetType using typename PointSetType::PointIdentifier PointIdType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions","text":"Name ReconstructSurface () =default ReconstructSurface (const std::string & denseFile, const std::string & sparseFile, const std::string & goodPointsFile) double computeAverageDistanceToNeighbors (Mesh::MeshPoints points, std::vector< int > particlesIndices) void checkMapping (TransformTypePtr transform, Mesh::MeshPoints sourcePoints, Mesh::MeshPoints targetPoints) void generateWarpedMeshes (TransformTypePtr transform, vtkSmartPointer< vtkPolyData > & outputMesh) Mesh getMesh (PointArray localPoints) Mesh::MeshPoints convertToImageCoordinates (Mesh::MeshPoints particles, const Vector & spacing, const Point3 & origin) int computeMedianShape (std::vector< Eigen::MatrixXd > & shapeList) void performKMeansClustering (std::vector< PointArray > worldPoints, int numberOfParticles, std::vector< int > & centroidIndices) Eigen::MatrixXd computeParticlesNormals (vtkSmartPointer< vtkPoints > particles, Image dt) vtkSmartPointer< vtkPolyData > getDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distance_transform) void computeDenseMean (std::vector< PointArray > localPoints, std::vector< PointArray > worldPoints, std::vector< std::string > distanceTransform) std::vector< PointArray > computeSparseMean (std::vector< PointArray > localPoints, Point3 commonCenter) void writeMeanInfo () void surface (const std::vector< std::string > localPointsFiles) void samplesAlongPCAModes (const std::vector< std::string > worldPointsFiles) void meanSurface (const std::vector< std::string > distanceTransformFiles, const std::vector< std::string > localPointsFiles, const std::vector< std::string > worldPointsFiles) void setOutPrefix (std::string prefix) void setOutPath (std::string path) void setDoProcrustes (bool doProcrusts) void setDoProcrustesScaling (bool doProcrustsScaling) void setPairwiseNormalsDiffForGoodBad (bool pairwiseNormalsDiffForGoodBad) void setMeanBeforeWarp (bool meanBeforeWarp) void setEnableOutput (bool enableOutput) void setModeIndex (int modeIndex) void setNumOfModes (int numOfModes) void setNumOfSamplesPerMode (int numOfSamplesPerMode) void setNumOfParticles (int numOfParticles) void setNumOfClusters (int numOfClusters) void setMaxStdDev (float maxStdDev) void setMaxVarianceCaptured (float maxVarianceCaptured) void setMaxAngleDegrees (float maxAngleDegrees)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#detailed-description","text":"template < class TransformType > class shapeworks :: ReconstructSurface ;","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-transformtypeptr","text":"using shapeworks :: ReconstructSurface < TransformType >:: TransformTypePtr = typename TransformType :: Pointer ;","title":"using TransformTypePtr"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointsettype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointSetType = typename TransformType :: PointSetType ;","title":"using PointSetType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#using-pointidtype","text":"using shapeworks :: ReconstructSurface < TransformType >:: PointIdType = typename PointSetType :: PointIdentifier ;","title":"using PointIdType"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface","text":"ReconstructSurface () = default","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-reconstructsurface_1","text":"ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile )","title":"function ReconstructSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeaveragedistancetoneighbors","text":"double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices )","title":"function computeAverageDistanceToNeighbors"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-checkmapping","text":"void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints )","title":"function checkMapping"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-generatewarpedmeshes","text":"void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData > & outputMesh )","title":"function generateWarpedMeshes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getmesh","text":"Mesh getMesh ( PointArray localPoints )","title":"function getMesh"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-converttoimagecoordinates","text":"Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin )","title":"function convertToImageCoordinates"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computemedianshape","text":"int computeMedianShape ( std :: vector < Eigen :: MatrixXd > & shapeList )","title":"function computeMedianShape"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-performkmeansclustering","text":"void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int > & centroidIndices )","title":"function performKMeansClustering"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computeparticlesnormals","text":"Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt )","title":"function computeParticlesNormals"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-getdensemean","text":"vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform )","title":"function getDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computedensemean","text":"void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform )","title":"function computeDenseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-computesparsemean","text":"std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter )","title":"function computeSparseMean"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-writemeaninfo","text":"void writeMeanInfo ()","title":"function writeMeanInfo"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-surface","text":"void surface ( const std :: vector < std :: string > localPointsFiles )","title":"function surface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-samplesalongpcamodes","text":"void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles )","title":"function samplesAlongPCAModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-meansurface","text":"void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles )","title":"function meanSurface"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutprefix","text":"inline void setOutPrefix ( std :: string prefix )","title":"function setOutPrefix"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setoutpath","text":"inline void setOutPath ( std :: string path )","title":"function setOutPath"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustes","text":"inline void setDoProcrustes ( bool doProcrusts )","title":"function setDoProcrustes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setdoprocrustesscaling","text":"inline void setDoProcrustesScaling ( bool doProcrustsScaling )","title":"function setDoProcrustesScaling"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setpairwisenormalsdiffforgoodbad","text":"inline void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad )","title":"function setPairwiseNormalsDiffForGoodBad"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmeanbeforewarp","text":"inline void setMeanBeforeWarp ( bool meanBeforeWarp )","title":"function setMeanBeforeWarp"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setenableoutput","text":"inline void setEnableOutput ( bool enableOutput )","title":"function setEnableOutput"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmodeindex","text":"inline void setModeIndex ( int modeIndex )","title":"function setModeIndex"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofmodes","text":"inline void setNumOfModes ( int numOfModes )","title":"function setNumOfModes"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofsamplespermode","text":"inline void setNumOfSamplesPerMode ( int numOfSamplesPerMode )","title":"function setNumOfSamplesPerMode"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofparticles","text":"inline void setNumOfParticles ( int numOfParticles )","title":"function setNumOfParticles"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setnumofclusters","text":"inline void setNumOfClusters ( int numOfClusters )","title":"function setNumOfClusters"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxstddev","text":"inline void setMaxStdDev ( float maxStdDev )","title":"function setMaxStdDev"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxvariancecaptured","text":"inline void setMaxVarianceCaptured ( float maxVarianceCaptured )","title":"function setMaxVarianceCaptured"},{"location":"api/Classes/classshapeworks_1_1ReconstructSurface.html#function-setmaxangledegrees","text":"inline void setMaxAngleDegrees ( float maxAngleDegrees ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function setMaxAngleDegrees"},{"location":"api/Classes/classshapeworks_1_1Sampler.html","text":"shapeworks::Sampler Public Classes Name struct CuttingPlaneType struct SphereType Public Types Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList Public Functions Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode) Public Attributes Name constexpr unsigned int Dimension Public Types Documentation using PixelType using shapeworks :: Sampler :: PixelType = float ; using ImageType using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ; using PointType using shapeworks :: Sampler :: PointType = ImageType :: PointType ; using MeanCurvatureCacheType using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ; using CuttingPlaneList using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ; Public Functions Documentation function Sampler Sampler () Constructor. function ~Sampler inline virtual ~ Sampler () Destructor. function GetParticleSystem inline ParticleSystem * GetParticleSystem () Returns the particle system. function GetParticleSystem inline const ParticleSystem * GetParticleSystem () const function GetGradientFunction inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used. function GetCurvatureGradientFunction inline CurvatureSamplingFunction * GetCurvatureGradientFunction () function GetOptimizer inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object. function GetOptimizer inline const OptimizerType * GetOptimizer () const function SetPointsFile inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set. function SetPointsFile inline void SetPointsFile ( const std :: string & s ) function SetInitialPoints inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects) function AddImage void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ) function ApplyConstraintsToZeroCrossing inline void ApplyConstraintsToZeroCrossing () function AddMesh void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ) function AddContour void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ) function SetFieldAttributes void SetFieldAttributes ( const std :: vector < std :: string > & s ) function SetDomainsPerShape inline void SetDomainsPerShape ( int n ) function SetCuttingPlane void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains. function AddFreeFormConstraint void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ) function TransformCuttingPlanes void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation function AddSphere void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain. function SetAdaptivityMode inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity function GetAdaptivityMode inline int GetAdaptivityMode () const function SetCorrespondenceOn inline void SetCorrespondenceOn () function SetCorrespondenceOff inline void SetCorrespondenceOff () function SetSamplingOn inline void SetSamplingOn () function SetSamplingOff inline void SetSamplingOff () function GetCorrespondenceOn inline bool GetCorrespondenceOn () const function GetSamplingOn inline bool GetSamplingOn () const function SetCorrespondenceMode void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains). function RegisterGeneralShapeMatrices inline void RegisterGeneralShapeMatrices () function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( unsigned int i , bool flag ) function SetNormals inline void SetNormals ( int i , bool flag ) function SetAttributesPerDomain void SetAttributesPerDomain ( const std :: vector < int > s ) function GetShapeMatrix inline LegacyShapeMatrix * GetShapeMatrix () function GetGeneralShapeMatrix inline ShapeMatrix * GetGeneralShapeMatrix () function GetGeneralShapeGradientMatrix inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix () function GetLinkingFunction inline DualVectorFunction * GetLinkingFunction () function GetEnsembleEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () function GetDisentangledEnsembleEntropyFunction inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () function GetEnsembleRegressionEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () function GetEnsembleMixedEffectsEntropyFunction inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () function GetMeshBasedGeneralEntropyGradientFunction inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () function GetLinkingFunction inline const DualVectorFunction * GetLinkingFunction () const function GetEnsembleEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const function GetDisentangledEnsembleEntropyFunction inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const function GetEnsembleRegressionEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const function GetEnsembleMixedEffectsEntropyFunction inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const function GetMeshBasedGeneralEntropyGradientFunction inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const function SetTimeptsPerIndividual inline void SetTimeptsPerIndividual ( int n ) function GetCorrespondenceMode inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const function SetTransformFile inline void SetTransformFile ( const std :: string & s ) function SetTransformFile inline void SetTransformFile ( const char * s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const std :: string & s ) function SetPrefixTransformFile inline void SetPrefixTransformFile ( const char * s ) function SetPairwisePotentialType inline void SetPairwisePotentialType ( int pairwise_potential_type ) function GetPairwisePotentialType inline int GetPairwisePotentialType () function SetVerbosity inline void SetVerbosity ( unsigned int val ) function GetVerbosity inline unsigned int GetVerbosity () function GetMeanCurvatureCache inline MeanCurvatureCacheType * GetMeanCurvatureCache () function SetSharedBoundaryEnabled inline void SetSharedBoundaryEnabled ( bool enabled ) function SetSharedBoundaryWeight inline void SetSharedBoundaryWeight ( double weight ) function ReadTransforms void ReadTransforms () function ReadPointsFiles void ReadPointsFiles () function AllocateDataCaches void AllocateDataCaches () function AllocateDomainsAndNeighborhoods void AllocateDomainsAndNeighborhoods () function InitializeOptimizationFunctions void InitializeOptimizationFunctions () function initialize_initial_positions void initialize_initial_positions () function Initialize inline void Initialize () function ReInitialize void ReInitialize () function Execute void Execute () function ComputeCuttingPlanes CuttingPlaneList ComputeCuttingPlanes () function ComputePlaneNormal Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ) function GetFFCs inline std :: vector < FreeFormConstraint > GetFFCs () function SetMeshFFCMode inline void SetMeshFFCMode ( bool mesh_ffc_mode ) Public Attributes Documentation variable Dimension static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#shapeworkssampler","text":"","title":"shapeworks::Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-classes","text":"Name struct CuttingPlaneType struct SphereType","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types","text":"Name using float PixelType using itk::Image< PixelType, Dimension > ImageType using ImageType::PointType PointType using MeanCurvatureContainer < PixelType, Dimension > MeanCurvatureCacheType using vnl_matrix_fixed< double, Dimension+1, Dimension+1 > TransformType using GradientDescentOptimizer OptimizerType using std::vector< std::vector< std::pair< Eigen::Vector3d, Eigen::Vector3d > > > CuttingPlaneList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions","text":"Name Sampler () Constructor. virtual ~Sampler () Destructor. ParticleSystem * GetParticleSystem () Returns the particle system. const ParticleSystem * GetParticleSystem () const SamplingFunction * GetGradientFunction () CurvatureSamplingFunction * GetCurvatureGradientFunction () OptimizerType * GetOptimizer () Return a pointer to the optimizer object. const OptimizerType * GetOptimizer () const void SetPointsFile (unsigned int i, const std::string & s) void SetPointsFile (const std::string & s) void SetInitialPoints (std::vector< std::vector< itk::Point< double > > > initial_points) Set initial particle positions (e.g. for fixed subjects) void AddImage (ImageType::Pointer image, double narrow_band, std::string name =\"\") void ApplyConstraintsToZeroCrossing () void AddMesh (std::shared_ptr< shapeworks::MeshWrapper > mesh) void AddContour (vtkSmartPointer< vtkPolyData > poly_data) void SetFieldAttributes (const std::vector< std::string > & s) void SetDomainsPerShape (int n) void SetCuttingPlane (unsigned int i, const vnl_vector_fixed< double, Dimension > & va, const vnl_vector_fixed< double, Dimension > & vb, const vnl_vector_fixed< double, Dimension > & vc) void AddFreeFormConstraint (int domain, const FreeFormConstraint & ffc) void TransformCuttingPlanes (unsigned int i) void AddSphere (unsigned int i, vnl_vector_fixed< double, Dimension > & c, double r) void SetAdaptivityMode (int mode) int GetAdaptivityMode () const void SetCorrespondenceOn () void SetCorrespondenceOff () void SetSamplingOn () void SetSamplingOff () bool GetCorrespondenceOn () const bool GetSamplingOn () const void SetCorrespondenceMode (shapeworks::CorrespondenceMode mode) void RegisterGeneralShapeMatrices () void SetAttributeScales (const std::vector< double > & s) void SetXYZ (unsigned int i, bool flag) void SetNormals (int i, bool flag) void SetAttributesPerDomain (const std::vector< int > s) LegacyShapeMatrix * GetShapeMatrix () ShapeMatrix * GetGeneralShapeMatrix () ShapeGradientMatrix * GetGeneralShapeGradientMatrix () DualVectorFunction * GetLinkingFunction () LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const DualVectorFunction * GetLinkingFunction () const const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const void SetTimeptsPerIndividual (int n) shapeworks::CorrespondenceMode GetCorrespondenceMode () const void SetTransformFile (const std::string & s) void SetTransformFile (const char * s) void SetPrefixTransformFile (const std::string & s) void SetPrefixTransformFile (const char * s) void SetPairwisePotentialType (int pairwise_potential_type) int GetPairwisePotentialType () void SetVerbosity (unsigned int val) unsigned int GetVerbosity () MeanCurvatureCacheType * GetMeanCurvatureCache () void SetSharedBoundaryEnabled (bool enabled) void SetSharedBoundaryWeight (double weight) void ReadTransforms () void ReadPointsFiles () void AllocateDataCaches () void AllocateDomainsAndNeighborhoods () void InitializeOptimizationFunctions () void initialize_initial_positions () void Initialize () void ReInitialize () void Execute () CuttingPlaneList ComputeCuttingPlanes () Eigen::Vector3d ComputePlaneNormal (const vnl_vector< double > & a, const vnl_vector< double > & b, const vnl_vector< double > & c) std::vector< FreeFormConstraint > GetFFCs () void SetMeshFFCMode (bool mesh_ffc_mode)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes","text":"Name constexpr unsigned int Dimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pixeltype","text":"using shapeworks :: Sampler :: PixelType = float ;","title":"using PixelType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-imagetype","text":"using shapeworks :: Sampler :: ImageType = itk :: Image < PixelType , Dimension > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-pointtype","text":"using shapeworks :: Sampler :: PointType = ImageType :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-meancurvaturecachetype","text":"using shapeworks :: Sampler :: MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ;","title":"using MeanCurvatureCacheType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-transformtype","text":"using shapeworks :: Sampler :: TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ;","title":"using TransformType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-optimizertype","text":"using shapeworks :: Sampler :: OptimizerType = GradientDescentOptimizer ;","title":"using OptimizerType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#using-cuttingplanelist","text":"using shapeworks :: Sampler :: CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d > >> ;","title":"using CuttingPlaneList"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler","text":"Sampler () Constructor.","title":"function Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-sampler_1","text":"inline virtual ~ Sampler () Destructor.","title":"function ~Sampler"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem","text":"inline ParticleSystem * GetParticleSystem () Returns the particle system.","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getparticlesystem_1","text":"inline const ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgradientfunction","text":"inline SamplingFunction * GetGradientFunction () Returns a pointer to the gradient function used.","title":"function GetGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcurvaturegradientfunction","text":"inline CurvatureSamplingFunction * GetCurvatureGradientFunction ()","title":"function GetCurvatureGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer","text":"inline OptimizerType * GetOptimizer () Return a pointer to the optimizer object.","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getoptimizer_1","text":"inline const OptimizerType * GetOptimizer () const","title":"function GetOptimizer"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile","text":"inline void SetPointsFile ( unsigned int i , const std :: string & s ) Optionally provide a filename for an initial point set.","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpointsfile_1","text":"inline void SetPointsFile ( const std :: string & s )","title":"function SetPointsFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setinitialpoints","text":"inline void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double > > > initial_points ) Set initial particle positions (e.g. for fixed subjects)","title":"function SetInitialPoints"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addimage","text":"void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" )","title":"function AddImage"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-applyconstraintstozerocrossing","text":"inline void ApplyConstraintsToZeroCrossing ()","title":"function ApplyConstraintsToZeroCrossing"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addmesh","text":"void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh )","title":"function AddMesh"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addcontour","text":"void AddContour ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function AddContour"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setfieldattributes","text":"void SetFieldAttributes ( const std :: vector < std :: string > & s )","title":"function SetFieldAttributes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int n )","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcuttingplane","text":"void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension > & va , const vnl_vector_fixed < double , Dimension > & vb , const vnl_vector_fixed < double , Dimension > & vc ) Optionally supply a cutting plane that will be set as a particle optimization constraint in the image domains.","title":"function SetCuttingPlane"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addfreeformconstraint","text":"void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc )","title":"function AddFreeFormConstraint"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-transformcuttingplanes","text":"void TransformCuttingPlanes ( unsigned int i ) Transform a cutting plane based on procrustes transformation","title":"function TransformCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-addsphere","text":"void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension > & c , double r ) Optionally add spheres that may be used as constraints to the domain.","title":"function AddSphere"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setadaptivitymode","text":"inline void SetAdaptivityMode ( int mode ) This method sets the optimization function for the sampling. mode 0 = isotropic adaptivity mode 1 = no adaptivity","title":"function SetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getadaptivitymode","text":"inline int GetAdaptivityMode () const","title":"function GetAdaptivityMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceon","text":"inline void SetCorrespondenceOn ()","title":"function SetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondenceoff","text":"inline void SetCorrespondenceOff ()","title":"function SetCorrespondenceOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingon","text":"inline void SetSamplingOn ()","title":"function SetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsamplingoff","text":"inline void SetSamplingOff ()","title":"function SetSamplingOff"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondenceon","text":"inline bool GetCorrespondenceOn () const","title":"function GetCorrespondenceOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getsamplingon","text":"inline bool GetSamplingOn () const","title":"function GetSamplingOn"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setcorrespondencemode","text":"void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ) This method sets the optimization function for correspondences between surfaces (domains).","title":"function SetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-registergeneralshapematrices","text":"inline void RegisterGeneralShapeMatrices ()","title":"function RegisterGeneralShapeMatrices"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setxyz","text":"inline void SetXYZ ( unsigned int i , bool flag )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setnormals","text":"inline void SetNormals ( int i , bool flag )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setattributesperdomain","text":"void SetAttributesPerDomain ( const std :: vector < int > s )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getshapematrix","text":"inline LegacyShapeMatrix * GetShapeMatrix ()","title":"function GetShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapematrix","text":"inline ShapeMatrix * GetGeneralShapeMatrix ()","title":"function GetGeneralShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getgeneralshapegradientmatrix","text":"inline ShapeGradientMatrix * GetGeneralShapeGradientMatrix ()","title":"function GetGeneralShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction","text":"inline DualVectorFunction * GetLinkingFunction ()","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleEntropyFunction ()","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction","text":"inline DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction ()","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction ()","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction","text":"inline LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction ()","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction","text":"inline CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction ()","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getlinkingfunction_1","text":"inline const DualVectorFunction * GetLinkingFunction () const","title":"function GetLinkingFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const","title":"function GetEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getdisentangledensembleentropyfunction_1","text":"inline const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const","title":"function GetDisentangledEnsembleEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensembleregressionentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const","title":"function GetEnsembleRegressionEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getensemblemixedeffectsentropyfunction_1","text":"inline const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const","title":"function GetEnsembleMixedEffectsEntropyFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeshbasedgeneralentropygradientfunction_1","text":"inline const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const","title":"function GetMeshBasedGeneralEntropyGradientFunction"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settimeptsperindividual","text":"inline void SetTimeptsPerIndividual ( int n )","title":"function SetTimeptsPerIndividual"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getcorrespondencemode","text":"inline shapeworks :: CorrespondenceMode GetCorrespondenceMode () const","title":"function GetCorrespondenceMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile","text":"inline void SetTransformFile ( const std :: string & s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-settransformfile_1","text":"inline void SetTransformFile ( const char * s )","title":"function SetTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile","text":"inline void SetPrefixTransformFile ( const std :: string & s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setprefixtransformfile_1","text":"inline void SetPrefixTransformFile ( const char * s )","title":"function SetPrefixTransformFile"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setpairwisepotentialtype","text":"inline void SetPairwisePotentialType ( int pairwise_potential_type )","title":"function SetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getpairwisepotentialtype","text":"inline int GetPairwisePotentialType ()","title":"function GetPairwisePotentialType"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setverbosity","text":"inline void SetVerbosity ( unsigned int val )","title":"function SetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getverbosity","text":"inline unsigned int GetVerbosity ()","title":"function GetVerbosity"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getmeancurvaturecache","text":"inline MeanCurvatureCacheType * GetMeanCurvatureCache ()","title":"function GetMeanCurvatureCache"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryenabled","text":"inline void SetSharedBoundaryEnabled ( bool enabled )","title":"function SetSharedBoundaryEnabled"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setsharedboundaryweight","text":"inline void SetSharedBoundaryWeight ( double weight )","title":"function SetSharedBoundaryWeight"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readtransforms","text":"void ReadTransforms ()","title":"function ReadTransforms"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-readpointsfiles","text":"void ReadPointsFiles ()","title":"function ReadPointsFiles"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedatacaches","text":"void AllocateDataCaches ()","title":"function AllocateDataCaches"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-allocatedomainsandneighborhoods","text":"void AllocateDomainsAndNeighborhoods ()","title":"function AllocateDomainsAndNeighborhoods"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initializeoptimizationfunctions","text":"void InitializeOptimizationFunctions ()","title":"function InitializeOptimizationFunctions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize_initial_positions","text":"void initialize_initial_positions ()","title":"function initialize_initial_positions"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-initialize","text":"inline void Initialize ()","title":"function Initialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-reinitialize","text":"void ReInitialize ()","title":"function ReInitialize"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-execute","text":"void Execute ()","title":"function Execute"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computecuttingplanes","text":"CuttingPlaneList ComputeCuttingPlanes ()","title":"function ComputeCuttingPlanes"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-computeplanenormal","text":"Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c )","title":"function ComputePlaneNormal"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-getffcs","text":"inline std :: vector < FreeFormConstraint > GetFFCs ()","title":"function GetFFCs"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#function-setmeshffcmode","text":"inline void SetMeshFFCMode ( bool mesh_ffc_mode )","title":"function SetMeshFFCMode"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Sampler.html#variable-dimension","text":"static constexpr unsigned int Dimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable Dimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html","text":"shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction Public Types Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType Public Functions Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone () Protected Functions Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & ) Public Attributes Name constexpr static int VDimension Protected Attributes Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache Additional inherited members Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i). Public Types Documentation typedef TGradientNumericType typedef float shapeworks :: SamplingFunction :: TGradientNumericType ; typedef Self typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ; typedef Superclass typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ; typedef GradientNumericType typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components. typedef SigmaCacheType typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values. typedef VectorType typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types. typedef PointType typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ; typedef GradientVectorType typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ; Public Functions Documentation function itkTypeMacro itkTypeMacro ( SamplingFunction , VectorFunction ) function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate function Energy inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class. function EstimateSigma virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point function AngleCoefficient TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees. function SetMinimumNeighborhoodRadius inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius. function GetMinimumNeighborhoodRadius inline double GetMinimumNeighborhoodRadius () const function SetMaximumNeighborhoodRadius inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. function GetMaximumNeighborhoodRadius inline double GetMaximumNeighborhoodRadius () const function SetFlatCutoff inline void SetFlatCutoff ( double s ) Numerical parameters function GetFlatCutoff inline double GetFlatCutoff () const function SetNeighborhoodToSigmaRatio inline void SetNeighborhoodToSigmaRatio ( double s ) function GetNeighborhoodToSigmaRatio inline double GetNeighborhoodToSigmaRatio () const function SetSpatialSigmaCache inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem). function GetSpatialSigmaCache inline SigmaCacheType * GetSpatialSigmaCache () function GetSpatialSigmaCache inline const SigmaCacheType * GetSpatialSigmaCache () const function ComputeAngularWeights void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0. function Clone inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone Protected Functions Documentation function SamplingFunction inline SamplingFunction () function ~SamplingFunction inline virtual ~ SamplingFunction () function operator= void operator = ( const SamplingFunction & ) function SamplingFunction SamplingFunction ( const SamplingFunction & ) Public Attributes Documentation variable VDimension static constexpr static int VDimension = 3 ; Protected Attributes Documentation variable m_MinimumNeighborhoodRadius double m_MinimumNeighborhoodRadius ; variable m_MaximumNeighborhoodRadius double m_MaximumNeighborhoodRadius ; variable m_FlatCutoff double m_FlatCutoff ; variable m_NeighborhoodToSigmaRatio double m_NeighborhoodToSigmaRatio ; variable m_SpatialSigmaCache SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#shapeworkssamplingfunction","text":"This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More... #include Inherits from shapeworks::VectorFunction , itk::LightObject Inherited by shapeworks::CurvatureSamplingFunction","title":"shapeworks::SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types","text":"Name typedef float TGradientNumericType typedef SamplingFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef VectorFunction Superclass typedef TGradientNumericType GradientNumericType typedef GenericContainerArray < double > SigmaCacheType typedef Superclass::VectorType VectorType typedef ParticleSystem::PointType PointType typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions","text":"Name itkTypeMacro ( SamplingFunction , VectorFunction ) itkNewMacro ( Self ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const virtual VectorType Evaluate (unsigned int idx, unsigned int d, const ParticleSystem * system, double & maxdt, double & energy) const virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const virtual void ResetBuffers () virtual double EstimateSigma (unsigned int idx, const typename ParticleSystem::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const TGradientNumericType AngleCoefficient (const GradientVectorType & , const GradientVectorType & ) const void SetMinimumNeighborhoodRadius (double s) double GetMinimumNeighborhoodRadius () const void SetMaximumNeighborhoodRadius (double s) double GetMaximumNeighborhoodRadius () const void SetFlatCutoff (double s) double GetFlatCutoff () const void SetNeighborhoodToSigmaRatio (double s) double GetNeighborhoodToSigmaRatio () const void SetSpatialSigmaCache ( SigmaCacheType * s) SigmaCacheType * GetSpatialSigmaCache () const SigmaCacheType * GetSpatialSigmaCache () const void ComputeAngularWeights (const PointType & , int , const typename ParticleSystem::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const virtual VectorFunction::Pointer Clone ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions","text":"Name SamplingFunction () virtual ~SamplingFunction () void operator= (const SamplingFunction & ) SamplingFunction (const SamplingFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes","text":"Name constexpr static int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes","text":"Name double m_MinimumNeighborhoodRadius double m_MaximumNeighborhoodRadius double m_FlatCutoff double m_NeighborhoodToSigmaRatio SigmaCacheType::Pointer m_SpatialSigmaCache","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::VectorFunction Name virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions inherited from shapeworks::VectorFunction Name VectorFunction () virtual ~VectorFunction () VectorFunction (const VectorFunction & ) Protected Attributes inherited from shapeworks::VectorFunction Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#detailed-description","text":"class shapeworks :: SamplingFunction ; This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Please note that CurvatureSamplingFunction is currently being used in all cases the curvature part is generally disabled though as the Rho value is always set to 0 The following description is an excerpt from J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333\ufffd345, 2007. We treat a surface as a subset of \\(\\Re^d\\) , where \\(d=2\\) or \\(d=3\\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as { surfaces} . We sample a surface \\({\\cal S} \\subset \\Re^d\\) using a discrete set of \\(N\\) points that are considered random variables \\(Z = (X_1, X_2, \\ldots, X_N)\\) drawn from a probability density function (PDF), \\(p(X)\\) . We denote a realization of this PDF with lower case, and thus we have \\(z = (x_1, x_2,\\ldots, x_N)\\) , where \\(z \\in {\\cal S}^N\\) . The probability of a realization \\(x\\) is \\(p(X = x)\\) , which we denote simply as \\(p(x)\\) . The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \\(H[X] = -\\int_S p(x) \\log p(x) dx = -E\\{\\log p(X)\\}\\) , where \\(E\\{ \\cdot \\}\\) is the expectation. When we have a sufficient number of points sampled from \\(p\\) , we can approximate the expectation by the sample mean, which gives \\(H[X] \\approx - (1/N)\\sum_{i} \\log p(x_i)\\) . We must also estimate \\(p(x_i)\\) . Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have p(x_i) \\approx \\frac{1}{N(N-1)} \\sum^N_{j=1, j \\neq i} G(x_i - x_j, \\sigma_i), where \\(G(x_i - x_j, \\sigma_i)\\) is a \\(d\\) -dimensional, isotropic Gaussian with standard deviation \\(\\sigma_i\\) . The cost function \\(C\\) , is therefore an approximation of (negative) entropy: -H[X] \\approx C(x_1, \\dots, x_N) = \\sum_{i} \\log \\frac{1}{N(N-1)} \\sum_{j \\neq i} G(x_i - x_j, \\sigma_i).","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-tgradientnumerictype","text":"typedef float shapeworks :: SamplingFunction :: TGradientNumericType ;","title":"typedef TGradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-self","text":"typedef SamplingFunction shapeworks :: SamplingFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: SamplingFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: SamplingFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-superclass","text":"typedef VectorFunction shapeworks :: SamplingFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientnumerictype","text":"typedef TGradientNumericType shapeworks :: SamplingFunction :: GradientNumericType ; Data type representing individual gradient components.","title":"typedef GradientNumericType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-sigmacachetype","text":"typedef GenericContainerArray < double > shapeworks :: SamplingFunction :: SigmaCacheType ; Cache type for the sigma values.","title":"typedef SigmaCacheType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-vectortype","text":"typedef Superclass :: VectorType shapeworks :: SamplingFunction :: VectorType ; Vector & Point types.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-pointtype","text":"typedef ParticleSystem :: PointType shapeworks :: SamplingFunction :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#typedef-gradientvectortype","text":"typedef vnl_vector_fixed < TGradientNumericType , VDimension > shapeworks :: SamplingFunction :: GradientVectorType ;","title":"typedef GradientVectorType"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itktypemacro","text":"itkTypeMacro ( SamplingFunction , VectorFunction )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-evaluate_1","text":"inline virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const Reimplements : shapeworks::VectorFunction::Evaluate Reimplemented by : shapeworks::CurvatureSamplingFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-energy","text":"inline virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const Reimplements : shapeworks::VectorFunction::Energy Reimplemented by : shapeworks::CurvatureSamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplements : shapeworks::VectorFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-estimatesigma","text":"virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double > & weights , const PointType & pos , double initial_sigma , double precision , int & err ) const Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point","title":"function EstimateSigma"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-anglecoefficient","text":"TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees.","title":"function AngleCoefficient"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setminimumneighborhoodradius","text":"inline void SetMinimumNeighborhoodRadius ( double s ) Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius.","title":"function SetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getminimumneighborhoodradius","text":"inline double GetMinimumNeighborhoodRadius () const","title":"function GetMinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setmaximumneighborhoodradius","text":"inline void SetMaximumNeighborhoodRadius ( double s ) Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space.","title":"function SetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getmaximumneighborhoodradius","text":"inline double GetMaximumNeighborhoodRadius () const","title":"function GetMaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setflatcutoff","text":"inline void SetFlatCutoff ( double s ) Numerical parameters","title":"function SetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getflatcutoff","text":"inline double GetFlatCutoff () const","title":"function GetFlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setneighborhoodtosigmaratio","text":"inline void SetNeighborhoodToSigmaRatio ( double s )","title":"function SetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getneighborhoodtosigmaratio","text":"inline double GetNeighborhoodToSigmaRatio () const","title":"function GetNeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-setspatialsigmacache","text":"inline void SetSpatialSigmaCache ( SigmaCacheType * s ) Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem).","title":"function SetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache","text":"inline SigmaCacheType * GetSpatialSigmaCache ()","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-getspatialsigmacache_1","text":"inline const SigmaCacheType * GetSpatialSigmaCache () const","title":"function GetSpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-computeangularweights","text":"void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double > & ) const Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0.","title":"function ComputeAngularWeights"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplements : shapeworks::VectorFunction::Clone Reimplemented by : shapeworks::CurvatureSamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction","text":"inline SamplingFunction ()","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_1","text":"inline virtual ~ SamplingFunction ()","title":"function ~SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-operator","text":"void operator = ( const SamplingFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#function-samplingfunction_2","text":"SamplingFunction ( const SamplingFunction & )","title":"function SamplingFunction"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-vdimension","text":"static constexpr static int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_minimumneighborhoodradius","text":"double m_MinimumNeighborhoodRadius ;","title":"variable m_MinimumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_maximumneighborhoodradius","text":"double m_MaximumNeighborhoodRadius ;","title":"variable m_MaximumNeighborhoodRadius"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_flatcutoff","text":"double m_FlatCutoff ;","title":"variable m_FlatCutoff"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_neighborhoodtosigmaratio","text":"double m_NeighborhoodToSigmaRatio ;","title":"variable m_NeighborhoodToSigmaRatio"},{"location":"api/Classes/classshapeworks_1_1SamplingFunction.html#variable-m_spatialsigmacache","text":"SigmaCacheType :: Pointer m_SpatialSigmaCache ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_SpatialSigmaCache"},{"location":"api/Classes/classshapeworks_1_1Session.html","text":"shapeworks::Session Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session > Public Slots Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete () Public Signals Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes () Public Functions Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i) Public Attributes Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C Detailed Description class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project. Public Slots Documentation slot set_feature_auto_scale void set_feature_auto_scale ( bool value ) slot set_landmark_drag_mode void set_landmark_drag_mode ( bool mode ) slot get_landmark_drag_mode bool get_landmark_drag_mode () slot handle_clear_cache void handle_clear_cache () slot handle_new_mesh void handle_new_mesh () slot handle_thread_complete void handle_thread_complete () Public Signals Documentation signal data_changed void data_changed () signal that the data has changed signal points_changed void points_changed () signal landmarks_changed void landmarks_changed () signal planes_changed void planes_changed () signal ffc_changed void ffc_changed () signal update_display void update_display () signal new_mesh void new_mesh () signal feature_range_changed void feature_range_changed () signal update_view_mode void update_view_mode () signal image_slice_settings_changed void image_slice_settings_changed () signal ffc_paint_mode_changed void ffc_paint_mode_changed () signal repaint void repaint () signal reinsert_shapes void reinsert_shapes () Public Functions Documentation function Session Session ( QWidget * parent , Preferences & prefs ) constructor function ~Session ~ Session () destructor function set_parent void set_parent ( QWidget * parent ) set QWidget parent function save_project bool save_project ( QString filename ) save project to file function load_project bool load_project ( QString filename ) load project from file function load_light_project bool load_light_project ( QString filename ) read a lightweight project file function load_xl_project bool load_xl_project ( QString filename ) load a shapeworks project function set_project_path void set_project_path ( QString relative_path ) function get_project std :: shared_ptr < shapeworks :: Project > get_project () function load_original_files void load_original_files ( std :: vector < std :: string > filenames ) import files function load_groomed_files void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files function load_point_files bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ) function update_particles bool update_particles ( std :: vector < Particles > particles ) function get_num_particles int get_num_particles () Return the total number of particles for all domains, combined. function get_local_particle_system ParticleSystemEvaluation get_local_particle_system ( int domain ) function update_procrustes_transforms void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms ) function is_light_project bool is_light_project () function get_groomed_present bool get_groomed_present () function remove_shapes void remove_shapes ( QList < int > list ) remove shapes function get_shapes ShapeList get_shapes () return all shapes function calculate_reconstructed_samples void calculate_reconstructed_samples () function get_filename QString get_filename () get the filename function get_display_name QString get_display_name () get file display name function original_present bool original_present () function groomed_present bool groomed_present () function particles_present bool particles_present () function groups_available bool groups_available () function get_num_shapes int get_num_shapes () function get_domains_per_shape int get_domains_per_shape () function get_default_feature_map std :: string get_default_feature_map () function get_mesh_manager inline std :: shared_ptr < MeshManager > get_mesh_manager () function parameters shapeworks :: Parameters & parameters () function get_groomed_domain_types std :: vector < DomainType > get_groomed_domain_types () function update_auto_glyph_size double update_auto_glyph_size () function get_auto_glyph_size double get_auto_glyph_size () function clear_particles void clear_particles () clear particles from session (e.g. groom start, optimize start) function get_feature_auto_scale bool get_feature_auto_scale () function get_feature_range_max double get_feature_range_max () function get_feature_range_min double get_feature_range_min () function set_feature_range void set_feature_range ( double min , double max ) function set_feature_range_min void set_feature_range_min ( double value ) function set_feature_range_max void set_feature_range_max ( double value ) function handle_ctrl_click void handle_ctrl_click ( PickResult result ) function trigger_landmarks_changed void trigger_landmarks_changed () function trigger_planes_changed void trigger_planes_changed () function trigger_ffc_changed void trigger_ffc_changed () function set_active_landmark_domain void set_active_landmark_domain ( int id ) function get_active_landmark_domain int get_active_landmark_domain () function set_placing_landmark void set_placing_landmark ( int id ) function get_placing_landmark int get_placing_landmark () function set_landmarks_active void set_landmarks_active ( bool active ) function get_landmarks_active bool get_landmarks_active () function set_planes_active void set_planes_active ( bool active ) function get_planes_active bool get_planes_active () function set_show_landmark_labels void set_show_landmark_labels ( bool show ) function get_show_landmark_labels bool get_show_landmark_labels () function set_show_planes void set_show_planes ( bool show ) function get_show_planes bool get_show_planes () function should_show_planes bool should_show_planes () function set_show_landmarks void set_show_landmarks ( bool show ) function get_show_landmarks bool get_show_landmarks () function set_image_name bool set_image_name ( std :: string image_name ) function get_image_name std :: string get_image_name () function set_image_axis void set_image_axis ( QString axis ) function get_image_axis Axis get_image_axis () function set_image_3d_mode void set_image_3d_mode ( bool mode ) function get_image_3d_mode bool get_image_3d_mode () function set_image_share_window_and_level void set_image_share_window_and_level ( bool enabled ) function get_image_share_window_and_level bool get_image_share_window_and_level () function set_image_sync_slice void set_image_sync_slice ( bool enabled ) function get_image_sync_slice bool get_image_sync_slice () function has_constraints bool has_constraints () function set_loading void set_loading ( bool loading ) function is_loading bool is_loading () function set_tool_state void set_tool_state ( std :: string state ) function get_tool_state std :: string get_tool_state () function is_analysis_mode bool is_analysis_mode () function set_ffc_paint_active void set_ffc_paint_active ( bool enabled ) function get_ffc_paint_active bool get_ffc_paint_active () function set_ffc_paint_mode_inclusive void set_ffc_paint_mode_inclusive ( bool inclusive ) function get_ffc_paint_mode_inclusive bool get_ffc_paint_mode_inclusive () function set_ffc_paint_size void set_ffc_paint_size ( double size ) function get_ffc_paint_size double get_ffc_paint_size () function get_show_good_bad_particles bool get_show_good_bad_particles () function set_show_good_bad_particles void set_show_good_bad_particles ( bool enabled ) function get_show_difference_vectors bool get_show_difference_vectors () function set_show_difference_vectors void set_show_difference_vectors ( bool enabled ) function should_difference_vectors_show bool should_difference_vectors_show () function get_good_bad_particles std :: vector < bool > get_good_bad_particles () function set_good_bad_particles void set_good_bad_particles ( const std :: vector < bool > & good_bad ) function set_difference_particles inline void set_difference_particles ( Particles particles ) function get_difference_particles inline Particles get_difference_particles () function set_compare_settings void set_compare_settings ( CompareSettings settings ) function get_compare_settings CompareSettings get_compare_settings () function trigger_repaint void trigger_repaint () function trigger_reinsert_shapes void trigger_reinsert_shapes () function set_display_mode void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed) function get_display_mode DisplayMode get_display_mode () return the current display mode function set_glyph_lut inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function get_glyph_lut inline vtkSmartPointer < vtkLookupTable > get_glyph_lut () function is_supported_file_format static bool is_supported_file_format ( std :: string filename ) function get_point static Point3 get_point ( const Eigen :: VectorXd & points , int i ) Public Attributes Documentation variable DATA_C static const std :: string DATA_C ; variable GROOM_C static const std :: string GROOM_C ; variable OPTIMIZE_C static const std :: string OPTIMIZE_C ; variable ANALYSIS_C static const std :: string ANALYSIS_C ; variable DEEPSSM_C static const std :: string DEEPSSM_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#shapeworkssession","text":"Representation of a session. More... #include Inherits from QObject, QEnableSharedFromThis< Session >","title":"shapeworks::Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots","text":"Name void set_feature_auto_scale (bool value) void set_landmark_drag_mode (bool mode) bool get_landmark_drag_mode () void handle_clear_cache () void handle_new_mesh () void handle_thread_complete ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals","text":"Name void data_changed () signal that the data has changed void points_changed () void landmarks_changed () void planes_changed () void ffc_changed () void update_display () void new_mesh () void feature_range_changed () void update_view_mode () void image_slice_settings_changed () void ffc_paint_mode_changed () void repaint () void reinsert_shapes ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions","text":"Name Session (QWidget * parent, Preferences & prefs) constructor ~Session () destructor void set_parent (QWidget * parent) set QWidget parent bool save_project (QString filename) save project to file bool load_project (QString filename) load project from file bool load_light_project (QString filename) read a lightweight project file bool load_xl_project (QString filename) load a shapeworks project void set_project_path (QString relative_path) std::shared_ptr< shapeworks::Project > get_project () void load_original_files (std::vector< std::string > filenames) import files void load_groomed_files (std::vector< std::string > file_names, double iso, int domains_per_shape) load groomed files bool load_point_files (std::vector< std::string > local, std::vector< std::string > world, int domains_per_shape) bool update_particles (std::vector< Particles > particles) int get_num_particles () Return the total number of particles for all domains, combined. ParticleSystemEvaluation get_local_particle_system (int domain) void update_procrustes_transforms (std::vector< std::vector< std::vector< double > > > transforms) bool is_light_project () bool get_groomed_present () void remove_shapes (QList< int > list) remove shapes ShapeList get_shapes () return all shapes void calculate_reconstructed_samples () QString get_filename () get the filename QString get_display_name () get file display name bool original_present () bool groomed_present () bool particles_present () bool groups_available () int get_num_shapes () int get_domains_per_shape () std::string get_default_feature_map () std::shared_ptr< MeshManager > get_mesh_manager () shapeworks::Parameters & parameters () std::vector< DomainType > get_groomed_domain_types () double update_auto_glyph_size () double get_auto_glyph_size () void clear_particles () clear particles from session (e.g. groom start, optimize start) bool get_feature_auto_scale () double get_feature_range_max () double get_feature_range_min () void set_feature_range (double min, double max) void set_feature_range_min (double value) void set_feature_range_max (double value) void handle_ctrl_click ( PickResult result) void trigger_landmarks_changed () void trigger_planes_changed () void trigger_ffc_changed () void set_active_landmark_domain (int id) int get_active_landmark_domain () void set_placing_landmark (int id) int get_placing_landmark () void set_landmarks_active (bool active) bool get_landmarks_active () void set_planes_active (bool active) bool get_planes_active () void set_show_landmark_labels (bool show) bool get_show_landmark_labels () void set_show_planes (bool show) bool get_show_planes () bool should_show_planes () void set_show_landmarks (bool show) bool get_show_landmarks () bool set_image_name (std::string image_name) std::string get_image_name () void set_image_axis (QString axis) Axis get_image_axis () void set_image_3d_mode (bool mode) bool get_image_3d_mode () void set_image_share_window_and_level (bool enabled) bool get_image_share_window_and_level () void set_image_sync_slice (bool enabled) bool get_image_sync_slice () bool has_constraints () void set_loading (bool loading) bool is_loading () void set_tool_state (std::string state) std::string get_tool_state () bool is_analysis_mode () void set_ffc_paint_active (bool enabled) bool get_ffc_paint_active () void set_ffc_paint_mode_inclusive (bool inclusive) bool get_ffc_paint_mode_inclusive () void set_ffc_paint_size (double size) double get_ffc_paint_size () bool get_show_good_bad_particles () void set_show_good_bad_particles (bool enabled) bool get_show_difference_vectors () void set_show_difference_vectors (bool enabled) bool should_difference_vectors_show () std::vector< bool > get_good_bad_particles () void set_good_bad_particles (const std::vector< bool > & good_bad) void set_difference_particles ( Particles particles) Particles get_difference_particles () void set_compare_settings ( CompareSettings settings) CompareSettings get_compare_settings () void trigger_repaint () void trigger_reinsert_shapes () void set_display_mode (DisplayMode mode) set display mode (original, groomed, reconstructed) DisplayMode get_display_mode () return the current display mode void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) vtkSmartPointer< vtkLookupTable > get_glyph_lut () bool is_supported_file_format (std::string filename) Point3 get_point (const Eigen::VectorXd & points, int i)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes","text":"Name const std::string DATA_C const std::string GROOM_C const std::string OPTIMIZE_C const std::string ANALYSIS_C const std::string DEEPSSM_C","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Session.html#detailed-description","text":"class shapeworks :: Session ; Representation of a session. The Session class encapsulates everything about a session/project.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_feature_auto_scale","text":"void set_feature_auto_scale ( bool value )","title":"slot set_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-set_landmark_drag_mode","text":"void set_landmark_drag_mode ( bool mode )","title":"slot set_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-get_landmark_drag_mode","text":"bool get_landmark_drag_mode ()","title":"slot get_landmark_drag_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#slot-handle_thread_complete","text":"void handle_thread_complete ()","title":"slot handle_thread_complete"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-data_changed","text":"void data_changed () signal that the data has changed","title":"signal data_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-points_changed","text":"void points_changed ()","title":"signal points_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-landmarks_changed","text":"void landmarks_changed ()","title":"signal landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-planes_changed","text":"void planes_changed ()","title":"signal planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_changed","text":"void ffc_changed ()","title":"signal ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_display","text":"void update_display ()","title":"signal update_display"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-new_mesh","text":"void new_mesh ()","title":"signal new_mesh"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-feature_range_changed","text":"void feature_range_changed ()","title":"signal feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-update_view_mode","text":"void update_view_mode ()","title":"signal update_view_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-image_slice_settings_changed","text":"void image_slice_settings_changed ()","title":"signal image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-ffc_paint_mode_changed","text":"void ffc_paint_mode_changed ()","title":"signal ffc_paint_mode_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-repaint","text":"void repaint ()","title":"signal repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#signal-reinsert_shapes","text":"void reinsert_shapes ()","title":"signal reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session","text":"Session ( QWidget * parent , Preferences & prefs ) constructor","title":"function Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-session_1","text":"~ Session () destructor","title":"function ~Session"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_parent","text":"void set_parent ( QWidget * parent ) set QWidget parent","title":"function set_parent"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-save_project","text":"bool save_project ( QString filename ) save project to file","title":"function save_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_project","text":"bool load_project ( QString filename ) load project from file","title":"function load_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_light_project","text":"bool load_light_project ( QString filename ) read a lightweight project file","title":"function load_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_xl_project","text":"bool load_xl_project ( QString filename ) load a shapeworks project","title":"function load_xl_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_project_path","text":"void set_project_path ( QString relative_path )","title":"function set_project_path"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_project","text":"std :: shared_ptr < shapeworks :: Project > get_project ()","title":"function get_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_original_files","text":"void load_original_files ( std :: vector < std :: string > filenames ) import files","title":"function load_original_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_groomed_files","text":"void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ) load groomed files","title":"function load_groomed_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-load_point_files","text":"bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape )","title":"function load_point_files"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_particles","text":"bool update_particles ( std :: vector < Particles > particles )","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_particles","text":"int get_num_particles () Return the total number of particles for all domains, combined.","title":"function get_num_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_local_particle_system","text":"ParticleSystemEvaluation get_local_particle_system ( int domain )","title":"function get_local_particle_system"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_procrustes_transforms","text":"void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double > > > transforms )","title":"function update_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_light_project","text":"bool is_light_project ()","title":"function is_light_project"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_present","text":"bool get_groomed_present ()","title":"function get_groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-remove_shapes","text":"void remove_shapes ( QList < int > list ) remove shapes","title":"function remove_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_shapes","text":"ShapeList get_shapes () return all shapes","title":"function get_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-calculate_reconstructed_samples","text":"void calculate_reconstructed_samples ()","title":"function calculate_reconstructed_samples"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_filename","text":"QString get_filename () get the filename","title":"function get_filename"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_name","text":"QString get_display_name () get file display name","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-original_present","text":"bool original_present ()","title":"function original_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groomed_present","text":"bool groomed_present ()","title":"function groomed_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-particles_present","text":"bool particles_present ()","title":"function particles_present"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-groups_available","text":"bool groups_available ()","title":"function groups_available"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_num_shapes","text":"int get_num_shapes ()","title":"function get_num_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_domains_per_shape","text":"int get_domains_per_shape ()","title":"function get_domains_per_shape"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_default_feature_map","text":"std :: string get_default_feature_map ()","title":"function get_default_feature_map"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_mesh_manager","text":"inline std :: shared_ptr < MeshManager > get_mesh_manager ()","title":"function get_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-parameters","text":"shapeworks :: Parameters & parameters ()","title":"function parameters"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_groomed_domain_types","text":"std :: vector < DomainType > get_groomed_domain_types ()","title":"function get_groomed_domain_types"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-update_auto_glyph_size","text":"double update_auto_glyph_size ()","title":"function update_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_auto_glyph_size","text":"double get_auto_glyph_size ()","title":"function get_auto_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-clear_particles","text":"void clear_particles () clear particles from session (e.g. groom start, optimize start)","title":"function clear_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_auto_scale","text":"bool get_feature_auto_scale ()","title":"function get_feature_auto_scale"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_max","text":"double get_feature_range_max ()","title":"function get_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_feature_range_min","text":"double get_feature_range_min ()","title":"function get_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range","text":"void set_feature_range ( double min , double max )","title":"function set_feature_range"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_min","text":"void set_feature_range_min ( double value )","title":"function set_feature_range_min"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_feature_range_max","text":"void set_feature_range_max ( double value )","title":"function set_feature_range_max"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_landmarks_changed","text":"void trigger_landmarks_changed ()","title":"function trigger_landmarks_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_planes_changed","text":"void trigger_planes_changed ()","title":"function trigger_planes_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_ffc_changed","text":"void trigger_ffc_changed ()","title":"function trigger_ffc_changed"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_active_landmark_domain","text":"void set_active_landmark_domain ( int id )","title":"function set_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_active_landmark_domain","text":"int get_active_landmark_domain ()","title":"function get_active_landmark_domain"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_placing_landmark","text":"void set_placing_landmark ( int id )","title":"function set_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_placing_landmark","text":"int get_placing_landmark ()","title":"function get_placing_landmark"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_landmarks_active","text":"void set_landmarks_active ( bool active )","title":"function set_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_landmarks_active","text":"bool get_landmarks_active ()","title":"function get_landmarks_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_planes_active","text":"void set_planes_active ( bool active )","title":"function set_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_planes_active","text":"bool get_planes_active ()","title":"function get_planes_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmark_labels","text":"void set_show_landmark_labels ( bool show )","title":"function set_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmark_labels","text":"bool get_show_landmark_labels ()","title":"function get_show_landmark_labels"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_planes","text":"void set_show_planes ( bool show )","title":"function set_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_planes","text":"bool get_show_planes ()","title":"function get_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_show_planes","text":"bool should_show_planes ()","title":"function should_show_planes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_landmarks","text":"void set_show_landmarks ( bool show )","title":"function set_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_landmarks","text":"bool get_show_landmarks ()","title":"function get_show_landmarks"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_name","text":"bool set_image_name ( std :: string image_name )","title":"function set_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_name","text":"std :: string get_image_name ()","title":"function get_image_name"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_axis","text":"void set_image_axis ( QString axis )","title":"function set_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_axis","text":"Axis get_image_axis ()","title":"function get_image_axis"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_3d_mode","text":"void set_image_3d_mode ( bool mode )","title":"function set_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_3d_mode","text":"bool get_image_3d_mode ()","title":"function get_image_3d_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_share_window_and_level","text":"void set_image_share_window_and_level ( bool enabled )","title":"function set_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_share_window_and_level","text":"bool get_image_share_window_and_level ()","title":"function get_image_share_window_and_level"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_image_sync_slice","text":"void set_image_sync_slice ( bool enabled )","title":"function set_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_image_sync_slice","text":"bool get_image_sync_slice ()","title":"function get_image_sync_slice"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-has_constraints","text":"bool has_constraints ()","title":"function has_constraints"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_loading","text":"void set_loading ( bool loading )","title":"function set_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_loading","text":"bool is_loading ()","title":"function is_loading"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_tool_state","text":"void set_tool_state ( std :: string state )","title":"function set_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_tool_state","text":"std :: string get_tool_state ()","title":"function get_tool_state"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_analysis_mode","text":"bool is_analysis_mode ()","title":"function is_analysis_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_active","text":"void set_ffc_paint_active ( bool enabled )","title":"function set_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_active","text":"bool get_ffc_paint_active ()","title":"function get_ffc_paint_active"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_mode_inclusive","text":"void set_ffc_paint_mode_inclusive ( bool inclusive )","title":"function set_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_mode_inclusive","text":"bool get_ffc_paint_mode_inclusive ()","title":"function get_ffc_paint_mode_inclusive"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_ffc_paint_size","text":"void set_ffc_paint_size ( double size )","title":"function set_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_ffc_paint_size","text":"double get_ffc_paint_size ()","title":"function get_ffc_paint_size"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_good_bad_particles","text":"bool get_show_good_bad_particles ()","title":"function get_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_good_bad_particles","text":"void set_show_good_bad_particles ( bool enabled )","title":"function set_show_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_show_difference_vectors","text":"bool get_show_difference_vectors ()","title":"function get_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_show_difference_vectors","text":"void set_show_difference_vectors ( bool enabled )","title":"function set_show_difference_vectors"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-should_difference_vectors_show","text":"bool should_difference_vectors_show ()","title":"function should_difference_vectors_show"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_good_bad_particles","text":"std :: vector < bool > get_good_bad_particles ()","title":"function get_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_good_bad_particles","text":"void set_good_bad_particles ( const std :: vector < bool > & good_bad )","title":"function set_good_bad_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_difference_particles","text":"inline void set_difference_particles ( Particles particles )","title":"function set_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_difference_particles","text":"inline Particles get_difference_particles ()","title":"function get_difference_particles"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_compare_settings","text":"void set_compare_settings ( CompareSettings settings )","title":"function set_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_compare_settings","text":"CompareSettings get_compare_settings ()","title":"function get_compare_settings"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_repaint","text":"void trigger_repaint ()","title":"function trigger_repaint"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-trigger_reinsert_shapes","text":"void trigger_reinsert_shapes ()","title":"function trigger_reinsert_shapes"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_display_mode","text":"void set_display_mode ( DisplayMode mode ) set display mode (original, groomed, reconstructed)","title":"function set_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_display_mode","text":"DisplayMode get_display_mode () return the current display mode","title":"function get_display_mode"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-set_glyph_lut","text":"inline void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_glyph_lut","text":"inline vtkSmartPointer < vtkLookupTable > get_glyph_lut ()","title":"function get_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-is_supported_file_format","text":"static bool is_supported_file_format ( std :: string filename )","title":"function is_supported_file_format"},{"location":"api/Classes/classshapeworks_1_1Session.html#function-get_point","text":"static Point3 get_point ( const Eigen :: VectorXd & points , int i )","title":"function get_point"},{"location":"api/Classes/classshapeworks_1_1Session.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-data_c","text":"static const std :: string DATA_C ;","title":"variable DATA_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-groom_c","text":"static const std :: string GROOM_C ;","title":"variable GROOM_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-optimize_c","text":"static const std :: string OPTIMIZE_C ;","title":"variable OPTIMIZE_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-analysis_c","text":"static const std :: string ANALYSIS_C ;","title":"variable ANALYSIS_C"},{"location":"api/Classes/classshapeworks_1_1Session.html#variable-deepssm_c","text":"static const std :: string DEEPSSM_C ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable DEEPSSM_C"},{"location":"api/Classes/classshapeworks_1_1Shape.html","text":"shapeworks::Shape Representation of a single shape/patient/subject. #include Public Classes Name class Point TODO: replace this wherever it is used. Public Functions Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers () Public Functions Documentation function Shape Shape () function ~Shape ~ Shape () function get_display_name std :: string get_display_name () function get_meshes MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ) function set_annotations void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ) function get_annotations std :: vector < std :: string > get_annotations () function set_mesh_manager void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ) function set_subject void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ) function is_subject bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) function get_subject std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object. function import_original_file void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file. function get_original_meshes MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes. function get_groomed_meshes MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes. function get_reconstructed_meshes MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes. function reset_groomed_mesh void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. function import_global_point_files bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files. function import_local_point_files bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files. function import_landmarks_files bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files. function store_landmarks bool store_landmarks () Store landmarks. function import_constraints bool import_constraints ( std :: vector < std :: string > filenames ) import constraints function store_constraints bool store_constraints () Store constraints. function set_particles void set_particles ( Particles particles ) Set particles. function get_particles Particles get_particles () Get particles. function set_particle_transform void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment) function set_alignment_type void set_alignment_type ( int alignment ) Set the alignment type. function get_global_correspondence_points Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points. function get_particles_for_display std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display. function get_local_correspondence_points Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points. function clear_reconstructed_mesh void clear_reconstructed_mesh () function get_id int get_id () Get the id of this shape. function set_id void set_id ( int id ) Set the id of this shape. function get_original_filenames std :: vector < std :: string > get_original_filenames () function get_original_filenames_with_path std :: vector < std :: string > get_original_filenames_with_path () function get_original_filename std :: string get_original_filename () function get_original_filename_with_path std :: string get_original_filename_with_path () function get_groomed_filename std :: string get_groomed_filename () function get_groomed_filename_with_path std :: string get_groomed_filename_with_path ( int domain ) function get_global_point_filename std :: string get_global_point_filename () function get_global_point_filename_with_path std :: string get_global_point_filename_with_path () function get_local_point_filename std :: string get_local_point_filename () function get_local_point_filename_with_path std :: string get_local_point_filename_with_path () function set_transform void set_transform ( vtkSmartPointer < vtkTransform > transform ) function get_transform vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ) function get_inverse_transform vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ) function has_alignment bool has_alignment () function get_original_transform vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ) function set_reconstruction_transforms void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms ) function get_reconstruction_transform vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ) function get_groomed_transform vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ) function get_procrustes_transform vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ) function get_procrustes_transforms std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms () function get_alignment vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ) function load_feature void load_feature ( DisplayMode display_mode , std :: string feature ) function get_image_volume std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ) function get_point_features Eigen :: VectorXf get_point_features ( std :: string feature ) function set_point_features void set_point_features ( std :: string feature , Eigen :: VectorXf values ) function load_feature_from_scalar_file void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ) function set_override_feature void set_override_feature ( std :: string feature ) function get_override_feature std :: string get_override_feature () function landmarks Eigen :: MatrixXd & landmarks () function constraints std :: vector < Constraints > & constraints () function get_constraints Constraints & get_constraints ( int domain_id ) function has_planes bool has_planes () function get_groomed_mesh_wrappers std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#shapeworksshape","text":"Representation of a single shape/patient/subject. #include ","title":"shapeworks::Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-classes","text":"Name class Point TODO: replace this wherever it is used.","title":"Public Classes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions","text":"Name Shape () ~Shape () std::string get_display_name () MeshGroup get_meshes (DisplayMode display_mode, bool wait =false) void set_annotations (std::vector< std::string > annotations, bool only_overwrite_blank =true) std::vector< std::string > get_annotations () void set_mesh_manager (std::shared_ptr< MeshManager > mesh_manager) void set_subject (std::shared_ptr< shapeworks::Subject > subject) bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not) std::shared_ptr< shapeworks::Subject > get_subject () Return the pointer to the subject object. void import_original_file (const std::string & filename) Import the original raw mesh or image file. MeshGroup get_original_meshes (bool wait =false) Retrieve the original meshes. MeshGroup get_groomed_meshes (bool wait =false) Retrieve the groomed meshes. MeshGroup get_reconstructed_meshes (bool wait =false) Retrieve the reconstructed meshes. void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created. bool import_global_point_files (std::vector< std::string > filenames) Import global correspondence point files. bool import_local_point_files (std::vector< std::string > filenames) Import local correspondence point files. bool import_landmarks_files (std::vector< std::string > filenames) Import landmarks files. bool store_landmarks () Store landmarks. bool import_constraints (std::vector< std::string > filenames) import constraints bool store_constraints () Store constraints. void set_particles ( Particles particles) Set particles. Particles get_particles () Get particles. void set_particle_transform (vtkSmartPointer< vtkTransform > transform) Set the particle transform (alignment) void set_alignment_type (int alignment) Set the alignment type. Eigen::VectorXd get_global_correspondence_points () Get the global correspondence points. std::vector< Eigen::VectorXd > get_particles_for_display () Get the global correspondence points for display. Eigen::VectorXd get_local_correspondence_points () Get the local correspondence points. void clear_reconstructed_mesh () int get_id () Get the id of this shape. void set_id (int id) Set the id of this shape. std::vector< std::string > get_original_filenames () std::vector< std::string > get_original_filenames_with_path () std::string get_original_filename () std::string get_original_filename_with_path () std::string get_groomed_filename () std::string get_groomed_filename_with_path (int domain) std::string get_global_point_filename () std::string get_global_point_filename_with_path () std::string get_local_point_filename () std::string get_local_point_filename_with_path () void set_transform (vtkSmartPointer< vtkTransform > transform) vtkSmartPointer< vtkTransform > get_transform (int domain =0) vtkSmartPointer< vtkTransform > get_inverse_transform (int domain =0) bool has_alignment () vtkSmartPointer< vtkTransform > get_original_transform (int domain =0) void set_reconstruction_transforms (std::vector< vtkSmartPointer< vtkTransform > > transforms) vtkSmartPointer< vtkTransform > get_reconstruction_transform (int domain) vtkSmartPointer< vtkTransform > get_groomed_transform (int domain =0) vtkSmartPointer< vtkTransform > get_procrustes_transform (int domain =0) std::vector< vtkSmartPointer< vtkTransform > > get_procrustes_transforms () vtkSmartPointer< vtkTransform > get_alignment (int domain =0) void load_feature (DisplayMode display_mode, std::string feature) std::shared_ptr< Image > get_image_volume (std::string image_volume_name) Eigen::VectorXf get_point_features (std::string feature) void set_point_features (std::string feature, Eigen::VectorXf values) void load_feature_from_scalar_file (std::string filename, std::string feature_name) void set_override_feature (std::string feature) std::string get_override_feature () Eigen::MatrixXd & landmarks () std::vector< Constraints > & constraints () Constraints & get_constraints (int domain_id) bool has_planes () std::vector< std::shared_ptr< VtkMeshWrapper > > get_groomed_mesh_wrappers ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape","text":"Shape ()","title":"function Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-shape_1","text":"~ Shape ()","title":"function ~Shape"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_display_name","text":"std :: string get_display_name ()","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_meshes","text":"MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false )","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_annotations","text":"void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true )","title":"function set_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_annotations","text":"std :: vector < std :: string > get_annotations ()","title":"function get_annotations"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_mesh_manager","text":"void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager )","title":"function set_mesh_manager"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_subject","text":"void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject )","title":"function set_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-is_subject","text":"bool is_subject () Is this shape a population subject (e.g. mean/pca constructions are not)","title":"function is_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_subject","text":"std :: shared_ptr < shapeworks :: Subject > get_subject () Return the pointer to the subject object.","title":"function get_subject"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_original_file","text":"void import_original_file ( const std :: string & filename ) Import the original raw mesh or image file.","title":"function import_original_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_meshes","text":"MeshGroup get_original_meshes ( bool wait = false ) Retrieve the original meshes.","title":"function get_original_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_meshes","text":"MeshGroup get_groomed_meshes ( bool wait = false ) Retrieve the groomed meshes.","title":"function get_groomed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstructed_meshes","text":"MeshGroup get_reconstructed_meshes ( bool wait = false ) Retrieve the reconstructed meshes.","title":"function get_reconstructed_meshes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-reset_groomed_mesh","text":"void reset_groomed_mesh () Reset the groomed mesh so that it will be re-created.","title":"function reset_groomed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_global_point_files","text":"bool import_global_point_files ( std :: vector < std :: string > filenames ) Import global correspondence point files.","title":"function import_global_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_local_point_files","text":"bool import_local_point_files ( std :: vector < std :: string > filenames ) Import local correspondence point files.","title":"function import_local_point_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_landmarks_files","text":"bool import_landmarks_files ( std :: vector < std :: string > filenames ) Import landmarks files.","title":"function import_landmarks_files"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_landmarks","text":"bool store_landmarks () Store landmarks.","title":"function store_landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-import_constraints","text":"bool import_constraints ( std :: vector < std :: string > filenames ) import constraints","title":"function import_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-store_constraints","text":"bool store_constraints () Store constraints.","title":"function store_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particles","text":"void set_particles ( Particles particles ) Set particles.","title":"function set_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles","text":"Particles get_particles () Get particles.","title":"function get_particles"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_particle_transform","text":"void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ) Set the particle transform (alignment)","title":"function set_particle_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_alignment_type","text":"void set_alignment_type ( int alignment ) Set the alignment type.","title":"function set_alignment_type"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_correspondence_points","text":"Eigen :: VectorXd get_global_correspondence_points () Get the global correspondence points.","title":"function get_global_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_particles_for_display","text":"std :: vector < Eigen :: VectorXd > get_particles_for_display () Get the global correspondence points for display.","title":"function get_particles_for_display"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_correspondence_points","text":"Eigen :: VectorXd get_local_correspondence_points () Get the local correspondence points.","title":"function get_local_correspondence_points"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-clear_reconstructed_mesh","text":"void clear_reconstructed_mesh ()","title":"function clear_reconstructed_mesh"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_id","text":"int get_id () Get the id of this shape.","title":"function get_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_id","text":"void set_id ( int id ) Set the id of this shape.","title":"function set_id"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames","text":"std :: vector < std :: string > get_original_filenames ()","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filenames_with_path","text":"std :: vector < std :: string > get_original_filenames_with_path ()","title":"function get_original_filenames_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename","text":"std :: string get_original_filename ()","title":"function get_original_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_filename_with_path","text":"std :: string get_original_filename_with_path ()","title":"function get_original_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename","text":"std :: string get_groomed_filename ()","title":"function get_groomed_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_filename_with_path","text":"std :: string get_groomed_filename_with_path ( int domain )","title":"function get_groomed_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename","text":"std :: string get_global_point_filename ()","title":"function get_global_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_global_point_filename_with_path","text":"std :: string get_global_point_filename_with_path ()","title":"function get_global_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename","text":"std :: string get_local_point_filename ()","title":"function get_local_point_filename"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_local_point_filename_with_path","text":"std :: string get_local_point_filename_with_path ()","title":"function get_local_point_filename_with_path"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_transform","text":"void set_transform ( vtkSmartPointer < vtkTransform > transform )","title":"function set_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_inverse_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 )","title":"function get_inverse_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_alignment","text":"bool has_alignment ()","title":"function has_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_original_transform","text":"vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 )","title":"function get_original_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_reconstruction_transforms","text":"void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform > > transforms )","title":"function set_reconstruction_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_reconstruction_transform","text":"vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain )","title":"function get_reconstruction_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_transform","text":"vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 )","title":"function get_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transform","text":"vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 )","title":"function get_procrustes_transform"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_procrustes_transforms","text":"std :: vector < vtkSmartPointer < vtkTransform > > get_procrustes_transforms ()","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_alignment","text":"vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 )","title":"function get_alignment"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature","text":"void load_feature ( DisplayMode display_mode , std :: string feature )","title":"function load_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_image_volume","text":"std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name )","title":"function get_image_volume"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_point_features","text":"Eigen :: VectorXf get_point_features ( std :: string feature )","title":"function get_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_point_features","text":"void set_point_features ( std :: string feature , Eigen :: VectorXf values )","title":"function set_point_features"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-load_feature_from_scalar_file","text":"void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name )","title":"function load_feature_from_scalar_file"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-set_override_feature","text":"void set_override_feature ( std :: string feature )","title":"function set_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_override_feature","text":"std :: string get_override_feature ()","title":"function get_override_feature"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-landmarks","text":"Eigen :: MatrixXd & landmarks ()","title":"function landmarks"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-constraints","text":"std :: vector < Constraints > & constraints ()","title":"function constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_constraints","text":"Constraints & get_constraints ( int domain_id )","title":"function get_constraints"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-has_planes","text":"bool has_planes ()","title":"function has_planes"},{"location":"api/Classes/classshapeworks_1_1Shape.html#function-get_groomed_mesh_wrappers","text":"std :: vector < std :: shared_ptr < VtkMeshWrapper > > get_groomed_mesh_wrappers () Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_groomed_mesh_wrappers"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html","text":"shapeworks::ShapeEvaluation Public Functions Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) Public Attributes Name const unsigned VDimension Public Functions Documentation function ShapeEvaluation ShapeEvaluation () function ComputeCompactness static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullCompactness static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeGeneralization static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullGeneralization static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) function ComputeSpecificity static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ) function ComputeFullSpecificity static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ) Public Attributes Documentation variable VDimension static const unsigned VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#shapeworksshapeevaluation","text":"","title":"shapeworks::ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions","text":"Name ShapeEvaluation () double ComputeCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullCompactness (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullGeneralization (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr) double ComputeSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, const int nModes, const std::string & saveTo =\"\") Eigen::VectorXd ComputeFullSpecificity (const ParticleSystemEvaluation & ParticleSystemEvaluation, std::function< void(float)> progress_callback =nullptr)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes","text":"Name const unsigned VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-shapeevaluation","text":"ShapeEvaluation ()","title":"function ShapeEvaluation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computecompactness","text":"static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullcompactness","text":"static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullCompactness"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computegeneralization","text":"static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullgeneralization","text":"static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullGeneralization"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computespecificity","text":"static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" )","title":"function ComputeSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#function-computefullspecificity","text":"static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr )","title":"function ComputeFullSpecificity"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluation.html#variable-vdimension","text":"static const unsigned VDimension = 3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html","text":"shapeworks::ShapeEvaluationJob Inherits from shapeworks::Job , QObject Public Types Name enum class JobType Public Signals Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data) Public Functions Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Types Documentation enum JobType Enumerator Value Description CompactnessType SpecificityType GeneralizationType Public Signals Documentation signal report_progress void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ) signal result_ready void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ) Public Functions Documentation function ShapeEvaluationJob ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#shapeworksshapeevaluationjob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types","text":"Name enum class JobType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals","text":"Name void report_progress (shapeworks::ShapeEvaluationJob::JobType job_type, float progress) void result_ready (shapeworks::ShapeEvaluationJob::JobType job_type, Eigen::VectorXd data)","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions","text":"Name ShapeEvaluationJob (JobType job_type, ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#enum-jobtype","text":"Enumerator Value Description CompactnessType SpecificityType GeneralizationType","title":"enum JobType"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-report_progress","text":"void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress )","title":"signal report_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#signal-result_ready","text":"void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data )","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-shapeevaluationjob","text":"ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats )","title":"function ShapeEvaluationJob"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1ShapeEvaluationJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name Updated on 2023-10-25 at 15:40:27 +0000","title":"function name"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html","text":"shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) Protected Functions Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ; typedef ParticleSystemType typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) function itkTypeMacro itkTypeMacro ( ShapeGradientMatrix , Observer ) function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function SetValues void SetValues ( const ParticleSystemType * ps , int idx , int d ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback Protected Functions Documentation function ShapeGradientMatrix inline ShapeGradientMatrix () function ~ShapeGradientMatrix inline virtual ~ ShapeGradientMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#shapeworksshapegradientmatrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeGradientMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer typedef ParticleSystem ParticleSystemType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeGradientMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) void SetValues (const ParticleSystemType * ps, int idx, int d) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & )","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions","text":"Name ShapeGradientMatrix () virtual ~ShapeGradientMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#detailed-description","text":"class shapeworks :: ShapeGradientMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeGradientMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-self","text":"typedef ShapeGradientMatrix shapeworks :: ShapeGradientMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeGradientMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeGradientMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeGradientMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#typedef-particlesystemtype","text":"typedef ParticleSystem shapeworks :: ShapeGradientMatrix :: ParticleSystemType ;","title":"typedef ParticleSystemType"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self )","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeGradientMatrix , Observer )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-setvalues","text":"void SetValues ( const ParticleSystemType * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix","text":"inline ShapeGradientMatrix ()","title":"function ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-shapegradientmatrix_1","text":"inline virtual ~ ShapeGradientMatrix ()","title":"function ~ShapeGradientMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeGradientMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html","text":"shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer Public Types Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer Public Functions Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans () Protected Functions Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const Protected Attributes Name int m_DomainsPerShape Additional inherited members Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks Detailed Description class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape. Public Types Documentation typedef DataType typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs typedef Self typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ; typedef Superclass typedef Observer shapeworks :: ShapeMatrix :: Superclass ; typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ; typedef ConstWeakPointer typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ; Public Functions Documentation function itkNewMacro itkNewMacro ( Self ) Method for creation through the object factory. function itkTypeMacro itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods). function BeforeIteration inline virtual void BeforeIteration () function AfterIteration inline virtual void AfterIteration () function SetDomainsPerShape inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points! function GetDomainsPerShape inline int GetDomainsPerShape () const function SetAttributesPerDomain inline void SetAttributesPerDomain ( const std :: vector < int > & i ) function SetAttributeScales inline void SetAttributeScales ( const std :: vector < double > & s ) function SetXYZ inline void SetXYZ ( int i , bool val ) function SetNormals inline void SetNormals ( int i , bool val ) function SetMatrix inline virtual void SetMatrix ( const vnl_matrix < double > & m ) function ResizeMatrix inline virtual void ResizeMatrix ( int rs , int cs ) function DomainAddEventCallback inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method. function SetValues inline void SetValues ( const ParticleSystem * ps , int idx , int d ) function PositionAddEventCallback inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback function PositionSetEventCallback inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback function PositionRemoveEventCallback inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback function PrintMatrix inline void PrintMatrix () function CheckForNans inline bool CheckForNans () Protected Functions Documentation function ShapeMatrix inline ShapeMatrix () function ~ShapeMatrix inline virtual ~ ShapeMatrix () function PrintSelf inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const Protected Attributes Documentation variable m_DomainsPerShape int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#shapeworksshapematrix","text":"Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! More... #include Inherits from vnl_matrix< double >, shapeworks::Observer","title":"shapeworks::ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types","text":"Name typedef double DataType typedef ShapeMatrix Self typedef Observer Superclass typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::WeakPointer< const Self > ConstWeakPointer","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions","text":"Name itkNewMacro ( Self ) itkTypeMacro ( ShapeMatrix , Observer ) virtual void BeforeIteration () virtual void AfterIteration () void SetDomainsPerShape (int i) int GetDomainsPerShape () const void SetAttributesPerDomain (const std::vector< int > & i) void SetAttributeScales (const std::vector< double > & s) void SetXYZ (int i, bool val) void SetNormals (int i, bool val) virtual void SetMatrix (const vnl_matrix< double > & m) virtual void ResizeMatrix (int rs, int cs) virtual void DomainAddEventCallback (Object * , const itk::EventObject & ) void SetValues (const ParticleSystem * ps, int idx, int d) virtual void PositionAddEventCallback (Object * o, const itk::EventObject & e) virtual void PositionSetEventCallback (Object * o, const itk::EventObject & e) virtual void PositionRemoveEventCallback (Object * , const itk::EventObject & ) void PrintMatrix () bool CheckForNans ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions","text":"Name ShapeMatrix () virtual ~ShapeMatrix () void PrintSelf (std::ostream & os, itk::Indent indent) const","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes","text":"Name int m_DomainsPerShape","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#additional-inherited-members","text":"Public Classes inherited from shapeworks::Observer Name struct DefinedCallbacksStruct Public Functions inherited from shapeworks::Observer Name virtual void TransformSetEventCallback (Object * , const itk::EventObject & ) virtual void PrefixTransformSetEventCallback (Object * , const itk::EventObject & ) virtual void NeighborhoodSetEventCallback (Object * , const itk::EventObject & ) Protected Functions inherited from shapeworks::Observer Name Observer () virtual ~Observer () Public Attributes inherited from shapeworks::Observer Name DefinedCallbacksStruct m_DefinedCallbacks","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#detailed-description","text":"class shapeworks :: ShapeMatrix ; Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Each column represents a single shape.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-datatype","text":"typedef double shapeworks :: ShapeMatrix :: DataType ; Standard class typedefs","title":"typedef DataType"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-self","text":"typedef ShapeMatrix shapeworks :: ShapeMatrix :: Self ;","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-superclass","text":"typedef Observer shapeworks :: ShapeMatrix :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: ShapeMatrix :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: ShapeMatrix :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#typedef-constweakpointer","text":"typedef itk :: WeakPointer < const Self > shapeworks :: ShapeMatrix :: ConstWeakPointer ;","title":"typedef ConstWeakPointer"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itknewmacro","text":"itkNewMacro ( Self ) Method for creation through the object factory.","title":"function itkNewMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-itktypemacro","text":"itkTypeMacro ( ShapeMatrix , Observer ) Run-time type information (and related methods).","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-beforeiteration","text":"inline virtual void BeforeIteration ()","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-afteriteration","text":"inline virtual void AfterIteration ()","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setdomainspershape","text":"inline void SetDomainsPerShape ( int i ) Set/Get the number of domains per shape. This can only be safely done before shapes are initialized with points!","title":"function SetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-getdomainspershape","text":"inline int GetDomainsPerShape () const","title":"function GetDomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributesperdomain","text":"inline void SetAttributesPerDomain ( const std :: vector < int > & i )","title":"function SetAttributesPerDomain"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setattributescales","text":"inline void SetAttributeScales ( const std :: vector < double > & s )","title":"function SetAttributeScales"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setxyz","text":"inline void SetXYZ ( int i , bool val )","title":"function SetXYZ"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setnormals","text":"inline void SetNormals ( int i , bool val )","title":"function SetNormals"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setmatrix","text":"inline virtual void SetMatrix ( const vnl_matrix < double > & m )","title":"function SetMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-resizematrix","text":"inline virtual void ResizeMatrix ( int rs , int cs )","title":"function ResizeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-domainaddeventcallback","text":"inline virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::DomainAddEventCallback Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks should be set to true so that the ParticleSystem will know to register the appropriate event with this method.","title":"function DomainAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-setvalues","text":"inline void SetValues ( const ParticleSystem * ps , int idx , int d )","title":"function SetValues"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionaddeventcallback","text":"inline virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionAddEventCallback","title":"function PositionAddEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionseteventcallback","text":"inline virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) Reimplements : shapeworks::Observer::PositionSetEventCallback","title":"function PositionSetEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-positionremoveeventcallback","text":"inline virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) Reimplements : shapeworks::Observer::PositionRemoveEventCallback","title":"function PositionRemoveEventCallback"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printmatrix","text":"inline void PrintMatrix ()","title":"function PrintMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-checkfornans","text":"inline bool CheckForNans ()","title":"function CheckForNans"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix","text":"inline ShapeMatrix ()","title":"function ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-shapematrix_1","text":"inline virtual ~ ShapeMatrix ()","title":"function ~ShapeMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#function-printself","text":"inline void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const","title":"function PrintSelf"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeMatrix.html#variable-m_domainspershape","text":"int m_DomainsPerShape ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainsPerShape"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html","text":"shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. More... #include Inherits from QMainWindow Public Slots Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session () Public Functions Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names) Protected Functions Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override Detailed Description class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface Public Slots Documentation slot open_project void open_project ( QString filename ) slot on_action_new_project_triggered void on_action_new_project_triggered () slot on_action_open_project_triggered void on_action_open_project_triggered () slot on_action_show_project_folder_triggered void on_action_show_project_folder_triggered () slot on_action_save_project_triggered bool on_action_save_project_triggered () slot save_project_as bool save_project_as ( QString type ) slot save_as_swproj_clicked void save_as_swproj_clicked () slot save_as_xlsx_clicked void save_as_xlsx_clicked () slot on_action_quit_triggered void on_action_quit_triggered () slot on_action_import_triggered void on_action_import_triggered () slot splash_screen_closed void splash_screen_closed () slot on_vertical_scroll_bar_valueChanged void on_vertical_scroll_bar_valueChanged () slot on_action_import_mode_triggered void on_action_import_mode_triggered () slot on_action_groom_mode_triggered void on_action_groom_mode_triggered () slot on_action_optimize_mode_triggered void on_action_optimize_mode_triggered () slot on_action_analysis_mode_triggered void on_action_analysis_mode_triggered () slot on_action_deepssm_mode_triggered void on_action_deepssm_mode_triggered () slot on_actionShow_Tool_Window_triggered void on_actionShow_Tool_Window_triggered () slot on_actionExport_PCA_Mesh_triggered void on_actionExport_PCA_Mesh_triggered () slot on_actionExport_Eigenvalues_triggered void on_actionExport_Eigenvalues_triggered () slot on_actionExport_Eigenvectors_triggered void on_actionExport_Eigenvectors_triggered () slot on_actionExport_PCA_Mode_Points_triggered void on_actionExport_PCA_Mode_Points_triggered () slot on_action_preferences_triggered void on_action_preferences_triggered () slot action_export_current_mesh_triggered void action_export_current_mesh_triggered ( int index = 0 ) slot on_action_export_current_particles_triggered void on_action_export_current_particles_triggered () slot on_action_export_mesh_scalars_triggered void on_action_export_mesh_scalars_triggered () slot on_action_export_pca_scores_triggered void on_action_export_pca_scores_triggered () slot action_export_pca_montage_triggered void action_export_pca_montage_triggered () slot action_export_screenshot_triggered void action_export_screenshot_triggered () slot action_export_particle_scalars_triggered void action_export_particle_scalars_triggered () slot action_export_all_subjects_particle_scalars_triggered void action_export_all_subjects_particle_scalars_triggered () slot on_center_checkbox_stateChanged void on_center_checkbox_stateChanged () slot on_zoom_slider_valueChanged void on_zoom_slider_valueChanged () slot on_view_mode_combobox_currentIndexChanged void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ) slot on_auto_view_button_clicked void on_auto_view_button_clicked () slot handle_pca_changed void handle_pca_changed () slot handle_slider_update void handle_slider_update () slot handle_mca_changed void handle_mca_changed () slot handle_project_changed void handle_project_changed () slot handle_points_changed void handle_points_changed () slot handle_groom_start void handle_groom_start () slot handle_groom_complete void handle_groom_complete () slot handle_optimize_start void handle_optimize_start () slot handle_optimize_complete void handle_optimize_complete () slot handle_reconstruction_complete void handle_reconstruction_complete () slot handle_display_setting_changed void handle_display_setting_changed () slot handle_glyph_changed void handle_glyph_changed () slot handle_opacity_changed void handle_opacity_changed () slot handle_alignment_changed void handle_alignment_changed () slot handle_open_recent void handle_open_recent () slot handle_color_scheme void handle_color_scheme () slot handle_pca_update void handle_pca_update () slot clear_message void clear_message () slot handle_message void handle_message ( std :: string str ) slot handle_error void handle_error ( std :: string str ) slot handle_warning void handle_warning ( std :: string str ) slot handle_debug void handle_debug ( std :: string str ) slot handle_status void handle_status ( std :: string str ) slot handle_progress_with_message void handle_progress_with_message ( int amt , std :: string str ) slot handle_progress void handle_progress ( int amt ) slot message_callback void message_callback ( std :: string str ) slot handle_new_mesh void handle_new_mesh () slot handle_clear_cache void handle_clear_cache () slot handle_compare_settings_changed void handle_compare_settings_changed () slot handle_lightbox_right_click void handle_lightbox_right_click ( int index ) slot update_feature_map_selection void update_feature_map_selection ( int index ) slot update_feature_map_scale void update_feature_map_scale () slot image_combo_changed void image_combo_changed ( int index ) slot show_splash_screen void show_splash_screen () slot hide_splash_screen void hide_splash_screen () slot about void about () slot keyboard_shortcuts void keyboard_shortcuts () slot toggle_log_window void toggle_log_window () slot get_py_worker QSharedPointer < PythonWorker > get_py_worker () slot prefs inline Preferences & prefs () slot session inline QSharedPointer < Session > session () Public Functions Documentation function ShapeWorksStudioApp ShapeWorksStudioApp () function ~ShapeWorksStudioApp ~ ShapeWorksStudioApp () function closeEvent void closeEvent ( QCloseEvent * event ) override function initialize_vtk void initialize_vtk () function import_files void import_files ( QStringList file_names ) Protected Functions Documentation function dragEnterEvent void dragEnterEvent ( QDragEnterEvent * event ) override function dragLeaveEvent void dragLeaveEvent ( QDragLeaveEvent * event ) override function dropEvent void dropEvent ( QDropEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#shapeworksshapeworksstudioapp","text":"Main ShapeWorksStudio window. More... #include Inherits from QMainWindow","title":"shapeworks::ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots","text":"Name void open_project (QString filename) void on_action_new_project_triggered () void on_action_open_project_triggered () void on_action_show_project_folder_triggered () bool on_action_save_project_triggered () bool save_project_as (QString type) void save_as_swproj_clicked () void save_as_xlsx_clicked () void on_action_quit_triggered () void on_action_import_triggered () void splash_screen_closed () void on_vertical_scroll_bar_valueChanged () void on_action_import_mode_triggered () void on_action_groom_mode_triggered () void on_action_optimize_mode_triggered () void on_action_analysis_mode_triggered () void on_action_deepssm_mode_triggered () void on_actionShow_Tool_Window_triggered () void on_actionExport_PCA_Mesh_triggered () void on_actionExport_Eigenvalues_triggered () void on_actionExport_Eigenvectors_triggered () void on_actionExport_PCA_Mode_Points_triggered () void on_action_preferences_triggered () void action_export_current_mesh_triggered (int index =0) void on_action_export_current_particles_triggered () void on_action_export_mesh_scalars_triggered () void on_action_export_pca_scores_triggered () void action_export_pca_montage_triggered () void action_export_screenshot_triggered () void action_export_particle_scalars_triggered () void action_export_all_subjects_particle_scalars_triggered () void on_center_checkbox_stateChanged () void on_zoom_slider_valueChanged () void on_view_mode_combobox_currentIndexChanged (QString disp_mode) void on_auto_view_button_clicked () void handle_pca_changed () void handle_slider_update () void handle_mca_changed () void handle_project_changed () void handle_points_changed () void handle_groom_start () void handle_groom_complete () void handle_optimize_start () void handle_optimize_complete () void handle_reconstruction_complete () void handle_display_setting_changed () void handle_glyph_changed () void handle_opacity_changed () void handle_alignment_changed () void handle_open_recent () void handle_color_scheme () void handle_pca_update () void clear_message () void handle_message (std::string str) void handle_error (std::string str) void handle_warning (std::string str) void handle_debug (std::string str) void handle_status (std::string str) void handle_progress_with_message (int amt, std::string str) void handle_progress (int amt) void message_callback (std::string str) void handle_new_mesh () void handle_clear_cache () void handle_compare_settings_changed () void handle_lightbox_right_click (int index) void update_feature_map_selection (int index) void update_feature_map_scale () void image_combo_changed (int index) void show_splash_screen () void hide_splash_screen () void about () void keyboard_shortcuts () void toggle_log_window () QSharedPointer< PythonWorker > get_py_worker () Preferences & prefs () QSharedPointer< Session > session ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions","text":"Name ShapeWorksStudioApp () ~ShapeWorksStudioApp () void closeEvent (QCloseEvent * event) override void initialize_vtk () void import_files (QStringList file_names)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions","text":"Name void dragEnterEvent (QDragEnterEvent * event) override void dragLeaveEvent (QDragLeaveEvent * event) override void dropEvent (QDropEvent * event) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#detailed-description","text":"class shapeworks :: ShapeWorksStudioApp ; Main ShapeWorksStudio window. This class represents the primary ShapeWorksStudio window interface","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-open_project","text":"void open_project ( QString filename )","title":"slot open_project"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_new_project_triggered","text":"void on_action_new_project_triggered ()","title":"slot on_action_new_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_open_project_triggered","text":"void on_action_open_project_triggered ()","title":"slot on_action_open_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_show_project_folder_triggered","text":"void on_action_show_project_folder_triggered ()","title":"slot on_action_show_project_folder_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_save_project_triggered","text":"bool on_action_save_project_triggered ()","title":"slot on_action_save_project_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_project_as","text":"bool save_project_as ( QString type )","title":"slot save_project_as"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_swproj_clicked","text":"void save_as_swproj_clicked ()","title":"slot save_as_swproj_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-save_as_xlsx_clicked","text":"void save_as_xlsx_clicked ()","title":"slot save_as_xlsx_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_quit_triggered","text":"void on_action_quit_triggered ()","title":"slot on_action_quit_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_triggered","text":"void on_action_import_triggered ()","title":"slot on_action_import_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-splash_screen_closed","text":"void splash_screen_closed ()","title":"slot splash_screen_closed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_vertical_scroll_bar_valuechanged","text":"void on_vertical_scroll_bar_valueChanged ()","title":"slot on_vertical_scroll_bar_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_import_mode_triggered","text":"void on_action_import_mode_triggered ()","title":"slot on_action_import_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_groom_mode_triggered","text":"void on_action_groom_mode_triggered ()","title":"slot on_action_groom_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_optimize_mode_triggered","text":"void on_action_optimize_mode_triggered ()","title":"slot on_action_optimize_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_analysis_mode_triggered","text":"void on_action_analysis_mode_triggered ()","title":"slot on_action_analysis_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_deepssm_mode_triggered","text":"void on_action_deepssm_mode_triggered ()","title":"slot on_action_deepssm_mode_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionshow_tool_window_triggered","text":"void on_actionShow_Tool_Window_triggered ()","title":"slot on_actionShow_Tool_Window_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mesh_triggered","text":"void on_actionExport_PCA_Mesh_triggered ()","title":"slot on_actionExport_PCA_Mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvalues_triggered","text":"void on_actionExport_Eigenvalues_triggered ()","title":"slot on_actionExport_Eigenvalues_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_eigenvectors_triggered","text":"void on_actionExport_Eigenvectors_triggered ()","title":"slot on_actionExport_Eigenvectors_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_actionexport_pca_mode_points_triggered","text":"void on_actionExport_PCA_Mode_Points_triggered ()","title":"slot on_actionExport_PCA_Mode_Points_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_preferences_triggered","text":"void on_action_preferences_triggered ()","title":"slot on_action_preferences_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_current_mesh_triggered","text":"void action_export_current_mesh_triggered ( int index = 0 )","title":"slot action_export_current_mesh_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_current_particles_triggered","text":"void on_action_export_current_particles_triggered ()","title":"slot on_action_export_current_particles_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_mesh_scalars_triggered","text":"void on_action_export_mesh_scalars_triggered ()","title":"slot on_action_export_mesh_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_action_export_pca_scores_triggered","text":"void on_action_export_pca_scores_triggered ()","title":"slot on_action_export_pca_scores_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_pca_montage_triggered","text":"void action_export_pca_montage_triggered ()","title":"slot action_export_pca_montage_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_screenshot_triggered","text":"void action_export_screenshot_triggered ()","title":"slot action_export_screenshot_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_particle_scalars_triggered","text":"void action_export_particle_scalars_triggered ()","title":"slot action_export_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-action_export_all_subjects_particle_scalars_triggered","text":"void action_export_all_subjects_particle_scalars_triggered ()","title":"slot action_export_all_subjects_particle_scalars_triggered"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_center_checkbox_statechanged","text":"void on_center_checkbox_stateChanged ()","title":"slot on_center_checkbox_stateChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_zoom_slider_valuechanged","text":"void on_zoom_slider_valueChanged ()","title":"slot on_zoom_slider_valueChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_view_mode_combobox_currentindexchanged","text":"void on_view_mode_combobox_currentIndexChanged ( QString disp_mode )","title":"slot on_view_mode_combobox_currentIndexChanged"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-on_auto_view_button_clicked","text":"void on_auto_view_button_clicked ()","title":"slot on_auto_view_button_clicked"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_changed","text":"void handle_pca_changed ()","title":"slot handle_pca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_slider_update","text":"void handle_slider_update ()","title":"slot handle_slider_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_mca_changed","text":"void handle_mca_changed ()","title":"slot handle_mca_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_project_changed","text":"void handle_project_changed ()","title":"slot handle_project_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_points_changed","text":"void handle_points_changed ()","title":"slot handle_points_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_start","text":"void handle_groom_start ()","title":"slot handle_groom_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_groom_complete","text":"void handle_groom_complete ()","title":"slot handle_groom_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_start","text":"void handle_optimize_start ()","title":"slot handle_optimize_start"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_optimize_complete","text":"void handle_optimize_complete ()","title":"slot handle_optimize_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_reconstruction_complete","text":"void handle_reconstruction_complete ()","title":"slot handle_reconstruction_complete"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_display_setting_changed","text":"void handle_display_setting_changed ()","title":"slot handle_display_setting_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_glyph_changed","text":"void handle_glyph_changed ()","title":"slot handle_glyph_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_opacity_changed","text":"void handle_opacity_changed ()","title":"slot handle_opacity_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_alignment_changed","text":"void handle_alignment_changed ()","title":"slot handle_alignment_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_open_recent","text":"void handle_open_recent ()","title":"slot handle_open_recent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_color_scheme","text":"void handle_color_scheme ()","title":"slot handle_color_scheme"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_pca_update","text":"void handle_pca_update ()","title":"slot handle_pca_update"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-clear_message","text":"void clear_message ()","title":"slot clear_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_message","text":"void handle_message ( std :: string str )","title":"slot handle_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_error","text":"void handle_error ( std :: string str )","title":"slot handle_error"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_warning","text":"void handle_warning ( std :: string str )","title":"slot handle_warning"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_debug","text":"void handle_debug ( std :: string str )","title":"slot handle_debug"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_status","text":"void handle_status ( std :: string str )","title":"slot handle_status"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress_with_message","text":"void handle_progress_with_message ( int amt , std :: string str )","title":"slot handle_progress_with_message"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_progress","text":"void handle_progress ( int amt )","title":"slot handle_progress"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-message_callback","text":"void message_callback ( std :: string str )","title":"slot message_callback"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_new_mesh","text":"void handle_new_mesh ()","title":"slot handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_clear_cache","text":"void handle_clear_cache ()","title":"slot handle_clear_cache"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_compare_settings_changed","text":"void handle_compare_settings_changed ()","title":"slot handle_compare_settings_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-handle_lightbox_right_click","text":"void handle_lightbox_right_click ( int index )","title":"slot handle_lightbox_right_click"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_selection","text":"void update_feature_map_selection ( int index )","title":"slot update_feature_map_selection"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-update_feature_map_scale","text":"void update_feature_map_scale ()","title":"slot update_feature_map_scale"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-image_combo_changed","text":"void image_combo_changed ( int index )","title":"slot image_combo_changed"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-show_splash_screen","text":"void show_splash_screen ()","title":"slot show_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-hide_splash_screen","text":"void hide_splash_screen ()","title":"slot hide_splash_screen"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-about","text":"void about ()","title":"slot about"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-keyboard_shortcuts","text":"void keyboard_shortcuts ()","title":"slot keyboard_shortcuts"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-toggle_log_window","text":"void toggle_log_window ()","title":"slot toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-get_py_worker","text":"QSharedPointer < PythonWorker > get_py_worker ()","title":"slot get_py_worker"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-prefs","text":"inline Preferences & prefs ()","title":"slot prefs"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#slot-session","text":"inline QSharedPointer < Session > session ()","title":"slot session"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp","text":"ShapeWorksStudioApp ()","title":"function ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-shapeworksstudioapp_1","text":"~ ShapeWorksStudioApp ()","title":"function ~ShapeWorksStudioApp"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-closeevent","text":"void closeEvent ( QCloseEvent * event ) override","title":"function closeEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-initialize_vtk","text":"void initialize_vtk ()","title":"function initialize_vtk"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-import_files","text":"void import_files ( QStringList file_names )","title":"function import_files"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragenterevent","text":"void dragEnterEvent ( QDragEnterEvent * event ) override","title":"function dragEnterEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dragleaveevent","text":"void dragLeaveEvent ( QDragLeaveEvent * event ) override","title":"function dragLeaveEvent"},{"location":"api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html#function-dropevent","text":"void dropEvent ( QDropEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function dropEvent"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html","text":"title: shapeworks::Shape::Point summary: TODO: replace this wherever it is used. shapeworks::Shape::Point TODO: replace this wherever it is used. #include Public Functions Name Point () Point (double _x, double _y, double _z) Public Attributes Name double x double y double z Public Functions Documentation function Point inline Point () function Point inline Point ( double _x , double _y , double _z ) Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-25 at 15:40:27 +0000","title":"classshapeworks 1 1Shape 1 1Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#shapeworksshapepoint","text":"TODO: replace this wherever it is used. #include ","title":"shapeworks::Shape::Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions","text":"Name Point () Point (double _x, double _y, double _z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point","text":"inline Point ()","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#function-point_1","text":"inline Point ( double _x , double _y , double _z )","title":"function Point"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classshapeworks_1_1Shape_1_1Point.html#variable-z","text":"double z ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable z"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html","text":"shapeworks::ShapeworksCommand Inherits from shapeworks::Command Public Functions Name virtual const std::string type () override Additional inherited members Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser Public Functions Documentation function type inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#shapeworksshapeworkscommand","text":"Inherits from shapeworks::Command","title":"shapeworks::ShapeworksCommand"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions","text":"Name virtual const std::string type () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#additional-inherited-members","text":"Public Functions inherited from shapeworks::Command Name const std::string name () const const std::string usage () const const std::string desc () const std::vector< std::string > parse_args (const std::vector< std::string > & arguments) parses the arguments for this command, saving them in the parser and returning the leftovers int run ( SharedCommandData & sharedData) calls execute for this command using the parsed args, returning system exit value Protected Functions inherited from shapeworks::Command Name virtual void buildParser () Protected Attributes inherited from shapeworks::Command Name optparse::OptionParser parser","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksCommand.html#function-type","text":"inline virtual const std :: string type () override Reimplements : shapeworks::Command::type Updated on 2023-10-25 at 15:40:27 +0000","title":"function type"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html","text":"shapeworks::ShapeworksUtils Public Functions Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat) Public Functions Documentation function now static inline time_point now () get the current time function elapsed static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console function rngSeed static inline unsigned rngSeed () returns random seed function setRngSeed static void setRngSeed ( const unsigned seed ) sets random seed function generateNumber static inline unsigned generateNumber () generates random number function is_directory static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory function exists static bool exists ( const std :: string & filename ) returns true if filename exists function getMatrix static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector function getOffset static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#shapeworksshapeworksutils","text":"","title":"shapeworks::ShapeworksUtils"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions","text":"Name time_point now () get the current time double elapsed (time_point start, time_point end, bool print_elapsed =true) return elapsed time in seconds, optionally printing to console unsigned rngSeed () returns random seed void setRngSeed (const unsigned seed) sets random seed unsigned generateNumber () generates random number bool is_directory (const std::string & pathname) returns true if pathname is a directory bool exists (const std::string & filename) returns true if filename exists Matrix33 getMatrix (const vtkSmartPointer< vtkMatrix4x4 > & mat) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector Vector3 getOffset (const vtkSmartPointer< vtkMatrix4x4 > & mat)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-now","text":"static inline time_point now () get the current time","title":"function now"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-elapsed","text":"static double elapsed ( time_point start , time_point end , bool print_elapsed = true ) return elapsed time in seconds, optionally printing to console","title":"function elapsed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-rngseed","text":"static inline unsigned rngSeed () returns random seed","title":"function rngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-setrngseed","text":"static void setRngSeed ( const unsigned seed ) sets random seed","title":"function setRngSeed"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-generatenumber","text":"static inline unsigned generateNumber () generates random number","title":"function generateNumber"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-is_directory","text":"static bool is_directory ( const std :: string & pathname ) returns true if pathname is a directory","title":"function is_directory"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-exists","text":"static bool exists ( const std :: string & filename ) returns true if filename exists","title":"function exists"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getmatrix","text":"static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) converts a vtkMatrix4x4 to a Matrix33 and corresponding translationVector","title":"function getMatrix"},{"location":"api/Classes/classshapeworks_1_1ShapeworksUtils.html#function-getoffset","text":"static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function getOffset"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html","text":"shapeworks::ShapeworksWorker Inherits from QObject Public Types Name enum ThreadType Public Slots Name void process () Public Signals Name void result_ready () void failure () void finished () Public Functions Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker () Public Types Documentation enum ThreadType Enumerator Value Description GroomType OptimizeType ReconstructType Public Slots Documentation slot process void process () Public Signals Documentation signal result_ready void result_ready () signal failure void failure () signal finished void finished () Public Functions Documentation function ShapeworksWorker ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ) function ~ShapeworksWorker ~ ShapeworksWorker () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#shapeworksshapeworksworker","text":"Inherits from QObject","title":"shapeworks::ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types","text":"Name enum ThreadType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals","text":"Name void result_ready () void failure () void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions","text":"Name ShapeworksWorker (ThreadType type, QSharedPointer< Groom > groom, QSharedPointer< Optimize > optimize, QSharedPointer< OptimizeParameters > optimize_parameters, QSharedPointer< Session > session, double maxAngle =45., float decimationPercent =0.3f, int numClusters =5) ~ShapeworksWorker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#enum-threadtype","text":"Enumerator Value Description GroomType OptimizeType ReconstructType","title":"enum ThreadType"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-result_ready","text":"void result_ready ()","title":"signal result_ready"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-failure","text":"void failure ()","title":"signal failure"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker","text":"ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 )","title":"function ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1ShapeworksWorker.html#function-shapeworksworker_1","text":"~ ShapeworksWorker () Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~ShapeworksWorker"},{"location":"api/Classes/classshapeworks_1_1SliceView.html","text":"shapeworks::SliceView SliceView . More... #include Public Types Name enum SliceChange Public Functions Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z) Detailed Description class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer Public Types Documentation enum SliceChange Enumerator Value Description Down Up Public Functions Documentation function SliceView SliceView ( Viewer * viewer ) function set_volume void set_volume ( std :: shared_ptr < Image > volume ) function set_mesh void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ) function set_orientation void set_orientation ( int orientation ) function is_image_loaded bool is_image_loaded () function update_renderer void update_renderer () function update_camera void update_camera () function handle_key Point handle_key ( std :: string key ) function change_slice void change_slice ( SliceChange change ) function get_slice_position Point get_slice_position () function set_slice_position void set_slice_position ( Point point ) function set_window_and_level void set_window_and_level ( double window , double level ) function get_spacing double get_spacing () function get_orientation_index int get_orientation_index () function update_particles void update_particles () function get_viewer Viewer * get_viewer () function should_point_show bool should_point_show ( double x , double y , double z ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#shapeworkssliceview","text":"SliceView . More... #include ","title":"shapeworks::SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types","text":"Name enum SliceChange","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions","text":"Name SliceView ( Viewer * viewer) void set_volume (std::shared_ptr< Image > volume) void set_mesh (vtkSmartPointer< vtkPolyData > poly_data) void set_orientation (int orientation) bool is_image_loaded () void update_renderer () void update_camera () Point handle_key (std::string key) void change_slice (SliceChange change) Point get_slice_position () void set_slice_position (Point point) void set_window_and_level (double window, double level) double get_spacing () int get_orientation_index () void update_particles () Viewer * get_viewer () bool should_point_show (double x, double y, double z)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#detailed-description","text":"class shapeworks :: SliceView ; SliceView . Provide slice viewing to the Viewer","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#enum-slicechange","text":"Enumerator Value Description Down Up","title":"enum SliceChange"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-sliceview","text":"SliceView ( Viewer * viewer )","title":"function SliceView"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_volume","text":"void set_volume ( std :: shared_ptr < Image > volume )","title":"function set_volume"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_mesh","text":"void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data )","title":"function set_mesh"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_orientation","text":"void set_orientation ( int orientation )","title":"function set_orientation"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-is_image_loaded","text":"bool is_image_loaded ()","title":"function is_image_loaded"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_renderer","text":"void update_renderer ()","title":"function update_renderer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_camera","text":"void update_camera ()","title":"function update_camera"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-handle_key","text":"Point handle_key ( std :: string key )","title":"function handle_key"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-change_slice","text":"void change_slice ( SliceChange change )","title":"function change_slice"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_slice_position","text":"Point get_slice_position ()","title":"function get_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_slice_position","text":"void set_slice_position ( Point point )","title":"function set_slice_position"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-set_window_and_level","text":"void set_window_and_level ( double window , double level )","title":"function set_window_and_level"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_spacing","text":"double get_spacing ()","title":"function get_spacing"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_orientation_index","text":"int get_orientation_index ()","title":"function get_orientation_index"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-update_particles","text":"void update_particles ()","title":"function update_particles"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-get_viewer","text":"Viewer * get_viewer ()","title":"function get_viewer"},{"location":"api/Classes/classshapeworks_1_1SliceView.html#function-should_point_show","text":"bool should_point_show ( double x , double y , double z ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function should_point_show"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html","text":"shapeworks::SplashScreen More... #include Inherits from QDialog Public Signals Name void open_project (QString file_path) signal to open a particular project Public Functions Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor Detailed Description class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects Public Signals Documentation signal open_project void open_project ( QString file_path ) signal to open a particular project Public Functions Documentation function SplashScreen SplashScreen ( QWidget * parent , Preferences & preferences ) constructor function ~SplashScreen virtual ~ SplashScreen () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#shapeworkssplashscreen","text":"More... #include Inherits from QDialog","title":"shapeworks::SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals","text":"Name void open_project (QString file_path) signal to open a particular project","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions","text":"Name SplashScreen (QWidget * parent, Preferences & preferences) constructor virtual ~SplashScreen () destructor","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#detailed-description","text":"class shapeworks :: SplashScreen ; The SplashScreen is a QDialog that implements the user interface for the Studio Splash Screen It supports a recent file list as well as loading other existing projects","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#signal-open_project","text":"void open_project ( QString file_path ) signal to open a particular project","title":"signal open_project"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen","text":"SplashScreen ( QWidget * parent , Preferences & preferences ) constructor","title":"function SplashScreen"},{"location":"api/Classes/classshapeworks_1_1SplashScreen.html#function-splashscreen_1","text":"virtual ~ SplashScreen () destructor Updated on 2023-10-25 at 15:40:27 +0000","title":"function ~SplashScreen"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html","text":"shapeworks::StatsGroupLDAJob Inherits from shapeworks::Job , QObject Public Functions Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name) Additional inherited members Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted? Public Functions Documentation function StatsGroupLDAJob StatsGroupLDAJob () function set_stats void set_stats ( ParticleShapeStatistics stats ) function run virtual void run () override run the job Reimplements : shapeworks::Job::run function name virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name function get_group_pvalues Eigen :: VectorXf get_group_pvalues () function plot void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#shapeworksstatsgroupldajob","text":"Inherits from shapeworks::Job , QObject","title":"shapeworks::StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions","text":"Name StatsGroupLDAJob () void set_stats ( ParticleShapeStatistics stats) virtual void run () override run the job virtual QString name () override get the name of the job Eigen::VectorXf get_group_pvalues () void plot (JKQTPlotter * plot, QString group_1_name, QString group_2_name)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#additional-inherited-members","text":"Public Signals inherited from shapeworks::Job Name void progress (double ) void finished () Public Functions inherited from shapeworks::Job Name Job () virtual ~Job () virtual QString get_completion_message () get a message to display when the job is complete virtual QString get_abort_message () get a message to display when the job is aborted void start_timer () start the timer qint64 timer_elapsed () how much time has elapsed since the timer was started void set_complete (bool complete) set the job as complete bool is_complete () const is the job complete? void abort () abort the job bool is_aborted () const was the job aborted?","title":"Additional inherited members"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-statsgroupldajob","text":"StatsGroupLDAJob ()","title":"function StatsGroupLDAJob"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-set_stats","text":"void set_stats ( ParticleShapeStatistics stats )","title":"function set_stats"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-run","text":"virtual void run () override run the job Reimplements : shapeworks::Job::run","title":"function run"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-name","text":"virtual QString name () override get the name of the job Reimplements : shapeworks::Job::name","title":"function name"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-get_group_pvalues","text":"Eigen :: VectorXf get_group_pvalues ()","title":"function get_group_pvalues"},{"location":"api/Classes/classshapeworks_1_1StatsGroupLDAJob.html#function-plot","text":"void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function plot"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html","text":"shapeworks::StatusBarWidget StatusBarWidget . More... #include Inherits from QWidget Public Signals Name void toggle_log_window () Public Functions Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override Detailed Description class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar Public Signals Documentation signal toggle_log_window void toggle_log_window () Public Functions Documentation function StatusBarWidget StatusBarWidget ( QMainWindow * parent = 0 ) function set_message void set_message ( MessageType message_type , QString message ) function set_progress void set_progress ( int value ) function resizeEvent void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#shapeworksstatusbarwidget","text":"StatusBarWidget . More... #include Inherits from QWidget","title":"shapeworks::StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals","text":"Name void toggle_log_window ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions","text":"Name StatusBarWidget (QMainWindow * parent =0) void set_message (MessageType message_type, QString message) void set_progress (int value) void resizeEvent (QResizeEvent * event) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#detailed-description","text":"class shapeworks :: StatusBarWidget ; StatusBarWidget . This widget is used in place of the standard QStatusBar It supports a log window toggle, current message, with color, and progressbar","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#signal-toggle_log_window","text":"void toggle_log_window ()","title":"signal toggle_log_window"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-statusbarwidget","text":"StatusBarWidget ( QMainWindow * parent = 0 )","title":"function StatusBarWidget"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_message","text":"void set_message ( MessageType message_type , QString message )","title":"function set_message"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-set_progress","text":"void set_progress ( int value )","title":"function set_progress"},{"location":"api/Classes/classshapeworks_1_1StatusBarWidget.html#function-resizeevent","text":"void resizeEvent ( QResizeEvent * event ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function resizeEvent"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html","text":"shapeworks::StringUtils String utility functions. #include Public Functions Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement. Public Functions Documentation function removeExtension static std :: string removeExtension ( std :: string const & filename ) function getPath static std :: string getPath ( std :: string const & filename ) function getFilename static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return. function getBaseFilenameWithoutExtension static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension. function toLower static std :: string toLower ( std :: string s ) function hasSuffix static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ) function getFileNamesFromPaths static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths ) function getLowerExtension static std :: string getLowerExtension ( std :: string const & filename ) function safeString static inline std :: string safeString ( const char * s ) function replace_string static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#shapeworksstringutils","text":"String utility functions. #include ","title":"shapeworks::StringUtils"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions","text":"Name std::string removeExtension (std::string const & filename) std::string getPath (std::string const & filename) std::string getFilename (std::string const & pathname) Remove path from filename and return. std::string getBaseFilenameWithoutExtension (std::string const & pathname) Get just the filename without path and without extension. std::string toLower (std::string s) bool hasSuffix (std::string const & filename, std::string const & suffix) std::vector< std::string > getFileNamesFromPaths (const std::vector< std::string > & paths) std::string getLowerExtension (std::string const & filename) std::string safeString (const char * s) std::string replace_string (std::string str, const std::string & search, const std::string & replace) Replace a search string with a replacement.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-removeextension","text":"static std :: string removeExtension ( std :: string const & filename )","title":"function removeExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getpath","text":"static std :: string getPath ( std :: string const & filename )","title":"function getPath"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilename","text":"static std :: string getFilename ( std :: string const & pathname ) Remove path from filename and return.","title":"function getFilename"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getbasefilenamewithoutextension","text":"static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ) Get just the filename without path and without extension.","title":"function getBaseFilenameWithoutExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-tolower","text":"static std :: string toLower ( std :: string s )","title":"function toLower"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-hassuffix","text":"static bool hasSuffix ( std :: string const & filename , std :: string const & suffix )","title":"function hasSuffix"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getfilenamesfrompaths","text":"static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string > & paths )","title":"function getFileNamesFromPaths"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-getlowerextension","text":"static std :: string getLowerExtension ( std :: string const & filename )","title":"function getLowerExtension"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-safestring","text":"static inline std :: string safeString ( const char * s )","title":"function safeString"},{"location":"api/Classes/classshapeworks_1_1StringUtils.html#function-replace_string","text":"static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ) Replace a search string with a replacement. Updated on 2023-10-25 at 15:40:27 +0000","title":"function replace_string"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html","text":"shapeworks::StudioHandleWidget Inherits from vtkHandleWidget Public Functions Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget) Protected Functions Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w) Protected Attributes Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_ Public Functions Documentation function New static StudioHandleWidget * New () function StudioHandleWidget StudioHandleWidget () function set_domain inline void set_domain ( int domain ) function set_plane inline void set_plane ( int plane ) function set_point inline void set_point ( int point ) function set_plane_widget inline void set_plane_widget ( PlaneWidget * plane_widget ) Protected Functions Documentation function RightClickSelectAction static void RightClickSelectAction ( vtkAbstractWidget * w ) function CustomMoveAction static void CustomMoveAction ( vtkAbstractWidget * w ) function CustomSelectAction static void CustomSelectAction ( vtkAbstractWidget * w ) function CustomEndSelectAction static void CustomEndSelectAction ( vtkAbstractWidget * w ) Protected Attributes Documentation variable domain_ int domain_ = -1 ; variable plane_ int plane_ = -1 ; variable point_ int point_ = -1 ; variable plane_widget_ PlaneWidget * plane_widget_ ; variable shift_active_ bool shift_active_ = false ; variable start_y_ int start_y_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#shapeworksstudiohandlewidget","text":"Inherits from vtkHandleWidget","title":"shapeworks::StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions","text":"Name StudioHandleWidget * New () StudioHandleWidget () void set_domain (int domain) void set_plane (int plane) void set_point (int point) void set_plane_widget ( PlaneWidget * plane_widget)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions","text":"Name void RightClickSelectAction (vtkAbstractWidget * w) void CustomMoveAction (vtkAbstractWidget * w) void CustomSelectAction (vtkAbstractWidget * w) void CustomEndSelectAction (vtkAbstractWidget * w)","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes","text":"Name int domain_ int plane_ int point_ PlaneWidget * plane_widget_ bool shift_active_ int start_y_","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-new","text":"static StudioHandleWidget * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-studiohandlewidget","text":"StudioHandleWidget ()","title":"function StudioHandleWidget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_domain","text":"inline void set_domain ( int domain )","title":"function set_domain"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane","text":"inline void set_plane ( int plane )","title":"function set_plane"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_point","text":"inline void set_point ( int point )","title":"function set_point"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-set_plane_widget","text":"inline void set_plane_widget ( PlaneWidget * plane_widget )","title":"function set_plane_widget"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-rightclickselectaction","text":"static void RightClickSelectAction ( vtkAbstractWidget * w )","title":"function RightClickSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-custommoveaction","text":"static void CustomMoveAction ( vtkAbstractWidget * w )","title":"function CustomMoveAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customselectaction","text":"static void CustomSelectAction ( vtkAbstractWidget * w )","title":"function CustomSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#function-customendselectaction","text":"static void CustomEndSelectAction ( vtkAbstractWidget * w )","title":"function CustomEndSelectAction"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-domain_","text":"int domain_ = -1 ;","title":"variable domain_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_","text":"int plane_ = -1 ;","title":"variable plane_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-point_","text":"int point_ = -1 ;","title":"variable point_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-plane_widget_","text":"PlaneWidget * plane_widget_ ;","title":"variable plane_widget_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-shift_active_","text":"bool shift_active_ = false ;","title":"variable shift_active_"},{"location":"api/Classes/classshapeworks_1_1StudioHandleWidget.html#variable-start_y_","text":"int start_y_ = 0 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable start_y_"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html","text":"shapeworks::StudioInteractorStyle Inherits from vtkInteractorStyleTrackballCamera Public Functions Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override Protected Functions Name void Dolly (double factor) override Public Functions Documentation function New static StudioInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioInteractorStyle StudioInteractorStyle () function ~StudioInteractorStyle virtual ~ StudioInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnRightButtonUp void OnRightButtonUp () override function OnMouseWheelForward void OnMouseWheelForward () override function OnMouseWheelBackward void OnMouseWheelBackward () override function OnKeyDown void OnKeyDown () override function Dolly void Dolly () override function Rotate void Rotate () override function OnMouseMove void OnMouseMove () override Protected Functions Documentation function Dolly void Dolly ( double factor ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#shapeworksstudiointeractorstyle","text":"Inherits from vtkInteractorStyleTrackballCamera","title":"shapeworks::StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions","text":"Name StudioInteractorStyle * New () vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ) void set_lightbox ( Lightbox * lightbox) StudioInteractorStyle () virtual ~StudioInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnRightButtonUp () override void OnMouseWheelForward () override void OnMouseWheelBackward () override void OnKeyDown () override void Dolly () override void Rotate () override void OnMouseMove () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions","text":"Name void Dolly (double factor) override","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-new","text":"static StudioInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle","text":"StudioInteractorStyle ()","title":"function StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-studiointeractorstyle_1","text":"virtual ~ StudioInteractorStyle ()","title":"function ~StudioInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onrightbuttonup","text":"void OnRightButtonUp () override","title":"function OnRightButtonUp"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelforward","text":"void OnMouseWheelForward () override","title":"function OnMouseWheelForward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousewheelbackward","text":"void OnMouseWheelBackward () override","title":"function OnMouseWheelBackward"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly","text":"void Dolly () override","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-rotate","text":"void Rotate () override","title":"function Rotate"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-onmousemove","text":"void OnMouseMove () override","title":"function OnMouseMove"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioInteractorStyle.html#function-dolly_1","text":"void Dolly ( double factor ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function Dolly"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html","text":"shapeworks::StudioMesh Representation of a single mesh. More... #include Public Functions Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Name constexpr const char *const FFC_PAINT Detailed Description class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class Public Functions Documentation function StudioMesh StudioMesh () Constructor. function ~StudioMesh ~ StudioMesh () Destructor. function get_poly_data vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata. function set_poly_data void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly. function set_error_message void set_error_message ( std :: string error_message ) Set the error message. function get_error_message std :: string get_error_message () Return the error message. function apply_feature_map void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map. function apply_scalars void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform. function interpolate_scalars_to_mesh void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh. function get_largest_dimension_size double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) function get_or_create_array vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name. function paint_ffc void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint. function has_ffc_paint bool has_ffc_paint () Does this mesh have free form constraint paint? Public Attributes Documentation variable FFC_PAINT static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#shapeworksstudiomesh","text":"Representation of a single mesh. More... #include ","title":"shapeworks::StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions","text":"Name StudioMesh () Constructor. ~StudioMesh () Destructor. vtkSmartPointer< vtkPolyData > get_poly_data () Get the mesh polydata. void set_poly_data (vtkSmartPointer< vtkPolyData > poly_data) Set the poly data directly. void set_error_message (std::string error_message) Set the error message. std::string get_error_message () Return the error message. void apply_feature_map (std::string name, ImageType::Pointer image) Apply a feature map. void apply_scalars (MeshHandle mesh) Apply scalars from another mesh, with a transform. void interpolate_scalars_to_mesh (std::string name, Eigen::VectorXd positions, Eigen::VectorXf scalar_values) Interpolation scalars at positions to this mesh. double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100) vtkFloatArray * get_or_create_array (std::string name, float default_value) Get or create and return an array with a given name. void paint_ffc (double world_pos[], double radius, bool inclusive) Paint free form constraint. bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes","text":"Name constexpr const char *const FFC_PAINT","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#detailed-description","text":"class shapeworks :: StudioMesh ; Representation of a single mesh. The Mesh class represents a single mesh generated from an image file or set of particles. It is responsible for loading the image and generating a mesh from it. TODO: Merge this functionality with Libs/Mesh/Mesh class","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh","text":"StudioMesh () Constructor.","title":"function StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-studiomesh_1","text":"~ StudioMesh () Destructor.","title":"function ~StudioMesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_poly_data","text":"vtkSmartPointer < vtkPolyData > get_poly_data () Get the mesh polydata.","title":"function get_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_poly_data","text":"void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) Set the poly data directly.","title":"function set_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-set_error_message","text":"void set_error_message ( std :: string error_message ) Set the error message.","title":"function set_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_error_message","text":"std :: string get_error_message () Return the error message.","title":"function get_error_message"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_feature_map","text":"void apply_feature_map ( std :: string name , ImageType :: Pointer image ) Apply a feature map.","title":"function apply_feature_map"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-apply_scalars","text":"void apply_scalars ( MeshHandle mesh ) Apply scalars from another mesh, with a transform.","title":"function apply_scalars"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-interpolate_scalars_to_mesh","text":"void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ) Interpolation scalars at positions to this mesh.","title":"function interpolate_scalars_to_mesh"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_largest_dimension_size","text":"double get_largest_dimension_size () Return the range of largest axis (e.g. 200 for an object that sits in 100x200x100)","title":"function get_largest_dimension_size"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-get_or_create_array","text":"vtkFloatArray * get_or_create_array ( std :: string name , float default_value ) Get or create and return an array with a given name.","title":"function get_or_create_array"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-paint_ffc","text":"void paint_ffc ( double world_pos [], double radius , bool inclusive ) Paint free form constraint.","title":"function paint_ffc"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#function-has_ffc_paint","text":"bool has_ffc_paint () Does this mesh have free form constraint paint?","title":"function has_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioMesh.html#variable-ffc_paint","text":"static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable FFC_PAINT"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html","text":"shapeworks::StudioSliceInteractorStyle Inherits from vtkInteractorStyleImage Public Functions Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override Public Functions Documentation function New static StudioSliceInteractorStyle * New () function vtkTypeMacro vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) function set_lightbox void set_lightbox ( Lightbox * lightbox ) function StudioSliceInteractorStyle StudioSliceInteractorStyle () function ~StudioSliceInteractorStyle virtual ~ StudioSliceInteractorStyle () function OnLeftButtonDown void OnLeftButtonDown () override function OnRightButtonDown void OnRightButtonDown () override function OnKeyDown void OnKeyDown () override function WindowLevel void WindowLevel () override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#shapeworksstudiosliceinteractorstyle","text":"Inherits from vtkInteractorStyleImage","title":"shapeworks::StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions","text":"Name StudioSliceInteractorStyle * New () vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ) void set_lightbox ( Lightbox * lightbox) StudioSliceInteractorStyle () virtual ~StudioSliceInteractorStyle () void OnLeftButtonDown () override void OnRightButtonDown () override void OnKeyDown () override void WindowLevel () override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-new","text":"static StudioSliceInteractorStyle * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-set_lightbox","text":"void set_lightbox ( Lightbox * lightbox )","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle","text":"StudioSliceInteractorStyle ()","title":"function StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-studiosliceinteractorstyle_1","text":"virtual ~ StudioSliceInteractorStyle ()","title":"function ~StudioSliceInteractorStyle"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onleftbuttondown","text":"void OnLeftButtonDown () override","title":"function OnLeftButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onrightbuttondown","text":"void OnRightButtonDown () override","title":"function OnRightButtonDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-onkeydown","text":"void OnKeyDown () override","title":"function OnKeyDown"},{"location":"api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html#function-windowlevel","text":"void WindowLevel () override Updated on 2023-10-25 at 15:40:27 +0000","title":"function WindowLevel"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html","text":"shapeworks::StudioUtils Utilities for Studio. #include Public Functions Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport Public Functions Documentation function ask_multiple_domains_as_single static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ) function to_string_list static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList function vtk_image_to_qimage static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage function reverse_poly_data static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data function get_platform_string static QString get_platform_string () return platform string function add_viewport_border static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#shapeworksstudioutils","text":"Utilities for Studio. #include ","title":"shapeworks::StudioUtils"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions","text":"Name bool ask_multiple_domains_as_single (QWidget * parent, std::shared_ptr< Project > project) QStringList to_string_list (std::vector< std::string > vector) convert a vector of std::string to QStringList QImage vtk_image_to_qimage (vtkSmartPointer< vtkImageData > image_data) convert vtkImageData to QImage vtkSmartPointer< vtkPolyData > reverse_poly_data (vtkSmartPointer< vtkPolyData > poly_data) reverse a poly data QString get_platform_string () return platform string void add_viewport_border (vtkRenderer * renderer, double * color) add a color border to a viewport","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-ask_multiple_domains_as_single","text":"static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project )","title":"function ask_multiple_domains_as_single"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-to_string_list","text":"static QStringList to_string_list ( std :: vector < std :: string > vector ) convert a vector of std::string to QStringList","title":"function to_string_list"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-vtk_image_to_qimage","text":"static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ) convert vtkImageData to QImage","title":"function vtk_image_to_qimage"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-reverse_poly_data","text":"static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ) reverse a poly data","title":"function reverse_poly_data"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-get_platform_string","text":"static QString get_platform_string () return platform string","title":"function get_platform_string"},{"location":"api/Classes/classshapeworks_1_1StudioUtils.html#function-add_viewport_border","text":"static void add_viewport_border ( vtkRenderer * renderer , double * color ) add a color border to a viewport Updated on 2023-10-25 at 15:40:27 +0000","title":"function add_viewport_border"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html","text":"shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow Public Functions Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override Public Functions Documentation function New static StudioVtkOutputWindow * New () function vtkTypeMacro vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) function StudioVtkOutputWindow StudioVtkOutputWindow () function DisplayErrorText void DisplayErrorText ( const char * text ) override function DisplayWarningText void DisplayWarningText ( const char * text ) override function DisplayGenericWarningText void DisplayGenericWarningText ( const char * text ) override function DisplayDebugText void DisplayDebugText ( const char * text ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#shapeworksstudiovtkoutputwindow","text":"Implementation of vtkOutputWindow to capture and display VTK error messages. #include Inherits from QObject, vtkOutputWindow","title":"shapeworks::StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions","text":"Name StudioVtkOutputWindow * New () vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ) StudioVtkOutputWindow () void DisplayErrorText (const char * text) override void DisplayWarningText (const char * text) override void DisplayGenericWarningText (const char * text) override void DisplayDebugText (const char * text) override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-new","text":"static StudioVtkOutputWindow * New ()","title":"function New"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-vtktypemacro","text":"vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow )","title":"function vtkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-studiovtkoutputwindow","text":"StudioVtkOutputWindow ()","title":"function StudioVtkOutputWindow"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displayerrortext","text":"void DisplayErrorText ( const char * text ) override","title":"function DisplayErrorText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaywarningtext","text":"void DisplayWarningText ( const char * text ) override","title":"function DisplayWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaygenericwarningtext","text":"void DisplayGenericWarningText ( const char * text ) override","title":"function DisplayGenericWarningText"},{"location":"api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html#function-displaydebugtext","text":"void DisplayDebugText ( const char * text ) override Updated on 2023-10-25 at 15:40:27 +0000","title":"function DisplayDebugText"},{"location":"api/Classes/classshapeworks_1_1Style.html","text":"shapeworks::Style Public Functions Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button) Public Functions Documentation function Style Style () function apply_normal_button_style static void apply_normal_button_style ( QPushButton * button ) function apply_abort_button_style static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#shapeworksstyle","text":"","title":"shapeworks::Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions","text":"Name Style () void apply_normal_button_style (QPushButton * button) void apply_abort_button_style (QPushButton * button)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Style.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-style","text":"Style ()","title":"function Style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_normal_button_style","text":"static void apply_normal_button_style ( QPushButton * button )","title":"function apply_normal_button_style"},{"location":"api/Classes/classshapeworks_1_1Style.html#function-apply_abort_button_style","text":"static void apply_abort_button_style ( QPushButton * button ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function apply_abort_button_style"},{"location":"api/Classes/classshapeworks_1_1Subject.html","text":"shapeworks::Subject Representation of a single subject. More... #include Public Types Name using project::types::StringMap StringMap using project::types::StringList StringList Public Functions Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not. Detailed Description class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it. Public Types Documentation using StringMap using shapeworks :: Subject :: StringMap = project :: types :: StringMap ; using StringList using shapeworks :: Subject :: StringList = project :: types :: StringList ; Public Functions Documentation function Subject Subject () function ~Subject ~ Subject () function set_original_filenames void set_original_filenames ( StringList filenames ) Set original filenames (one per domain) function get_original_filenames StringList get_original_filenames () Get original filenames. function set_groomed_filenames void set_groomed_filenames ( StringList filenames ) Set groomed filenames. function get_groomed_filenames StringList get_groomed_filenames () Get groomed filenames. function set_local_particle_filenames void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain) function get_local_particle_filenames StringList get_local_particle_filenames () Get local particle filenames. function set_world_particle_filenames void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames. function get_world_particle_filenames StringList get_world_particle_filenames () Get the world particle filenames. function set_landmarks_filenames void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain) function get_landmarks_filenames StringList get_landmarks_filenames () Set the landmarks filenames. function set_constraints_filenames void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain) function get_constraints_filenames StringList get_constraints_filenames () Set the constratins filenames. function set_number_of_domains void set_number_of_domains ( int number_of_domains ) Set the number of domains. function get_number_of_domains int get_number_of_domains () Get the number of domains. function get_feature_filenames StringMap get_feature_filenames () const Get the feature map filenames. function set_feature_filenames void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames. function get_groomed_transforms std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) function set_groomed_transforms void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain) function set_groomed_transform void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform. function get_procrustes_transforms std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) function set_procrustes_transforms void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain) function get_group_values StringMap get_group_values () const Get the group values. function get_group_value std :: string get_group_value ( std :: string group_name ) Get a specific group value. function set_group_values void set_group_values ( const StringMap & group_values ) Set the group values. function get_extra_values StringMap get_extra_values () const Get extra values (extra columns we don't interpret) function set_extra_values void set_extra_values ( StringMap extra_values ) function get_table_values StringMap get_table_values () const Get all table values. function set_table_values void set_table_values ( StringMap table_values ) function get_display_name std :: string get_display_name () Get the display name. function set_display_name void set_display_name ( std :: string display_name ) Set the display name. function is_fixed bool is_fixed () Get if this subject is fixed or not. function set_fixed void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#shapeworkssubject","text":"Representation of a single subject. More... #include ","title":"shapeworks::Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types","text":"Name using project::types::StringMap StringMap using project::types::StringList StringList","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions","text":"Name Subject () ~Subject () void set_original_filenames (StringList filenames) Set original filenames (one per domain) StringList get_original_filenames () Get original filenames. void set_groomed_filenames (StringList filenames) Set groomed filenames. StringList get_groomed_filenames () Get groomed filenames. void set_local_particle_filenames (StringList filenames) Set local particle filenames (one per domain) StringList get_local_particle_filenames () Get local particle filenames. void set_world_particle_filenames (StringList filenames) Set the world particle filenames. StringList get_world_particle_filenames () Get the world particle filenames. void set_landmarks_filenames (StringList filenames) Get the landmarks filenames (one per domain) StringList get_landmarks_filenames () Set the landmarks filenames. void set_constraints_filenames (StringList filenames) Get the constraints filenames (one per domain) StringList get_constraints_filenames () Set the constratins filenames. void set_number_of_domains (int number_of_domains) Set the number of domains. int get_number_of_domains () Get the number of domains. StringMap get_feature_filenames () const Get the feature map filenames. void set_feature_filenames (const StringMap & feature_filenames) Set the feature map filenames. std::vector< std::vector< double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain) void set_groomed_transforms (std::vector< std::vector< double > > transforms) Set the groomed transforms (one vector per domain) void set_groomed_transform (int i, std::vector< double > transform) Set the i-th groomed transform. std::vector< std::vector< double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain) void set_procrustes_transforms (std::vector< std::vector< double > > transforms) Set the procrustes transforms (one vector per domain) StringMap get_group_values () const Get the group values. std::string get_group_value (std::string group_name) Get a specific group value. void set_group_values (const StringMap & group_values) Set the group values. StringMap get_extra_values () const Get extra values (extra columns we don't interpret) void set_extra_values (StringMap extra_values) StringMap get_table_values () const Get all table values. void set_table_values (StringMap table_values) std::string get_display_name () Get the display name. void set_display_name (std::string display_name) Set the display name. bool is_fixed () Get if this subject is fixed or not. void set_fixed (bool fixed) Set if this subject is fixed or not.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Subject.html#detailed-description","text":"class shapeworks :: Subject ; Representation of a single subject. The Subject class encapsulates one \"sample\" in the shapeworks system (e.g. one row in a spreadsheet project) A Subject may have multiple segmentations/domains associated with it.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringmap","text":"using shapeworks :: Subject :: StringMap = project :: types :: StringMap ;","title":"using StringMap"},{"location":"api/Classes/classshapeworks_1_1Subject.html#using-stringlist","text":"using shapeworks :: Subject :: StringList = project :: types :: StringList ;","title":"using StringList"},{"location":"api/Classes/classshapeworks_1_1Subject.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject","text":"Subject ()","title":"function Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-subject_1","text":"~ Subject ()","title":"function ~Subject"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_original_filenames","text":"void set_original_filenames ( StringList filenames ) Set original filenames (one per domain)","title":"function set_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_original_filenames","text":"StringList get_original_filenames () Get original filenames.","title":"function get_original_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_filenames","text":"void set_groomed_filenames ( StringList filenames ) Set groomed filenames.","title":"function set_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_filenames","text":"StringList get_groomed_filenames () Get groomed filenames.","title":"function get_groomed_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_local_particle_filenames","text":"void set_local_particle_filenames ( StringList filenames ) Set local particle filenames (one per domain)","title":"function set_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_local_particle_filenames","text":"StringList get_local_particle_filenames () Get local particle filenames.","title":"function get_local_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_world_particle_filenames","text":"void set_world_particle_filenames ( StringList filenames ) Set the world particle filenames.","title":"function set_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_world_particle_filenames","text":"StringList get_world_particle_filenames () Get the world particle filenames.","title":"function get_world_particle_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_landmarks_filenames","text":"void set_landmarks_filenames ( StringList filenames ) Get the landmarks filenames (one per domain)","title":"function set_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_landmarks_filenames","text":"StringList get_landmarks_filenames () Set the landmarks filenames.","title":"function get_landmarks_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_constraints_filenames","text":"void set_constraints_filenames ( StringList filenames ) Get the constraints filenames (one per domain)","title":"function set_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_constraints_filenames","text":"StringList get_constraints_filenames () Set the constratins filenames.","title":"function get_constraints_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_number_of_domains","text":"void set_number_of_domains ( int number_of_domains ) Set the number of domains.","title":"function set_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_number_of_domains","text":"int get_number_of_domains () Get the number of domains.","title":"function get_number_of_domains"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_feature_filenames","text":"StringMap get_feature_filenames () const Get the feature map filenames.","title":"function get_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_feature_filenames","text":"void set_feature_filenames ( const StringMap & feature_filenames ) Set the feature map filenames.","title":"function set_feature_filenames"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_groomed_transforms","text":"std :: vector < std :: vector < double > > get_groomed_transforms () const Get the groomed transforms (one vector per domain)","title":"function get_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transforms","text":"void set_groomed_transforms ( std :: vector < std :: vector < double > > transforms ) Set the groomed transforms (one vector per domain)","title":"function set_groomed_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_groomed_transform","text":"void set_groomed_transform ( int i , std :: vector < double > transform ) Set the i-th groomed transform.","title":"function set_groomed_transform"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_procrustes_transforms","text":"std :: vector < std :: vector < double > > get_procrustes_transforms () const Get the procrustes transforms (one vector per domain)","title":"function get_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_procrustes_transforms","text":"void set_procrustes_transforms ( std :: vector < std :: vector < double > > transforms ) Set the procrustes transforms (one vector per domain)","title":"function set_procrustes_transforms"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_values","text":"StringMap get_group_values () const Get the group values.","title":"function get_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_group_value","text":"std :: string get_group_value ( std :: string group_name ) Get a specific group value.","title":"function get_group_value"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_group_values","text":"void set_group_values ( const StringMap & group_values ) Set the group values.","title":"function set_group_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_extra_values","text":"StringMap get_extra_values () const Get extra values (extra columns we don't interpret)","title":"function get_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_extra_values","text":"void set_extra_values ( StringMap extra_values )","title":"function set_extra_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_table_values","text":"StringMap get_table_values () const Get all table values.","title":"function get_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_table_values","text":"void set_table_values ( StringMap table_values )","title":"function set_table_values"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-get_display_name","text":"std :: string get_display_name () Get the display name.","title":"function get_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_display_name","text":"void set_display_name ( std :: string display_name ) Set the display name.","title":"function set_display_name"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-is_fixed","text":"bool is_fixed () Get if this subject is fixed or not.","title":"function is_fixed"},{"location":"api/Classes/classshapeworks_1_1Subject.html#function-set_fixed","text":"void set_fixed ( bool fixed ) Set if this subject is fixed or not. Updated on 2023-10-25 at 15:40:27 +0000","title":"function set_fixed"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html","text":"shapeworks::Telemetry Inherits from QObject Public Slots Name void handle_network_reply (QNetworkReply * reply) Public Functions Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params) Public Slots Documentation slot handle_network_reply void handle_network_reply ( QNetworkReply * reply ) Public Functions Documentation function Telemetry Telemetry ( Preferences & prefs ) function record_event void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#shapeworkstelemetry","text":"Inherits from QObject","title":"shapeworks::Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots","text":"Name void handle_network_reply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions","text":"Name Telemetry ( Preferences & prefs) void record_event (const QString & name, const QVariantMap & params)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#slot-handle_network_reply","text":"void handle_network_reply ( QNetworkReply * reply )","title":"slot handle_network_reply"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-telemetry","text":"Telemetry ( Preferences & prefs )","title":"function Telemetry"},{"location":"api/Classes/classshapeworks_1_1Telemetry.html#function-record_event","text":"void record_event ( const QString & name , const QVariantMap & params ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function record_event"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html","text":"shapeworks::UpdateChecker Update Checker. More... #include Inherits from QDialog Public Slots Name void handleNetworkReply (QNetworkReply * reply) Public Functions Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check () Detailed Description class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog Public Slots Documentation slot handleNetworkReply void handleNetworkReply ( QNetworkReply * reply ) Public Functions Documentation function UpdateChecker explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ) function ~UpdateChecker ~ UpdateChecker () function run_auto_update_check void run_auto_update_check () function run_manual_update_check void run_manual_update_check () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#shapeworksupdatechecker","text":"Update Checker. More... #include Inherits from QDialog","title":"shapeworks::UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots","text":"Name void handleNetworkReply (QNetworkReply * reply)","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions","text":"Name UpdateChecker ( Preferences & prefs, QWidget * parent =nullptr) ~UpdateChecker () void run_auto_update_check () void run_manual_update_check ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#detailed-description","text":"class shapeworks :: UpdateChecker ; Update Checker. This class checks for new versions of ShapeWorks and informs the user with a dialog","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#slot-handlenetworkreply","text":"void handleNetworkReply ( QNetworkReply * reply )","title":"slot handleNetworkReply"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker","text":"explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr )","title":"function UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-updatechecker_1","text":"~ UpdateChecker ()","title":"function ~UpdateChecker"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_auto_update_check","text":"void run_auto_update_check ()","title":"function run_auto_update_check"},{"location":"api/Classes/classshapeworks_1_1UpdateChecker.html#function-run_manual_update_check","text":"void run_manual_update_check () Updated on 2023-10-25 at 15:40:27 +0000","title":"function run_manual_update_check"},{"location":"api/Classes/classshapeworks_1_1Variant.html","text":"shapeworks::Variant Variant class to represent multiple types. More... #include Public Functions Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const Detailed Description class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet Public Functions Documentation function Variant inline Variant () function Variant inline Variant ( const std :: string & v ) function Variant inline Variant ( int v ) function Variant inline Variant ( double v ) function Variant inline Variant ( const char * v ) function Variant inline Variant ( bool v ) function Variant inline Variant ( std :: vector < double > v ) function Variant inline Variant ( std :: vector < int > v ) function Variant inline Variant ( std :: vector < bool > v ) function Variant inline Variant ( std :: vector < std :: string > v ) function operator std::string operator std :: string () const function operator bool operator bool () const function operator int operator int () const function operator unsigned int operator unsigned int () const function operator long operator long () const function operator unsigned long operator unsigned long () const function operator float operator float () const function operator double operator double () const function operator std::vector< double > operator std :: vector < double > () const function operator std::vector< int > operator std :: vector < int > () const function operator std::vector< bool > operator std :: vector < bool > () const function operator std::vector< std::string > operator std :: vector < std :: string > () const Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#shapeworksvariant","text":"Variant class to represent multiple types. More... #include ","title":"shapeworks::Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions","text":"Name Variant () Variant (const std::string & v) Variant (int v) Variant (double v) Variant (const char * v) Variant (bool v) Variant (std::vector< double > v) Variant (std::vector< int > v) Variant (std::vector< bool > v) Variant (std::vector< std::string > v) operator std::string () const operator bool () const operator int () const operator unsigned int () const operator long () const operator unsigned long () const operator float () const operator double () const operator std::vector< double > () const operator std::vector< int > () const operator std::vector< bool > () const operator std::vector< std::string > () const","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Variant.html#detailed-description","text":"class shapeworks :: Variant ; Variant class to represent multiple types. This class was adapted from optparse to contain multiple types as a string This is used for storing parameters in a spreadsheet","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Variant.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant","text":"inline Variant ()","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_1","text":"inline Variant ( const std :: string & v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_2","text":"inline Variant ( int v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_3","text":"inline Variant ( double v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_4","text":"inline Variant ( const char * v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_5","text":"inline Variant ( bool v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_6","text":"inline Variant ( std :: vector < double > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_7","text":"inline Variant ( std :: vector < int > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_8","text":"inline Variant ( std :: vector < bool > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-variant_9","text":"inline Variant ( std :: vector < std :: string > v )","title":"function Variant"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdstring","text":"operator std :: string () const","title":"function operator std::string"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-bool","text":"operator bool () const","title":"function operator bool"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-int","text":"operator int () const","title":"function operator int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-int","text":"operator unsigned int () const","title":"function operator unsigned int"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-long","text":"operator long () const","title":"function operator long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-unsigned-long","text":"operator unsigned long () const","title":"function operator unsigned long"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-float","text":"operator float () const","title":"function operator float"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-double","text":"operator double () const","title":"function operator double"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-double","text":"operator std :: vector < double > () const","title":"function operator std::vector< double >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-int","text":"operator std :: vector < int > () const","title":"function operator std::vector< int >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-bool","text":"operator std :: vector < bool > () const","title":"function operator std::vector< bool >"},{"location":"api/Classes/classshapeworks_1_1Variant.html#function-operator-stdvector-stdstring","text":"operator std :: vector < std :: string > () const Updated on 2023-10-25 at 15:40:27 +0000","title":"function operator std::vector< std::string >"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html","text":"shapeworks::VectorFunction More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction Public Types Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType Public Functions Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r) Protected Functions Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & ) Public Attributes Name constexpr static unsigned int VDimension Protected Attributes Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber Detailed Description class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result. Public Types Documentation typedef Self typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs. typedef Pointer typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ; typedef ConstPointer typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ; typedef Superclass typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ; typedef VectorType typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors. Public Functions Documentation function itkTypeMacro itkTypeMacro ( VectorFunction , LightObject ) function itkStaticConstMacro itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain. function Evaluate virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate function Energy virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy function ResetBuffers inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class. function AfterIteration inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method. function BeforeIteration inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method. function BeforeEvaluate inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm. function SetParticleSystem inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values. function GetParticleSystem inline virtual ParticleSystem * GetParticleSystem () const function SetDomainNumber inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber function GetDomainNumber inline virtual int GetDomainNumber () const function Clone inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone function GetRelativeEnergyScaling inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling function SetRelativeEnergyScaling inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling Protected Functions Documentation function VectorFunction inline VectorFunction () function ~VectorFunction inline virtual ~ VectorFunction () function operator= void operator = ( const VectorFunction & ) function VectorFunction VectorFunction ( const VectorFunction & ) Public Attributes Documentation variable VDimension static constexpr static unsigned int VDimension = 3 ; Protected Attributes Documentation variable m_ParticleSystem ParticleSystem * m_ParticleSystem ; variable m_DomainNumber unsigned int m_DomainNumber ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#shapeworksvectorfunction","text":"More... #include Inherits from itk::LightObject Inherited by shapeworks::CorrespondenceFunction , shapeworks::DisentangledCorrespondenceFunction , shapeworks::DualVectorFunction , shapeworks::LegacyCorrespondenceFunction , shapeworks::SamplingFunction","title":"shapeworks::VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types","text":"Name typedef VectorFunction Self typedef itk::SmartPointer< Self > Pointer typedef itk::SmartPointer< const Self > ConstPointer typedef itk::LightObject Superclass typedef vnl_vector_fixed< double, VDimension > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions","text":"Name itkTypeMacro ( VectorFunction , LightObject ) itkStaticConstMacro (Dimension , unsigned int , VDimension ) virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep) const =0 virtual VectorType Evaluate (unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep, double & energy) const =0 virtual double Energy (unsigned int , unsigned int , const ParticleSystem * ) const =0 virtual void ResetBuffers () virtual void AfterIteration () virtual void BeforeIteration () virtual void BeforeEvaluate (unsigned int , unsigned int , const ParticleSystem * ) virtual void SetParticleSystem ( ParticleSystem * p) virtual ParticleSystem * GetParticleSystem () const virtual void SetDomainNumber (unsigned int i) virtual int GetDomainNumber () const virtual VectorFunction::Pointer Clone () virtual double GetRelativeEnergyScaling () const virtual void SetRelativeEnergyScaling (double r)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions","text":"Name VectorFunction () virtual ~VectorFunction () void operator= (const VectorFunction & ) VectorFunction (const VectorFunction & )","title":"Protected Functions"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes","text":"Name constexpr static unsigned int VDimension","title":"Public Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes","text":"Name ParticleSystem * m_ParticleSystem unsigned int m_DomainNumber","title":"Protected Attributes"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#detailed-description","text":"class shapeworks :: VectorFunction ; This is the base class defining the API for a function that takes a particle system, domain, and location index as arguments and returns a vector-valued result.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-self","text":"typedef VectorFunction shapeworks :: VectorFunction :: Self ; Standard class typedefs.","title":"typedef Self"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-pointer","text":"typedef itk :: SmartPointer < Self > shapeworks :: VectorFunction :: Pointer ;","title":"typedef Pointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-constpointer","text":"typedef itk :: SmartPointer < const Self > shapeworks :: VectorFunction :: ConstPointer ;","title":"typedef ConstPointer"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-superclass","text":"typedef itk :: LightObject shapeworks :: VectorFunction :: Superclass ;","title":"typedef Superclass"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#typedef-vectortype","text":"typedef vnl_vector_fixed < double , VDimension > shapeworks :: VectorFunction :: VectorType ; Type of vectors.","title":"typedef VectorType"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itktypemacro","text":"itkTypeMacro ( VectorFunction , LightObject )","title":"function itkTypeMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-itkstaticconstmacro","text":"itkStaticConstMacro ( Dimension , unsigned int , VDimension ) Method for object allocation through the factory. Dimensionality of the domain of the particle system.","title":"function itkStaticConstMacro"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate , shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-evaluate_1","text":"virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 Reimplemented by : shapeworks::SamplingFunction::Evaluate , shapeworks::DualVectorFunction::Evaluate , shapeworks::CorrespondenceFunction::Evaluate , shapeworks::CurvatureSamplingFunction::Evaluate , shapeworks::DisentangledCorrespondenceFunction::Evaluate , shapeworks::LegacyCorrespondenceFunction::Evaluate","title":"function Evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-energy","text":"virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 Reimplemented by : shapeworks::CorrespondenceFunction::Energy , shapeworks::CurvatureSamplingFunction::Energy , shapeworks::DisentangledCorrespondenceFunction::Energy , shapeworks::LegacyCorrespondenceFunction::Energy , shapeworks::DualVectorFunction::Energy , shapeworks::SamplingFunction::Energy","title":"function Energy"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-resetbuffers","text":"inline virtual void ResetBuffers () Reimplemented by : shapeworks::SamplingFunction::ResetBuffers May be called by the solver class.","title":"function ResetBuffers"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-afteriteration","text":"inline virtual void AfterIteration () Reimplemented by : shapeworks::CorrespondenceFunction::AfterIteration , shapeworks::CurvatureSamplingFunction::AfterIteration , shapeworks::DisentangledCorrespondenceFunction::AfterIteration , shapeworks::DualVectorFunction::AfterIteration , shapeworks::LegacyCorrespondenceFunction::AfterIteration This method is called by a solver after each iteration. Subclasses may or may not implement this method.","title":"function AfterIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeiteration","text":"inline virtual void BeforeIteration () Reimplemented by : shapeworks::CorrespondenceFunction::BeforeIteration , shapeworks::CurvatureSamplingFunction::BeforeIteration , shapeworks::DisentangledCorrespondenceFunction::BeforeIteration , shapeworks::DualVectorFunction::BeforeIteration , shapeworks::LegacyCorrespondenceFunction::BeforeIteration This method is called by a solver before each iteration. Subclasses may or may not implement this method.","title":"function BeforeIteration"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-beforeevaluate","text":"inline virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) Reimplemented by : shapeworks::DualVectorFunction::BeforeEvaluate , shapeworks::CurvatureSamplingFunction::BeforeEvaluate This method may be called to set up the state of the function object before a call to Evaluate. It is necessary in order to initialize certain constants and variables that may be used for calculating the Energy as well as the Gradients. Typically this is only necessary for the adaptive gradient descent algorithm.","title":"function BeforeEvaluate"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setparticlesystem","text":"inline virtual void SetParticleSystem ( ParticleSystem * p ) Reimplemented by : shapeworks::DualVectorFunction::SetParticleSystem Some subclasses may require a pointer to the particle system and its domain number. These methods set/get those values.","title":"function SetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getparticlesystem","text":"inline virtual ParticleSystem * GetParticleSystem () const","title":"function GetParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setdomainnumber","text":"inline virtual void SetDomainNumber ( unsigned int i ) Reimplemented by : shapeworks::DualVectorFunction::SetDomainNumber","title":"function SetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getdomainnumber","text":"inline virtual int GetDomainNumber () const","title":"function GetDomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-clone","text":"inline virtual VectorFunction :: Pointer Clone () Reimplemented by : shapeworks::CorrespondenceFunction::Clone , shapeworks::CurvatureSamplingFunction::Clone , shapeworks::DisentangledCorrespondenceFunction::Clone , shapeworks::DualVectorFunction::Clone , shapeworks::LegacyCorrespondenceFunction::Clone , shapeworks::SamplingFunction::Clone","title":"function Clone"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-getrelativeenergyscaling","text":"inline virtual double GetRelativeEnergyScaling () const Reimplemented by : shapeworks::DualVectorFunction::GetRelativeEnergyScaling","title":"function GetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-setrelativeenergyscaling","text":"inline virtual void SetRelativeEnergyScaling ( double r ) Reimplemented by : shapeworks::DualVectorFunction::SetRelativeEnergyScaling","title":"function SetRelativeEnergyScaling"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction","text":"inline VectorFunction ()","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_1","text":"inline virtual ~ VectorFunction ()","title":"function ~VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-operator","text":"void operator = ( const VectorFunction & )","title":"function operator="},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#function-vectorfunction_2","text":"VectorFunction ( const VectorFunction & )","title":"function VectorFunction"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-vdimension","text":"static constexpr static unsigned int VDimension = 3 ;","title":"variable VDimension"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#protected-attributes-documentation","text":"","title":"Protected Attributes Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_particlesystem","text":"ParticleSystem * m_ParticleSystem ;","title":"variable m_ParticleSystem"},{"location":"api/Classes/classshapeworks_1_1VectorFunction.html#variable-m_domainnumber","text":"unsigned int m_DomainNumber ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_DomainNumber"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html","text":"shapeworks::VectorImage Gradient (vector) image. #include Public Types Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator Public Functions Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator () Public Types Documentation using GradientImageFilter using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ; Public Functions Documentation function VectorImage VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform) function VectorImage VectorImage () = delete function ~VectorImage ~ VectorImage () = default function evaluate Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ). function iterator ImageIterator iterator () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#shapeworksvectorimage","text":"Gradient (vector) image. #include ","title":"shapeworks::VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types","text":"Name using itk::GradientImageFilter< Image::ImageType > GradientImageFilter using itk::Image< Covariant, 3 > ImageType using itk::VectorLinearInterpolateImageFunction< ImageType, Image::PixelType > GradientInterpolatorType using itk::ImageRegionIterator< ImageType > ImageIterator","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions","text":"Name VectorImage (const Image & dt_img) Creates a gradient vector image of image (presumably a distance transform) VectorImage () =delete ~VectorImage () =default Vector evaluate (Point p) Returns a Vector (which can be normalized using v.Normalize() ). ImageIterator iterator ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientimagefilter","text":"using shapeworks :: VectorImage :: GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ;","title":"using GradientImageFilter"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imagetype","text":"using shapeworks :: VectorImage :: ImageType = itk :: Image < Covariant , 3 > ;","title":"using ImageType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-gradientinterpolatortype","text":"using shapeworks :: VectorImage :: GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ;","title":"using GradientInterpolatorType"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#using-imageiterator","text":"using shapeworks :: VectorImage :: ImageIterator = itk :: ImageRegionIterator < ImageType > ;","title":"using ImageIterator"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage","text":"VectorImage ( const Image & dt_img ) Creates a gradient vector image of image (presumably a distance transform)","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_1","text":"VectorImage () = delete","title":"function VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-vectorimage_2","text":"~ VectorImage () = default","title":"function ~VectorImage"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-evaluate","text":"Vector evaluate ( Point p ) Returns a Vector (which can be normalized using v.Normalize() ).","title":"function evaluate"},{"location":"api/Classes/classshapeworks_1_1VectorImage.html#function-iterator","text":"ImageIterator iterator () Updated on 2023-10-25 at 15:40:27 +0000","title":"function iterator"},{"location":"api/Classes/classshapeworks_1_1Viewer.html","text":"shapeworks::Viewer 3D Viewer More... #include Public Functions Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform) Detailed Description class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape Public Functions Documentation function Viewer Viewer () function ~Viewer ~ Viewer () = default function set_renderer void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ) function get_renderer vtkSmartPointer < vtkRenderer > get_renderer () function display_shape void display_shape ( std :: shared_ptr < Shape > shape ) function clear_viewer void clear_viewer () function reset_camera void reset_camera ( std :: array < double , 3 > c ) function reset_camera void reset_camera () function set_color_series void set_color_series ( ColorMap color_series ) function set_glyph_size_and_quality void set_glyph_size_and_quality ( double size , double quality ) function get_glyph_size double get_glyph_size () function get_glyph_quality double get_glyph_quality () function set_session void set_session ( QSharedPointer < Session > session ) function get_session QSharedPointer < Session > get_session () function set_show_glyphs void set_show_glyphs ( bool show ) function set_show_surface void set_show_surface ( bool show ) function set_scale_arrows void set_scale_arrows ( bool scale ) function update_points void update_points () function update_glyph_properties void update_glyph_properties () function handle_pick int handle_pick ( int * click_pos ) function handle_ctrl_click PickResult handle_ctrl_click ( int * click_pos ) function set_selected_point void set_selected_point ( int id ) function set_glyph_lut void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) function set_loading_screen void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ) function set_color_scheme void set_color_scheme ( int i ) function handle_new_mesh void handle_new_mesh () function is_viewer_ready bool is_viewer_ready () function set_visualizer void set_visualizer ( Visualizer * visualizer ) function update_feature_range void update_feature_range ( double * range ) function update_opacities void update_opacities () function get_shape std :: shared_ptr < Shape > get_shape () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function get_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors () function get_unclipped_surface_actors std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors () function get_meshes MeshGroup get_meshes () function get_transform vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ) function get_landmark_transform vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ) function get_inverse_landmark_transform vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ) function get_image_transform vtkSmartPointer < vtkTransform > get_image_transform () function slice_view SliceView & slice_view () function update_image_volume void update_image_volume () function get_glyph_points vtkSmartPointer < vtkPoints > get_glyph_points () function get_alignment_transform vtkSmartPointer < vtkTransform > get_alignment_transform () function update_clipping_planes void update_clipping_planes () function get_point_placer vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer () function handle_ffc_paint void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] ) function update_actors void update_actors () function remove_scalar_bar void remove_scalar_bar () function is_ready inline bool is_ready () function get_particle_scalars vtkFloatArray * get_particle_scalars () function get_particle_poly_data vtkSmartPointer < vtkPolyData > get_particle_poly_data () function insert_compare_meshes void insert_compare_meshes () function set_scalar_visibility void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ) function is_reverse static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#shapeworksviewer","text":"3D Viewer More... #include ","title":"shapeworks::Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions","text":"Name Viewer () ~Viewer () =default void set_renderer (vtkSmartPointer< vtkRenderer > renderer) vtkSmartPointer< vtkRenderer > get_renderer () void display_shape (std::shared_ptr< Shape > shape) void clear_viewer () void reset_camera (std::array< double, 3 > c) void reset_camera () void set_color_series ( ColorMap color_series) void set_glyph_size_and_quality (double size, double quality) double get_glyph_size () double get_glyph_quality () void set_session (QSharedPointer< Session > session) QSharedPointer< Session > get_session () void set_show_glyphs (bool show) void set_show_surface (bool show) void set_scale_arrows (bool scale) void update_points () void update_glyph_properties () int handle_pick (int * click_pos) PickResult handle_ctrl_click (int * click_pos) void set_selected_point (int id) void set_glyph_lut (vtkSmartPointer< vtkLookupTable > lut) void set_loading_screen (vtkSmartPointer< vtkImageData > loading_screen) void set_color_scheme (int i) void handle_new_mesh () bool is_viewer_ready () void set_visualizer ( Visualizer * visualizer) void update_feature_range (double * range) void update_opacities () std::shared_ptr< Shape > get_shape () void update_landmarks () void update_planes () void update_ffc_mode () std::vector< vtkSmartPointer< vtkActor > > get_surface_actors () std::vector< vtkSmartPointer< vtkActor > > get_unclipped_surface_actors () MeshGroup get_meshes () vtkSmartPointer< vtkTransform > get_transform (int alignment_domain, int domain) vtkSmartPointer< vtkTransform > get_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_inverse_landmark_transform (int domain) vtkSmartPointer< vtkTransform > get_image_transform () SliceView & slice_view () void update_image_volume () vtkSmartPointer< vtkPoints > get_glyph_points () vtkSmartPointer< vtkTransform > get_alignment_transform () void update_clipping_planes () vtkSmartPointer< vtkPolygonalSurfacePointPlacer > get_point_placer () void handle_ffc_paint (double display_pos[2], double world_pos[3]) void update_actors () void remove_scalar_bar () bool is_ready () vtkFloatArray * get_particle_scalars () vtkSmartPointer< vtkPolyData > get_particle_poly_data () void insert_compare_meshes () void set_scalar_visibility (vtkSmartPointer< vtkPolyData > poly_data, vtkSmartPointer< vtkPolyDataMapper > mapper, std::string scalar) bool is_reverse (vtkSmartPointer< vtkTransform > transform)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#detailed-description","text":"class shapeworks :: Viewer ; 3D Viewer The Viewer class encapsulates all the functionality for visualizing a single subject/shape","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer","text":"Viewer ()","title":"function Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-viewer_1","text":"~ Viewer () = default","title":"function ~Viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_renderer","text":"void set_renderer ( vtkSmartPointer < vtkRenderer > renderer )","title":"function set_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_renderer","text":"vtkSmartPointer < vtkRenderer > get_renderer ()","title":"function get_renderer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-display_shape","text":"void display_shape ( std :: shared_ptr < Shape > shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-clear_viewer","text":"void clear_viewer ()","title":"function clear_viewer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera","text":"void reset_camera ( std :: array < double , 3 > c )","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-reset_camera_1","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_series","text":"void set_color_series ( ColorMap color_series )","title":"function set_color_series"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_size_and_quality","text":"void set_glyph_size_and_quality ( double size , double quality )","title":"function set_glyph_size_and_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_size","text":"double get_glyph_size ()","title":"function get_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_quality","text":"double get_glyph_quality ()","title":"function get_glyph_quality"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_session","text":"void set_session ( QSharedPointer < Session > session )","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_session","text":"QSharedPointer < Session > get_session ()","title":"function get_session"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show )","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_show_surface","text":"void set_show_surface ( bool show )","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scale_arrows","text":"void set_scale_arrows ( bool scale )","title":"function set_scale_arrows"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_points","text":"void update_points ()","title":"function update_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_glyph_properties","text":"void update_glyph_properties ()","title":"function update_glyph_properties"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_pick","text":"int handle_pick ( int * click_pos )","title":"function handle_pick"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ctrl_click","text":"PickResult handle_ctrl_click ( int * click_pos )","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_selected_point","text":"void set_selected_point ( int id )","title":"function set_selected_point"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_glyph_lut","text":"void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut )","title":"function set_glyph_lut"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_loading_screen","text":"void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen )","title":"function set_loading_screen"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_color_scheme","text":"void set_color_scheme ( int i )","title":"function set_color_scheme"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_viewer_ready","text":"bool is_viewer_ready ()","title":"function is_viewer_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_visualizer","text":"void set_visualizer ( Visualizer * visualizer )","title":"function set_visualizer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_feature_range","text":"void update_feature_range ( double * range )","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_opacities","text":"void update_opacities ()","title":"function update_opacities"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_shape","text":"std :: shared_ptr < Shape > get_shape ()","title":"function get_shape"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_surface_actors ()","title":"function get_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_unclipped_surface_actors","text":"std :: vector < vtkSmartPointer < vtkActor > > get_unclipped_surface_actors ()","title":"function get_unclipped_surface_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_meshes","text":"MeshGroup get_meshes ()","title":"function get_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain )","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain )","title":"function get_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_inverse_landmark_transform","text":"vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain )","title":"function get_inverse_landmark_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_image_transform","text":"vtkSmartPointer < vtkTransform > get_image_transform ()","title":"function get_image_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-slice_view","text":"SliceView & slice_view ()","title":"function slice_view"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_image_volume","text":"void update_image_volume ()","title":"function update_image_volume"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_glyph_points","text":"vtkSmartPointer < vtkPoints > get_glyph_points ()","title":"function get_glyph_points"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_alignment_transform","text":"vtkSmartPointer < vtkTransform > get_alignment_transform ()","title":"function get_alignment_transform"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_clipping_planes","text":"void update_clipping_planes ()","title":"function update_clipping_planes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_point_placer","text":"vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer ()","title":"function get_point_placer"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-handle_ffc_paint","text":"void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ] )","title":"function handle_ffc_paint"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-update_actors","text":"void update_actors ()","title":"function update_actors"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-remove_scalar_bar","text":"void remove_scalar_bar ()","title":"function remove_scalar_bar"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_ready","text":"inline bool is_ready ()","title":"function is_ready"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_scalars","text":"vtkFloatArray * get_particle_scalars ()","title":"function get_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-get_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_particle_poly_data ()","title":"function get_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-insert_compare_meshes","text":"void insert_compare_meshes ()","title":"function insert_compare_meshes"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-set_scalar_visibility","text":"void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar )","title":"function set_scalar_visibility"},{"location":"api/Classes/classshapeworks_1_1Viewer.html#function-is_reverse","text":"static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function is_reverse"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html","text":"shapeworks::Visualizer Controls display of objects in viewers. More... #include Inherits from QObject Public Slots Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed () Public Functions Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size. Detailed Description class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions. Public Slots Documentation slot update_viewer_properties void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) slot handle_feature_range_changed void handle_feature_range_changed () slot handle_image_slice_settings_changed void handle_image_slice_settings_changed () Public Functions Documentation function Visualizer Visualizer ( Preferences & prefs ) function ~Visualizer ~ Visualizer () function set_lightbox void set_lightbox ( LightboxHandle lightbox ) set the lightbox function set_session void set_session ( SessionHandle session ) set the session function set_center void set_center ( bool center ) turn automatic centering on/off function get_center bool get_center () get centering on/off function set_alignment_domain void set_alignment_domain ( int domain ) set the alignment domain function get_alignment_domain int get_alignment_domain () get the current alignment domain function set_show_glyphs void set_show_glyphs ( bool show ) turn on/off glyph display function set_show_surface void set_show_surface ( bool show ) turn on/off surface display function display_samples void display_samples () update the display using the current settings function update_samples void update_samples () function update_landmarks void update_landmarks () function update_planes void update_planes () function update_ffc_mode void update_ffc_mode () function display_sample void display_sample ( int i ) function display_shape void display_shape ( ShapeHandle shape ) function display_shapes void display_shapes ( ShapeList shapes ) function set_selected_point_one void set_selected_point_one ( int id ) function set_selected_point_two void set_selected_point_two ( int id ) function set_mean void set_mean ( const Eigen :: VectorXd & mean ) function set_mean_shape void set_mean_shape ( ShapeHandle mean_shape ) function get_mean_shape ShapeHandle get_mean_shape () function reset_camera void reset_camera () function update_lut void update_lut () function get_current_shape Particles get_current_shape () function get_current_particle_scalars vtkFloatArray * get_current_particle_scalars () function get_current_particle_poly_data vtkSmartPointer < vtkPolyData > get_current_particle_poly_data () function handle_new_mesh void handle_new_mesh () function get_current_mesh vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ) function get_current_meshes_transformed std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index ) function get_feature_map const std :: string & get_feature_map () const Get the currently selected feature map. function set_uniform_feature_range void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range. function get_uniform_feature_range bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range. function set_feature_map void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map. function clear_viewers void clear_viewers () clear out the viewers function reset_feature_range void reset_feature_range () Reset the feature range (e.g. for a new feature) function get_feature_range double * get_feature_range () Get the current feature range. function get_feature_raw_range double * get_feature_raw_range () Get the current raw feature range. function get_feature_range_valid bool get_feature_range_valid () Return if the feature range is valid or not. function update_feature_range void update_feature_range ( double * range ) Update the feature range with a given range. function update_feature_range void update_feature_range ( double min , double max ) Update the feature range with a given range. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain. function get_transform vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode. function set_opacities void set_opacities ( std :: vector < float > opacities ) Set domain opacities. function get_opacities std :: vector < float > get_opacities () Get domain opacities. function set_domain_particle_visibilities void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities. function get_domain_particle_visibilities std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. function get_current_glyph_size double get_current_glyph_size () Get the current glyph size. function handle_ctrl_click void handle_ctrl_click ( PickResult result ) Handle ctrl click. function redraw void redraw () Redraw renderers. function export_to_pixmap QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap. function get_render_size QSize get_render_size () Return render window size. Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#shapeworksvisualizer","text":"Controls display of objects in viewers. More... #include Inherits from QObject","title":"shapeworks::Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots","text":"Name void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc) void handle_feature_range_changed () void handle_image_slice_settings_changed ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions","text":"Name Visualizer ( Preferences & prefs) ~Visualizer () void set_lightbox (LightboxHandle lightbox) set the lightbox void set_session (SessionHandle session) set the session void set_center (bool center) turn automatic centering on/off bool get_center () get centering on/off void set_alignment_domain (int domain) set the alignment domain int get_alignment_domain () get the current alignment domain void set_show_glyphs (bool show) turn on/off glyph display void set_show_surface (bool show) turn on/off surface display void display_samples () update the display using the current settings void update_samples () void update_landmarks () void update_planes () void update_ffc_mode () void display_sample (int i) void display_shape (ShapeHandle shape) void display_shapes (ShapeList shapes) void set_selected_point_one (int id) void set_selected_point_two (int id) void set_mean (const Eigen::VectorXd & mean) void set_mean_shape (ShapeHandle mean_shape) ShapeHandle get_mean_shape () void reset_camera () void update_lut () Particles get_current_shape () vtkFloatArray * get_current_particle_scalars () vtkSmartPointer< vtkPolyData > get_current_particle_poly_data () void handle_new_mesh () vtkSmartPointer< vtkPolyData > get_current_mesh (int index) std::vector< vtkSmartPointer< vtkPolyData > > get_current_meshes_transformed (int index) const std::string & get_feature_map () const Get the currently selected feature map. void set_uniform_feature_range (bool value) Set if we are using a uniform feature range. bool get_uniform_feature_range (void ) Return if we are using a uniform feature range. void set_feature_map (const std::string & feature_map) Set the currently selected feature map. void clear_viewers () clear out the viewers void reset_feature_range () Reset the feature range (e.g. for a new feature) double * get_feature_range () Get the current feature range. double * get_feature_raw_range () Get the current raw feature range. bool get_feature_range_valid () Return if the feature range is valid or not. void update_feature_range (double * range) Update the feature range with a given range. void update_feature_range (double min, double max) Update the feature range with a given range. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, int alignment_domain, int domain) Request the transform for a given shape and domain. vtkSmartPointer< vtkTransform > get_transform (std::shared_ptr< Shape > shape, DisplayMode display_mode, int alignment_domain, int domain) Request the transform for a given shape and domain and display mode. void set_opacities (std::vector< float > opacities) Set domain opacities. std::vector< float > get_opacities () Get domain opacities. void set_domain_particle_visibilities (std::vector< bool > visibilities) Set the per-domain particle visibilities. std::vector< bool > get_domain_particle_visibilities () Get the per-domain particle visibilities. double get_current_glyph_size () Get the current glyph size. void handle_ctrl_click ( PickResult result) Handle ctrl click. void redraw () Redraw renderers. QPixmap export_to_pixmap (QSize size, bool transparent_background, bool show_orientation_marker, bool show_color_scale, bool & ready) Export render window to pixmap. QSize get_render_size () Return render window size.","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#detailed-description","text":"class shapeworks :: Visualizer ; Controls display of objects in viewers. The Visualizer class maintains state and control over viewer properties. Additionally, it performs all shape-based statistical functions.","title":"Detailed Description"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-update_viewer_properties","text":"void update_viewer_properties () update viewer properties (e.g. glyph size, quality, etc)","title":"slot update_viewer_properties"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_feature_range_changed","text":"void handle_feature_range_changed ()","title":"slot handle_feature_range_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#slot-handle_image_slice_settings_changed","text":"void handle_image_slice_settings_changed ()","title":"slot handle_image_slice_settings_changed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer","text":"Visualizer ( Preferences & prefs )","title":"function Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-visualizer_1","text":"~ Visualizer ()","title":"function ~Visualizer"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_lightbox","text":"void set_lightbox ( LightboxHandle lightbox ) set the lightbox","title":"function set_lightbox"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_session","text":"void set_session ( SessionHandle session ) set the session","title":"function set_session"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_center","text":"void set_center ( bool center ) turn automatic centering on/off","title":"function set_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_center","text":"bool get_center () get centering on/off","title":"function get_center"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_alignment_domain","text":"void set_alignment_domain ( int domain ) set the alignment domain","title":"function set_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_alignment_domain","text":"int get_alignment_domain () get the current alignment domain","title":"function get_alignment_domain"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_glyphs","text":"void set_show_glyphs ( bool show ) turn on/off glyph display","title":"function set_show_glyphs"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_show_surface","text":"void set_show_surface ( bool show ) turn on/off surface display","title":"function set_show_surface"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_samples","text":"void display_samples () update the display using the current settings","title":"function display_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_samples","text":"void update_samples ()","title":"function update_samples"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_landmarks","text":"void update_landmarks ()","title":"function update_landmarks"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_planes","text":"void update_planes ()","title":"function update_planes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_ffc_mode","text":"void update_ffc_mode ()","title":"function update_ffc_mode"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_sample","text":"void display_sample ( int i )","title":"function display_sample"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shape","text":"void display_shape ( ShapeHandle shape )","title":"function display_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-display_shapes","text":"void display_shapes ( ShapeList shapes )","title":"function display_shapes"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_one","text":"void set_selected_point_one ( int id )","title":"function set_selected_point_one"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_selected_point_two","text":"void set_selected_point_two ( int id )","title":"function set_selected_point_two"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean","text":"void set_mean ( const Eigen :: VectorXd & mean )","title":"function set_mean"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_mean_shape","text":"void set_mean_shape ( ShapeHandle mean_shape )","title":"function set_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_mean_shape","text":"ShapeHandle get_mean_shape ()","title":"function get_mean_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_camera","text":"void reset_camera ()","title":"function reset_camera"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_lut","text":"void update_lut ()","title":"function update_lut"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_shape","text":"Particles get_current_shape ()","title":"function get_current_shape"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_scalars","text":"vtkFloatArray * get_current_particle_scalars ()","title":"function get_current_particle_scalars"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_particle_poly_data","text":"vtkSmartPointer < vtkPolyData > get_current_particle_poly_data ()","title":"function get_current_particle_poly_data"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_new_mesh","text":"void handle_new_mesh ()","title":"function handle_new_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_mesh","text":"vtkSmartPointer < vtkPolyData > get_current_mesh ( int index )","title":"function get_current_mesh"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_meshes_transformed","text":"std :: vector < vtkSmartPointer < vtkPolyData > > get_current_meshes_transformed ( int index )","title":"function get_current_meshes_transformed"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_map","text":"const std :: string & get_feature_map () const Get the currently selected feature map.","title":"function get_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_uniform_feature_range","text":"void set_uniform_feature_range ( bool value ) Set if we are using a uniform feature range.","title":"function set_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_uniform_feature_range","text":"bool get_uniform_feature_range ( void ) Return if we are using a uniform feature range.","title":"function get_uniform_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_feature_map","text":"void set_feature_map ( const std :: string & feature_map ) Set the currently selected feature map.","title":"function set_feature_map"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-clear_viewers","text":"void clear_viewers () clear out the viewers","title":"function clear_viewers"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-reset_feature_range","text":"void reset_feature_range () Reset the feature range (e.g. for a new feature)","title":"function reset_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range","text":"double * get_feature_range () Get the current feature range.","title":"function get_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_raw_range","text":"double * get_feature_raw_range () Get the current raw feature range.","title":"function get_feature_raw_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_feature_range_valid","text":"bool get_feature_range_valid () Return if the feature range is valid or not.","title":"function get_feature_range_valid"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range","text":"void update_feature_range ( double * range ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-update_feature_range_1","text":"void update_feature_range ( double min , double max ) Update the feature range with a given range.","title":"function update_feature_range"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ) Request the transform for a given shape and domain.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_transform_1","text":"vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ) Request the transform for a given shape and domain and display mode.","title":"function get_transform"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_opacities","text":"void set_opacities ( std :: vector < float > opacities ) Set domain opacities.","title":"function set_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_opacities","text":"std :: vector < float > get_opacities () Get domain opacities.","title":"function get_opacities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-set_domain_particle_visibilities","text":"void set_domain_particle_visibilities ( std :: vector < bool > visibilities ) Set the per-domain particle visibilities.","title":"function set_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_domain_particle_visibilities","text":"std :: vector < bool > get_domain_particle_visibilities () Get the per-domain particle visibilities.","title":"function get_domain_particle_visibilities"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_current_glyph_size","text":"double get_current_glyph_size () Get the current glyph size.","title":"function get_current_glyph_size"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-handle_ctrl_click","text":"void handle_ctrl_click ( PickResult result ) Handle ctrl click.","title":"function handle_ctrl_click"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-redraw","text":"void redraw () Redraw renderers.","title":"function redraw"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-export_to_pixmap","text":"QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ) Export render window to pixmap.","title":"function export_to_pixmap"},{"location":"api/Classes/classshapeworks_1_1Visualizer.html#function-get_render_size","text":"QSize get_render_size () Return render window size. Updated on 2023-10-25 at 15:40:27 +0000","title":"function get_render_size"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html","text":"shapeworks::VtkMeshWrapper Inherits from shapeworks::MeshWrapper Public Types Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType Public Functions Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override Public Types Documentation using PointType using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ; using GradNType using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ; using NormalType using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ; Public Functions Documentation function VtkMeshWrapper explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ) function ~VtkMeshWrapper ~ VtkMeshWrapper () = default function ComputeDistance double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override function IsWithinDistance virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance function GeodesicWalk virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk function ProjectVectorToSurfaceTangent virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent function SampleNormalAtPoint virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint function SampleGradNAtPoint virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint function SnapToMesh virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh function GetPointOnMesh virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh function GetMeshLowerBound inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound function GetMeshUpperBound inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound function InvalidateParticle virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle function GetPolydata inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#shapeworksvtkmeshwrapper","text":"Inherits from shapeworks::MeshWrapper","title":"shapeworks::VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types","text":"Name using MeshWrapper::PointType PointType using MeshWrapper::GradNType GradNType using vnl_vector_fixed< float, DIMENSION > NormalType using vnl_vector_fixed< double, DIMENSION > VectorType","title":"Public Types"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions","text":"Name VtkMeshWrapper (vtkSmartPointer< vtkPolyData > mesh, bool geodesics_enabled =false, size_t geodesics_cache_multiplier_size =0) ~VtkMeshWrapper () =default double ComputeDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, VectorType * out_grad =nullptr) const override virtual bool IsWithinDistance (const PointType & pointa, int idxa, const PointType & pointb, int idxb, double test_dist, double & dist) const override virtual PointType GeodesicWalk (PointType p, int idx, VectorType vector) const override virtual VectorType ProjectVectorToSurfaceTangent (const PointType & pointa, int idx, VectorType & vector) const override virtual NormalType SampleNormalAtPoint (PointType p, int idx =-1) const override virtual GradNType SampleGradNAtPoint (PointType p, int idx) const override virtual PointType SnapToMesh (PointType pointa, int idx) const override virtual PointType GetPointOnMesh () const override virtual const PointType & GetMeshLowerBound () const override virtual const PointType & GetMeshUpperBound () const override virtual void InvalidateParticle (int idx) override virtual vtkSmartPointer< vtkPolyData > GetPolydata () const override","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-pointtype","text":"using shapeworks :: VtkMeshWrapper :: PointType = MeshWrapper :: PointType ;","title":"using PointType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-gradntype","text":"using shapeworks :: VtkMeshWrapper :: GradNType = MeshWrapper :: GradNType ;","title":"using GradNType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-normaltype","text":"using shapeworks :: VtkMeshWrapper :: NormalType = vnl_vector_fixed < float , DIMENSION > ;","title":"using NormalType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#using-vectortype","text":"using shapeworks :: VtkMeshWrapper :: VectorType = vnl_vector_fixed < double , DIMENSION > ;","title":"using VectorType"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper","text":"explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 )","title":"function VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-vtkmeshwrapper_1","text":"~ VtkMeshWrapper () = default","title":"function ~VtkMeshWrapper"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-computedistance","text":"double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override","title":"function ComputeDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-iswithindistance","text":"virtual bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override Reimplements : shapeworks::MeshWrapper::IsWithinDistance","title":"function IsWithinDistance"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-geodesicwalk","text":"virtual PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override Reimplements : shapeworks::MeshWrapper::GeodesicWalk","title":"function GeodesicWalk"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-projectvectortosurfacetangent","text":"virtual VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override Reimplements : shapeworks::MeshWrapper::ProjectVectorToSurfaceTangent","title":"function ProjectVectorToSurfaceTangent"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplenormalatpoint","text":"virtual NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override Reimplements : shapeworks::MeshWrapper::SampleNormalAtPoint","title":"function SampleNormalAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-samplegradnatpoint","text":"virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const override Reimplements : shapeworks::MeshWrapper::SampleGradNAtPoint","title":"function SampleGradNAtPoint"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-snaptomesh","text":"virtual PointType SnapToMesh ( PointType pointa , int idx ) const override Reimplements : shapeworks::MeshWrapper::SnapToMesh","title":"function SnapToMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpointonmesh","text":"virtual PointType GetPointOnMesh () const override Reimplements : shapeworks::MeshWrapper::GetPointOnMesh","title":"function GetPointOnMesh"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshlowerbound","text":"inline virtual const PointType & GetMeshLowerBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshLowerBound","title":"function GetMeshLowerBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getmeshupperbound","text":"inline virtual const PointType & GetMeshUpperBound () const override Reimplements : shapeworks::MeshWrapper::GetMeshUpperBound","title":"function GetMeshUpperBound"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-invalidateparticle","text":"virtual void InvalidateParticle ( int idx ) override Reimplements : shapeworks::MeshWrapper::InvalidateParticle","title":"function InvalidateParticle"},{"location":"api/Classes/classshapeworks_1_1VtkMeshWrapper.html#function-getpolydata","text":"inline virtual vtkSmartPointer < vtkPolyData > GetPolydata () const override Reimplements : shapeworks::MeshWrapper::GetPolydata Updated on 2023-10-25 at 15:40:27 +0000","title":"function GetPolydata"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html","text":"shapeworks::WheelEventForwarder Inherits from QObject Public Functions Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event) Public Functions Documentation function WheelEventForwarder explicit WheelEventForwarder ( QScrollBar * target ) function ~WheelEventForwarder ~ WheelEventForwarder () function eventFilter bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#shapeworkswheeleventforwarder","text":"Inherits from QObject","title":"shapeworks::WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions","text":"Name WheelEventForwarder (QScrollBar * target) ~WheelEventForwarder () bool eventFilter (QObject * obj, QEvent * event)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder","text":"explicit WheelEventForwarder ( QScrollBar * target )","title":"function WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-wheeleventforwarder_1","text":"~ WheelEventForwarder ()","title":"function ~WheelEventForwarder"},{"location":"api/Classes/classshapeworks_1_1WheelEventForwarder.html#function-eventfilter","text":"bool eventFilter ( QObject * obj , QEvent * event ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function eventFilter"},{"location":"api/Classes/classshapeworks_1_1Worker.html","text":"shapeworks::Worker Inherits from QObject Public Slots Name void process () Public Signals Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished () Public Functions Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker () Public Slots Documentation slot process void process () Public Signals Documentation signal error_message void error_message ( QString ) signal warning_message void warning_message ( QString ) signal status_message void status_message ( QString ) signal progress void progress ( int ) signal finished void finished () Public Functions Documentation function Worker Worker () function ~Worker ~ Worker () function run_job void run_job ( QSharedPointer < Job > job ) function create_worker static Worker * create_worker () Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#shapeworksworker","text":"Inherits from QObject","title":"shapeworks::Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots","text":"Name void process ()","title":"Public Slots"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals","text":"Name void error_message (QString ) void warning_message (QString ) void status_message (QString ) void progress (int ) void finished ()","title":"Public Signals"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions","text":"Name Worker () ~Worker () void run_job (QSharedPointer< Job > job) Worker * create_worker ()","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-slots-documentation","text":"","title":"Public Slots Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#slot-process","text":"void process ()","title":"slot process"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-signals-documentation","text":"","title":"Public Signals Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-error_message","text":"void error_message ( QString )","title":"signal error_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-warning_message","text":"void warning_message ( QString )","title":"signal warning_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-status_message","text":"void status_message ( QString )","title":"signal status_message"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-progress","text":"void progress ( int )","title":"signal progress"},{"location":"api/Classes/classshapeworks_1_1Worker.html#signal-finished","text":"void finished ()","title":"signal finished"},{"location":"api/Classes/classshapeworks_1_1Worker.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker","text":"Worker ()","title":"function Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-worker_1","text":"~ Worker ()","title":"function ~Worker"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-run_job","text":"void run_job ( QSharedPointer < Job > job )","title":"function run_job"},{"location":"api/Classes/classshapeworks_1_1Worker.html#function-create_worker","text":"static Worker * create_worker () Updated on 2023-10-25 at 15:40:27 +0000","title":"function create_worker"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html","text":"shapeworks::shapeworks_exception Inherits from std::runtime_error Public Functions Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message) Public Functions Documentation function shapeworks_exception shapeworks_exception ( char const * const message ) function shapeworks_exception shapeworks_exception ( std :: string const & message ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#shapeworksshapeworks_exception","text":"Inherits from std::runtime_error","title":"shapeworks::shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions","text":"Name shapeworks_exception (char const *const message) shapeworks_exception (std::string const & message)","title":"Public Functions"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception","text":"shapeworks_exception ( char const * const message )","title":"function shapeworks_exception"},{"location":"api/Classes/classshapeworks_1_1shapeworks__exception.html#function-shapeworks_exception_1","text":"shapeworks_exception ( std :: string const & message ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function shapeworks_exception"},{"location":"api/Classes/classvec2d.html","text":"vec2d Public Functions Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const Public Attributes Name double x double y Public Functions Documentation function vec2d inline vec2d () function vec2d inline vec2d ( double X , double Y ) function operator- inline vec2d operator - () function operator- inline vec2d operator - ( const vec2d & r ) function operator+ inline vec2d operator + ( const vec2d & r ) function operator* inline vec2d operator * ( double g ) function operator* inline double operator * ( const vec2d & r ) function norm inline double norm () function unit inline double unit () function operator== inline bool operator == ( const vec2d & r ) const Public Attributes Documentation variable x double x ; variable y double y ; Updated on 2023-10-25 at 15:40:28 +0000","title":"vec2d"},{"location":"api/Classes/classvec2d.html#vec2d","text":"","title":"vec2d"},{"location":"api/Classes/classvec2d.html#public-functions","text":"Name vec2d () vec2d (double X, double Y) vec2d operator- () vec2d operator- (const vec2d & r) vec2d operator+ (const vec2d & r) vec2d operator* (double g) double operator* (const vec2d & r) double norm () double unit () bool operator== (const vec2d & r) const","title":"Public Functions"},{"location":"api/Classes/classvec2d.html#public-attributes","text":"Name double x double y","title":"Public Attributes"},{"location":"api/Classes/classvec2d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec2d.html#function-vec2d","text":"inline vec2d ()","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-vec2d_1","text":"inline vec2d ( double X , double Y )","title":"function vec2d"},{"location":"api/Classes/classvec2d.html#function-operator-","text":"inline vec2d operator - ()","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator-_1","text":"inline vec2d operator - ( const vec2d & r )","title":"function operator-"},{"location":"api/Classes/classvec2d.html#function-operator","text":"inline vec2d operator + ( const vec2d & r )","title":"function operator+"},{"location":"api/Classes/classvec2d.html#function-operator_1","text":"inline vec2d operator * ( double g )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-operator_2","text":"inline double operator * ( const vec2d & r )","title":"function operator*"},{"location":"api/Classes/classvec2d.html#function-norm","text":"inline double norm ()","title":"function norm"},{"location":"api/Classes/classvec2d.html#function-unit","text":"inline double unit ()","title":"function unit"},{"location":"api/Classes/classvec2d.html#function-operator_3","text":"inline bool operator == ( const vec2d & r ) const","title":"function operator=="},{"location":"api/Classes/classvec2d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec2d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec2d.html#variable-y","text":"double y ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable y"},{"location":"api/Classes/classvec3d.html","text":"vec3d Public Functions Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize () Public Attributes Name double x double y double z Public Functions Documentation function vec3d inline vec3d () function vec3d inline vec3d ( double rx , double ry , double rz ) function vec3d inline vec3d ( const vec2d & r ) function operator+ inline vec3d operator + ( const vec3d & v ) const function operator- inline vec3d operator - ( const vec3d & v ) const function operator^ inline vec3d operator ^ ( const vec3d & v ) const function operator* inline double operator * ( const vec3d & v ) const function operator* inline vec3d operator * ( const double g ) const function operator/ inline vec3d operator / ( const double g ) const function operator+= inline const vec3d & operator += ( const vec3d & v ) function operator-= inline const vec3d & operator -= ( const vec3d & v ) function operator/= inline const vec3d & operator /= ( const double f ) function operator/= inline const vec3d & operator /= ( const int n ) function operator*= inline const vec3d & operator *= ( const double f ) function operator- inline vec3d operator - () const function Length inline double Length () const function SqrLength inline double SqrLength () const function Normalize inline vec3d & Normalize () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; Updated on 2023-10-25 at 15:40:28 +0000","title":"vec3d"},{"location":"api/Classes/classvec3d.html#vec3d","text":"","title":"vec3d"},{"location":"api/Classes/classvec3d.html#public-functions","text":"Name vec3d () vec3d (double rx, double ry, double rz) vec3d (const vec2d & r) vec3d operator+ (const vec3d & v) const vec3d operator- (const vec3d & v) const vec3d operator^ (const vec3d & v) const double operator* (const vec3d & v) const vec3d operator* (const double g) const vec3d operator/ (const double g) const const vec3d & operator+= (const vec3d & v) const vec3d & operator-= (const vec3d & v) const vec3d & operator/= (const double f) const vec3d & operator/= (const int n) const vec3d & operator*= (const double f) vec3d operator- () const double Length () const double SqrLength () const vec3d & Normalize ()","title":"Public Functions"},{"location":"api/Classes/classvec3d.html#public-attributes","text":"Name double x double y double z","title":"Public Attributes"},{"location":"api/Classes/classvec3d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec3d.html#function-vec3d","text":"inline vec3d ()","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_1","text":"inline vec3d ( double rx , double ry , double rz )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-vec3d_2","text":"inline vec3d ( const vec2d & r )","title":"function vec3d"},{"location":"api/Classes/classvec3d.html#function-operator","text":"inline vec3d operator + ( const vec3d & v ) const","title":"function operator+"},{"location":"api/Classes/classvec3d.html#function-operator-","text":"inline vec3d operator - ( const vec3d & v ) const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-operator_1","text":"inline vec3d operator ^ ( const vec3d & v ) const","title":"function operator^"},{"location":"api/Classes/classvec3d.html#function-operator_2","text":"inline double operator * ( const vec3d & v ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_3","text":"inline vec3d operator * ( const double g ) const","title":"function operator*"},{"location":"api/Classes/classvec3d.html#function-operator_4","text":"inline vec3d operator / ( const double g ) const","title":"function operator/"},{"location":"api/Classes/classvec3d.html#function-operator_5","text":"inline const vec3d & operator += ( const vec3d & v )","title":"function operator+="},{"location":"api/Classes/classvec3d.html#function-operator-_1","text":"inline const vec3d & operator -= ( const vec3d & v )","title":"function operator-="},{"location":"api/Classes/classvec3d.html#function-operator_6","text":"inline const vec3d & operator /= ( const double f )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_7","text":"inline const vec3d & operator /= ( const int n )","title":"function operator/="},{"location":"api/Classes/classvec3d.html#function-operator_8","text":"inline const vec3d & operator *= ( const double f )","title":"function operator*="},{"location":"api/Classes/classvec3d.html#function-operator-_2","text":"inline vec3d operator - () const","title":"function operator-"},{"location":"api/Classes/classvec3d.html#function-length","text":"inline double Length () const","title":"function Length"},{"location":"api/Classes/classvec3d.html#function-sqrlength","text":"inline double SqrLength () const","title":"function SqrLength"},{"location":"api/Classes/classvec3d.html#function-normalize","text":"inline vec3d & Normalize ()","title":"function Normalize"},{"location":"api/Classes/classvec3d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec3d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec3d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec3d.html#variable-z","text":"double z ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable z"},{"location":"api/Classes/classvec6d.html","text":"vec6d Public Functions Name vec6d () Public Attributes Name double x double y double z double xy double yz double xz Public Functions Documentation function vec6d inline vec6d () Public Attributes Documentation variable x double x ; variable y double y ; variable z double z ; variable xy double xy ; variable yz double yz ; variable xz double xz ; Updated on 2023-10-25 at 15:40:28 +0000","title":"vec6d"},{"location":"api/Classes/classvec6d.html#vec6d","text":"","title":"vec6d"},{"location":"api/Classes/classvec6d.html#public-functions","text":"Name vec6d ()","title":"Public Functions"},{"location":"api/Classes/classvec6d.html#public-attributes","text":"Name double x double y double z double xy double yz double xz","title":"Public Attributes"},{"location":"api/Classes/classvec6d.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvec6d.html#function-vec6d","text":"inline vec6d ()","title":"function vec6d"},{"location":"api/Classes/classvec6d.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/classvec6d.html#variable-x","text":"double x ;","title":"variable x"},{"location":"api/Classes/classvec6d.html#variable-y","text":"double y ;","title":"variable y"},{"location":"api/Classes/classvec6d.html#variable-z","text":"double z ;","title":"variable z"},{"location":"api/Classes/classvec6d.html#variable-xy","text":"double xy ;","title":"variable xy"},{"location":"api/Classes/classvec6d.html#variable-yz","text":"double yz ;","title":"variable yz"},{"location":"api/Classes/classvec6d.html#variable-xz","text":"double xz ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable xz"},{"location":"api/Classes/classvtkPolyDataToImageData.html","text":"vtkPolyDataToImageData Inherits from vtkImageAlgorithm Public Functions Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New () Protected Functions Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) Public Functions Documentation function vtkTypeMacro vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) function PrintSelf void PrintSelf ( ostream & os , vtkIndent indent ) function vtkSetMacro vtkSetMacro ( Border , unsigned int ) function vtkGetMacro vtkGetMacro ( Border , unsigned int ) function vtkSetMacro vtkSetMacro ( Spacing , double ) function vtkGetMacro vtkGetMacro ( Spacing , double ) function vtkSetMacro vtkSetMacro ( SampleDistance , double ) function vtkGetMacro vtkGetMacro ( SampleDistance , double ) function vtkSetMacro vtkSetMacro ( InitialBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( InitialBallSize , unsigned int ) function vtkSetMacro vtkSetMacro ( FinalBallSize , unsigned int ) function vtkGetMacro vtkGetMacro ( FinalBallSize , unsigned int ) function FillInputPortInformation virtual int FillInputPortInformation ( int port , vtkInformation * info ) function New static vtkPolyDataToImageData * New () Protected Functions Documentation function vtkPolyDataToImageData vtkPolyDataToImageData () function ~vtkPolyDataToImageData inline ~ vtkPolyDataToImageData () function RequestInformation virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestData virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) function RequestUpdateExtent virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-25 at 15:40:28 +0000","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#vtkpolydatatoimagedata","text":"Inherits from vtkImageAlgorithm","title":"vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions","text":"Name vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ) void PrintSelf (ostream & os, vtkIndent indent) vtkSetMacro (Border , unsigned int ) vtkGetMacro (Border , unsigned int ) vtkSetMacro (Spacing , double ) vtkGetMacro (Spacing , double ) vtkSetMacro (SampleDistance , double ) vtkGetMacro (SampleDistance , double ) vtkSetMacro (InitialBallSize , unsigned int ) vtkGetMacro (InitialBallSize , unsigned int ) vtkSetMacro (FinalBallSize , unsigned int ) vtkGetMacro (FinalBallSize , unsigned int ) virtual int FillInputPortInformation (int port, vtkInformation * info) vtkPolyDataToImageData * New ()","title":"Public Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions","text":"Name vtkPolyDataToImageData () ~vtkPolyDataToImageData () virtual int RequestInformation (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestData (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector) virtual int RequestUpdateExtent (vtkInformation * request, vtkInformationVector ** inputVector, vtkInformationVector * outputVector)","title":"Protected Functions"},{"location":"api/Classes/classvtkPolyDataToImageData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtktypemacro","text":"vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm )","title":"function vtkTypeMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-printself","text":"void PrintSelf ( ostream & os , vtkIndent indent )","title":"function PrintSelf"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro","text":"vtkSetMacro ( Border , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro","text":"vtkGetMacro ( Border , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_1","text":"vtkSetMacro ( Spacing , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_1","text":"vtkGetMacro ( Spacing , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_2","text":"vtkSetMacro ( SampleDistance , double )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_2","text":"vtkGetMacro ( SampleDistance , double )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_3","text":"vtkSetMacro ( InitialBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_3","text":"vtkGetMacro ( InitialBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtksetmacro_4","text":"vtkSetMacro ( FinalBallSize , unsigned int )","title":"function vtkSetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkgetmacro_4","text":"vtkGetMacro ( FinalBallSize , unsigned int )","title":"function vtkGetMacro"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-fillinputportinformation","text":"virtual int FillInputPortInformation ( int port , vtkInformation * info )","title":"function FillInputPortInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-new","text":"static vtkPolyDataToImageData * New ()","title":"function New"},{"location":"api/Classes/classvtkPolyDataToImageData.html#protected-functions-documentation","text":"","title":"Protected Functions Documentation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata","text":"vtkPolyDataToImageData ()","title":"function vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-vtkpolydatatoimagedata_1","text":"inline ~ vtkPolyDataToImageData ()","title":"function ~vtkPolyDataToImageData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestinformation","text":"virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestInformation"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestdata","text":"virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector )","title":"function RequestData"},{"location":"api/Classes/classvtkPolyDataToImageData.html#function-requestupdateextent","text":"virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ) Updated on 2023-10-25 at 15:40:28 +0000","title":"function RequestUpdateExtent"},{"location":"api/Classes/index_classes.html","text":"Classes class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Classes/index_classes.html#classes","text":"class ColorScheme struct rgb class ColorSchemes class CustomSlider class CustomSurfaceReconstructionFilter class FEAreaCoverage class Surface class FEAutoMesher class FECVDDecimationModifier class Cluster struct EDGE class NODE class FECoreMesh class FEEdge class FEElement class FEElementData class FEElement_ class FEFace class FEFillHole class EdgeRing struct FACE class FEFixMesh class FEItem class FEMesh class FEMeshSmoothingModifier class FENode class FENodeElementList class FENodeFaceList class FENodeNodeList class FETri3 class FEVTKExport class FEVTKimport class GLCOLOR struct Intersection class LegacyMeshGenerator class MeshSettings Settings for creating a mesh. class ObjectReader class ObjectWriter class ParticleEvent:: Parent class ParticleGradientDescentPositionOptimizer class ParticleImageDomain class ParticleImageDomainWithCurvature class ParticleImageDomainWithGradN class ParticleImageDomainWithGradients class ParticleImplicitSurfaceDomain class ParticleMeanCurvatureAttribute class ParticleProcrustesRegistration class ParticleShapeLinearRegressionMatrixAttribute class ParticleShapeMatrixAttribute Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ParticleShapeMixedEffectsMatrixAttribute class Preferences Application preferences. class Procrustes3D struct Quad struct Ray class Reconstruction struct SimilarityTransform3D class StudioLogger Handle logger callbacks via Qt for thread correctness. class SurfaceReconstructor struct Triangle namespace Ui class Utils struct VTKEXPORT namespace fmt struct formatter< QString > namespace itk class AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class BSplineInterpolateImageFunctionWithDoubleCoefficents class CompactlySupportedRBFSparseKernelTransform namespace Functor class MultiplyByConstant class KernelTransform2 class MultiplyByConstantImageFilter Multiply input pixels by a constant. class SparseKernelTransform class TPGACLevelSetImageFilter class ThinPlateSplineKernelTransform2 class mat3d class matrix class meshFIM class object_reader class object_writer class quatd namespace shapeworks User usage reporting (telemetry) class AnalysisTool class AnalysisUtils class Analyze High level analyze API. class AnalyzeCommandGroup class ColorMap class ColorMaps class Command class CompareSettings class CompareWidget class Constraint class Constraints class ContourDomain class CorrespondenceFunction Correspondence term. class CurvatureSamplingFunction Please note: This is the sampling function currently being used. struct CrossDomainNeighborhood class DataTool class DeepSSMJob Qt Wrapper for DeepSSM. class DeepSSMParameters class DeepSSMTool class DisentangledCorrespondenceFunction class DualVectorFunction class EigenUtils class ExcelProjectReader Excel file format reader for Project . class ExcelProjectWriter Excel file format writer for Project . class Executable class ExportImageDialog class ExportUtils Export utilities for Studio. class FreeFormConstraint class GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class GradientDescentOptimizer class Groom High level groom API. class GroomCommandGroup class GroomParameters class GroomTool class GroupPvalueJob class Image class ImageCommand class ImageDomain class ImageDomainWithCurvature class ImageDomainWithGradN class ImageDomainWithGradients class ImageLabel An extention of QLabel especially for scaled images. class ImageUtils Helper functions for image. class ImplicitSurfaceDomain class IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class Job class JsonProjectReader JSON file format reader for Project . class JsonProjectWriter JSON file format writer for Project . class KeyboardShortcuts class LandmarkDefinition Landmark class containing properties of each landmark. class LandmarkItemDelegate class LandmarkTableModel class LandmarkWidget LandmarkWidget . class LegacyCorrespondenceFunction class LegacyShapeMatrix class Lightbox Display multiple Viewers in a tiled display. class LinearRegressionShapeMatrix class LogWindow Log Window. class Logging ShapeWorks Logging Library. class MatrixContainer class MeanCurvatureContainer class Mesh class MeshCache Thread safe cache for meshes index by shape. class MeshCommand class MeshDomain class MeshGenerator struct MeshGeoEntry class MeshGroup Representation of a group of meshes. class MeshManager Class to manage meshes. class MeshReader reads mesh (used only by one of the Mesh constructors) class MeshReconstructors class MeshSlice MeshSlice . class MeshUtils class MeshWarper class MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class MeshWorkQueue class MeshWorker class MeshWrapper class MixedEffectsShapeMatrix struct MultiVariateNormalRandom class NetworkAnalysisJob class Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct DefinedCallbacksStruct class OptimizationVisualizer class Optimize class OptimizeCommandGroup class OptimizeParameterFile class OptimizeParameters class OptimizeTool class PaintWidget class Parameters Parameter settings. class ParticleArea class ParticleAreaJob class ParticleAreaPanel class ParticleColors Supplies particle colors. class ParticleDomain class ParticleEvent class ParticleGaussianModeWriter class ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class ParticleNeighborhood class ParticleNormalEvaluation class ParticleNormalEvaluationJob struct ParticlePointIndexPair class ParticleRegionDomain class ParticleRegionNeighborhood struct IteratorNodePair class ParticleShapeStatistics class ParticleSurfaceNeighborhood class ParticleSystem A facade class managing interactions with a particle system. class ParticleSystemCommand class ParticleSystemEvaluation class Particles Representation of correspondence points for a shape including multiple domains. class PhysicalRegion physical bounds of a 3d region of space class PickResult class PlaneConstraint class PlaneWidget PlaneWidget . class PowerOfTwoPointTree class PowerOfTwoPointTreeNode class PreferencesWindow Qt UI dialog to control preferences. class ProcrustesRegistration class Project Representation of a project. class ProjectCommandGroup class ProjectReader Base class for Project readers. class ProjectUtils class PythonWorker class QMeshWarper Wraps MeshWarper as a QObject. class QOptimize Wraps Optimize as a QObject. class ReconstructSurface struct Reconstruction class Sampler struct CuttingPlaneType struct SphereType class SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class Session Representation of a session. class Shape Representation of a single shape/patient/subject. class Point TODO: replace this wherever it is used. class ShapeEvaluation class ShapeEvaluationJob class ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class ShapeWorksStudioApp Main ShapeWorksStudio window. class ShapeworksCommand class ShapeworksUtils class ShapeworksWorker struct SharedCommandData class SliceView SliceView . class SplashScreen class StatsGroupLDAJob class StatusBarWidget StatusBarWidget . class StringUtils String utility functions. class StudioHandleWidget class StudioInteractorStyle class StudioMesh Representation of a single mesh. class StudioSliceInteractorStyle class StudioUtils Utilities for Studio. class StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class Style class Subject Representation of a single subject. class Telemetry class UpdateChecker Update Checker. class Variant Variant class to represent multiple types. class VectorFunction class VectorImage Gradient (vector) image. class Viewer 3D Viewer class Visualizer Controls display of objects in viewers. class VtkMeshWrapper class WheelEventForwarder class Worker namespace mesh namespace particles struct powstruct struct powstruct< a, 0 > namespace project namespace prefixes namespace types class shapeworks_exception namespace std namespace utils class vec2d class vec3d class vec6d class vtkPolyDataToImageData Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Classes/structColorScheme_1_1rgb.html","text":"ColorScheme::rgb Public Functions Name rgb () rgb (float l, float m, float n) Public Attributes Name float r float g float b Public Functions Documentation function rgb inline rgb () function rgb inline rgb ( float l , float m , float n ) Public Attributes Documentation variable r float r ; variable g float g ; variable b float b ; Updated on 2023-10-25 at 15:40:27 +0000","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#colorschemergb","text":"","title":"ColorScheme::rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions","text":"Name rgb () rgb (float l, float m, float n)","title":"Public Functions"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes","text":"Name float r float g float b","title":"Public Attributes"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb","text":"inline rgb ()","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#function-rgb_1","text":"inline rgb ( float l , float m , float n )","title":"function rgb"},{"location":"api/Classes/structColorScheme_1_1rgb.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-g","text":"float g ;","title":"variable g"},{"location":"api/Classes/structColorScheme_1_1rgb.html#variable-b","text":"float b ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable b"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html","text":"FECVDDecimationModifier::EDGE Public Attributes Name int face int node Public Attributes Documentation variable face int face ; variable node int node ; Updated on 2023-10-25 at 15:40:27 +0000","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#fecvddecimationmodifieredge","text":"","title":"FECVDDecimationModifier::EDGE"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes","text":"Name int face int node","title":"Public Attributes"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-face","text":"int face ;","title":"variable face"},{"location":"api/Classes/structFECVDDecimationModifier_1_1EDGE.html#variable-node","text":"int node ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable node"},{"location":"api/Classes/structFEFillHole_1_1FACE.html","text":"FEFillHole::FACE Public Attributes Name vec3d r int n Public Attributes Documentation variable r vec3d r ; variable n int n ; Updated on 2023-10-25 at 15:40:28 +0000","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#fefillholeface","text":"","title":"FEFillHole::FACE"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes","text":"Name vec3d r int n","title":"Public Attributes"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-r","text":"vec3d r ;","title":"variable r"},{"location":"api/Classes/structFEFillHole_1_1FACE.html#variable-n","text":"int n ; Updated on 2023-10-25 at 15:40:28 +0000","title":"variable n"},{"location":"api/Classes/structIntersection.html","text":"Intersection Public Attributes Name vec3d point float r int m_index int m_faceIndex Public Attributes Documentation variable point vec3d point ; variable r float r ; variable m_index int m_index ; variable m_faceIndex int m_faceIndex ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Intersection"},{"location":"api/Classes/structIntersection.html#intersection","text":"","title":"Intersection"},{"location":"api/Classes/structIntersection.html#public-attributes","text":"Name vec3d point float r int m_index int m_faceIndex","title":"Public Attributes"},{"location":"api/Classes/structIntersection.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structIntersection.html#variable-point","text":"vec3d point ;","title":"variable point"},{"location":"api/Classes/structIntersection.html#variable-r","text":"float r ;","title":"variable r"},{"location":"api/Classes/structIntersection.html#variable-m_index","text":"int m_index ;","title":"variable m_index"},{"location":"api/Classes/structIntersection.html#variable-m_faceindex","text":"int m_faceIndex ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable m_faceIndex"},{"location":"api/Classes/structQuad.html","text":"Quad Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d r3 Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable r3 vec3d r3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Quad"},{"location":"api/Classes/structQuad.html#quad","text":"","title":"Quad"},{"location":"api/Classes/structQuad.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d r3","title":"Public Attributes"},{"location":"api/Classes/structQuad.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structQuad.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structQuad.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structQuad.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structQuad.html#variable-r3","text":"vec3d r3 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable r3"},{"location":"api/Classes/structRay.html","text":"Ray Public Attributes Name vec3d origin vec3d direction Public Attributes Documentation variable origin vec3d origin ; variable direction vec3d direction ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Ray"},{"location":"api/Classes/structRay.html#ray","text":"","title":"Ray"},{"location":"api/Classes/structRay.html#public-attributes","text":"Name vec3d origin vec3d direction","title":"Public Attributes"},{"location":"api/Classes/structRay.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structRay.html#variable-origin","text":"vec3d origin ;","title":"variable origin"},{"location":"api/Classes/structRay.html#variable-direction","text":"vec3d direction ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable direction"},{"location":"api/Classes/structSimilarityTransform3D.html","text":"SimilarityTransform3D Public Attributes Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation Public Attributes Documentation variable rotation vnl_matrix_fixed < double , 3 , 3 > rotation ; variable scale double scale ; variable translation vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-25 at 15:40:27 +0000","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#similaritytransform3d","text":"","title":"SimilarityTransform3D"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes","text":"Name vnl_matrix_fixed< double, 3, 3 > rotation double scale vnl_vector_fixed< double, 3 > translation","title":"Public Attributes"},{"location":"api/Classes/structSimilarityTransform3D.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-rotation","text":"vnl_matrix_fixed < double , 3 , 3 > rotation ;","title":"variable rotation"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-scale","text":"double scale ;","title":"variable scale"},{"location":"api/Classes/structSimilarityTransform3D.html#variable-translation","text":"vnl_vector_fixed < double , 3 > translation ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable translation"},{"location":"api/Classes/structTriangle.html","text":"Triangle Public Attributes Name vec3d r0 vec3d r1 vec3d r2 vec3d fn Public Attributes Documentation variable r0 vec3d r0 ; variable r1 vec3d r1 ; variable r2 vec3d r2 ; variable fn vec3d fn ; Updated on 2023-10-25 at 15:40:27 +0000","title":"Triangle"},{"location":"api/Classes/structTriangle.html#triangle","text":"","title":"Triangle"},{"location":"api/Classes/structTriangle.html#public-attributes","text":"Name vec3d r0 vec3d r1 vec3d r2 vec3d fn","title":"Public Attributes"},{"location":"api/Classes/structTriangle.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structTriangle.html#variable-r0","text":"vec3d r0 ;","title":"variable r0"},{"location":"api/Classes/structTriangle.html#variable-r1","text":"vec3d r1 ;","title":"variable r1"},{"location":"api/Classes/structTriangle.html#variable-r2","text":"vec3d r2 ;","title":"variable r2"},{"location":"api/Classes/structTriangle.html#variable-fn","text":"vec3d fn ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable fn"},{"location":"api/Classes/structVTKEXPORT.html","text":"VTKEXPORT Public Attributes Name bool bshellthick bool bscalar_data Public Attributes Documentation variable bshellthick bool bshellthick ; variable bscalar_data bool bscalar_data ; Updated on 2023-10-25 at 15:40:27 +0000","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#vtkexport","text":"","title":"VTKEXPORT"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes","text":"Name bool bshellthick bool bscalar_data","title":"Public Attributes"},{"location":"api/Classes/structVTKEXPORT.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structVTKEXPORT.html#variable-bshellthick","text":"bool bshellthick ;","title":"variable bshellthick"},{"location":"api/Classes/structVTKEXPORT.html#variable-bscalar_data","text":"bool bscalar_data ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable bscalar_data"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html","text":"fmt::formatter< QString > Public Functions Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const Public Functions Documentation function parse inline constexpr auto parse ( format_parse_context & ctx ) function format template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#fmtformatter-qstring","text":"","title":"fmt::formatter< QString >"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions","text":"Name constexpr auto parse (format_parse_context & ctx) template auto format (const QString & str, FormatContext & ctx) const","title":"Public Functions"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-parse","text":"inline constexpr auto parse ( format_parse_context & ctx )","title":"function parse"},{"location":"api/Classes/structfmt_1_1formatter_3_01QString_01_4.html#function-format","text":"template < typename FormatContext > inline auto format ( const QString & str , FormatContext & ctx ) const Updated on 2023-10-25 at 15:40:26 +0000","title":"function format"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html","text":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood Public Functions Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_) Public Attributes Name ParticlePointIndexPair pi_pair double weight double distance int dom Public Functions Documentation function CrossDomainNeighborhood inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) Public Attributes Documentation variable pi_pair ParticlePointIndexPair pi_pair ; variable weight double weight ; variable distance double distance ; variable dom int dom ; Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#shapeworkscurvaturesamplingfunctioncrossdomainneighborhood","text":"","title":"shapeworks::CurvatureSamplingFunction::CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions","text":"Name CrossDomainNeighborhood (const ParticlePointIndexPair & pi_pair_, double weight_, double distance_, int dom_)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes","text":"Name ParticlePointIndexPair pi_pair double weight double distance int dom","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#function-crossdomainneighborhood","text":"inline CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ )","title":"function CrossDomainNeighborhood"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-pi_pair","text":"ParticlePointIndexPair pi_pair ;","title":"variable pi_pair"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-weight","text":"double weight ;","title":"variable weight"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-distance","text":"double distance ;","title":"variable distance"},{"location":"api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html#variable-dom","text":"int dom ; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable dom"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html","text":"shapeworks::MeshGeoEntry Public Types Name enum Mode Public Functions Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target) Public Attributes Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full Public Types Documentation enum Mode Enumerator Value Description Full Partial Public Functions Documentation function clear inline void clear () function is_full_mode inline bool is_full_mode () const function update_max_dist inline void update_max_dist () function has_entry inline bool has_entry ( int target ) Public Attributes Documentation variable mode Mode mode { Mode :: Partial }; variable max_dist double max_dist { 0.0 }; variable data_partial robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; variable data_full std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#shapeworksmeshgeoentry","text":"","title":"shapeworks::MeshGeoEntry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types","text":"Name enum Mode","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions","text":"Name void clear () bool is_full_mode () const void update_max_dist () bool has_entry (int target)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes","text":"Name Mode mode double max_dist robin_hood::unordered_flat_map< int, Eigen::Vector3d > data_partial std::array< Eigen::VectorXd, 3 > data_full","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#enum-mode","text":"Enumerator Value Description Full Partial","title":"enum Mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-clear","text":"inline void clear ()","title":"function clear"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-is_full_mode","text":"inline bool is_full_mode () const","title":"function is_full_mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-update_max_dist","text":"inline void update_max_dist ()","title":"function update_max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#function-has_entry","text":"inline bool has_entry ( int target )","title":"function has_entry"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-mode","text":"Mode mode { Mode :: Partial };","title":"variable mode"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-max_dist","text":"double max_dist { 0.0 };","title":"variable max_dist"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_partial","text":"robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ;","title":"variable data_partial"},{"location":"api/Classes/structshapeworks_1_1MeshGeoEntry.html#variable-data_full","text":"std :: array < Eigen :: VectorXd , 3 > data_full ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable data_full"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html","text":"shapeworks::MultiVariateNormalRandom Public Functions Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() () Public Attributes Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist Public Functions Documentation function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) function MultiVariateNormalRandom inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) function operator() inline Eigen :: MatrixXd operator ()() Public Attributes Documentation variable mean Eigen :: VectorXd mean ; variable transform Eigen :: MatrixXd transform ; variable gen boost :: mt19937 gen { 42 }; variable dist boost :: normal_distribution dist ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#shapeworksmultivariatenormalrandom","text":"","title":"shapeworks::MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions","text":"Name MultiVariateNormalRandom (Eigen::MatrixXd const & covar) MultiVariateNormalRandom (Eigen::VectorXd const & mean, Eigen::MatrixXd const & covar) Eigen::MatrixXd operator() ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes","text":"Name Eigen::VectorXd mean Eigen::MatrixXd transform boost::mt19937 gen boost::normal_distribution dist","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom","text":"inline MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-multivariatenormalrandom_1","text":"inline MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar )","title":"function MultiVariateNormalRandom"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#function-operator","text":"inline Eigen :: MatrixXd operator ()()","title":"function operator()"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-mean","text":"Eigen :: VectorXd mean ;","title":"variable mean"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-transform","text":"Eigen :: MatrixXd transform ;","title":"variable transform"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-gen","text":"boost :: mt19937 gen { 42 };","title":"variable gen"},{"location":"api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html#variable-dist","text":"boost :: normal_distribution dist ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html","text":"shapeworks::Observer::DefinedCallbacksStruct More... #include Public Functions Name DefinedCallbacksStruct () Public Attributes Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent Detailed Description struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register. Public Functions Documentation function DefinedCallbacksStruct inline DefinedCallbacksStruct () Public Attributes Documentation variable DomainAddEvent bool DomainAddEvent ; variable TransformSetEvent bool TransformSetEvent ; variable PrefixTransformSetEvent bool PrefixTransformSetEvent ; variable NeighborhoodSetEvent bool NeighborhoodSetEvent ; variable PositionSetEvent bool PositionSetEvent ; variable PositionAddEvent bool PositionAddEvent ; variable PositionRemoveEvent bool PositionRemoveEvent ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#shapeworksobserverdefinedcallbacksstruct","text":"More... #include ","title":"shapeworks::Observer::DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions","text":"Name DefinedCallbacksStruct ()","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes","text":"Name bool DomainAddEvent bool TransformSetEvent bool PrefixTransformSetEvent bool NeighborhoodSetEvent bool PositionSetEvent bool PositionAddEvent bool PositionRemoveEvent","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#detailed-description","text":"struct shapeworks :: Observer :: DefinedCallbacksStruct ; Data structure indicating which callback functions are defined by a subclass. The ParticleSystem class will reference this structure to determine which callbacks to register.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#function-definedcallbacksstruct","text":"inline DefinedCallbacksStruct ()","title":"function DefinedCallbacksStruct"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-domainaddevent","text":"bool DomainAddEvent ;","title":"variable DomainAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-transformsetevent","text":"bool TransformSetEvent ;","title":"variable TransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-prefixtransformsetevent","text":"bool PrefixTransformSetEvent ;","title":"variable PrefixTransformSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-neighborhoodsetevent","text":"bool NeighborhoodSetEvent ;","title":"variable NeighborhoodSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionsetevent","text":"bool PositionSetEvent ;","title":"variable PositionSetEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionaddevent","text":"bool PositionAddEvent ;","title":"variable PositionAddEvent"},{"location":"api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html#variable-positionremoveevent","text":"bool PositionRemoveEvent ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable PositionRemoveEvent"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html","text":"shapeworks::ParticlePointIndexPair More... #include Public Types Name typedef itk::Point< double, 3 > PointType Public Functions Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o) Public Attributes Name PointType Point unsigned int Index Detailed Description struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h] Public Types Documentation typedef PointType typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ; Public Functions Documentation function ParticlePointIndexPair inline ParticlePointIndexPair () function ParticlePointIndexPair inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) function ParticlePointIndexPair inline ParticlePointIndexPair ( const ParticlePointIndexPair & o ) function operator= inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) Public Attributes Documentation variable Point PointType Point ; variable Index unsigned int Index ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#shapeworksparticlepointindexpair","text":"More... #include ","title":"shapeworks::ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types","text":"Name typedef itk::Point< double, 3 > PointType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions","text":"Name ParticlePointIndexPair () ParticlePointIndexPair (const PointType & p, unsigned int i =0) ParticlePointIndexPair (const ParticlePointIndexPair & o) const ParticlePointIndexPair & operator= (const ParticlePointIndexPair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes","text":"Name PointType Point unsigned int Index","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#detailed-description","text":"struct shapeworks :: ParticlePointIndexPair ; Struct containing a Point and an index value associated with a point. This object is used mainly by [ParticleNeighborhood.h]","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#typedef-pointtype","text":"typedef itk :: Point < double , 3 > shapeworks :: ParticlePointIndexPair :: PointType ;","title":"typedef PointType"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair","text":"inline ParticlePointIndexPair ()","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_1","text":"inline ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-particlepointindexpair_2","text":"inline ParticlePointIndexPair ( const ParticlePointIndexPair & o )","title":"function ParticlePointIndexPair"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#function-operator","text":"inline const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-point","text":"PointType Point ;","title":"variable Point"},{"location":"api/Classes/structshapeworks_1_1ParticlePointIndexPair.html#variable-index","text":"unsigned int Index ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable Index"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html","text":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair More... #include Public Types Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType Public Functions Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o) Public Attributes Name IteratorType Iterator NodePointerType NodePointer Detailed Description struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values. Public Types Documentation typedef NodePointerType typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ; typedef IteratorType typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ; Public Functions Documentation function IteratorNodePair inline IteratorNodePair () function ~IteratorNodePair inline ~ IteratorNodePair () function IteratorNodePair inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) function IteratorNodePair inline IteratorNodePair ( const IteratorNodePair & o ) function operator= inline const IteratorNodePair & operator = ( const IteratorNodePair & o ) Public Attributes Documentation variable Iterator IteratorType Iterator ; variable NodePointer NodePointerType NodePointer ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#shapeworksparticleregionneighborhooditeratornodepair","text":"More... #include ","title":"shapeworks::ParticleRegionNeighborhood::IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types","text":"Name typedef PointTreeType::NodePointerType NodePointerType typedef PointTreeType::PointListType::iterator IteratorType","title":"Public Types"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions","text":"Name IteratorNodePair () ~IteratorNodePair () IteratorNodePair (const IteratorType & p, const NodePointerType & n) IteratorNodePair (const IteratorNodePair & o) const IteratorNodePair & operator= (const IteratorNodePair & o)","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes","text":"Name IteratorType Iterator NodePointerType NodePointer","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#detailed-description","text":"struct shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair ; Map for direct reference of PointIndexPairs and Tree nodes from the PointTree. This is used for fast removal or modification of point values.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-types-documentation","text":"","title":"Public Types Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-nodepointertype","text":"typedef PointTreeType :: NodePointerType shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: NodePointerType ;","title":"typedef NodePointerType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#typedef-iteratortype","text":"typedef PointTreeType :: PointListType :: iterator shapeworks :: ParticleRegionNeighborhood :: IteratorNodePair :: IteratorType ;","title":"typedef IteratorType"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair","text":"inline IteratorNodePair ()","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_1","text":"inline ~ IteratorNodePair ()","title":"function ~IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_2","text":"inline IteratorNodePair ( const IteratorType & p , const NodePointerType & n )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-iteratornodepair_3","text":"inline IteratorNodePair ( const IteratorNodePair & o )","title":"function IteratorNodePair"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#function-operator","text":"inline const IteratorNodePair & operator = ( const IteratorNodePair & o )","title":"function operator="},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-iterator","text":"IteratorType Iterator ;","title":"variable Iterator"},{"location":"api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html#variable-nodepointer","text":"NodePointerType NodePointer ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable NodePointer"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html","text":"shapeworks::Reconstruction Public Attributes Name double dist int shapeIdx Eigen::MatrixXd rec Public Attributes Documentation variable dist double dist ; variable shapeIdx int shapeIdx ; variable rec Eigen :: MatrixXd rec ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#shapeworksreconstruction","text":"","title":"shapeworks::Reconstruction"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes","text":"Name double dist int shapeIdx Eigen::MatrixXd rec","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-dist","text":"double dist ;","title":"variable dist"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-shapeidx","text":"int shapeIdx ;","title":"variable shapeIdx"},{"location":"api/Classes/structshapeworks_1_1Reconstruction.html#variable-rec","text":"Eigen :: MatrixXd rec ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable rec"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html","text":"shapeworks::Sampler::CuttingPlaneType More... #include Public Attributes Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c Detailed Description struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information Public Attributes Documentation variable a vnl_vector_fixed < double , 3 > a ; variable b vnl_vector_fixed < double , 3 > b ; variable c vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#shapeworkssamplercuttingplanetype","text":"More... #include ","title":"shapeworks::Sampler::CuttingPlaneType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes","text":"Name vnl_vector_fixed< double, 3 > a vnl_vector_fixed< double, 3 > b vnl_vector_fixed< double, 3 > c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#detailed-description","text":"struct shapeworks :: Sampler :: CuttingPlaneType ; Convenient typedef for storing cutting plane information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-a","text":"vnl_vector_fixed < double , 3 > a ;","title":"variable a"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-b","text":"vnl_vector_fixed < double , 3 > b ;","title":"variable b"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html#variable-c","text":"vnl_vector_fixed < double , 3 > c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html","text":"shapeworks::Sampler::SphereType More... #include Public Attributes Name vnl_vector_fixed< double, Dimension > center double radius Detailed Description struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information Public Attributes Documentation variable center vnl_vector_fixed < double , Dimension > center ; variable radius double radius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#shapeworkssamplerspheretype","text":"More... #include ","title":"shapeworks::Sampler::SphereType"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes","text":"Name vnl_vector_fixed< double, Dimension > center double radius","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#detailed-description","text":"struct shapeworks :: Sampler :: SphereType ; Convenient typedef for storing sphere information","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-center","text":"vnl_vector_fixed < double , Dimension > center ;","title":"variable center"},{"location":"api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html#variable-radius","text":"double radius ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable radius"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html","text":"shapeworks::SharedCommandData Public Functions Name bool validImage () const bool validMesh () const bool validParticleSystem () const Public Attributes Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field Public Functions Documentation function validImage inline bool validImage () const function validMesh inline bool validMesh () const function validParticleSystem inline bool validParticleSystem () const Public Attributes Documentation variable image Image image ; variable mesh std :: unique_ptr < Mesh > mesh ; variable region PhysicalRegion region ; variable particleSystem ParticleSystemEvaluation particleSystem ; variable field Field field ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#shapeworkssharedcommanddata","text":"","title":"shapeworks::SharedCommandData"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions","text":"Name bool validImage () const bool validMesh () const bool validParticleSystem () const","title":"Public Functions"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes","text":"Name Image image std::unique_ptr< Mesh > mesh PhysicalRegion region ParticleSystemEvaluation particleSystem Field field","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-functions-documentation","text":"","title":"Public Functions Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validimage","text":"inline bool validImage () const","title":"function validImage"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validmesh","text":"inline bool validMesh () const","title":"function validMesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#function-validparticlesystem","text":"inline bool validParticleSystem () const","title":"function validParticleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-image","text":"Image image ;","title":"variable image"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-mesh","text":"std :: unique_ptr < Mesh > mesh ;","title":"variable mesh"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-region","text":"PhysicalRegion region ;","title":"variable region"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-particlesystem","text":"ParticleSystemEvaluation particleSystem ;","title":"variable particleSystem"},{"location":"api/Classes/structshapeworks_1_1SharedCommandData.html#variable-field","text":"Field field ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable field"},{"location":"api/Classes/structshapeworks_1_1powstruct.html","text":"shapeworks::powstruct More... #include Public Attributes Name const int c Detailed Description template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time. Public Attributes Documentation variable c static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#shapeworkspowstruct","text":"More... #include ","title":"shapeworks::powstruct"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#detailed-description","text":"template < int a , int b > struct shapeworks :: powstruct ; Compute pow(a,b)=c at compile time.","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct.html#variable-c","text":"static const int c = a * powstruct < a , b - 1 >:: c ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable c"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html","text":"shapeworks::powstruct< a, 0 > More... Public Attributes Name const int c Detailed Description template < int a > struct shapeworks :: powstruct < a , 0 > ; Public Attributes Documentation variable c static const int c = 1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#shapeworkspowstruct-a-0","text":"More...","title":"shapeworks::powstruct< a, 0 >"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes","text":"Name const int c","title":"Public Attributes"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#detailed-description","text":"template < int a > struct shapeworks :: powstruct < a , 0 > ;","title":"Detailed Description"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#public-attributes-documentation","text":"","title":"Public Attributes Documentation"},{"location":"api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html#variable-c","text":"static const int c = 1 ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable c"},{"location":"api/Files/AnalysisTool_8h.html","text":"Studio/Analysis/AnalysisTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisTool Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#studioanalysisanalysistoolh","text":"","title":"Studio/Analysis/AnalysisTool.h"},{"location":"api/Files/AnalysisTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisTool_8h.html#classes","text":"Name class shapeworks::AnalysisTool","title":"Classes"},{"location":"api/Files/AnalysisTool_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include #include // Studio #include #include #include #include class Ui_AnalysisTool ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class GroupPvalueJob ; class NetworkAnalysisJob ; class StatsGroupLDAJob ; class ParticleAreaPanel ; class AnalysisTool : public QWidget { Q_OBJECT ; public : using AlignmentType = Analyze :: AlignmentType ; enum GroupAnalysisType { None = 0 , Pvalues = 1 , NetworkAnalysis = 2 , LDA = 3 }; enum McaMode { Vanilla , Within , Between }; using PointType = itk :: Point < double , 3 > ; AnalysisTool ( Preferences & prefs ); ~ AnalysisTool (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_app ( ShapeWorksStudioApp * app ); ShapeWorksStudioApp * get_app () { return app_ ; } void set_active ( bool active ); bool get_active (); bool get_group_difference_mode (); std :: vector < Shape :: Point > get_group_difference_vectors (); std :: string get_analysis_mode (); void set_analysis_mode ( std :: string mode ); void set_labels ( QString which , QString value ); int get_pca_mode (); double get_group_ratio (); double get_pca_value (); bool pca_animate (); McaMode get_mca_level () const ; int get_sample_number (); bool compute_stats (); void update_slider (); void reset_stats (); void enable_actions ( bool newly_enabled = false ); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_shape_points ( int mode , double value ); Particles get_multi_level_shape_points ( int mode , double value , McaMode level ); ShapeHandle get_mode_shape ( int mode , double value ); ShapeHandle get_mca_mode_shape ( int mode , double value , McaMode level ); ShapeHandle get_current_shape (); ParticleShapeStatistics get_stats (); void load_settings (); void store_settings (); void shutdown (); bool export_variance_graph ( QString filename ); void compute_shape_evaluations (); static const std :: string MODE_ALL_SAMPLES_C ; static const std :: string MODE_MEAN_C ; static const std :: string MODE_PCA_C ; static const std :: string MODE_SINGLE_SAMPLE_C ; static const std :: string MODE_REGRESSION_C ; GroupAnalysisType get_group_analysis_type (); public Q_SLOTS : // analysis mode void on_tabWidget_currentChanged (); void handle_analysis_options (); void handle_median (); void on_mean_button_clicked (); void on_group1_button_clicked (); void on_group2_button_clicked (); void on_difference_button_clicked (); // PCA void on_pcaSlider_valueChanged (); void on_group_slider_valueChanged (); void on_pcaModeSpinBox_valueChanged ( int i ); void handle_pca_animate_state_changed (); void handle_pca_timer (); void handle_group_animate_state_changed (); void handle_group_timer (); void handle_reconstruction_complete (); void on_reconstructionButton_clicked (); void set_feature_map ( const std :: string & feature_map ); std :: string get_display_feature_map (); void group_changed (); bool groups_active (); void on_view_open_button_toggled (); void on_surface_open_button_toggled (); void on_metrics_open_button_toggled (); bool is_group_active ( int shape_index ); void reconstruction_method_changed (); void initialize_mesh_warper (); void group_p_values_clicked (); void network_analysis_clicked (); void handle_eval_thread_complete ( ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); void handle_eval_thread_progress ( ShapeEvaluationJob :: JobType job_type , float progress ); void handle_eval_particle_normals_progress ( float progress ); void handle_eval_particle_normals_complete ( std :: vector < bool > good_bad ); void handle_group_pvalues_complete (); void handle_alignment_changed ( int new_alignment ); void run_good_bad_particles (); void handle_lda_progress ( double progress ); void handle_lda_complete (); void handle_network_analysis_progress ( int progress ); void handle_network_analysis_complete (); void show_difference_to_mean_clicked (); void group_analysis_combo_changed (); Q_SIGNALS : void update_view (); void pca_update (); void progress ( int ); void reconstruction_complete (); private : void create_plot ( JKQTPlotter * plot , Eigen :: VectorXd data , QString title , QString x_label , QString y_label ); void compute_reconstructed_domain_transforms (); bool active_ = false ; void pca_labels_changed ( QString value , QString eigen , QString lambda ); void update_analysis_mode (); void update_interface (); bool group_pvalues_valid (); bool groups_on (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); void update_group_boxes (); void update_group_values (); void update_domain_alignment_box (); void update_lda_graph (); void update_difference_particles (); ShapeHandle create_shape_from_points ( Particles points ); Preferences & preferences_ ; Ui_AnalysisTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; bool evals_ready_ = false ; bool large_particle_disclaimer_waived_ = false ; bool skip_evals_ = false ; Eigen :: VectorXd eval_specificity_ ; Eigen :: VectorXd eval_compactness_ ; Eigen :: VectorXd eval_generalization_ ; vnl_vector < double > empty_shape_ ; Eigen :: VectorXd temp_shape_ ; Eigen :: VectorXd temp_shape_mca ; std :: vector < int > number_of_particles_ar ; bool pca_animate_direction_ = true ; QTimer pca_animate_timer_ ; bool group_animate_direction_ = true ; QTimer group_animate_timer_ ; ShapeHandle computed_shape_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: string feature_map_ ; std :: vector < std :: string > current_group_names_ ; std :: vector < std :: string > current_group_values_ ; std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; QSharedPointer < GroupPvalueJob > group_pvalue_job_ ; QSharedPointer < StatsGroupLDAJob > group_lda_job_ ; QSharedPointer < NetworkAnalysisJob > network_analysis_job_ ; bool group_lda_job_running_ = false ; bool lda_computed_ = false ; bool block_group_change_ = false ; AlignmentType current_alignment_ { AlignmentType :: Local }; ParticleAreaPanel * particle_area_panel_ { nullptr }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/AnalysisUtils_8h.html","text":"Studio/Utils/AnalysisUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::AnalysisUtils Source code #pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#studioutilsanalysisutilsh","text":"","title":"Studio/Utils/AnalysisUtils.h"},{"location":"api/Files/AnalysisUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/AnalysisUtils_8h.html#classes","text":"Name class shapeworks::AnalysisUtils","title":"Classes"},{"location":"api/Files/AnalysisUtils_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class Session ; class AnalysisUtils { public : static ParticleSystemEvaluation get_local_particle_system ( Session * session , int domain ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Analyze_8h.html","text":"Libs/Analyze/Analyze.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Analyze High level analyze API. Source code #pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#libsanalyzeanalyzeh","text":"","title":"Libs/Analyze/Analyze.h"},{"location":"api/Files/Analyze_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Analyze_8h.html#classes","text":"Name class shapeworks::Analyze High level analyze API.","title":"Classes"},{"location":"api/Files/Analyze_8h.html#source-code","text":"#pragma once #include #include #include \"Shape.h\" namespace shapeworks { class Analyze { public : enum AlignmentType { Global = -2 , Local = -1 , }; Analyze ( ProjectHandle project ); void run_offline_analysis ( std :: string outfile , float range , float steps ); ShapeList get_shapes (); int get_num_subjects (); int get_num_modes (); int get_num_particles (); Particles get_mean_shape_points (); ShapeHandle get_mean_shape (); Particles get_group_shape_particles ( double ratio ); ShapeHandle get_group_shape ( double ratio ); Particles get_shape_points ( int mode , double value ); ShapeHandle get_mode_shape ( int mode , double value ); bool groups_active () { return false ; } ShapeHandle create_shape_from_points ( Particles points ); Eigen :: VectorXf get_subject_features ( int subject , std :: string feature_name ); void set_group_selection ( std :: string group_name , std :: string group1 , std :: string group2 ); ParticleSystemEvaluation get_local_particle_system ( int domain ); private : bool update_shapes (); bool compute_stats (); void initialize_mesh_warper (); Particles convert_from_combined ( const Eigen :: VectorXd & points ); ProjectHandle project_ ; // collection of shapes ShapeList shapes_ ; ShapeList group1_list_ ; ShapeList group2_list_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; ParticleShapeStatistics stats_ ; bool stats_ready_ = false ; std :: string selected_group_ ; std :: string group1_ ; std :: string group2_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ColorMap_8h.html","text":"Studio/Visualization/ColorMap.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ColorMap class shapeworks::ColorMaps Source code #pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#studiovisualizationcolormaph","text":"","title":"Studio/Visualization/ColorMap.h"},{"location":"api/Files/ColorMap_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ColorMap_8h.html#classes","text":"Name class shapeworks::ColorMap class shapeworks::ColorMaps","title":"Classes"},{"location":"api/Files/ColorMap_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class ColorMap { public : QString name_ ; vtkSmartPointer < vtkColorSeries > color_series_ ; void construct_lookup_table ( vtkSmartPointer < vtkLookupTable > lut ); static vtkColor3ub convert ( QColor color ); void set_discrete_mode ( bool discrete_mode ) { discrete_mode_ = discrete_mode ; } void set_reverse_mode ( bool reverse_mode ) { reverse_mode_ = reverse_mode ; } private : bool discrete_mode_ = false ; bool reverse_mode_ = false ; }; class ColorMaps : public std :: vector < ColorMap > { public : ColorMaps (); vtkSmartPointer < vtkColorSeries > get_color_series ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]. color_series_ ; } ColorMap get_color_map ( int index ) { if ( index < 0 ) { index = 0 ; } if ( index > size () - 1 ) { index = size () - 1 ; } return ( * this )[ index ]; } }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ColorSchemes_8h.html","text":"Studio/Visualization/ColorSchemes.h Classes Name class ColorScheme struct ColorScheme::rgb class ColorSchemes Source code #pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#studiovisualizationcolorschemesh","text":"","title":"Studio/Visualization/ColorSchemes.h"},{"location":"api/Files/ColorSchemes_8h.html#classes","text":"Name class ColorScheme struct ColorScheme::rgb class ColorSchemes","title":"Classes"},{"location":"api/Files/ColorSchemes_8h.html#source-code","text":"#pragma once #include #include class ColorScheme { public : struct rgb { rgb () : r ( 1.0 ), g ( 1.0 ), b ( 1.0 ) {} rgb ( float l , float m , float n ) { float q = 255.0 ; // sqrt(l*l + m*m + n*n) + 1.0e-6; r = l / q ; g = m / q ; b = n / q ; } float r ; float g ; float b ; }; rgb foreground ; rgb background ; rgb alt ; //----------------------------------------------------------------------------- QColor background_qcolor ( int alpha ) { return QColor ( background . r * 255 , background . g * 255 , background . b * 255 , alpha ); } //----------------------------------------------------------------------------- QColor foreground_qcolor () { return QColor ( foreground . r * 255 , foreground . g * 255 , foreground . b * 255 , 255 ); } //----------------------------------------------------------------------------- QColor get_text_color () { double average = ( background . r + background . g + background . b ) / 3.0 ; double color = 255 ; if ( average > 0.5 ) { color = 0 ; } return QColor ( color , color , color ); } double get_text_intensity () { auto color = get_text_color (); if ( color . red () == 0 ) { return 0 ; } return 1 ; } ColorScheme () {} ~ ColorScheme () {} }; class ColorSchemes : public std :: vector < ColorScheme > { public : ColorSchemes () { ColorScheme a ; // orange on grey a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // purple on grey a . foreground = ColorScheme :: rgb ( 128 , 0 , 32.0 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 245 , 245 , 220 ); this -> push_back ( a ); // blue on white a . foreground = ColorScheme :: rgb ( 0 , 71 , 171 ); a . background = ColorScheme :: rgb ( 245 , 245 , 245 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // orange on white a . foreground = ColorScheme :: rgb ( 255 , 191 , 0 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on white // For Black and White figures a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 255 , 255 , 255 ); a . alt = ColorScheme :: rgb ( 80 , 80 , 80 ); this -> push_back ( a ); // orange on blue a . foreground = ColorScheme :: rgb ( 255 , 219 , 88 ); a . background = ColorScheme :: rgb ( 0 , 0 , 128 ); a . alt = ColorScheme :: rgb ( 173 , 255 , 47 ); this -> push_back ( a ); // yellow on grey a . foreground = ColorScheme :: rgb ( 240 , 220 , 130 ); a . background = ColorScheme :: rgb ( 25 , 25 , 25 ); a . alt = ColorScheme :: rgb ( 0 , 223 , 22 ); this -> push_back ( a ); // grey on black a . foreground = ColorScheme :: rgb ( 200 , 200 , 200 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 100 , 100 , 100 ); this -> push_back ( a ); // blue on black a . foreground = ColorScheme :: rgb ( 0 , 191 , 255 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); // green on black a . foreground = ColorScheme :: rgb ( 137 , 232 , 148 ); a . background = ColorScheme :: rgb ( 0 , 0 , 0 ); a . alt = ColorScheme :: rgb ( 175 , 64 , 53 ); this -> push_back ( a ); } ~ ColorSchemes () {} }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Command_8h.html","text":"Applications/shapeworks/Command.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand Functions Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd) Defines Name COMMAND_DECLARE (CommandName, CommandType) Functions Documentation function operator<< std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ) Macros Documentation define COMMAND_DECLARE #define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ } Source code #pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#applicationsshapeworkscommandh","text":"","title":"Applications/shapeworks/Command.h"},{"location":"api/Files/Command_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Command_8h.html#classes","text":"Name class shapeworks::Command class shapeworks::ImageCommand class shapeworks::MeshCommand class shapeworks::OptimizeCommandGroup class shapeworks::GroomCommandGroup class shapeworks::AnalyzeCommandGroup class shapeworks::ProjectCommandGroup class shapeworks::ParticleSystemCommand class shapeworks::ShapeworksCommand","title":"Classes"},{"location":"api/Files/Command_8h.html#functions","text":"Name std::ostream & operator<< (std::ostream & os, const shapeworks::Command & cmd)","title":"Functions"},{"location":"api/Files/Command_8h.html#defines","text":"Name COMMAND_DECLARE (CommandName, CommandType)","title":"Defines"},{"location":"api/Files/Command_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Command_8h.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd )","title":"function operator<<"},{"location":"api/Files/Command_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Command_8h.html#define-command_declare","text":"#define COMMAND_DECLARE( CommandName , CommandType ) class CommandName : public CommandType \\ { \\ public : \\ static CommandName & getCommand () { static CommandName instance ; return instance ; } \\ \\ private : \\ CommandName () { buildParser (); } \\ void buildParser () override ; \\ bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) override ; \\ }","title":"define COMMAND_DECLARE"},{"location":"api/Files/Command_8h.html#source-code","text":"#pragma once /* * Command provided by unified shapeworks executable. */ #include \"OptionParser.h\" #include \"SharedCommandData.h\" #include #include #define COMMAND_DECLARE(CommandName, CommandType) \\ class CommandName : public CommandType \\ { \\ public: \\ static CommandName &getCommand() { static CommandName instance; return instance; } \\ \\ private: \\ CommandName() { buildParser(); } \\ void buildParser() override; \\ bool execute(const optparse::Values &options, SharedCommandData &sharedData) override; \\ } namespace shapeworks { class Command { public : virtual const std :: string type () { return \"General\" ; } const std :: string name () const { return parser . prog (); } const std :: string usage () const { return parser . get_usage (); } const std :: string desc () const { return parser . description (); } std :: vector < std :: string > parse_args ( const std :: vector < std :: string > & arguments ); int run ( SharedCommandData & sharedData ); private : virtual bool execute ( const optparse :: Values & options , SharedCommandData & sharedData ) = 0 ; protected : virtual void buildParser (); // derived classes should specialize and call this as well optparse :: OptionParser parser ; }; class ImageCommand : public Command { public : const std :: string type () override { return \"Image\" ; } private : }; class MeshCommand : public Command { public : const std :: string type () override { return \"Mesh\" ; } private : }; class OptimizeCommandGroup : public Command { public : const std :: string type () override { return \"Optimize\" ; } private : }; class GroomCommandGroup : public Command { public : const std :: string type () override { return \"Groom\" ; } private : }; class AnalyzeCommandGroup : public Command { public : const std :: string type () override { return \"Analyze\" ; } private : }; class ProjectCommandGroup : public Command { public : const std :: string type () override { return \"Project\" ; } private : }; class ParticleSystemCommand : public Command { public : const std :: string type () override { return \"ParticleSystem\" ; } private : }; class ShapeworksCommand : public Command { public : const std :: string type () override { return \"Shapeworks\" ; } private : }; }; // shapeworks std :: ostream & operator << ( std :: ostream & os , const shapeworks :: Command & cmd ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Commands_8h.html","text":"Applications/shapeworks/Commands.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#applicationsshapeworkscommandsh","text":"","title":"Applications/shapeworks/Commands.h"},{"location":"api/Files/Commands_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Commands_8h.html#source-code","text":"#pragma once #include \"Command.h\" namespace shapeworks { // Image Commands COMMAND_DECLARE ( ReadImage , ImageCommand ); COMMAND_DECLARE ( WriteImage , ImageCommand ); COMMAND_DECLARE ( ImageInfo , ImageCommand ); COMMAND_DECLARE ( Antialias , ImageCommand ); COMMAND_DECLARE ( ResampleImage , ImageCommand ); COMMAND_DECLARE ( ResizeImage , ImageCommand ); COMMAND_DECLARE ( RecenterImage , ImageCommand ); COMMAND_DECLARE ( PadImage , ImageCommand ); COMMAND_DECLARE ( TranslateImage , ImageCommand ); COMMAND_DECLARE ( ScaleImage , ImageCommand ); COMMAND_DECLARE ( Rotate , ImageCommand ); COMMAND_DECLARE ( ExtractLabel , ImageCommand ); COMMAND_DECLARE ( CloseHoles , ImageCommand ); COMMAND_DECLARE ( Binarize , ImageCommand ); COMMAND_DECLARE ( ComputeDT , ImageCommand ); COMMAND_DECLARE ( CurvatureFilter , ImageCommand ); COMMAND_DECLARE ( GradientFilter , ImageCommand ); COMMAND_DECLARE ( SigmoidFilter , ImageCommand ); COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ); COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ); COMMAND_DECLARE ( IntensityFilter , ImageCommand ); COMMAND_DECLARE ( Blur , ImageCommand ); COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ); COMMAND_DECLARE ( ImageBounds , ImageCommand ); COMMAND_DECLARE ( CropImage , ImageCommand ); COMMAND_DECLARE ( ICPRigid , ImageCommand ); COMMAND_DECLARE ( ClipImage , ImageCommand ); COMMAND_DECLARE ( ReflectImage , ImageCommand ); COMMAND_DECLARE ( SetOrigin , ImageCommand ); COMMAND_DECLARE ( SetSpacing , ImageCommand ); COMMAND_DECLARE ( WarpImage , ImageCommand ); COMMAND_DECLARE ( CompareImage , ImageCommand ); COMMAND_DECLARE ( NegateImage , ImageCommand ); COMMAND_DECLARE ( AddImage , ImageCommand ); COMMAND_DECLARE ( SubtractImage , ImageCommand ); COMMAND_DECLARE ( MultiplyImage , ImageCommand ); COMMAND_DECLARE ( DivideImage , ImageCommand ); COMMAND_DECLARE ( ImageToMesh , ImageCommand ); COMMAND_DECLARE ( SetRegion , ImageCommand ); COMMAND_DECLARE ( Isolate , ImageCommand ); // Particle System Commands COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ); COMMAND_DECLARE ( Compactness , ParticleSystemCommand ); COMMAND_DECLARE ( Generalization , ParticleSystemCommand ); COMMAND_DECLARE ( Specificity , ParticleSystemCommand ); // Mesh Commands COMMAND_DECLARE ( ReadMesh , MeshCommand ); COMMAND_DECLARE ( WriteMesh , MeshCommand ); COMMAND_DECLARE ( MeshInfo , MeshCommand ); COMMAND_DECLARE ( Coverage , MeshCommand ); COMMAND_DECLARE ( Smooth , MeshCommand ); COMMAND_DECLARE ( SmoothSinc , MeshCommand ); COMMAND_DECLARE ( Remesh , MeshCommand ); COMMAND_DECLARE ( RemeshPercent , MeshCommand ); COMMAND_DECLARE ( InvertNormals , MeshCommand ); COMMAND_DECLARE ( ReflectMesh , MeshCommand ); COMMAND_DECLARE ( TransformMesh , MeshCommand ); COMMAND_DECLARE ( FillHoles , MeshCommand ); COMMAND_DECLARE ( ProbeVolume , MeshCommand ); COMMAND_DECLARE ( ClipMesh , MeshCommand ); COMMAND_DECLARE ( TranslateMesh , MeshCommand ); COMMAND_DECLARE ( ScaleMesh , MeshCommand ); COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ); COMMAND_DECLARE ( MeshBounds , MeshCommand ); COMMAND_DECLARE ( Distance , MeshCommand ); COMMAND_DECLARE ( ComputeNormals , MeshCommand ); COMMAND_DECLARE ( SetField , MeshCommand ); COMMAND_DECLARE ( GetField , MeshCommand ); COMMAND_DECLARE ( SetFieldValue , MeshCommand ); COMMAND_DECLARE ( GetFieldValue , MeshCommand ); COMMAND_DECLARE ( FieldRange , MeshCommand ); COMMAND_DECLARE ( FieldMean , MeshCommand ); COMMAND_DECLARE ( FieldStd , MeshCommand ); COMMAND_DECLARE ( FieldNames , MeshCommand ); COMMAND_DECLARE ( FixElement , MeshCommand ); COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ); COMMAND_DECLARE ( ClosestPoint , MeshCommand ); COMMAND_DECLARE ( GeodesicDistance , MeshCommand ); COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ); COMMAND_DECLARE ( MeanNormals , MeshCommand ); COMMAND_DECLARE ( Curvature , MeshCommand ); COMMAND_DECLARE ( MeshToImage , MeshCommand ); COMMAND_DECLARE ( MeshToDT , MeshCommand ); COMMAND_DECLARE ( CompareMesh , MeshCommand ); COMMAND_DECLARE ( WarpMesh , MeshCommand ); COMMAND_DECLARE ( ComputeThickness , MeshCommand ); COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ); // Misc Commands COMMAND_DECLARE ( Seed , ShapeworksCommand ); COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ); COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ); COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ); COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ); } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CompareWidget_8h.html","text":"Studio/Interface/CompareWidget.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareWidget Source code #pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#studiointerfacecomparewidgeth","text":"","title":"Studio/Interface/CompareWidget.h"},{"location":"api/Files/CompareWidget_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CompareWidget_8h.html#classes","text":"Name class shapeworks::CompareWidget","title":"Classes"},{"location":"api/Files/CompareWidget_8h.html#source-code","text":"#pragma once #include #include namespace Ui { class CompareWidget ; } namespace shapeworks { class CompareWidget : public QWidget { Q_OBJECT public : explicit CompareWidget ( QWidget * parent = nullptr ); ~ CompareWidget (); CompareSettings get_settings (); void set_available ( DisplayMode mode , bool available ); void set_mean_shape_available ( bool available ); bool check_any_available (); Q_SIGNALS : void settings_changed (); private : Ui :: CompareWidget * ui_ ; CompareSettings settings_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ConstraintType_8h.html","text":"Libs/Optimize/Constraints/ConstraintType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#libsoptimizeconstraintsconstrainttypeh","text":"","title":"Libs/Optimize/Constraints/ConstraintType.h"},{"location":"api/Files/ConstraintType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ConstraintType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/ConstraintType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/ConstraintType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/ConstraintType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class ConstraintType : char { CuttingPlane = 'C' , FreeForm = 'F' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Constraint_8h.html","text":"Libs/Optimize/Constraints/Constraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraint Source code #pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#libsoptimizeconstraintsconstrainth","text":"","title":"Libs/Optimize/Constraints/Constraint.h"},{"location":"api/Files/Constraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraint_8h.html#classes","text":"Name class shapeworks::Constraint","title":"Classes"},{"location":"api/Files/Constraint_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ConstraintType.h\" namespace shapeworks { class Constraint { public : bool isViolated ( const vnl_vector < double > & pt ) const { return isViolated ( Eigen :: Vector3d ( pt [ 0 ], pt [ 1 ], pt [ 2 ])); } virtual bool isViolated ( const Eigen :: Vector3d & pt ) const = 0 ; virtual void print () const = 0 ; // For augmented lagrangian void setMus ( std :: vector < double > inmu ) { mus_ = inmu ; } std :: vector < double > getMus () { return mus_ ; } virtual Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const = 0 ; virtual double constraintEval ( const Eigen :: Vector3d & pt ) const = 0 ; void updateMu ( const Eigen :: Vector3d & pt , double C , size_t index ); Eigen :: Vector3d lagragianGradient ( const Eigen :: Vector3d & pt , double C , size_t index ) const ; protected : int sgn ( double val ) { return ( double ( 0 ) < val ) - ( val < double ( 0 )); } // For augmented lagrangian std :: vector < double > mus_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Constraints_8h.html","text":"Libs/Optimize/Constraints/Constraints.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Constraints Source code #pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#libsoptimizeconstraintsconstraintsh","text":"","title":"Libs/Optimize/Constraints/Constraints.h"},{"location":"api/Files/Constraints_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Constraints_8h.html#classes","text":"Name class shapeworks::Constraints","title":"Classes"},{"location":"api/Files/Constraints_8h.html#source-code","text":"#pragma once #include #include \"Constraint.h\" #include \"Eigen/Dense\" #include \"FreeFormConstraint.h\" #include \"Libs/Mesh/Mesh.h\" #include \"PlaneConstraint.h\" #include \"itkPoint.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" namespace shapeworks { /* Constraints Roadmap * For future tinkerers, this is a guide to all the code relevant to constraints to help you navigate the optimizer and change things if desired. In simple terms, * constraints define areas of interest by getting violation regions to repel particles by attaching a mechanism to all gradient updates that push them back * if a violation does occur. \"Look up quadratic penalty method\" for more information. * * - Reading json constraints: From Libs/Optimize/OptimizeParameters::set_up_optimize -> Libs/Optimize/Constraints/Constraints::read * * - Initialization: The various steps in the constraints initialization are * +Libs/Optimize/Optimize::Initialize and ParticleSystem::AdvancedAllParticleSplitting initialize quadratic penalty mus. * +Libs/Optimize/Domain/{Image,Contour,Mesh}Domain determine the picking of the initial particle position to be optimized which is assured not to violate any constraint here * +Libs/Optimize/Sampler::AllocateDomainsAndNeighborhoods sets the constraints within the constraints class via Libs/Optimize/Constraints/Constraints::addSphere and addPlane, and initializes FFCs via Sampler::initialize_ffcs -> Constraints::addFreeFormConstraint * +Libs/Optimize/Sampler::initialize_ffcs also computes the gradient fields to allow distance and gradient queries * * - Optimization: For optimization, the relevant constraints code is in Libs/Optimize/GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization in Step B, * where it calls GradientDescentOptimizer::AugmentedLagrangianConstraints to tweak any updates by our constraints class corrections to not violate constraints. * See constraints class. * * - Constraints class: This class implements a quadratic penalty style optimizer for the entire ShapeWorks particle system to apply boundary constraints. * This Libs/Optimize/Constraints/ directory contains the following files * +Constraints: Contains the processing of multiple interacting constraints and computing gradients for the optimizer. Constains all constraints for a full particle system (multiple shapes/domains). * +Constraint: A general class for any type of constraint. Contains only one constraint, but has quadratic penalty equations to facilitate any single-constraint operations. * *PlaneConstraint: Cutting plane constraints that use the equation of a plane to compute distances and gradients. * *SphereConstraint(deprecated): It uses the equation of a sphere. * *Free-form constraints: Use a signed geodesic mesh field to represent regions of interest of arbitrary shape, see below. * * - Mesh fields used for FFCs: FFCs use mesh field representations which are of class shapeworks::Mesh, located in Libs/Mesh/Mesh. Within Libs/Mesh/Mesh, the relevant functions are * +Mesh::clip: Clips by cutting plane * +Mesh::clipByField: Clips by a value field * +Mesh::getFFCValue: Allows getting the shortest signed geodesic distance of a point to any boundary * +Mesh::getFFCGradient: Allows getting the direction to the boundary. This might be the opposite direction for violated * * - The Parameter mesh_ffc_mode is exposed through Libs/Optimize/OptimizeParameters and are passed to Libs/Optimize/Optimize * +mesh_ffc_mode: when running on meshes, 0 is for mesh clipping (default) and 1 is for the quadratic penalty * * - DEPRECATED: Reading xml constraints: Constraints from xmls are read via Libs/Optimize/OptimizeParameterFile::read_cutting_planes and read_cutting_spheres, * then go through Optimize.cpp::SetCuttingPlane -> Sampler->SetCuttingPlane and Libs/Optimize/Constraints/Constraints::addPlane. Same for spheres and FFCs (both deprecated). * */ class Constraints { public : using Point3 = itk :: Point < double , 3 > ; Constraints () { active_ = false ; } ~ Constraints () {} // Set constraints void addPlane ( const vnl_vector < double > & a , const vnl_vector < double > & b , const vnl_vector < double > & c ); void addFreeFormConstraint ( std :: shared_ptr < shapeworks :: Mesh > mesh ); // Transforms bool transformConstraints ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); bool transformPlanes ( const vnl_matrix_fixed < double , 4 , 4 > & transform ); // Constraint get function std :: vector < PlaneConstraint > & getPlaneConstraints () { return planeConstraints_ ; } FreeFormConstraint & getFreeformConstraint (); bool isAnyViolated ( const Point3 & pos ); void printAll (); std :: string violationReport ( const Point3 & pos , size_t index ); std :: vector < std :: vector < double >> violationReportData ( const Point3 & pos ); // ============================ // Augmented Lagragian Fuctions // ============================ vnl_vector_fixed < double , 3 > constraintsLagrangianGradient ( const Point3 & pos , const Point3 & prepos , double C , size_t index ); void InitializeLagrangianParameters ( std :: vector < double > mus ); void UpdateMus ( const Point3 & pos , double C , size_t index ); bool GetActive () { return active_ ; } void SetActive ( bool ac ) { active_ = ac ; } void read ( std :: string filename ); void write ( std :: string filename ); bool hasConstraints (); void clipMesh ( Mesh & mesh ); private : std :: vector < PlaneConstraint > planeConstraints_ ; FreeFormConstraint freeFormConstraint_ ; bool active_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ContourDomain_8h.html","text":"Libs/Optimize/Domain/ContourDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ContourDomain Source code #pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#libsoptimizedomaincontourdomainh","text":"","title":"Libs/Optimize/Domain/ContourDomain.h"},{"location":"api/Files/ContourDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ContourDomain_8h.html#classes","text":"Name class shapeworks::ContourDomain","title":"Classes"},{"location":"api/Files/ContourDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleDomain.h\" namespace shapeworks { class ContourDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ContourDomain > ; explicit ContourDomain () {} virtual ~ ContourDomain () {} void SetPolyLine ( vtkSmartPointer < vtkPolyData > poly_data ); DomainType GetDomainType () const override { return DomainType :: Contour ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have normals\" ); } virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradients\" ); } virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { throw std :: runtime_error ( \"Contours do not have gradient of normals\" ); } virtual PointType GetValidLocationNear ( PointType p ) const override { this -> ApplyConstraints ( p , -1 ); return p ; } virtual double GetMaxDiameter () const override { // todo copied from MeshDomain: should this not be the length of the bounding box diagonal? const PointType bb = upper_bound_ - lower_bound_ ; return std :: max ({ bb [ 0 ], bb [ 1 ], bb [ 2 ]}); } virtual void UpdateZeroCrossingPoint () override {} double GetCurvature ( const PointType & p , int idx ) const override { return GetSurfaceMeanCurvature (); } virtual double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } virtual double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const override ; double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override ; const PointType & GetLowerBound () const override { return lower_bound_ ; } const PointType & GetUpperBound () const override { return upper_bound_ ; } PointType GetZeroCrossingPoint () const override { PointType out ; double dist ; int closest_line = GetLineForPoint ( upper_bound_ . GetDataPointer (), -1 , dist , out . GetDataPointer ()); return out ; } double GetSurfaceArea () const override { throw std :: runtime_error ( \"Contours do not have area\" ); } void DeleteImages () override { // TODO what? } void DeletePartialDerivativeImages () override { // TODO what? } void InvalidateParticlePosition ( int idx ) const override ; PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const override ; private : double ComputeLineCoordinate ( const double pt [ 3 ], int line ) const ; // Return the number of lines that consist of i-th point int NumberOfLinesIncidentOnPoint ( int i ) const ; PointType GeodesicWalk ( const PointType & start_pt , int idx , const Eigen :: Vector3d & update_vec ) const ; int NumberOfLines () const ; int NumberOfPoints () const ; Eigen :: Vector3d GetPoint ( int id ) const ; PointType lower_bound_ , upper_bound_ ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkCellLocator > cell_locator_ ; std :: vector < vtkSmartPointer < vtkLine >> lines_ ; // Geodesics between all point pairs. Assumes the number of points is very small Eigen :: MatrixXd geodesics_ ; // cache which line a particle is on mutable std :: vector < int > particle_lines_ ; // store some information about the last geodesic query. The next one will most likely reuse this mutable int geo_lq_idx_ = -1 ; mutable int geo_lq_line_ = -1 ; mutable double geo_lq_dist_ = -1 ; double avg_edge_length_ { 0.0 }; void ComputeBounds (); void ComputeGeodesics ( vtkSmartPointer < vtkPolyData > poly_data ); void ComputeAvgEdgeLength (); int GetLineForPoint ( const double pt [ 3 ], int idx , double & closest_distance , double closest_pt [ 3 ]) const ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/CorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CorrespondenceFunction Correspondence term. Source code #pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#libsoptimizefunctioncorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/CorrespondenceFunction.h"},{"location":"api/Files/CorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::CorrespondenceFunction Correspondence term.","title":"Classes"},{"location":"api/Files/CorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Matrix/ShapeGradientMatrix.h\" #include \"Libs/Optimize/Matrix/ShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class CorrespondenceFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef CorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( CorrespondenceFunction , VectorFunction ) typedef shapeworks :: ShapeMatrix ShapeDataType ; typedef shapeworks :: ShapeGradientMatrix ShapeGradientType ; typedef ShapeDataType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void SetShapeData ( ShapeDataType * s ) { m_ShapeData = s ; } ShapeDataType * GetShapeData () { return m_ShapeData . GetPointer (); } const ShapeDataType * GetShapeData () const { return m_ShapeData . GetPointer (); } void SetShapeGradient ( ShapeGradientType * s ) { m_ShapeGradient = s ; } ShapeGradientType * GetShapeGradient () { return m_ShapeGradient . GetPointer (); } const ShapeGradientType * GetShapeGradient () const { return m_ShapeGradient . GetPointer (); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } virtual void BeforeIteration () { this -> ComputeUpdates ( this -> m_ParticleSystem ); } virtual void AfterIteration () { // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } void SetXYZ ( int i , bool val ) { if ( m_UseXYZ . size () != m_DomainsPerShape ) m_UseXYZ . resize ( m_DomainsPerShape ); m_UseXYZ [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_UseNormals . size () != m_DomainsPerShape ) m_UseNormals . resize ( m_DomainsPerShape ); m_UseNormals [ i ] = val ; } bool CheckForNans ( vnl_matrix_type mat ) { bool flag = false ; for ( int i = 0 ; i < mat . rows (); i ++ ) { for ( int j = 0 ; j < mat . cols (); j ++ ) { if ( std :: isnan ( mat ( i , j ))) { flag = true ; break ; } } } return flag ; } virtual VectorFunction :: Pointer Clone () { auto copy = CorrespondenceFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_AttributeScales = this -> m_AttributeScales ; copy -> m_Counter = this -> m_Counter ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_AttributesPerDomain = this -> m_AttributesPerDomain ; copy -> m_DomainsPerShape = this -> m_DomainsPerShape ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseNormals = this -> m_UseNormals ; copy -> m_UseXYZ = this -> m_UseXYZ ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_ShapeData = this -> m_ShapeData ; copy -> m_ShapeGradient = this -> m_ShapeGradient ; return ( VectorFunction :: Pointer ) copy ; } protected : CorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_UseNormals . clear (); m_UseXYZ . clear (); num_dims = 0 ; num_samples = 0 ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ CorrespondenceFunction () {} void operator = ( const CorrespondenceFunction & ); CorrespondenceFunction ( const CorrespondenceFunction & ); typename ShapeDataType :: Pointer m_ShapeData ; typename ShapeGradientType :: Pointer m_ShapeGradient ; virtual void ComputeUpdates ( const ParticleSystem * c ); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; // double m_MinimumVarianceBase; bool m_HoldMinimumVariance ; int m_RecomputeCovarianceInterval ; double m_MinimumVarianceDecayConstant ; int m_Counter ; std :: vector < double > m_AttributeScales ; // size \\sum_i n_i int m_DomainsPerShape ; std :: vector < int > m_AttributesPerDomain ; // n double m_CurrentEnergy ; bool m_UseMeanEnergy ; std :: vector < bool > m_UseXYZ ; std :: vector < bool > m_UseNormals ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; int num_dims , num_samples ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CorrespondenceMode_8h.html","text":"Libs/Optimize/CorrespondenceMode.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#libsoptimizecorrespondencemodeh","text":"","title":"Libs/Optimize/CorrespondenceMode.h"},{"location":"api/Files/CorrespondenceMode_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CorrespondenceMode_8h.html#source-code","text":"#pragma once namespace shapeworks { enum class CorrespondenceMode : int { MeanEnergy = 0 , EnsembleEntropy = 1 , EnsembleRegressionEntropy = 3 , EnsembleMixedEffectsEntropy = 4 , MeshBasedGeneralEntropy = 5 , MeshBasedGeneralMeanEnergy = 6 , DisentagledEnsembleEntropy = 7 , DisentangledEnsembleMeanEnergy = 8 }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CurvatureSamplingFunction_8h.html","text":"Libs/Optimize/Function/CurvatureSamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#libsoptimizefunctioncurvaturesamplingfunctionh","text":"","title":"Libs/Optimize/Function/CurvatureSamplingFunction.h"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#classes","text":"Name class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used.","title":"Classes"},{"location":"api/Files/CurvatureSamplingFunction_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"SamplingFunction.h\" #include \"itkCommand.h\" namespace shapeworks { class CurvatureSamplingFunction : public SamplingFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef CurvatureSamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef SamplingFunction Superclass ; itkTypeMacro ( CurvatureSamplingFunction , SamplingFunction ); typedef Superclass :: GradientNumericType GradientNumericType ; typedef Superclass :: VectorType VectorType ; typedef Superclass :: PointType PointType ; typedef Superclass :: GradientVectorType GradientVectorType ; typedef MeanCurvatureContainer < TGradientNumericType , VDimension > MeanCurvatureCacheType ; typedef shapeworks :: ImageDomainWithCurvature < TGradientNumericType >:: VnlMatrixType VnlMatrixType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); inline virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ); inline virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double d , e ; this -> Evaluate ( a , b , c , d , e ); return e ; } inline double ComputeKappa ( double mc , unsigned int d ) const ; virtual void AfterIteration () {} virtual void BeforeIteration () { // this->ComputeKappaValues(); } virtual double EstimateSigma ( unsigned int idx , unsigned int dom , const shapeworks :: ParticleDomain * domain , const PointType & pos , double initial_sigma , double precision , int & err , double & avgKappa ) const ; // Access the cache of curvature-based weight values for each particle position void SetMeanCurvatureCache ( MeanCurvatureCacheType * s ) { m_MeanCurvatureCache = s ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } const MeanCurvatureCacheType * GetMeanCurvatureCache () const { return m_MeanCurvatureCache . GetPointer (); } void SetRho ( double g ) { m_Rho = g ; } double GetRho () const { return m_Rho ; } void SetSharedBoundaryWeight ( double w ) { m_SharedBoundaryWeight = w ; } double GetSharedBoundaryWeight () const { return m_SharedBoundaryWeight ; } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } bool GetSharedBoundaryEnabled () const { return m_IsSharedBoundaryEnabled ; } virtual VectorFunction :: Pointer Clone () { // todo Do we really need to clone all of this? CurvatureSamplingFunction :: Pointer copy = CurvatureSamplingFunction :: New (); copy -> SetParticleSystem ( this -> GetParticleSystem ()); copy -> m_Counter = this -> m_Counter ; copy -> m_Rho = this -> m_Rho ; copy -> m_avgKappa = this -> m_avgKappa ; copy -> m_IsSharedBoundaryEnabled = this -> m_IsSharedBoundaryEnabled ; copy -> m_SharedBoundaryWeight = this -> m_SharedBoundaryWeight ; copy -> m_CurrentSigma = this -> m_CurrentSigma ; copy -> m_CurrentNeighborhood = this -> m_CurrentNeighborhood ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; copy -> m_MeanCurvatureCache = this -> m_MeanCurvatureCache ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : CurvatureSamplingFunction () : m_Counter ( 0 ), m_Rho ( 1.0 ) {} virtual ~ CurvatureSamplingFunction () {} void operator = ( const CurvatureSamplingFunction & ); CurvatureSamplingFunction ( const CurvatureSamplingFunction & ); MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; unsigned int m_Counter ; double m_Rho ; double m_avgKappa ; bool m_IsSharedBoundaryEnabled { false }; double m_SharedBoundaryWeight { 1.0 }; double m_CurrentSigma ; struct CrossDomainNeighborhood { ParticlePointIndexPair pi_pair ; double weight ; double distance ; int dom ; CrossDomainNeighborhood ( const ParticlePointIndexPair & pi_pair_ , double weight_ , double distance_ , int dom_ ) : pi_pair ( pi_pair_ ), weight ( weight_ ), distance ( distance_ ), dom ( dom_ ) {} }; std :: vector < CrossDomainNeighborhood > m_CurrentNeighborhood ; void UpdateNeighborhood ( const PointType & pos , int idx , int d , double radius , const ParticleSystem * system ); float m_MaxMoveFactor = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CustomSlider_8h.html","text":"Studio/Interface/CustomSlider.h Classes Name class CustomSlider Source code #pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#studiointerfacecustomsliderh","text":"","title":"Studio/Interface/CustomSlider.h"},{"location":"api/Files/CustomSlider_8h.html#classes","text":"Name class CustomSlider","title":"Classes"},{"location":"api/Files/CustomSlider_8h.html#source-code","text":"#pragma once #include // adapted from: // https://stackoverflow.com/questions/69890284/qslider-in-qt-misbehaves-in-new-macos-monterey-v12-0-1-any-workaround/69890285#69890285 class CustomSlider : public QSlider { public : explicit CustomSlider ( Qt :: Orientation orientation , QWidget * parent = nullptr ) : QSlider ( orientation , parent ){}; explicit CustomSlider ( QWidget * parent = nullptr ); protected : virtual void paintEvent ( QPaintEvent * ev ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html","text":"Libs/Analyze/CustomSurfaceReconstructionFilter.h Classes Name class CustomSurfaceReconstructionFilter Source code /*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#libsanalyzecustomsurfacereconstructionfilterh","text":"","title":"Libs/Analyze/CustomSurfaceReconstructionFilter.h"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#classes","text":"Name class CustomSurfaceReconstructionFilter","title":"Classes"},{"location":"api/Files/CustomSurfaceReconstructionFilter_8h.html#source-code","text":"/*========================================================================= Program: Visualization Toolkit Module: CustomSurfaceReconstructionFilter.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME CustomSurfaceReconstructionFilter - reconstructs a surface from unorganized points // .SECTION Description // CustomSurfaceReconstructionFilter takes a list of points assumed to lie on // the surface of a solid 3D object. A signed measure of the distance to the // surface is computed and sampled on a regular grid. The grid can then be // contoured at zero to extract the surface. The default values for // neighborhood size and sample spacing should give reasonable results for // most uses but can be set if desired. This procedure is based on the PhD // work of Hugues Hoppe: http://www.research.microsoft.com/~hoppe #ifndef __CustomSurfaceReconstructionFilter_h #define __CustomSurfaceReconstructionFilter_h #include \"vtkImageAlgorithm.h\" class CustomSurfaceReconstructionFilter : public vtkImageAlgorithm { public : vtkTypeMacro ( CustomSurfaceReconstructionFilter , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Construct with NeighborhoodSize=20. static CustomSurfaceReconstructionFilter * New (); // Description: // Specify the number of neighbors each point has, used for estimating the // local surface orientation. The default value of 20 should be OK for // most applications, higher values can be specified if the spread of // points is uneven. Values as low as 10 may yield adequate results for // some surfaces. Higher values cause the algorithm to take longer. Higher // values will cause errors on sharp boundaries. vtkGetMacro ( NeighborhoodSize , int ); vtkSetMacro ( NeighborhoodSize , int ); // Description: // Specify the spacing of the 3D sampling grid. If not set, a // reasonable guess will be made. vtkGetMacro ( SampleSpacing , double ); vtkSetMacro ( SampleSpacing , double ); protected : CustomSurfaceReconstructionFilter (); ~ CustomSurfaceReconstructionFilter () {}; virtual int RequestInformation ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); virtual int RequestData ( vtkInformation * , vtkInformationVector ** , vtkInformationVector * ); int NeighborhoodSize ; double SampleSpacing ; virtual int FillInputPortInformation ( int , vtkInformation * ); private : CustomSurfaceReconstructionFilter ( const CustomSurfaceReconstructionFilter & ); // Not implemented. void operator = ( const CustomSurfaceReconstructionFilter & ); // Not implemented. }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DataTool_8h.html","text":"Studio/Data/DataTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DataTool Source code #pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#studiodatadatatoolh","text":"","title":"Studio/Data/DataTool.h"},{"location":"api/Files/DataTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DataTool_8h.html#classes","text":"Name class shapeworks::DataTool","title":"Classes"},{"location":"api/Files/DataTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include class Ui_DataTool ; class QComboBox ; namespace shapeworks { class Session ; class LandmarkTableModel ; class DataTool : public QWidget { Q_OBJECT ; public : DataTool ( Preferences & prefs ); ~ DataTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void disable_actions (); void enable_actions (); void update_table (); void update_landmark_table (); void landmark_domain_changed (); void constraints_domain_changed (); void delete_planes_clicked (); void delete_ffc_clicked (); void update_notes (); std :: string get_notes (); void store_data (); public Q_SLOTS : void delete_button_clicked (); void delete_landmarks_clicked (); void set_placing_button_clicked ( int id ); void handle_landmark_mode_changed (); void handle_constraints_mode_changed (); void constraints_table_right_click ( const QPoint & point ); void copy_ffc_clicked (); Q_SIGNALS : void import_button_clicked (); private : void update_domain_box ( QComboBox * box ); void update_plane_table (); void update_ffc_table (); Preferences & preferences_ ; Ui_DataTool * ui_ ; QSharedPointer < Session > session_ ; std :: shared_ptr < LandmarkTableModel > landmark_table_model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DeepSSMJob_8h.html","text":"Studio/DeepSSM/DeepSSMJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. Source code #pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#studiodeepssmdeepssmjobh","text":"","title":"Studio/DeepSSM/DeepSSMJob.h"},{"location":"api/Files/DeepSSMJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMJob_8h.html#classes","text":"Name class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM.","title":"Classes"},{"location":"api/Files/DeepSSMJob_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class DeepSSMJob : public Job { Q_OBJECT ; public : enum class FileType { ID , IMAGE , PARTICLES }; enum class SplitType { TRAIN , TEST }; DeepSSMJob ( ProjectHandle project , DeepSSMTool :: ToolMode tool_mode ); ~ DeepSSMJob (); void run () override ; QString name () override ; void run_augmentation (); void run_training (); void run_testing (); void python_message ( std :: string str ); std :: vector < std :: string > get_list ( FileType file_type , SplitType split_type ); private : ProjectHandle project_ ; DeepSSMTool :: ToolMode tool_mode_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DeepSSMParameters_8h.html","text":"Studio/DeepSSM/DeepSSMParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMParameters Source code #pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#studiodeepssmdeepssmparametersh","text":"","title":"Studio/DeepSSM/DeepSSMParameters.h"},{"location":"api/Files/DeepSSMParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMParameters_8h.html#classes","text":"Name class shapeworks::DeepSSMParameters","title":"Classes"},{"location":"api/Files/DeepSSMParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class DeepSSMParameters { enum class SamplerTypeOption { gaussian , gaussian_mixture , kde }; public : explicit DeepSSMParameters ( ProjectHandle project ); void save_to_project (); int get_aug_num_samples (); void set_aug_num_samples ( int num_samples ); int get_aug_num_dims (); void set_aug_num_dims ( int num_dims ); int get_training_num_dims (); void set_training_num_dims ( int num_dims ); double get_aug_percent_variability (); void set_aug_percent_variability ( double percent_variability ); std :: string get_aug_sampler_type (); void set_aug_sampler_type ( std :: string sampler_type ); int get_training_epochs (); void set_training_epochs ( int epochs ); double get_training_learning_rate (); void set_training_learning_rate ( double rate ); bool get_training_decay_learning_rate (); void set_training_decay_learning_rate ( bool decay ); bool get_training_fine_tuning (); void set_training_fine_tuning ( bool fine_tuning ); int get_training_fine_tuning_epochs (); void set_training_fine_tuning_epochs ( int epochs ); double get_training_fine_tuning_learning_rate (); void set_training_fine_tuning_learning_rate ( double rate ); int get_training_batch_size (); void set_training_batch_size ( int batch_size ); double get_training_split (); void set_training_split ( double value ); double get_validation_split (); void set_validation_split ( double value ); double get_testing_split (); void set_testing_split ( double value ); void restore_split_defaults (); void restore_augmentation_defaults (); void restore_training_defaults (); void restore_defaults (); // constants const static std :: string DEEPSSM_SAMPLER_GAUSSIAN_C ; const static std :: string DEEPSSM_SAMPLER_MIXTURE_C ; const static std :: string DEEPSSM_SAMPLER_KDE_C ; private : Parameters params_ ; ProjectHandle project_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DeepSSMTool_8h.html","text":"Studio/DeepSSM/DeepSSMTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DeepSSMTool Source code #pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#studiodeepssmdeepssmtoolh","text":"","title":"Studio/DeepSSM/DeepSSMTool.h"},{"location":"api/Files/DeepSSMTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DeepSSMTool_8h.html#classes","text":"Name class shapeworks::DeepSSMTool","title":"Classes"},{"location":"api/Files/DeepSSMTool_8h.html#source-code","text":"#pragma once // qt #include #include #include // studio #include #include class Ui_DeepSSMTool ; class QLabel ; class QTableWidget ; class QLineEdit ; namespace shapeworks { class Session ; class Lightbox ; class DeepSSMJob ; class ShapeWorksStudioApp ; class DeepSSMTool : public QWidget { Q_OBJECT ; public : enum class ToolMode { DeepSSM_SplitType , DeepSSM_AugmentationType , DeepSSM_TrainingType , DeepSSM_TestingType }; DeepSSMTool ( Preferences & prefs ); ~ DeepSSMTool (); void set_session ( QSharedPointer < Session > session ); void set_app ( ShapeWorksStudioApp * app ); bool is_active (); void load_params (); void store_params (); void shutdown (); ShapeList get_shapes (); void resizeEvent ( QResizeEvent * event ) override ; std :: string get_display_feature (); public Q_SLOTS : void run_clicked (); void restore_defaults (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); void tab_changed ( int tab ); void update_panels (); void update_split ( QLineEdit * source ); void handle_new_mesh (); void training_fine_tuning_changed (); Q_SIGNALS : void update_view (); void progress ( int ); private : void update_meshes (); void run_tool ( DeepSSMTool :: ToolMode type ); void show_augmentation_meshes (); void update_tables (); void show_training_meshes (); void show_testing_meshes (); void update_testing_meshes (); void load_plots (); void resize_plots (); QPixmap load_plot ( QString filename ); void set_plot ( QLabel * qlabel , QPixmap pixmap ); void populate_table_from_csv ( QTableWidget * table , QString filename , bool header ); Preferences & preferences_ ; Ui_DeepSSMTool * ui_ ; QSharedPointer < Session > session_ ; ShapeWorksStudioApp * app_ ; bool tool_is_running_ = false ; DeepSSMTool :: ToolMode current_tool_ = DeepSSMTool :: ToolMode :: DeepSSM_AugmentationType ; QSharedPointer < DeepSSMJob > deep_ssm_ ; QElapsedTimer timer_ ; ShapeList shapes_ ; QPixmap violin_plot_ ; QPixmap training_plot_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DisentangledCorrespondenceFunction Source code #pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#libsoptimizefunctiondisentangledcorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::DisentangledCorrespondenceFunction","title":"Classes"},{"location":"api/Files/DisentangledCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class DisentangledCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef DisentangledCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DisentangledCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; typedef std :: shared_ptr < std :: vector < vnl_matrix_type >> shared_vnl_matrix_array_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrices (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { DisentangledCorrespondenceFunction :: Pointer copy = DisentangledCorrespondenceFunction :: New (); copy -> m_Shape_PointsUpdate = this -> m_Shape_PointsUpdate ; copy -> m_Time_PointsUpdate = this -> m_Time_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue_shape_cohort = this -> m_MinimumEigenValue_shape_cohort ; copy -> m_MinimumEigenValue_time_cohort = this -> m_MinimumEigenValue_time_cohort ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrices_time_cohort = this -> m_InverseCovMatrices_time_cohort ; copy -> m_InverseCovMatrices_shape_cohort = this -> m_InverseCovMatrices_shape_cohort ; copy -> m_points_mean_time_cohort = this -> m_points_mean_time_cohort ; copy -> m_points_mean_shape_cohort = this -> m_points_mean_shape_cohort ; return ( VectorFunction :: Pointer ) copy ; } protected : DisentangledCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_InverseCovMatrices_time_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_InverseCovMatrices_shape_cohort = std :: make_shared < std :: vector < Eigen :: MatrixXd >> (); m_points_mean_time_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_points_mean_shape_cohort = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Time_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); m_Shape_PointsUpdate = std :: make_shared < std :: vector < vnl_matrix_type >> (); } virtual ~ DisentangledCorrespondenceFunction () {} void operator = ( const DisentangledCorrespondenceFunction & ); DisentangledCorrespondenceFunction ( const DisentangledCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; // Computes Covariance Matrices across time and shape domain and then generate gradient updates for them. virtual void ComputeCovarianceMatrices (); // Initialize size and clear relevant variables from previous iteration, before gradient updates computation. void Initialize (){ const unsigned int total_time_points = m_ShapeMatrix -> GetDomainsPerShape (); int total_subjects = m_ShapeMatrix -> cols (); m_points_mean_time_cohort -> clear (); m_points_mean_shape_cohort -> clear (); m_InverseCovMatrices_time_cohort -> clear (); m_InverseCovMatrices_shape_cohort -> clear (); m_Shape_PointsUpdate -> clear (); m_Time_PointsUpdate -> clear (); m_MinimumEigenValue_shape_cohort . resize ( total_subjects , 0.0 ); m_MinimumEigenValue_time_cohort . resize ( total_time_points , 0.0 ); for ( int i = 0 ; i < total_time_points ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_time_cohort -> push_back ( temp_cov_matrix ); m_points_mean_time_cohort -> push_back ( temp_mean_matrix ); m_Time_PointsUpdate -> push_back ( temp_points_matrix ); } for ( int i = 0 ; i < total_subjects ; ++ i ){ Eigen :: MatrixXd temp_cov_matrix ; vnl_matrix_type temp_points_matrix ; vnl_matrix_type temp_mean_matrix ; m_InverseCovMatrices_shape_cohort -> push_back ( temp_cov_matrix ); m_points_mean_shape_cohort -> push_back ( temp_mean_matrix ); m_Shape_PointsUpdate -> push_back ( temp_points_matrix ); } } double m_MinimumVariance ; double m_MinimumEigenValue ; std :: vector < double > m_MinimumEigenValue_time_cohort ; std :: vector < double > m_MinimumEigenValue_shape_cohort ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; // Inverse Covariance matrices across time and shape cohort std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_time_cohort ; // T obj matrices each of dimensionality dM X N std :: shared_ptr < std :: vector < Eigen :: MatrixXd >> m_InverseCovMatrices_shape_cohort ; // N obj matrices each of dimensionality dM X T // mean vectors across time and shape cohort shared_vnl_matrix_array_type m_points_mean_time_cohort ; // T mean vectors each of dimension dM shared_vnl_matrix_array_type m_points_mean_shape_cohort ; // N mean vectors each of dimension dM // Matrices for Gradient Updates across time and shape cohort shared_vnl_matrix_array_type m_Time_PointsUpdate ; // T update matrices each of dimensionality dM X N shared_vnl_matrix_array_type m_Shape_PointsUpdate ; // N update matrices each of dimensionality dM X T }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DomainType_8h.html","text":"Libs/Optimize/Domain/DomainType.h Namespaces Name shapeworks User usage reporting (telemetry) Defines Name DIMENSION Macros Documentation define DIMENSION #define DIMENSION 3 Source code #pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#libsoptimizedomaindomaintypeh","text":"","title":"Libs/Optimize/Domain/DomainType.h"},{"location":"api/Files/DomainType_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DomainType_8h.html#defines","text":"Name DIMENSION","title":"Defines"},{"location":"api/Files/DomainType_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/DomainType_8h.html#define-dimension","text":"#define DIMENSION 3","title":"define DIMENSION"},{"location":"api/Files/DomainType_8h.html#source-code","text":"#pragma once #define DIMENSION 3 namespace shapeworks { enum class DomainType : char { Image = 'I' , Mesh = 'M' , Contour = 'C' }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/DualVectorFunction_8h.html","text":"Libs/Optimize/Function/DualVectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::DualVectorFunction Source code #pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#libsoptimizefunctiondualvectorfunctionh","text":"","title":"Libs/Optimize/Function/DualVectorFunction.h"},{"location":"api/Files/DualVectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/DualVectorFunction_8h.html#classes","text":"Name class shapeworks::DualVectorFunction","title":"Classes"},{"location":"api/Files/DualVectorFunction_8h.html#source-code","text":"#pragma once #include \"ParticleSystemEvaluation.h\" #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class DualVectorFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef DualVectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( DualVectorFunction , VectorFunction ); typedef typename Superclass :: VectorType VectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove ) const { double maxA , maxB , maxC ; maxA = 0 ; maxB = 0 ; maxC = 0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); VectorType ansC ; ansC . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); } if ( m_RelativeGradientScaling == 0.0 ) { ansB . fill ( 0.0 ); maxB = 0.0 ; } // get maxmove and predicted move for current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // B is active, A is not active { maxmove = maxB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual double EnergyA ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionA -> BeforeEvaluate ( idx , d , system ); double ansA = 0.0 ; if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } return ansA ; } virtual double EnergyB ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { m_FunctionB -> BeforeEvaluate ( idx , d , system ); double ansB = 0.0 ; if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } ansB *= m_RelativeEnergyScaling ; return ansB ; } virtual double Energy ( unsigned int idx , unsigned int d , const ParticleSystem * system ) const { double ansA = 0.0 ; double ansB = 0.0 ; double ansC = 0.0 ; double finalEnergy = 0.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Energy ( idx , d , system ); } if ( m_BOn == true ) { ansB = m_FunctionB -> Energy ( idx , d , system ); } if ( m_RelativeEnergyScaling == 0 ) { ansB = 0.0 ; } // compute final energy for current configuration if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { finalEnergy = ansA + m_RelativeEnergyScaling * ansB ; return ( finalEnergy ); } else // B is active, A is not active { finalEnergy = ansB ; return finalEnergy ; } } else // only A is active { return ansA ; } return 0.0 ; } virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxmove , double & energy ) const { double maxA = 0.0 ; double maxB = 0.0 ; double energyA = 0.0 ; double energyB = 0.0 ; VectorType ansA ; ansA . fill ( 0.0 ); VectorType ansB ; ansB . fill ( 0.0 ); const_cast < DualVectorFunction *> ( this ) -> m_Counter = m_Counter + 1.0 ; // evaluate individual functions: A = surface energy, B = correspondence if ( m_AOn == true ) { ansA = m_FunctionA -> Evaluate ( idx , d , system , maxA , energyA ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagA = m_AverageGradMagA + ansA . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyA = m_AverageEnergyA + energyA ; } if ( m_BOn == true ) { ansB = m_FunctionB -> Evaluate ( idx , d , system , maxB , energyB ); const_cast < DualVectorFunction *> ( this ) -> m_AverageGradMagB = m_AverageGradMagB + ansB . magnitude (); const_cast < DualVectorFunction *> ( this ) -> m_AverageEnergyB = m_AverageEnergyB + energyB ; } if ( m_RelativeEnergyScaling == 0.0 ) { energyB = 0.0 ; ansB . fill ( 0.0 ); } if ( m_RelativeGradientScaling == 0.0 ) { maxB = 0.0 ; ansB . fill ( 0.0 ); } // compute final energy, maxmove and predicted move based on current configuration VectorType predictedMove ; predictedMove . fill ( 0.0 ); if ( m_BOn == true ) { if ( m_AOn == true ) // both A and B are active { if ( maxB > maxA ) { maxmove = maxB ; } else { maxmove = maxA ; } energy = energyA + m_RelativeEnergyScaling * energyB ; maxmove = maxA ; // always driven by the sampling to decrease the senstivity to covariance regularization predictedMove = ansA + m_RelativeGradientScaling * ansB ; return ( predictedMove ); } else // only B is active, A is not active { maxmove = maxB ; energy = energyB ; predictedMove = ansB ; return ( predictedMove ); } } else // only A is active { maxmove = maxA ; energy = energyA ; return ansA ; } maxmove = 0.0 ; return ansA ; } virtual void BeforeEvaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system ) { if ( m_AOn == true ) { m_FunctionA -> BeforeEvaluate ( idx , d , system ); } if ( m_BOn == true ) { m_FunctionB -> BeforeEvaluate ( idx , d , system ); } } virtual void AfterIteration () { if ( m_AOn ) m_FunctionA -> AfterIteration (); if ( m_BOn ) { m_FunctionB -> AfterIteration (); } } virtual void BeforeIteration () { if ( m_AOn ) m_FunctionA -> BeforeIteration (); if ( m_BOn ) { m_FunctionB -> BeforeIteration (); } m_AverageGradMagA = 0.0 ; m_AverageGradMagB = 0.0 ; m_AverageEnergyA = 0.0 ; m_Counter = 0.0 ; } virtual void SetParticleSystem ( ParticleSystem * p ) { Superclass :: SetParticleSystem ( p ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetParticleSystem ( p ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetParticleSystem ( p ); } void SetDomainNumber ( unsigned int i ) { Superclass :: SetDomainNumber ( i ); if ( m_FunctionA . GetPointer () != 0 ) m_FunctionA -> SetDomainNumber ( i ); if ( m_FunctionB . GetPointer () != 0 ) m_FunctionB -> SetDomainNumber ( i ); } void SetFunctionA ( VectorFunction * o ) { m_FunctionA = o ; m_FunctionA -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionA -> SetParticleSystem ( this -> GetParticleSystem ()); } VectorFunction * GetFunctionA () { return m_FunctionA . GetPointer (); } VectorFunction * GetFunctionB () { return m_FunctionB . GetPointer (); } void SetFunctionB ( VectorFunction * o ) { m_FunctionB = o ; m_FunctionB -> SetDomainNumber ( this -> GetDomainNumber ()); m_FunctionB -> SetParticleSystem ( this -> GetParticleSystem ()); } void SetAOn () { m_AOn = true ; } void SetAOff () { m_AOn = false ; } void SetAOn ( bool s ) { m_AOn = s ; } bool GetAOn () const { return m_AOn ; } void SetBOn () { m_BOn = true ; } void SetBOff () { m_BOn = false ; } void SetBOn ( bool s ) { m_BOn = s ; } bool GetBOn () const { return m_BOn ; } void SetRelativeEnergyScaling ( double r ) override { m_RelativeEnergyScaling = r ; } double GetRelativeEnergyScaling () const override { return m_RelativeEnergyScaling ; } void SetRelativeGradientScaling ( double r ) { m_RelativeGradientScaling = r ; } double GetRelativeGradientScaling () const { return m_RelativeGradientScaling ; } double GetAverageGradMagA () const { if ( m_Counter != 0.0 ) return m_AverageGradMagA / m_Counter ; else return 0.0 ; } double GetAverageGradMagB () const { if ( m_Counter != 0.0 ) return m_AverageGradMagB / m_Counter ; else return 0.0 ; } double GetAverageEnergyA () const { if ( m_Counter != 0.0 ) return m_AverageEnergyA / m_Counter ; else return 0.0 ; } double GetAverageEnergyB () const { if ( m_Counter != 0.0 ) return m_AverageEnergyB / m_Counter ; else return 0.0 ; } virtual typename VectorFunction :: Pointer Clone () { typename DualVectorFunction :: Pointer copy = DualVectorFunction :: New (); copy -> m_AOn = this -> m_AOn ; copy -> m_BOn = this -> m_BOn ; copy -> m_RelativeGradientScaling = this -> m_RelativeGradientScaling ; copy -> m_RelativeEnergyScaling = this -> m_RelativeEnergyScaling ; copy -> m_AverageGradMagA = this -> m_AverageGradMagA ; copy -> m_AverageGradMagB = this -> m_AverageGradMagB ; copy -> m_AverageEnergyA = this -> m_AverageEnergyA ; copy -> m_AverageEnergyB = this -> m_AverageEnergyB ; copy -> m_Counter = this -> m_Counter ; if ( this -> m_FunctionA ) copy -> m_FunctionA = this -> m_FunctionA -> Clone (); if ( this -> m_FunctionB ) copy -> m_FunctionB = this -> m_FunctionB -> Clone (); if ( ! copy -> m_FunctionA ) copy -> m_AOn = false ; if ( ! copy -> m_FunctionB ) copy -> m_BOn = false ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; return ( VectorFunction :: Pointer ) copy ; } protected : DualVectorFunction () : m_AOn ( true ), m_BOn ( false ), m_RelativeGradientScaling ( 1.0 ), m_RelativeEnergyScaling ( 1.0 ) {} virtual ~ DualVectorFunction () {} void operator = ( const DualVectorFunction & ); DualVectorFunction ( const DualVectorFunction & ); bool m_AOn ; bool m_BOn ; double m_RelativeGradientScaling ; double m_RelativeEnergyScaling ; double m_AverageGradMagA ; double m_AverageGradMagB ; double m_AverageEnergyA ; double m_AverageEnergyB ; double m_Counter ; VectorFunction :: Pointer m_FunctionA ; VectorFunction :: Pointer m_FunctionB ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/EigenUtils_8h.html","text":"Libs/Utils/EigenUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::EigenUtils Source code #pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#libsutilseigenutilsh","text":"","title":"Libs/Utils/EigenUtils.h"},{"location":"api/Files/EigenUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EigenUtils_8h.html#classes","text":"Name class shapeworks::EigenUtils","title":"Classes"},{"location":"api/Files/EigenUtils_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" namespace shapeworks { // Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ); // Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ); // Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ); // Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ); template < typename T > using VnlMatrix = Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) { return Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > ( itk_mat . GetVnlMatrix (). data_block ()); } // With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) { return itk :: Matrix < T , NRows , NCols > ( vnl_matrix_fixed < T , NRows , NCols > ( eigen_mat . data ())); } template < typename T > Eigen :: Map < VnlMatrix < T >> vnlToEigen ( const vnl_matrix < T > & vnl_mat ) { return Eigen :: Map < VnlMatrix < T >> ( const_cast < T *> ( vnl_mat . data_block ()), vnl_mat . rows (), vnl_mat . cols ()); } template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> wrapDataWithEigen ( T * data ) { return Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor >> ( data ); } template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) { return Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor >> ( data , nrows , ncols ); } template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) { std :: cerr << \"WARNING: vnl cannot wrap data, so this just copies input array \\n \" ; itk :: Matrix < T , NRows , NCols > itk_mat ; vnl_matrix_fixed < T , NRows , NCols > & vnl_mat = itk_mat . GetVnlMatrix (); vnl_mat . copy_in ( data ); return itk_mat ; } class EigenUtils { public : static std :: pair < double , double > compute_mean_and_stddev ( const Eigen :: MatrixXd & matrix , int row_index ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/EvaluationUtil_8h.html","text":"Libs/Particles/EvaluationUtil.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction Source code #pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#libsparticlesevaluationutilh","text":"","title":"Libs/Particles/EvaluationUtil.h"},{"location":"api/Files/EvaluationUtil_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/EvaluationUtil_8h.html#classes","text":"Name struct shapeworks::MultiVariateNormalRandom struct shapeworks::Reconstruction","title":"Classes"},{"location":"api/Files/EvaluationUtil_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { struct MultiVariateNormalRandom { Eigen :: VectorXd mean ; Eigen :: MatrixXd transform ; // seed set as constant 42 for test repeatability boost :: mt19937 gen { 42 }; boost :: normal_distribution <> dist ; MultiVariateNormalRandom ( Eigen :: MatrixXd const & covar ) : MultiVariateNormalRandom ( Eigen :: VectorXd :: Zero ( covar . rows ()), covar ) {} MultiVariateNormalRandom ( Eigen :: VectorXd const & mean , Eigen :: MatrixXd const & covar ) : mean ( mean ) { Eigen :: SelfAdjointEigenSolver < Eigen :: MatrixXd > eigenSolver ( covar ); transform = eigenSolver . eigenvectors () * eigenSolver . eigenvalues (). cwiseSqrt (). asDiagonal (); } Eigen :: MatrixXd operator ()() { return mean + transform * Eigen :: VectorXd { mean . size ()}. unaryExpr ([ & ]( double x ) { return dist ( gen ); }); } }; struct Reconstruction { double dist ; int shapeIdx ; Eigen :: MatrixXd rec ; }; // Sorts the reconstructions in place according to `dist` and saves them to the specified folder. // This generates XML files which can be opened in ShapeWorksStudio void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) { std :: sort ( reconstructions . begin (), reconstructions . end (), []( const Reconstruction & l , const Reconstruction & r ) { return l . dist < r . dist ; }); for ( int i = 0 ; i < reconstructions . size (); i ++ ) { const int percentile = i == reconstructions . size () - 1 ? 100 : std :: floor ((( double ) i / reconstructions . size ()) * 100.0 ); // Save the reconstruction const std :: string recPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.particles\" ; std :: ofstream recOF ( recPath ); if ( ! recOF ) { throw std :: runtime_error ( \"Unable to open file: \" + recPath ); } recOF << reconstructions [ i ]. rec << std :: endl ; recOF . close (); // Create an XML file const std :: string xmlPath = saveTo + \"/\" + std :: to_string ( percentile ) + \"perc.xml\" ; std :: ofstream xmlOF ( xmlPath ); if ( ! xmlOF ) { throw std :: runtime_error ( \"Unable to open file: \" + xmlPath ); } xmlOF << \"\" << srcPaths [ reconstructions [ i ]. shapeIdx ] << std :: endl << recPath << \"\" << std :: endl << \"\" << 1 << std :: endl << 2 << \"\" ; xmlOF . close (); } } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectReader_8h.html","text":"Libs/Project/ExcelProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectReader Excel file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#libsprojectexcelprojectreaderh","text":"","title":"Libs/Project/ExcelProjectReader.h"},{"location":"api/Files/ExcelProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectReader_8h.html#classes","text":"Name class shapeworks::ExcelProjectReader Excel file format reader for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class ExcelProjectReader : public ProjectReader { public : ExcelProjectReader ( Project & project ); ~ ExcelProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExcelProjectWriter_8h.html","text":"Libs/Project/ExcelProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExcelProjectWriter Excel file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#libsprojectexcelprojectwriterh","text":"","title":"Libs/Project/ExcelProjectWriter.h"},{"location":"api/Files/ExcelProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExcelProjectWriter_8h.html#classes","text":"Name class shapeworks::ExcelProjectWriter Excel file format writer for Project .","title":"Classes"},{"location":"api/Files/ExcelProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class ExcelProjectWriter { public : static bool write_project ( Project & project , const std :: string & filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Exception_8h.html","text":"Libs/Common/Exception.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::shapeworks_exception Source code #pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#libscommonexceptionh","text":"","title":"Libs/Common/Exception.h"},{"location":"api/Files/Exception_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Exception_8h.html#classes","text":"Name class shapeworks::shapeworks_exception","title":"Classes"},{"location":"api/Files/Exception_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class shapeworks_exception : public std :: runtime_error { public : shapeworks_exception ( char const * const message ) throw (); shapeworks_exception ( std :: string const & message ) throw (); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Executable_8h.html","text":"Applications/shapeworks/Executable.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Executable Source code #pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#applicationsshapeworksexecutableh","text":"","title":"Applications/shapeworks/Executable.h"},{"location":"api/Files/Executable_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Executable_8h.html#classes","text":"Name class shapeworks::Executable","title":"Classes"},{"location":"api/Files/Executable_8h.html#source-code","text":"#pragma once /* * Unified shapeworks executable. */ #include \"Command.h\" #include namespace shapeworks { class Executable { public : Executable (); void addCommand ( Command & command ); int run ( int argc , char const * const * argv ); private : void buildParser (); optparse :: OptionParser parser ; std :: map < std :: string , Command &> commands ; std :: map < std :: string , std :: map < std :: string , std :: string > > parser_epilog ; // > int run ( std :: vector < std :: string > arguments , SharedCommandData & sharedData ); }; }; // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExportImageDialog_8h.html","text":"Studio/Interface/ExportImageDialog.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportImageDialog Source code #pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#studiointerfaceexportimagedialogh","text":"","title":"Studio/Interface/ExportImageDialog.h"},{"location":"api/Files/ExportImageDialog_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportImageDialog_8h.html#classes","text":"Name class shapeworks::ExportImageDialog","title":"Classes"},{"location":"api/Files/ExportImageDialog_8h.html#source-code","text":"#pragma once // qt #include #include // studio #include class Ui_ExportImageDialog ; namespace shapeworks { class Visualizer ; class AnalysisTool ; class ExportImageDialog : public QDialog { Q_OBJECT public : ExportImageDialog ( QWidget * parent , Preferences & prefs , QSharedPointer < AnalysisTool > analysis_tool , QSharedPointer < Visualizer > visualizer , bool pca_mode ); private Q_SLOTS : void export_clicked (); Q_SIGNALS : private : void update_preview (); void drawRotatedText ( QPainter & painter , QString text , QPointF point , qreal angle , QRect rect ); QVector < int > get_modes ( QString string ); Ui_ExportImageDialog * ui_ ; QSharedPointer < Visualizer > visualizer_ ; Preferences & prefs_ ; QPixmap pixmap_ ; bool pca_mode_ = false ; QTimer update_preview_timer_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ExportUtils_8h.html","text":"Studio/Data/ExportUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ExportUtils Export utilities for Studio. Source code #include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#studiodataexportutilsh","text":"","title":"Studio/Data/ExportUtils.h"},{"location":"api/Files/ExportUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ExportUtils_8h.html#classes","text":"Name class shapeworks::ExportUtils Export utilities for Studio.","title":"Classes"},{"location":"api/Files/ExportUtils_8h.html#source-code","text":"#include #include #include class vtkPolyData ; namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class Shape ; class ExportUtils { public : static QString get_save_filename ( ShapeWorksStudioApp * parent , QString title , QString filetypes , QString default_ext ); static void export_all_subjects_particle_scalars ( ShapeWorksStudioApp * parent , QSharedPointer < Session > session ); static bool write_scalars ( ShapeWorksStudioApp * app , vtkSmartPointer < vtkPolyData > poly_data , QString filename ); static bool write_particle_scalars ( ShapeWorksStudioApp * app , std :: shared_ptr < Shape > shape , QString filename ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEAreaCoverage_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Namespaces Name std Classes Name class FEAreaCoverage Source code #pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#libsmeshpreviewmeshqcfeareacoverageh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h"},{"location":"api/Files/FEAreaCoverage_8h.html#namespaces","text":"Name std","title":"Namespaces"},{"location":"api/Files/FEAreaCoverage_8h.html#classes","text":"Name class FEAreaCoverage","title":"Classes"},{"location":"api/Files/FEAreaCoverage_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" #include \"Intersect.h\" #include #include #include using namespace std ; class FEAreaCoverage { class Surface { public : Surface () {} int Faces () { return ( int ) m_face . size (); } void Create ( std :: shared_ptr < FEMesh > m ); int Nodes () { return ( int ) m_node . size (); } std :: shared_ptr < FEMesh > m_mesh ; vector < int > m_face ; // face list vector < int > m_node ; // node list vector < vec3d > m_pos ; // node positions vector < int > m_lnode ; // local node list vector < vec3d > m_norm ; // node normals vector < vec3d > m_fnorm ; // face normals vector < vector < int >> m_NLT ; // node-facet look-up table }; public : FEAreaCoverage (); // assign selections void SetSelection1 ( vector < int >& s ) { m_surf1 . m_face = s ; } void SetSelection2 ( vector < int >& s ) { m_surf2 . m_face = s ; } // apply the map // returns one value per node vector < double > Apply ( std :: shared_ptr < FEMesh > mesh1 , std :: shared_ptr < FEMesh > mesh2 ); // get/set back intersection flag void AllowBackIntersection ( bool b ); bool AllowBackIntersection () const ; // set/get the angle threshold (w between 0 and 1) void SetAngleThreshold ( double w ); double GetAngleThreshold () const ; // set/get back-intersection search radius (0 ignores the search radius) void SetBackSearchRadius ( double R ); double GetBackSearchRadius () const ; protected : // build node normal list void UpdateSurface ( FEAreaCoverage :: Surface & s ); // see if a ray intersects with a surface bool intersect ( const vec3d & r , const vec3d & N , FEAreaCoverage :: Surface & surf , Intersection & q ); bool faceIntersect ( FEAreaCoverage :: Surface & surf , const Ray & ray , int nface , Intersection & q ); protected : Surface m_surf1 ; Surface m_surf2 ; bool m_ballowBackIntersections ; // include back intersections double m_angleThreshold ; // angular threshold (between 0 and 1) double m_backSearchRadius ; // search radius for back intersections (set to 0 to ignore) }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEAutoMesher_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Classes Name class FEAutoMesher Source code #pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#libsmeshpreviewmeshqcfeautomesherh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEAutoMesher.h"},{"location":"api/Files/FEAutoMesher_8h.html#classes","text":"Name class FEAutoMesher","title":"Classes"},{"location":"api/Files/FEAutoMesher_8h.html#source-code","text":"#pragma once class FEMesh ; //----------------------------------------------------------------------------- class FEAutoMesher { public : FEAutoMesher (); void BuildMesh ( FEMesh * pm ); public : void AutoPartitionSurface ( FEMesh & m ); void AutoPartitionEdges ( FEMesh & m ); void AutoPartitionNodes ( FEMesh & m ); void Repartition ( FEMesh & m ); void SetSmoothingAngle ( double w ) { m_wsmooth = w ; } double GetSmoothingAngle () { return m_wsmooth ; } protected : void BuildFaces ( FEMesh & m ); void BuildEdges ( FEMesh & m ); protected : FEMesh * m_pm ; double m_wsmooth ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FECVDDecimationModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Classes Name class FECVDDecimationModifier Source code #pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#libsmeshpreviewmeshqcfecvddecimationmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h"},{"location":"api/Files/FECVDDecimationModifier_8h.html#classes","text":"Name class FECVDDecimationModifier","title":"Classes"},{"location":"api/Files/FECVDDecimationModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" #include \"FEMesh.h\" #include using namespace std ; //----------------------------------------------------------------------------- class FECVDDecimationModifier { private : class Cluster { public : Cluster () : m_sgamma ( vec3d ( 0 , 0 , 0 )), m_srho ( 0.0 ) {} int faces () const { return ( int ) m_fid . size (); } public : vec3d m_sgamma ; // sum of \"gamma's\" double m_srho ; // sum of \"rho's\" vector < int > m_fid ; //face ids of the faces in this cluster }; struct EDGE { int face [ 2 ]; // the indices of the two faces sharing this edge int node [ 2 ]; // the nodes of the edge }; // a node which contains a list of clusters it belongs to class NODE { public : enum { MAX_CLUSTERS = 23 }; public : NODE () : nc ( 0 ){} bool AttachToCluster ( int n ); public : int c [ MAX_CLUSTERS ]; // cluster ID's int nc ; // nr of clusters }; public : FECVDDecimationModifier (); FEMesh * Apply ( FEMesh * pm ); private : bool Initialize ( FEMesh * pm ); bool Minimize ( FEMesh * pm ); FEMesh * Triangulate ( FEMesh * pm ); FEMesh * Triangulate2 ( FEMesh * pm ); // uses hole-filling algorithm FEMesh * CalculateCVD ( FEMesh * pm ); void InterpolateShellThickness ( FEMesh * pm ); // to interpolate shell thickness bool Swap ( FEFace & face , int nface , int ncluster ); public : double m_pct ; bool m_bcvd ; double m_sel_pct ; // percentage of clusters in selected region double m_gradient ; //gradiant for curvature private : vector < Cluster > m_Cluster ; vector < int > m_tag ; vector < double > m_rho ; // rho for all triangles vector < vec3d > m_gamma ; // centroids of all triangles list < EDGE > m_Edge ; // edge list vector < double > m_st ; //each node shell thickness //vector hashmap; //hashmap for selected faces }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FECoreMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h Classes Name class FECoreMesh Source code #pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#libsmeshpreviewmeshqcfecoremeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FECoreMesh.h"},{"location":"api/Files/FECoreMesh_8h.html#classes","text":"Name class FECoreMesh","title":"Classes"},{"location":"api/Files/FECoreMesh_8h.html#source-code","text":"#pragma once #include \"FEElement.h\" #include //----------------------------------------------------------------------------- class FECoreMesh { public : FECoreMesh (); virtual ~ FECoreMesh (); virtual void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ) = 0 ; bool IsType ( int ntype ); public : // interface for accessing elements virtual int Elements () const = 0 ; virtual FEElement_ & ElementRef ( int n ) = 0 ; virtual FEElement * ElementPtr ( int n = 0 ) = 0 ; public : // interface for accessing mesh items (except elements) int Nodes () const { return m_Node . size (); } int Edges () const { return m_Edge . size (); } int Faces () const { return m_Face . size (); } FENode & Node ( int n ) { return m_Node [ n ]; } FEEdge & Edge ( int n ) { return m_Edge [ n ]; } FEFace & Face ( int n ) { return m_Face [ n ]; } FENode * NodePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Node . size ()) ? & m_Node [ n ] : 0 ); } FEEdge * EdgePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Edge . size ()) ? & m_Edge [ n ] : 0 ); } FEFace * FacePtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Face . size ()) ? & m_Face [ n ] : 0 ); } protected : std :: vector < FENode > m_Node ; std :: vector < FEEdge > m_Edge ; std :: vector < FEFace > m_Face ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEElement_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEElement.h Classes Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement Defines Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM Macros Documentation define FE_VISIBLE #define FE_VISIBLE 0x01 define FE_SELECTED #define FE_SELECTED 0x02 define FE_HEX8 #define FE_HEX8 1 define FE_TET4 #define FE_TET4 2 define FE_PENTA6 #define FE_PENTA6 3 define FE_QUAD4 #define FE_QUAD4 4 define FE_TRI3 #define FE_TRI3 5 define FE_BEAM2 #define FE_BEAM2 6 define FE_HEX20 #define FE_HEX20 7 define FE_QUAD8 #define FE_QUAD8 8 define FE_BEAM3 #define FE_BEAM3 9 define FE_TET10 #define FE_TET10 10 define FE_TRI6 #define FE_TRI6 11 define FE_TET15 #define FE_TET15 12 define FE_HEX27 #define FE_HEX27 13 define MAX_ELEM #define MAX_ELEM 13 Source code // FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#libsmeshpreviewmeshqcfeelementh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEElement.h"},{"location":"api/Files/FEElement_8h.html#classes","text":"Name class FEItem class FENode class FEEdge class FEFace class FEElement_ class FETri3 class FEElement","title":"Classes"},{"location":"api/Files/FEElement_8h.html#defines","text":"Name FE_VISIBLE FE_SELECTED FE_HEX8 FE_TET4 FE_PENTA6 FE_QUAD4 FE_TRI3 FE_BEAM2 FE_HEX20 FE_QUAD8 FE_BEAM3 FE_TET10 FE_TRI6 FE_TET15 FE_HEX27 MAX_ELEM","title":"Defines"},{"location":"api/Files/FEElement_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/FEElement_8h.html#define-fe_visible","text":"#define FE_VISIBLE 0x01","title":"define FE_VISIBLE"},{"location":"api/Files/FEElement_8h.html#define-fe_selected","text":"#define FE_SELECTED 0x02","title":"define FE_SELECTED"},{"location":"api/Files/FEElement_8h.html#define-fe_hex8","text":"#define FE_HEX8 1","title":"define FE_HEX8"},{"location":"api/Files/FEElement_8h.html#define-fe_tet4","text":"#define FE_TET4 2","title":"define FE_TET4"},{"location":"api/Files/FEElement_8h.html#define-fe_penta6","text":"#define FE_PENTA6 3","title":"define FE_PENTA6"},{"location":"api/Files/FEElement_8h.html#define-fe_quad4","text":"#define FE_QUAD4 4","title":"define FE_QUAD4"},{"location":"api/Files/FEElement_8h.html#define-fe_tri3","text":"#define FE_TRI3 5","title":"define FE_TRI3"},{"location":"api/Files/FEElement_8h.html#define-fe_beam2","text":"#define FE_BEAM2 6","title":"define FE_BEAM2"},{"location":"api/Files/FEElement_8h.html#define-fe_hex20","text":"#define FE_HEX20 7","title":"define FE_HEX20"},{"location":"api/Files/FEElement_8h.html#define-fe_quad8","text":"#define FE_QUAD8 8","title":"define FE_QUAD8"},{"location":"api/Files/FEElement_8h.html#define-fe_beam3","text":"#define FE_BEAM3 9","title":"define FE_BEAM3"},{"location":"api/Files/FEElement_8h.html#define-fe_tet10","text":"#define FE_TET10 10","title":"define FE_TET10"},{"location":"api/Files/FEElement_8h.html#define-fe_tri6","text":"#define FE_TRI6 11","title":"define FE_TRI6"},{"location":"api/Files/FEElement_8h.html#define-fe_tet15","text":"#define FE_TET15 12","title":"define FE_TET15"},{"location":"api/Files/FEElement_8h.html#define-fe_hex27","text":"#define FE_HEX27 13","title":"define FE_HEX27"},{"location":"api/Files/FEElement_8h.html#define-max_elem","text":"#define MAX_ELEM 13","title":"define MAX_ELEM"},{"location":"api/Files/FEElement_8h.html#source-code","text":"// FEElement.h: interface for the FEElement class. // #if !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) #define AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include \"math3d.h\" //----------------------------------------------------------------------------- // FE State Flags #define FE_VISIBLE 0x01 #define FE_SELECTED 0x02 //----------------------------------------------------------------------------- // The FEItem class is the base class for all FEMesh items. It stores the // common attributes such as the state flags and the group ID. // class FEItem { public : FEItem () { m_state = FE_VISIBLE ; m_gid = -1 ; } bool IsVisible () const { return (( m_state & FE_VISIBLE ) != 0 ); } bool IsSelected () const { return (( m_state & FE_SELECTED ) != 0 ); } void Select () { m_state = m_state | FE_SELECTED ; } void UnSelect () { m_state = m_state & ~ FE_SELECTED ; } void Show () { m_state = m_state | FE_VISIBLE ; } void Hide () { m_state = 0 ; } unsigned int GetFEState () const { return m_state ; } void SetFEState ( unsigned int state ) { m_state = state ; } public : int m_ntag ; // tag of item int m_gid ; // group id int m_nid ; // item id (used e.g. in export). //double m_ndata; //scalar data associated with a node private : unsigned int m_state ; // the state flag of the mesh(-item) }; //----------------------------------------------------------------------------- // The FENode class stores the nodal data. // class FENode : public FEItem { public : FENode (){ m_bext = false ; } public : vec3d r ; // nodal position bool m_bext ; // exterior node or not? double m_ndata ; }; //----------------------------------------------------------------------------- // The FEEdge class stores the edge data. // An edge can be either linear or quadratic. In the linear case, only the // first two nodes are used, the third one is set to -1. In the latter case, // all three nodes are used, with the first two being the outside nodes and // the third one being the inside node. // // 1 3 2 // +---------o----------+ // class FEEdge : public FEItem { public : enum { MAX_NODES = 3 }; public : FEEdge (); bool operator == ( const FEEdge & e ); int Nodes () { return ( n [ 2 ] == -1 ? 2 : 3 ); } int FindNode ( int node ); public : int n [ MAX_NODES ]; int m_elem ; int m_nbr [ 2 ]; }; //----------------------------------------------------------------------------- // FEFace class stores face data. // A face can either have 3, 4, 6, 8 or 9 nodes. It is a triangle if it has 3 nodes and // a quad if it has 4. If it has 6 it is a quadratic triangle. The first three are the // cornder nodes, the other three are the midpoints of the edges. If it has 8 or 9 it is // a quadratic quad. The first four nodes are the corner nodes, the next four the // interior edge nodes and in the case of a 9-node quad, the last node is in the center. // // 4 7 3 3 // +-------o-------+ + // | | |\\ // | | | \\ // 8o x9 o6 6o o5 // | | | \\ // | | | \\ // +-------o-------+ +--o--+ // 1 5 2 1 4 2 // class FEFace : public FEItem { public : enum { MAX_NODES = 9 }; public : FEFace (); bool operator == ( const FEFace & f ); int Nodes () { return m_nodes ; } int Edges (); void GetEdgeNodes ( int i , int * n ); bool HasEdge ( int n1 , int n2 ); bool HasNode ( int i ); int FindNode ( int i ); bool IsExternal () { return ( m_elem [ 1 ] == -1 ); } public : int n [ MAX_NODES ]; int m_nodes ; int m_nbr [ 4 ]; vec3d m_fn ; vec3d m_nn [ MAX_NODES ]; int m_sid ; int m_elem [ 2 ]; }; //----------------------------------------------------------------------------- // element types // NOTE: do not change the order or values of these macros. #define FE_HEX8 1 #define FE_TET4 2 #define FE_PENTA6 3 #define FE_QUAD4 4 #define FE_TRI3 5 #define FE_BEAM2 6 #define FE_HEX20 7 #define FE_QUAD8 8 #define FE_BEAM3 9 #define FE_TET10 10 #define FE_TRI6 11 #define FE_TET15 12 #define FE_HEX27 13 #define MAX_ELEM 13 //----------------------------------------------------------------------------- // The FEElement_ class defines the data interface to the element data. // Specialized element classes are then defined by deriving from this base class. class FEElement_ : public FEItem { public : FEElement_ (); // comparison operator bool is_equal ( FEElement_ & e ); int GetType () const { return m_ntype ; } bool IsType ( int ntype ) const { return m_ntype == ntype ; } int Nodes () const { return m_nodes ; } int Faces () const { return m_nfaces ; } int Edges () const { return m_nedges ; } int GetFace ( int i , int * n ); FEFace GetFace ( int i ); FEFace GetShellFace (); FEEdge GetEdge ( int i ); bool IsExterior (); protected : // help class for copy-ing element data void copy ( const FEElement_ & el ); public : // Check the element class bool IsSolid () { return ( m_ntype == FE_HEX8 ) || ( m_ntype == FE_HEX20 ) || ( m_ntype == FE_HEX27 ) || ( m_ntype == FE_PENTA6 ) || ( m_ntype == FE_TET4 ) || ( m_ntype == FE_TET10 ) || ( m_ntype == FE_TET15 ); } bool IsShell () { return ( m_ntype == FE_TRI3 ) || ( m_ntype == FE_QUAD4 ) || ( m_ntype == FE_TRI6 ); } bool IsBeam () { return ( m_ntype == FE_BEAM2 ); } public : int * m_node ; int * m_nbr ; int * m_face ; double * m_h ; public : vec3d m_fiber ; mat3d m_Q ; bool m_Qactive ; double m_a0 ; protected : int m_ntype ; int m_nodes ; int m_nfaces ; int m_nedges ; }; //----------------------------------------------------------------------------- // Class for 3-node triangular elements class FETri3 : public FEElement_ { public : FETri3 (); FETri3 ( FETri3 & el ); FETri3 & operator = ( FETri3 & el ); private : int _node [ 3 ]; int _nbr [ 3 ]; int _face [ 1 ]; double _h [ 3 ]; }; //----------------------------------------------------------------------------- // The FEElement class can be used to represent a general purpose element. // This class can represent an element of all different types. class FEElement : public FEElement_ { public : enum { MAX_NODES = 27 }; public : FEElement (); FEElement ( const FEElement & el ); FEElement & operator = ( const FEElement & el ); void SetType ( int ntype ); private : int _node [ MAX_NODES ]; int _nbr [ 6 ]; int _face [ 6 ]; double _h [ 9 ]; }; #endif // !defined(AFX_FEELEMENT_H__4A869671_045F_4EDD_AC13_25C849922373__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEFillHole_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFillHole.h Classes Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#libsmeshpreviewmeshqcfefillholeh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFillHole.h"},{"location":"api/Files/FEFillHole_8h.html#classes","text":"Name class FEFillHole class FEFillHole::EdgeRing struct FEFillHole::FACE","title":"Classes"},{"location":"api/Files/FEFillHole_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This class implements a modifier that fills a hole in a mesh. class FEFillHole { public : // helper class for defining a closed loop of edges class EdgeRing { public : EdgeRing (){ m_winding = 1 ; } EdgeRing ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } void operator = ( const EdgeRing & ring ) { m_node = ring . m_node ; m_r = ring . m_r ; m_winding = ring . m_winding ; m_normal = ring . m_normal ; } bool empty () { return m_node . empty (); } void add ( int n , const vec3d & r , const vec3d & nn ) { m_node . push_back ( n ); m_r . push_back ( r ); m_normal . push_back ( nn ); } void clear () { m_node . clear (); m_r . clear (); m_normal . clear (); } int size () { return ( int ) m_node . size (); } int operator [] ( int i ) { return m_node [ i ]; } void GetLeftEar ( int n0 , int n1 , EdgeRing & ear ); void GetRightEar ( int n0 , int n1 , EdgeRing & ear ); public : vector < vec3d > m_r ; // nodal positions vector < int > m_node ; // sorted list of nodes defining the closed loop int m_winding ; // +1 or -1 depending on the winding vector < vec3d > m_normal ; //node normals }; // helper class for representing a new face struct FACE { vec3d r [ 3 ]; // nodal positions int n [ 3 ]; // the three nodes of the face }; public : FEFillHole (){} FEMesh * Apply ( FEMesh * pm ); bool optimize ; bool insertNodes ; //AFM bool AFM ( FEMesh & mesh , EdgeRing & ring , vector < FACE >& tri_list , vector < vec3d > & node_list ); //Addd node vec3d newNode ( vec3d current_node , vec3d next_node , vec3d prev_node , vec3d node_normal , double scale , bool concave ); // divide a ring bool DivideRing ( EdgeRing & ring , vector < FACE >& tri_list ); // divide a ring bool DivideRing1 ( EdgeRing & ring , vector < FACE >& tri_list ); // fill all holes void FillAllHoles ( FEMesh * pm ); private : // Find the ring based on a node (TODO: should I move this to the FEMesh class?) bool FindEdgeRing ( FEMesh & mesh , int node , EdgeRing & ring ); // Find the approximate normal of a ring vec3d RingNormal ( EdgeRing & ring ); // check if the split is valid bool IsValidSplit ( EdgeRing & left , EdgeRing & right , const vec3d & p , const vec3d & t ); // get location sign (+1 on positive side, -1 on negative side, 0 = on both sides) int GetPlaneOrientation ( EdgeRing & ring , const vec3d & p , const vec3d & t ); // get the area of the smallest triangle double min_tri_area ( vector < FACE >& tri ); // get the quality of the worst triangle double min_tri_quality ( vector < FACE >& tri ); // get the triangle quality double tri_quality ( vec3d r [ 3 ]); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEFixMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h Classes Name class FEFixMesh Source code #pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#libsmeshpreviewmeshqcfefixmeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEFixMesh.h"},{"location":"api/Files/FEFixMesh_8h.html#classes","text":"Name class FEFixMesh","title":"Classes"},{"location":"api/Files/FEFixMesh_8h.html#source-code","text":"#pragma once #include \"FEMesh.h\" //----------------------------------------------------------------------------- // This modifier implements a list of tools to fixing meshes class FEFixMesh { public : FEFixMesh () { m_ntask = 0 ; } FEMesh * Apply ( FEMesh * pm ); // set the task to do void SetTask ( int n ); //set max thickness in case 6 void SetThickness ( double m ); public : FEMesh * RemoveDuplicateElements ( FEMesh * pm ); FEMesh * RemoveNonManifoldElements ( FEMesh * pm ); FEMesh * FixElementWinding ( FEMesh * pm ); FEMesh * FillAllHoles ( FEMesh * pm ); FEMesh * FixinvertedElements ( FEMesh * pm ); FEMesh * FixReferenceSurface ( FEMesh * pm ); FEMesh * InterpolateShellThickness ( FEMesh * pm ); private : int m_ntask ; double m_limitThickness ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Classes Name class FEMeshSmoothingModifier Source code #pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#libsmeshpreviewmeshqcfemeshsmoothingmodifierh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#classes","text":"Name class FEMeshSmoothingModifier","title":"Classes"},{"location":"api/Files/FEMeshSmoothingModifier_8h.html#source-code","text":"#pragma once #include \"math3d.h\" class FEMesh ; //----------------------------------------------------------------------------- class FEMeshSmoothingModifier { public : FEMeshSmoothingModifier (); FEMesh * Apply ( FEMesh * pm ); protected : double area_triangle ( vec3d r [ 3 ]); double distance ( vec3d x , vec3d y ); double random (); void Laplacian_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Laplacian_Smoothing2 ( FEMesh * pm , vector < int > hashmap ); void Taubin_Smoothing ( FEMesh * pm , vector < int > hashmap ); void Crease_Enhancing_Diffusion ( FEMesh * pm , vector < int > hashmap ); void Add_Noise ( FEMesh * pm , vector < int > hashmap ); public : double m_threshold1 ; double m_threshold2 ; double m_iteration ; int m_method ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEMesh_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEMesh.h Classes Name class FEElementData class FEMesh Functions Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3]) Attributes Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15 Functions Documentation function bias double bias ( double b , double x ) function gain double gain ( double g , double x ) function area_triangle double area_triangle ( vec3d r [ 3 ] ) Attributes Documentation variable FTHEX8 int FTHEX8 ; variable FTHEX20 int FTHEX20 ; variable FTHEX27 int FTHEX27 ; variable FTPENTA int FTPENTA ; variable FTTET int FTTET ; variable FTTET10 int FTTET10 ; variable FTTET15 int FTTET15 ; Source code // FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#libsmeshpreviewmeshqcfemeshh","text":"","title":"Libs/Mesh/PreviewMeshQC/FEMesh.h"},{"location":"api/Files/FEMesh_8h.html#classes","text":"Name class FEElementData class FEMesh","title":"Classes"},{"location":"api/Files/FEMesh_8h.html#functions","text":"Name double bias (double b, double x) double gain (double g, double x) double area_triangle ( vec3d r[3])","title":"Functions"},{"location":"api/Files/FEMesh_8h.html#attributes","text":"Name int FTHEX8 int FTHEX20 int FTHEX27 int FTPENTA int FTTET int FTTET10 int FTTET15","title":"Attributes"},{"location":"api/Files/FEMesh_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/FEMesh_8h.html#function-bias","text":"double bias ( double b , double x )","title":"function bias"},{"location":"api/Files/FEMesh_8h.html#function-gain","text":"double gain ( double g , double x )","title":"function gain"},{"location":"api/Files/FEMesh_8h.html#function-area_triangle","text":"double area_triangle ( vec3d r [ 3 ] )","title":"function area_triangle"},{"location":"api/Files/FEMesh_8h.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Files/FEMesh_8h.html#variable-fthex8","text":"int FTHEX8 ;","title":"variable FTHEX8"},{"location":"api/Files/FEMesh_8h.html#variable-fthex20","text":"int FTHEX20 ;","title":"variable FTHEX20"},{"location":"api/Files/FEMesh_8h.html#variable-fthex27","text":"int FTHEX27 ;","title":"variable FTHEX27"},{"location":"api/Files/FEMesh_8h.html#variable-ftpenta","text":"int FTPENTA ;","title":"variable FTPENTA"},{"location":"api/Files/FEMesh_8h.html#variable-fttet","text":"int FTTET ;","title":"variable FTTET"},{"location":"api/Files/FEMesh_8h.html#variable-fttet10","text":"int FTTET10 ;","title":"variable FTTET10"},{"location":"api/Files/FEMesh_8h.html#variable-fttet15","text":"int FTTET15 ;","title":"variable FTTET15"},{"location":"api/Files/FEMesh_8h.html#source-code","text":"// FEMesh.h: interface for the FEMesh class. // #if !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) #define AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"FECoreMesh.h\" #include #include using namespace std ; //----------------------------------------------------------------------------- class FEMesh ; //----------------------------------------------------------------------------- // Element data field class FEElementData { public : FEElementData (); FEElementData ( const FEElementData & d ); FEElementData & operator = ( const FEElementData & d ); // create a data field void Create ( FEMesh * pm , double v = 0.0 ); // size of data field int Size () { return ( int ) m_data . size (); } // get/set double get ( int i ) { return m_data [ i ]; } void set ( int i , double v ) { m_data [ i ] = v ; } // access operator double & operator [] ( int i ) { return m_data [ i ]; } // get/set name void SetName ( const char * sz ); const char * GetName () { return m_szname ; } void FillRandomBox ( double fmin , double fmax ); private : char m_szname [ 256 ]; FEMesh * m_pMesh ; vector < double > m_data ; }; //----------------------------------------------------------------------------- // This class describes a finite element mesh. Every FEMesh must be owned by a // GObject class. class FEMesh : public FECoreMesh { public : // --- C O N S T R U C T I O N --- FEMesh (); FEMesh ( FEMesh & m ); virtual ~ FEMesh (); // allocate space for mesh void Create ( int nodes , int elems , int faces = 0 , int edges = 0 ); // copy part of the mesh void ShallowCopy ( FEMesh * pm ); void Clear (); void DeleteEdges () { if ( ! m_Edge . empty ()) m_Edge . clear (); } public : // --- E L E M E N T A C C E S S --- int Elements () const { return m_Elem . size (); } FEElement & Element ( int n ) { return m_Elem [ n ]; } FEElement_ & ElementRef ( int n ) { return m_Elem [ n ]; } FEElement * ElementPtr ( int n = 0 ) { return (( n >= 0 ) && ( n < ( int ) m_Elem . size ()) ? & m_Elem [ n ] : 0 ); } public : // --- S U B M E S H --- int FindFace ( FEElement * pe , FEFace & f , FEFace & fe ); void FindNodesFromPart ( int gid , vector < int >& node ); std :: vector < FENode >& NodeArray () { return m_Node ; } std :: vector < FEFace >& FaceArray () { return m_Face ; } std :: vector < FEElement >& ElementArray () { return m_Elem ; } // --- E V A L U A T I O N --- // get the current element value double GetElementValue ( int n ) { return m_data [ n ]; } // set the element value void SetElementValue ( int n , double v ) { m_data [ n ] = v ; } // update the range of values void UpdateValueRange (); // get the value range void GetValueRange ( double & vmin , double & vmax ); vec3d ProjectToSurface ( vec3d r , vec3d t ); vec3d ProjectToFace ( vec3d p , FEFace & f , double & r , double & s ); vec3d ProjectToEdge ( vec3d e1 , vec3d e2 , vec3d p , double & r ); bool FindIntersection ( FEFace & f , vec3d x , vec3d n , vec3d & q , double & g ); // --- U P D A T E --- void Update (); void UpdateElementNeighbors (); void UpdateFaces (); void UpdateEdges (); void UpdateNodes (); void AutoSmooth ( double w ); void UpdateNormals (); void PartitionSelection (); // --- O P E R A T I O N S --- void RemoveIsolatedNodes (); void AddNode ( FENode & n ) { m_Node . push_back ( n ); } // detach the selected elements and create a new mesh FEMesh * DetachSelectedMesh (); // detach selected elements and create a new part void DetachSelectedPart (); FEMesh * ExtractSelectedFaces (); void DeleteTaggedElements ( int tag ); void DeleteTaggedFaces ( int tag ); void DeleteTaggedEdges ( int tag ); void FindDuplicateFaces ( vector < int >& l ); void FindDuplicateEdges ( vector < int >& l ); void DeleteSelectedElements (); void DeleteSelectedFaces (); void DeleteSelectedNodes (); void InvertTaggedElements ( int ntag ); void InvertSelectedElements (); double ShellJacobian ( FEElement & el ); // Remove duplicated elements void RemoveDuplicateElements (); //Fix inverted elements void FixinvertedElements (); //Fix the reference surface void FixReferenceSurface (); //Interpolate shell thickness for elements whose thickness is unknown void InterpolateShellThickness ( double ); // Remove non-manifold elements void RemoveNonManifoldElements (); // fix element winding void FixElementWinding (); void FixElementWinding2 (); // tag all elements void TagAllElements ( int ntag ); public : int DataFields () { return ( int ) m_map . size (); } FEElementData * AddDataField ( const char * szname , double v = 0.0 ); FEElementData & GetDataField ( int i ) { return m_map [ i ]; } public : double ShortestEdge (); protected : bool IntersectTri ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); bool IntersectQuad ( vec3d * y , vec3d x , vec3d n , vec3d & q , double & g ); public : void BuildNodeElementTable ( vector < vector < int > >& NET ); void BuildNodeFaceTable ( vector < vector < int > >& NFT ); void BuildNodeEdgeTable ( vector < vector < int > >& NET ); void BuildEdgeTable ( vector < pair < int , int > >& ET ); void BuildNodeNodeTable ( vector < set < int > >& NNT ); void BuildSurfaceNodeNodeTable ( vector < set < int > >& NNT ); void BuildElementEdgeTable ( vector < vector < int > >& EET , vector < pair < int , int > >& ET ); void BuildFaceTable ( vector < FEFace >& FT ); void BuildElementFaceTable ( vector < vector < int > >& EFT , vector < FEFace >& FT ); void BuildFaceEdgeTable ( vector < vector < int > >& FET , vector < pair < int , int > >& ET ); void BuildFaceFaceTable ( vector < int >& FFT , vector < FEFace >& FT ); void BuildEdgeEdgeTable ( vector < int >& EET , vector < pair < int , int > >& ET ); protected : // element data std :: vector < FEElement > m_Elem ; std :: vector < double > m_data ; double m_min , m_max ; // data fields (currently used as material maps) vector < FEElementData > m_map ; }; extern int FTHEX8 [ 6 ][ 4 ]; extern int FTHEX20 [ 6 ][ 8 ]; extern int FTHEX27 [ 6 ][ 9 ]; extern int FTPENTA [ 5 ][ 4 ]; extern int FTTET [ 4 ][ 3 ]; extern int FTTET10 [ 4 ][ 6 ]; extern int FTTET15 [ 4 ][ 7 ]; double bias ( double b , double x ); double gain ( double g , double x ); double area_triangle ( vec3d r [ 3 ]); #endif // !defined(AFX_FEMESH_H__CB7EC714_E3FD_46A4_A397_FEFB23429520__INCLUDED_) Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FENodeElementList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h Classes Name class FENodeElementList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#libsmeshpreviewmeshqcfenodeelementlisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeElementList.h"},{"location":"api/Files/FENodeElementList_8h.html#classes","text":"Name class FENodeElementList","title":"Classes"},{"location":"api/Files/FENodeElementList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeElementList { public : FENodeElementList ( FEMesh * pm ); ~ FENodeElementList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } FEElement * Element ( int n , int j ) { return m_pelem [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < FEElement *> m_pelem ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FENodeFaceList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Classes Name class FENodeFaceList Source code #pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#libsmeshpreviewmeshqcfenodefacelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeFaceList.h"},{"location":"api/Files/FENodeFaceList_8h.html#classes","text":"Name class FENodeFaceList","title":"Classes"},{"location":"api/Files/FENodeFaceList_8h.html#source-code","text":"#pragma once #include using namespace std ; #include \"FEMesh.h\" class FENodeFaceList { public : FENodeFaceList ( FEMesh * pm ); ~ FENodeFaceList ( void ); void Build (); void BuildSorted (); int Nodes () { return ( int ) m_node . size (); } FENode & Node ( int i ) { return m_pm -> Node ( m_node [ i ]); } int Valence ( int i ) { return m_val [ i ]; } FEFace * Face ( int n , int i ) { return m_pface [ m_off [ n ] + i ]; } bool HasFace ( int n , FEFace * pf ); protected : void Sort ( int node ); protected : FEMesh * m_pm ; vector < int > m_node ; vector < int > m_val ; vector < FEFace *> m_pface ; vector < int > m_off ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FENodeNodeList_8h.html","text":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Classes Name class FENodeNodeList Source code #pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#libsmeshpreviewmeshqcfenodenodelisth","text":"","title":"Libs/Mesh/PreviewMeshQC/FENodeNodeList.h"},{"location":"api/Files/FENodeNodeList_8h.html#classes","text":"Name class FENodeNodeList","title":"Classes"},{"location":"api/Files/FENodeNodeList_8h.html#source-code","text":"#pragma once #include using namespace std ; class FEMesh ; class FENodeNodeList { public : FENodeNodeList ( FEMesh * pm ); ~ FENodeNodeList (); void Build (); int Valence ( int n ) { return m_val [ n ]; } int Node ( int n , int j ) { return m_node [ m_off [ n ] + j ]; } protected : FEMesh * m_pm ; vector < int > m_val ; vector < int > m_off ; vector < int > m_node ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEVTKExport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h Classes Name struct VTKEXPORT class FEVTKExport Source code #pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#libsmeshpreviewmeshqcfevtkexporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKExport.h"},{"location":"api/Files/FEVTKExport_8h.html#classes","text":"Name struct VTKEXPORT class FEVTKExport","title":"Classes"},{"location":"api/Files/FEVTKExport_8h.html#source-code","text":"#pragma once #include #include #include #include class FEMesh ; //----------------------------------------------------------------------------- struct VTKEXPORT { bool bshellthick ; // shell thickness bool bscalar_data ; // user scalar data }; class FEVTKExport { public : FEVTKExport (); ~ FEVTKExport () = default ; bool Export ( FEMesh & mesh , const char * szfile ); std :: string ExportToString ( FEMesh & mesh ); bool ExportToStream ( FEMesh & mesh , std :: ostream & out ); void SetOptions ( VTKEXPORT o ) { m_ops = o ; } vtkSmartPointer < vtkPolyData > ExportToVTK ( FEMesh & mesh ); private : VTKEXPORT m_ops ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FEVTKImport_8h.html","text":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h Classes Name class FEVTKimport Source code #pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#libsmeshpreviewmeshqcfevtkimporth","text":"","title":"Libs/Mesh/PreviewMeshQC/FEVTKImport.h"},{"location":"api/Files/FEVTKImport_8h.html#classes","text":"Name class FEVTKimport","title":"Classes"},{"location":"api/Files/FEVTKImport_8h.html#source-code","text":"#pragma once #include #include #include #include using namespace std ; class FEMesh ; class vtkPolyData ; class FEVTKimport { public : FEVTKimport (); ~ FEVTKimport ( void ); FEMesh * Load ( const char * szfile ); FEMesh * Load ( istream & stream ); FEMesh * Load ( vtkPolyData * polydata ); protected : bool BuildMesh (); FEMesh * errf ( const char * sz , ...); void Close (); private : FILE * m_fp ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/FreeFormConstraint_8h.html","text":"Libs/Optimize/Constraints/FreeFormConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::FreeFormConstraint Source code #pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#libsoptimizeconstraintsfreeformconstrainth","text":"","title":"Libs/Optimize/Constraints/FreeFormConstraint.h"},{"location":"api/Files/FreeFormConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/FreeFormConstraint_8h.html#classes","text":"Name class shapeworks::FreeFormConstraint","title":"Classes"},{"location":"api/Files/FreeFormConstraint_8h.html#source-code","text":"#pragma once #include \"Constraint.h\" #include \"Libs/Mesh/Mesh.h\" class vtkFloatArray ; namespace shapeworks { class FreeFormConstraint : public Constraint { public : FreeFormConstraint () {} void setMesh ( std :: shared_ptr < shapeworks :: Mesh > mesh ) { mesh_ = mesh ; } std :: shared_ptr < shapeworks :: Mesh > getMesh () { return mesh_ ; } bool readyForOptimize () const ; bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override { std :: cout << \"FF\" << std :: endl ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCGradient ( pt ); } double constraintEval ( const Eigen :: Vector3d & pt ) const override { return mesh_ -> getFFCValue ( pt ); } void setDefinition ( vtkSmartPointer < vtkPolyData > polyData ); vtkSmartPointer < vtkPolyData > getDefinition () { return definitionPolyData_ ; }; void applyToPolyData ( vtkSmartPointer < vtkPolyData > polyData ); std :: vector < std :: vector < Eigen :: Vector3d >>& boundaries (); Eigen :: Vector3d getQueryPoint () { return queryPoint_ ; }; void setQueryPoint ( Eigen :: Vector3d queryPoint ) { queryPoint_ = queryPoint ; }; void computeBoundaries (); void setInoutPolyData ( vtkSmartPointer < vtkPolyData > polyData ) { inoutPolyData_ = polyData ; } vtkSmartPointer < vtkPolyData > getInoutPolyData () { return inoutPolyData_ ; }; void createInoutPolyData (); bool isSet (); void setPainted ( bool painted ); void reset (); void computeGradientFields ( std :: shared_ptr < Mesh > mesh ); void convertLegacyFFC ( vtkSmartPointer < vtkPolyData > polyData ); private : vtkSmartPointer < vtkFloatArray > computeInOutForFFCs ( vtkSmartPointer < vtkPolyData > polyData , Eigen :: Vector3d query , vtkSmartPointer < vtkPolyData > halfmesh ); std :: vector < Eigen :: Matrix3d > setGradientFieldForFFCs ( std :: shared_ptr < Mesh > mesh , vtkSmartPointer < vtkDoubleArray > absvalues , Eigen :: MatrixXd V , Eigen :: MatrixXi F ); vtkFloatArray * getInOutScalars (); vtkFloatArray * createFFCPaint ( vtkSmartPointer < vtkPolyData > polyData ); std :: shared_ptr < shapeworks :: Mesh > mesh_ ; vtkSmartPointer < vtkPolyData > definitionPolyData_ ; bool painted_ = false ; std :: vector < std :: vector < Eigen :: Vector3d >> boundaries_ ; Eigen :: Vector3d queryPoint_ ; vtkSmartPointer < vtkPolyData > inoutPolyData_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GenericContainerArray_8h.html","text":"Libs/Optimize/Container/GenericContainerArray.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. Source code #pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#libsoptimizecontainergenericcontainerarrayh","text":"","title":"Libs/Optimize/Container/GenericContainerArray.h"},{"location":"api/Files/GenericContainerArray_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainerArray_8h.html#classes","text":"Name class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain.","title":"Classes"},{"location":"api/Files/GenericContainerArray_8h.html#source-code","text":"#pragma once #include #include \"GenericContainer.h\" #include \"Observer.h\" #include \"itkDataObject.h\" #include \"ParticleEvents.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainerArray : public std :: vector < typename GenericContainer < T >:: Pointer > , public Observer { public : typedef T DataType ; typedef GenericContainerArray Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , Observer ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) { this -> resize ( this -> size () + 1 ); this -> operator []( this -> size () - 1 ) = GenericContainer < T >:: New (); } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); this -> operator []( event . GetDomainIndex ()) -> operator []( event . GetPositionIndex ()) = 0.0 ; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void ZeroAllValues () { for ( unsigned d = 0 ; d < this -> size (); d ++ ) { for ( unsigned int i = 0 ; i < this -> operator []( d ) -> GetSize (); i ++ ) { this -> operator []( d ) -> operator []( i ) = 0.0 ; } } } protected : GenericContainerArray () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ GenericContainerArray (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : GenericContainerArray ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GenericContainer_8h.html","text":"Libs/Optimize/Container/GenericContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) Source code #pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#libsoptimizecontainergenericcontainerh","text":"","title":"Libs/Optimize/Container/GenericContainer.h"},{"location":"api/Files/GenericContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GenericContainer_8h.html#classes","text":"Name class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?)","title":"Classes"},{"location":"api/Files/GenericContainer_8h.html#source-code","text":"#pragma once #include #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class T > class GenericContainer : public itk :: DataObject { public : typedef T DataType ; typedef GenericContainer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleContainer , itk :: DataObject ); inline T & operator []( size_t k ) { if ( k >= data . size ()) { data . resize ( k + 1 ); } return data [ k ]; } inline T & Get ( size_t k ) { return ( * this )[ k ]; } unsigned long int GetSize () const { return data . size (); } protected : GenericContainer () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"ParticleContainer: \" << std :: endl ; } virtual ~ GenericContainer (){}; private : GenericContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < T > data ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GradientDescentOptimizer_8h.html","text":"Libs/Optimize/GradientDescentOptimizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GradientDescentOptimizer Source code #pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#libsoptimizegradientdescentoptimizerh","text":"","title":"Libs/Optimize/GradientDescentOptimizer.h"},{"location":"api/Files/GradientDescentOptimizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GradientDescentOptimizer_8h.html#classes","text":"Name class shapeworks::GradientDescentOptimizer","title":"Classes"},{"location":"api/Files/GradientDescentOptimizer_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"ParticleSystem.h\" #include \"itkObject.h\" #include \"itkObjectFactory.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class GradientDescentOptimizer : public itk :: Object { public : using TGradientNumericType = float ; constexpr static unsigned int VDimension = 3 ; typedef GradientDescentOptimizer Self ; typedef itk :: Object Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); typedef shapeworks :: ImageDomainWithGradients < TGradientNumericType > DomainType ; itkTypeMacro ( ParticleGradientDescentPositionOptimizer , Object ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef ParticleSystem ParticleSystemType ; typedef VectorFunction GradientFunctionType ; typedef typename GradientFunctionType :: VectorType VectorType ; typedef typename ParticleSystemType :: PointType PointType ; void StartOptimization () { this -> StartAdaptiveGaussSeidelOptimization (); } void StartAdaptiveGaussSeidelOptimization (); void AugmentedLagrangianConstraints ( VectorType & gradient , const PointType & pt , const size_t & dom , const double & maximumUpdateAllowed , size_t index ); inline void StopOptimization () { this -> m_StopOptimization = true ; } inline void AbortProcessing () { this -> m_StopOptimization = true ; this -> m_AbortProcessing = true ; } itkGetMacro ( NumberOfIterations , unsigned int ); itkSetMacro ( NumberOfIterations , unsigned int ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } itkGetMacro ( TimeStep , double ); itkSetMacro ( TimeStep , double ); itkGetMacro ( MaximumNumberOfIterations , unsigned int ); itkSetMacro ( MaximumNumberOfIterations , unsigned int ); itkGetMacro ( Tolerance , double ); itkSetMacro ( Tolerance , double ); itkGetObjectMacro ( ParticleSystem , ParticleSystemType ); itkSetObjectMacro ( ParticleSystem , ParticleSystemType ); itkGetObjectMacro ( GradientFunction , GradientFunctionType ); itkSetObjectMacro ( GradientFunction , GradientFunctionType ); void SetInitializationMode ( bool b ) { m_initialization_mode = b ; } void SetCheckIterations ( size_t si ) { m_check_iterations = si ; } void SetInitializationStartScalingFactor ( double si ) { m_initialization_start_scaling_factor = si ; } protected : GradientDescentOptimizer (); GradientDescentOptimizer ( const GradientDescentOptimizer & ); const GradientDescentOptimizer & operator = ( const GradientDescentOptimizer & ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ GradientDescentOptimizer (){}; private : typename ParticleSystemType :: Pointer m_ParticleSystem ; typename GradientFunctionType :: Pointer m_GradientFunction ; bool m_StopOptimization ; bool m_AbortProcessing = false ; unsigned int m_NumberOfIterations ; unsigned int m_MaximumNumberOfIterations ; double m_Tolerance ; double m_TimeStep ; std :: vector < std :: vector < double > > m_TimeSteps ; unsigned int m_verbosity ; // Adaptive Initialization variables bool m_initialization_mode = false ; size_t m_check_iterations = 50 ; double m_initialization_start_scaling_factor ; void ResetTimeStepVectors (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GroomParameters_8h.html","text":"Libs/Groom/GroomParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomParameters Source code #pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#libsgroomgroomparametersh","text":"","title":"Libs/Groom/GroomParameters.h"},{"location":"api/Files/GroomParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomParameters_8h.html#classes","text":"Name class shapeworks::GroomParameters","title":"Classes"},{"location":"api/Files/GroomParameters_8h.html#source-code","text":"#pragma once #include namespace shapeworks { class GroomParameters { enum class MeshSmoothingOption { laplacian , sinc }; enum class AlignmentOption { none , center , icp }; public : explicit GroomParameters ( ProjectHandle project , std :: string domain_name = \"\" ); void set_domain_name ( std :: string domain_name ); void save_to_project (); std :: string get_groom_output_prefix (); void set_groom_output_prefix ( std :: string prefix ); bool get_groom_all_domains_the_same (); void set_groom_all_domains_the_same ( bool value ); bool get_alignment_enabled (); void set_alignment_enabled ( bool value ); std :: string get_alignment_method (); void set_alignment_method ( std :: string method ); bool get_isolate_tool (); void set_isolate_tool ( bool value ); bool get_fill_holes_tool (); void set_fill_holes_tool ( bool value ); bool get_fill_mesh_holes_tool (); void set_fill_mesh_holes_tool ( bool value ); bool get_auto_pad_tool (); void set_auto_pad_tool ( bool value ); int get_padding_amount (); void set_padding_amount ( int padding_amount ); bool get_antialias_tool (); void set_antialias_tool ( bool value ); int get_antialias_iterations (); void set_antialias_iterations ( int iterations ); bool get_blur_tool (); void set_blur_tool ( bool value ); double get_blur_amount (); void set_blur_amount ( double blur_amount ); bool get_fast_marching (); void set_fast_marching ( bool value ); bool get_mesh_smooth (); void set_mesh_smooth ( bool value ); std :: string get_mesh_smoothing_method (); void set_mesh_smoothing_method ( std :: string method ); int get_mesh_vtk_laplacian_iterations (); void set_mesh_vtk_laplacian_iterations ( int iterations ); double get_mesh_vtk_laplacian_relaxation (); void set_mesh_vtk_laplacian_relaxation ( double relaxation ); int get_mesh_vtk_windowed_sinc_iterations (); void set_mesh_vtk_windowed_sinc_iterations ( int iterations ); double get_mesh_vtk_windowed_sinc_passband (); void set_mesh_vtk_windowed_sinc_passband ( double passband ); bool get_use_icp (); bool get_use_center (); bool get_use_landmarks (); bool get_crop (); void set_crop ( bool crop ); bool get_convert_to_mesh (); void set_convert_to_mesh ( bool value ); // reflection bool get_reflect (); void set_reflect ( bool reflect ); std :: string get_reflect_column (); void set_reflect_column ( std :: string column ); std :: string get_reflect_choice (); void set_reflect_choice ( std :: string choice ); std :: string get_reflect_axis (); void set_reflect_axis ( std :: string axies ); // resampling bool get_resample (); void set_resample ( bool resample ); bool get_isotropic (); void set_isotropic ( bool isotropic ); double get_iso_spacing (); void set_iso_spacing ( double spacing ); std :: vector < double > get_spacing (); void set_spacing ( std :: vector < double > spacing ); bool get_remesh (); void set_remesh ( bool remesh ); bool get_remesh_percent_mode (); void set_remesh_percent_mode ( bool mode ); double get_remesh_percent (); void set_remesh_percent ( double percent ); int get_remesh_num_vertices (); void set_remesh_num_vertices ( int num_vertices ); double get_remesh_gradation (); void set_remesh_gradation ( double gradation ); bool get_skip_grooming (); void set_skip_grooming ( bool skip ); void restore_defaults (); // constants const static std :: string GROOM_SMOOTH_VTK_LAPLACIAN_C ; const static std :: string GROOM_SMOOTH_VTK_WINDOWED_SINC_C ; const static std :: string GROOM_ALIGNMENT_CENTER_C ; const static std :: string GROOM_ALIGNMENT_ICP_C ; const static std :: string GROOM_ALIGNMENT_LANDMARK_C ; private : Parameters params_ ; ProjectHandle project_ ; std :: string domain_name_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GroomTool_8h.html","text":"Studio/Groom/GroomTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroomTool Source code #pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#studiogroomgroomtoolh","text":"","title":"Studio/Groom/GroomTool.h"},{"location":"api/Files/GroomTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroomTool_8h.html#classes","text":"Name class shapeworks::GroomTool","title":"Classes"},{"location":"api/Files/GroomTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class Ui_GroomTool ; Q_DECLARE_METATYPE ( std :: string ) namespace shapeworks { class Session ; class ShapeWorksStudioApp ; class GroomTool : public QWidget { Q_OBJECT ; public : GroomTool ( Preferences & prefs , Telemetry & telemetry ); ~ GroomTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void disable_actions (); void enable_actions (); void shutdown_threads (); Q_SIGNALS : void groom_start (); void groom_complete (); void progress ( int ); public Q_SLOTS : void on_antialias_checkbox_stateChanged ( int state ); void on_blur_checkbox_stateChanged ( int state ); void on_autopad_checkbox_stateChanged ( int state ); void skip_grooming_toggled (); void on_restore_defaults_clicked (); void update_ui (); void domain_changed (); void alignment_checkbox_changed ( int state ); void alignment_option_changed ( int index ); void reflect_checkbox_changed ( int state ); void reflect_column_changed ( int index ); void reflect_choice_changed ( int index ); void reflect_axis_changed ( int index ); void on_run_groom_button_clicked (); void handle_thread_complete (); void handle_progress ( int val ); void handle_error ( QString msg ); private : void set_ui_from_params ( GroomParameters params ); void update_page (); void update_domain_box (); void apply_to_all_domains_changed (); void update_reflect_columns (); void update_reflect_choices (); Preferences & preferences_ ; Telemetry & telemetry_ ; QList < QThread *> threads_ ; Ui_GroomTool * ui_ ; QSharedPointer < Session > session_ ; QSharedPointer < shapeworks :: Groom > groom_ ; QElapsedTimer timer_ ; bool groom_is_running_ = false ; std :: string current_domain_ ; QStringList reflect_columns_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Groom_8h.html","text":"Libs/Groom/Groom.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Groom High level groom API. Source code #pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#libsgroomgroomh","text":"","title":"Libs/Groom/Groom.h"},{"location":"api/Files/Groom_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Groom_8h.html#classes","text":"Name class shapeworks::Groom High level groom API.","title":"Classes"},{"location":"api/Files/Groom_8h.html#source-code","text":"#pragma once #include \"GroomParameters.h\" #include #include namespace shapeworks { class Groom { public : Groom ( ProjectHandle project ); bool run (); void abort (); bool get_aborted (); static double compute_landmark_distance ( vtkSmartPointer < vtkPoints > one , vtkSmartPointer < vtkPoints > two ); static vtkSmartPointer < vtkMatrix4x4 > compute_landmark_transform ( vtkSmartPointer < vtkPoints > source , vtkSmartPointer < vtkPoints > target ); protected : std :: atomic < float > progress_ = 0 ; std :: atomic < int > total_ops_ = 0 ; std :: atomic < int > progress_counter_ = 0 ; private : int get_total_ops (); void increment_progress ( int amount = 1 ); bool image_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_image_pipeline ( Image & image , GroomParameters params ); bool mesh_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); bool run_mesh_pipeline ( Mesh & mesh , GroomParameters params ); bool contour_pipeline ( std :: shared_ptr < Subject > subject , size_t domain ); std :: string get_output_filename ( std :: string input , DomainType domain_type ); bool run_alignment (); void assign_transforms ( std :: vector < std :: vector < double >> transforms , int domain , bool global = false ); static std :: vector < std :: vector < double >> get_icp_transforms ( const std :: vector < Mesh > meshes , size_t reference ); static std :: vector < std :: vector < double >> get_landmark_transforms ( const std :: vector < vtkSmartPointer < vtkPoints >> landmarks , size_t reference ); static std :: vector < double > get_identity_transform (); static void add_reflect_transform ( vtkSmartPointer < vtkTransform > transform , const std :: string & reflect_axis ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Image & image ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , const Mesh & mesh ); static void add_center_transform ( vtkSmartPointer < vtkTransform > transform , vtkSmartPointer < vtkPoints > points ); std :: vector < vtkSmartPointer < vtkPoints >> get_combined_points (); Mesh get_mesh ( int subject , int domain ); vtkSmartPointer < vtkPoints > get_landmarks ( int subject , int domain ); int find_reference_landmarks ( std :: vector < vtkSmartPointer < vtkPoints >> landmarks ); void fix_origin ( Image & image ); bool verbose_ = false ; ProjectHandle project_ ; bool abort_ = false ; std :: mutex mutex_ ; std :: set < std :: string > used_names_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/GroupPvalueJob_8h.html","text":"Studio/Job/GroupPvalueJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::GroupPvalueJob Source code #pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#studiojobgrouppvaluejobh","text":"","title":"Studio/Job/GroupPvalueJob.h"},{"location":"api/Files/GroupPvalueJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/GroupPvalueJob_8h.html#classes","text":"Name class shapeworks::GroupPvalueJob","title":"Classes"},{"location":"api/Files/GroupPvalueJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class GroupPvalueJob : public Job { Q_OBJECT public : GroupPvalueJob ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); private : ParticleShapeStatistics stats_ ; Eigen :: VectorXf group_pvalues_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithCurvature_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithCurvature.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithCurvature Source code #pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#libsoptimizedomainimagedomainwithcurvatureh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithCurvature.h"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#classes","text":"Name class shapeworks::ImageDomainWithCurvature","title":"Classes"},{"location":"api/Files/ImageDomainWithCurvature_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradN.h\" #include \"Logging.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkImageRegionIterator.h\" #include \"itkImageRegionIteratorWithIndex.h\" namespace shapeworks { template < class T > class ImageDomainWithCurvature : public ImageDomainWithGradN < T > { public : typedef ImageDomainWithGradN < T > Superclass ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: VnlMatrixType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { // Computes partial derivatives in parent class Superclass :: SetImage ( I , narrow_band ); m_VDBCurvature = openvdb :: tools :: meanCurvature ( * this -> GetVDBImage ()); this -> ComputeSurfaceStatistics ( I ); } double GetCurvature ( const PointType & p , int idx ) const override { if ( this -> m_FixedDomain ) { return 0 ; } const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBCurvature -> tree (), coord ); } inline double GetSurfaceMeanCurvature () const override { return m_SurfaceMeanCurvature ; } inline double GetSurfaceStdDevCurvature () const override { return m_SurfaceStdDevCurvature ; } protected : ImageDomainWithCurvature () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBCurvature -> activeVoxelCount () << std :: endl ; } virtual ~ ImageDomainWithCurvature (){}; private : openvdb :: FloatGrid :: Ptr m_VDBCurvature ; // Cache surface statistics double m_SurfaceMeanCurvature ; double m_SurfaceStdDevCurvature ; void ComputeSurfaceStatistics ( ImageType * I ) { // TODO: This computation is copied from itkParticleMeanCurvatureAttribute // Since the entire Image is not available after the initial load, its simplest // to calculate it now. But it should be a part of itkParticleMeanCurvatureAttribute // Loop through a zero crossing image, project all the zero crossing points // to the surface, and use those points to comput curvature stats. typedef itk :: ZeroCrossingImageFilter < ImageType , ImageType > ZeroCrossingImageFilterType ; typename ZeroCrossingImageFilterType :: Pointer zc = ZeroCrossingImageFilterType :: New (); zc -> SetInput ( I ); zc -> Update (); itk :: ImageRegionConstIteratorWithIndex < ImageType > it ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); std :: vector < double > datalist ; m_SurfaceMeanCurvature = 0.0 ; m_SurfaceStdDevCurvature = 0.0 ; for (; ! it . IsAtEnd (); ++ it ) { if ( it . Get () == 1.0 ) { // Find closest pixel location to surface. PointType pos ; // dynamic_cast(system->GetDomain(d))->GetImage()->TransformIndexToPhysicalPoint(it.GetIndex(), pos); I -> TransformIndexToPhysicalPoint ( it . GetIndex (), pos ); // Project point to surface. // Make sure constraints are enabled // bool c = domain->GetConstraintsEnabled(); // domain->EnableConstraints(); this -> ApplyConstraints ( pos ); // domain->SetConstraintsEnabled(c); // Compute curvature at point. // std::cout << \"pos : \" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << std::endl; double mc = this -> GetCurvature ( pos , -1 ); m_SurfaceMeanCurvature += mc ; datalist . push_back ( mc ); } } double n = static_cast < double > ( datalist . size ()); m_SurfaceMeanCurvature /= n ; // Compute std deviation using point list for ( unsigned int i = 0 ; i < datalist . size (); i ++ ) { m_SurfaceStdDevCurvature += ( datalist [ i ] - m_SurfaceMeanCurvature ) * ( datalist [ i ] - m_SurfaceMeanCurvature ); } m_SurfaceStdDevCurvature = sqrt ( m_SurfaceStdDevCurvature / ( n - 1 )); } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradN_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradN.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradN Source code #pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#libsoptimizedomainimagedomainwithgradnh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradN.h"},{"location":"api/Files/ImageDomainWithGradN_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradN_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradN","title":"Classes"},{"location":"api/Files/ImageDomainWithGradN_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithGradients.h\" #include \"itkDerivativeImageFilter.h\" #include \"itkDiscreteGaussianImageFilter.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" #include \"vnl/vnl_matrix_fixed.h\" namespace shapeworks { template < class T > class ImageDomainWithGradN : public ImageDomainWithGradients < T > { public : typedef ImageDomainWithGradients < T > Superclass ; using Pointer = std :: shared_ptr < ImageDomainWithGradN > ; typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: GradNType GradNType ; typedef typename Superclass :: GradNType VnlMatrixType ; void SetImage ( ImageType * I , double narrow_band ) { Superclass :: SetImage ( I , narrow_band ); const auto grad = this -> GetVDBGradient (); // Compute the gradient of normals component-wise for ( int i = 0 ; i < 3 ; i ++ ) { auto norm_i = openvdb :: FloatGrid :: create (); norm_i -> setTransform ( this -> transform ()); auto norm_i_accessor = norm_i -> getAccessor (); for ( openvdb :: VectorGrid :: ValueOnCIter it = grad -> cbeginValueOn (); it . test (); ++ it ) { const openvdb :: Vec3f & v = * it ; norm_i_accessor . setValue ( it . getCoord (), v [ i ] / v . length ()); } m_VDBGradNorms [ i ] = openvdb :: tools :: gradient ( * norm_i ); } } // end setimage inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { const auto coord = this -> ToVDBCoord ( p ); GradNType grad_n ; for ( int i = 0 ; i < 3 ; i ++ ) { auto grad_ni = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradNorms [ i ] -> tree (), coord ); grad_n . set ( i , 0 , grad_ni [ 0 ]); grad_n . set ( i , 1 , grad_ni [ 1 ]); grad_n . set ( i , 2 , grad_ni [ 2 ]); } return grad_n ; } void DeletePartialDerivativeImages () override { for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { m_VDBGradNorms [ i ] = 0 ; } } void DeleteImages () override { Superclass :: DeleteImages (); DeletePartialDerivativeImages (); } protected : ImageDomainWithGradN () {} virtual ~ ImageDomainWithGradN (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : typename openvdb :: VectorGrid :: Ptr m_VDBGradNorms [ 3 ]; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomainWithGradients_8h.html","text":"Libs/Optimize/Domain/ImageDomainWithGradients.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomainWithGradients Source code #pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#libsoptimizedomainimagedomainwithgradientsh","text":"","title":"Libs/Optimize/Domain/ImageDomainWithGradients.h"},{"location":"api/Files/ImageDomainWithGradients_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomainWithGradients_8h.html#classes","text":"Name class shapeworks::ImageDomainWithGradients","title":"Classes"},{"location":"api/Files/ImageDomainWithGradients_8h.html#source-code","text":"#pragma once #include \"ImageDomain.h\" #include \"itkFixedArray.h\" #include \"itkGradientImageFilter.h\" #include \"itkImage.h\" #include \"itkImageDuplicator.h\" namespace shapeworks { template < class T > class ImageDomainWithGradients : public ImageDomain < T > { public : using Pointer = std :: shared_ptr < ImageDomainWithGradients < T >> ; typedef typename ImageDomain < T >:: PointType PointType ; typedef typename ImageDomain < T >:: ImageType ImageType ; typedef itk :: FixedArray < T , DIMENSION > VectorType ; typedef vnl_vector_fixed < T , DIMENSION > VnlVectorType ; void SetImage ( ImageType * I , double narrow_band ) { ImageDomain < T >:: SetImage ( I , narrow_band ); m_VDBGradient = openvdb :: tools :: gradient ( * this -> GetVDBImage ()); } inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & p , int idx ) const { return this -> SampleGradientVnl ( p , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & p , int idx ) const { vnl_vector_fixed < float , DIMENSION > grad = this -> SampleGradientVnl ( p , idx ); return grad . normalize (); } vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( vnl_vector_fixed < double , DIMENSION >& gradE , const PointType & pos , int idx ) const override { double dotprod = 0.0 ; VnlVectorType normal = this -> SampleNormalAtPoint ( pos , idx ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { dotprod += normal [ i ] * gradE [ i ]; } vnl_vector_fixed < double , DIMENSION > result ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { result [ i ] = gradE [ i ] - normal [ i ] * dotprod ; } return result ; } void DeleteImages () override { ImageDomain < T >:: DeleteImages (); m_VDBGradient = 0 ; } protected : ImageDomainWithGradients () {} virtual ~ ImageDomainWithGradients () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ImageDomain < T >:: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBGradient -> activeVoxelCount () << std :: endl ; } openvdb :: VectorGrid :: Ptr GetVDBGradient () { return m_VDBGradient ; } private : inline VnlVectorType SampleGradientVnl ( const PointType & p , int idx ) const { return VnlVectorType ( this -> SampleGradient ( p , idx ). GetDataPointer ()); } inline VectorType SampleGradient ( const PointType & p , int idx ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); const auto _v = openvdb :: tools :: BoxSampler :: sample ( m_VDBGradient -> tree (), coord ); const VectorType v ( _v . asPointer ()); // This copies 3 floats from a VDB vector to a vnl vector return v ; } else { std :: ostringstream message ; message << \"Gradient queried for a Point, \" << p << \", outside the given image domain.\" ; throw std :: runtime_error ( message . str ()); } } openvdb :: VectorGrid :: Ptr m_VDBGradient ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageDomain_8h.html","text":"Libs/Optimize/Domain/ImageDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageDomain Source code #pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#libsoptimizedomainimagedomainh","text":"","title":"Libs/Optimize/Domain/ImageDomain.h"},{"location":"api/Files/ImageDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageDomain_8h.html#classes","text":"Name class shapeworks::ImageDomain","title":"Classes"},{"location":"api/Files/ImageDomain_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"ParticleRegionDomain.h\" // we have to undef foreach here because both Qt and OpenVDB define foreach #undef foreach #ifndef Q_MOC_RUN #include #include #include #include #include #include #endif namespace shapeworks { template < class T > class ImageDomain : public ParticleRegionDomain { public : using Pointer = std :: shared_ptr < ImageDomain > ; using ImageType = itk :: Image < T , DIMENSION > ; using PointType = ParticleRegionDomain :: PointType ; void SetImage ( ImageType * I , double narrow_band ) { this -> m_FixedDomain = false ; // this->Modified(); openvdb :: initialize (); // It is safe to initialize multiple times. // Set a large background value, so that we quickly catch particles outside or on the edge the narrow band. // (Downside: its more difficult to display the correct location of the point of failure.) m_VDBImage = openvdb :: FloatGrid :: create ( 1e8 ); m_VDBImage -> setGridClass ( openvdb :: GRID_LEVEL_SET ); auto vdbAccessor = m_VDBImage -> getAccessor (); // Save properties of the Image needed for the optimizer m_Size = I -> GetRequestedRegion (). GetSize (); m_Spacing = I -> GetSpacing (); m_Origin = I -> GetOrigin (); m_Index = I -> GetRequestedRegion (). GetIndex (); // Transformation from index space to world space openvdb :: math :: Mat4f mat ; mat . setIdentity (); mat . postScale ( openvdb :: Vec3f ( m_Spacing [ 0 ], m_Spacing [ 1 ], m_Spacing [ 2 ])); mat . postTranslate ( openvdb :: Vec3f ( m_Origin [ 0 ], m_Origin [ 1 ], m_Origin [ 2 ])); const auto xform = openvdb :: math :: Transform :: createLinearTransform ( mat ); m_VDBImage -> setTransform ( xform ); itk :: ImageRegionIterator < ImageType > it ( I , I -> GetRequestedRegion ()); it . GoToBegin (); while ( ! it . IsAtEnd ()) { const auto idx = it . GetIndex (); const auto pixel = it . Get (); if ( abs ( pixel ) > narrow_band ) { ++ it ; continue ; } const auto coord = openvdb :: Coord ( idx [ 0 ], idx [ 1 ], idx [ 2 ]); vdbAccessor . setValue ( coord , pixel ); ++ it ; } typename ImageType :: PointType l0 ; I -> TransformIndexToPhysicalPoint ( m_Index , l0 ); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) m_Index [ i ] += m_Size [ i ] - 1 ; typename ImageType :: PointType u0 ; I -> TransformIndexToPhysicalPoint ( m_Index , u0 ); // Cast points to higher precision if needed. Parent class uses doubles // because they are compared directly with points in the particle system, // which are always double precision. PointType l ; PointType u ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { l [ i ] = static_cast < double > ( l0 [ i ]); u [ i ] = static_cast < double > ( u0 [ i ]); } this -> SetLowerBound ( l ); this -> SetUpperBound ( u ); // Precompute and save values that are used in parts of the optimizer this -> SetupImageForCrossingPointUpdate ( I ); // this->UpdateZeroCrossingPoint(I); this -> UpdateSurfaceArea ( I ); } inline double GetSurfaceArea () const override { throw std :: runtime_error ( \"Surface area is not computed currently.\" ); return m_SurfaceArea ; } inline PointType GetOrigin () const { return m_Origin ; } inline typename ImageType :: SizeType GetSize () const { return m_Size ; } inline typename ImageType :: SpacingType GetSpacing () const { return m_Spacing ; } inline typename ImageType :: RegionType :: IndexType GetIndex () const { return m_Index ; } inline PointType GetValidLocationNear ( PointType p ) const override { // todo why is this function ignoring the argument? Also see Optimize::AddSinglePoint return m_ZeroCrossingPoint ; } inline T Sample ( const PointType & p ) const { if ( this -> IsInsideBuffer ( p )) { const auto coord = this -> ToVDBCoord ( p ); return openvdb :: tools :: BoxSampler :: sample ( m_VDBImage -> tree (), coord ); } else { std :: ostringstream message ; message << \"Domain \" << m_DomainID << \": \" << m_DomainName << \" : Distance transform queried for a Point, \" << p << \", outside the given image domain. Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } } inline double GetMaxDiameter () const override { double bestRadius = 0 ; double maxdim = 0 ; for ( unsigned int i = 0 ; i < ImageType :: ImageDimension ; i ++ ) { if ( GetSize ()[ i ] > maxdim ) { maxdim = GetSize ()[ i ]; bestRadius = maxdim * GetSpacing ()[ i ]; } } return bestRadius ; } void DeleteImages () override { m_VDBImage = 0 ; } // Updates zero crossing points. Raster scans candidate zero crossing points, and finds one that does not violate any // constraints. void UpdateZeroCrossingPoint () override { for ( size_t i = 0 ; i < m_possible_zero_crossings . size (); i ++ ) { this -> m_ZeroCrossingPoint = m_possible_zero_crossings [ i ]; if ( ! this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { // std::cout << \"Chosen initial point \" << this->m_ZeroCrossingPoint << std::endl; break ; } } if ( this -> GetConstraints () -> isAnyViolated ( this -> m_ZeroCrossingPoint )) { std :: cerr << \"A particle initialization violates at least one constraint. Make sure at least one point satisfies \" \"all constraints\" << std :: endl ; } } protected : openvdb :: FloatGrid :: Ptr GetVDBImage () const { return m_VDBImage ; } ImageDomain () {} virtual ~ ImageDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { ParticleRegionDomain :: PrintSelf ( os , indent ); os << indent << \"VDB Active Voxels = \" << m_VDBImage -> activeVoxelCount () << std :: endl ; } inline openvdb :: math :: Transform :: Ptr transform () const { return this -> m_VDBImage -> transformPtr (); } // Converts a coordinate from an ITK Image point in world space to the corresponding // coordinate in OpenVDB Index space. Raises an exception if the narrow band is not // sufficiently large to sample the point. inline openvdb :: Vec3R ToVDBCoord ( const PointType & p ) const { const auto worldCoord = openvdb :: Vec3R ( p [ 0 ], p [ 1 ], p [ 2 ]); const auto idxCoord = this -> transform () -> worldToIndex ( worldCoord ); // Make sure the coordinate is part of the narrow band if ( m_VDBImage -> tree (). isValueOff ( openvdb :: Coord :: round ( idxCoord ))) { // `isValueOff` requires an integer coordinate // If multiple threads crash here at the same time, the error message displayed is just \"terminate called // recursively\", which isn't helpful. So we std::cerr the error to make sure its printed to the console. std :: cerr << \"Sampled point outside the narrow band: \" << p << std :: endl ; std :: ostringstream message ; message << \"Attempt to sample at a point outside the narrow band: \" << p << \". Consider increasing the narrow band\" ; throw std :: runtime_error ( message . str ()); } return idxCoord ; } private : openvdb :: FloatGrid :: Ptr m_VDBImage ; typename ImageType :: SizeType m_Size ; typename ImageType :: SpacingType m_Spacing ; PointType m_Origin ; PointType m_ZeroCrossingPoint ; typename ImageType :: RegionType :: IndexType m_Index ; // Index defining the corner of the region double m_SurfaceArea ; std :: vector < PointType > m_possible_zero_crossings ; // Computes possible zero crossing points. Later on, one can find the ones that do not violate constraints. void SetupImageForCrossingPointUpdate ( ImageType * I ) { typename itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: Pointer zc = itk :: ZeroCrossingImageFilter < ImageType , ImageType >:: New (); zc -> SetInput ( I ); zc -> Update (); typename itk :: ImageRegionConstIteratorWithIndex < ImageType > zcIt ( zc -> GetOutput (), zc -> GetOutput () -> GetRequestedRegion ()); for ( zcIt . GoToReverseBegin (); ! zcIt . IsAtReverseEnd (); -- zcIt ) { if ( zcIt . Get () == 1.0 ) { PointType pos ; I -> TransformIndexToPhysicalPoint ( zcIt . GetIndex (), pos ); this -> m_ZeroCrossingPoint = pos ; m_possible_zero_crossings . push_back ( pos ); } } } void UpdateSurfaceArea ( ImageType * I ) { // TODO: This code has been copied from Optimize.cpp. It does not work /* typename itk::ImageToVTKImageFilter < ImageType > ::Pointer itk2vtkConnector; itk2vtkConnector = itk::ImageToVTKImageFilter < ImageType > ::New(); itk2vtkConnector->SetInput(I); vtkSmartPointer < vtkContourFilter > ls = vtkSmartPointer < vtkContourFilter > ::New(); ls->SetInputData(itk2vtkConnector->GetOutput()); ls->SetValue(0, 0.0); ls->Update(); vtkSmartPointer < vtkMassProperties > mp = vtkSmartPointer < vtkMassProperties > ::New(); mp->SetInputData(ls->GetOutput()); mp->Update(); m_SurfaceArea = mp->GetSurfaceArea(); */ } }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageLabel_8h.html","text":"Studio/Utils/ImageLabel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images. Source code #pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#studioutilsimagelabelh","text":"","title":"Studio/Utils/ImageLabel.h"},{"location":"api/Files/ImageLabel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageLabel_8h.html#classes","text":"Name class shapeworks::ImageLabel An extention of QLabel especially for scaled images.","title":"Classes"},{"location":"api/Files/ImageLabel_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ImageLabel : public QLabel { public : ImageLabel ( QWidget * parent ) : QLabel ( parent ) {} void setPixmap ( const QPixmap & pixmap ) { setPixmap ( pixmap , size ()); } protected : void resizeEvent ( QResizeEvent * reisze_event ) override ; private : void setPixmap ( const QPixmap & pixmap , const QSize & size ); private : QPixmap pixmap_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImageUtils_8h.html","text":"Libs/Image/ImageUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImageUtils Helper functions for image. Source code #pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#libsimageimageutilsh","text":"","title":"Libs/Image/ImageUtils.h"},{"location":"api/Files/ImageUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImageUtils_8h.html#classes","text":"Name class shapeworks::ImageUtils Helper functions for image.","title":"Classes"},{"location":"api/Files/ImageUtils_8h.html#source-code","text":"#pragma once #include \"Image.h\" #include \"ShapeworksUtils.h\" #include namespace shapeworks { class ImageUtils { public : static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , Image :: PixelType isoValue = 1.0 ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Image >>& images , Image :: PixelType isoValue = 1.0 ); using TPSTransform = itk :: ThinPlateSplineKernelTransform < double , 3 > ; static TPSTransform :: Pointer createWarpTransform ( const std :: string & source_landmarks_file , const std :: string & target_landmarks_file , const int stride = 1 ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Image_8h.html","text":"Libs/Image/Image.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Image Source code #pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#libsimageimageh","text":"","title":"Libs/Image/Image.h"},{"location":"api/Files/Image_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Image_8h.html#classes","text":"Name class shapeworks::Image","title":"Classes"},{"location":"api/Files/Image_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include \"Region.h\" #include \"Shapeworks.h\" namespace shapeworks { class Mesh ; class Image { public : enum InterpolationType { Linear , NearestNeighbor }; using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; using StatsPtr = itk :: StatisticsImageFilter < ImageType >:: Pointer ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; using InterpolatorType = itk :: LinearInterpolateImageFunction < ImageType > ; // constructors and assignment operators // Image ( const Dims dims ); Image ( const std :: string & pathname ) : itk_image_ ( read ( pathname )) {} Image ( ImageType :: Pointer imagePtr ) : itk_image_ ( imagePtr ) { if ( ! itk_image_ ) throw std :: invalid_argument ( \"null imagePtr\" ); } Image ( const vtkSmartPointer < vtkImageData > vtkImage ); Image ( Image && img ) : itk_image_ ( nullptr ) { this -> itk_image_ . Swap ( img . itk_image_ ); } Image ( const Image & img ) : itk_image_ ( cloneData ( img . itk_image_ )) {} Image & operator = ( const Image & img ); Image & operator = ( Image && img ); operator ImageType :: Pointer () { return itk_image_ ; } ImageType :: Pointer getITKImage () const { return itk_image_ ; } vtkSmartPointer < vtkImageData > getVTKImage () const ; // modification functions // Image & operator - (); Image operator + ( const Image & other ) const ; Image & operator += ( const Image & other ); Image operator - ( const Image & other ) const ; Image & operator -= ( const Image & other ); Image operator * ( const Image & other ) const ; Image operator * ( const PixelType x ) const ; Image & operator *= ( const PixelType x ); Image operator / ( const PixelType x ) const ; Image & operator /= ( const PixelType x ); Image operator + ( const PixelType x ) const ; Image & operator += ( const PixelType x ); Image operator - ( const PixelType x ) const ; Image & operator -= ( const PixelType x ); Image & antialias ( unsigned iterations = 50 , double maxRMSErr = 0.01f , int layers = 3 ); Image & recenter (); Image & resample ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & resample ( const Vector & physicalSpacing , InterpolationType interp = Linear ); Image & resample ( double isoSpacing = 1.0 , InterpolationType interp = Linear ); Image & resize ( Dims logicalDims , InterpolationType interp = Linear ); Image & pad ( int padding , PixelType value = 0.0 ); Image & pad ( int padx , int pady , int padz , PixelType value = 0.0 ); Image & pad ( IndexRegion & region , PixelType value = 0.0 ); Image & translate ( const Vector3 & v ); Image & scale ( const Vector3 & v ); Image & rotate ( const double angle , const Vector3 & axis ); Image & rotate ( const double angle , Axis axis ); TransformPtr createCenterOfMassTransform (); TransformPtr createRigidRegistrationTransform ( const Image & target_dt , float isoValue = 0.0 , unsigned iterations = 20 ); Image & applyTransform ( const TransformPtr transform , InterpolationType interp = Linear ); Image & applyTransform ( const TransformPtr transform , const Point3 origin , const Dims dims , const Vector3 spacing , const ImageType :: DirectionType direction , InterpolationType interp = NearestNeighbor ); Image & extractLabel ( const PixelType label = 1.0 ); Image & closeHoles ( const PixelType foreground = 0.0 ); Image & binarize ( PixelType minVal = 0.0 , PixelType maxVal = std :: numeric_limits < PixelType >:: max (), PixelType innerVal = 1.0 , PixelType outerVal = 0.0 ); Image & computeDT ( PixelType isoValue = 0.0 ); Image & applyCurvatureFilter ( unsigned iterations = 10 ); Image & applyGradientFilter (); Image & applySigmoidFilter ( double alpha = 10.0 , double beta = 10.0 ); Image & applyTPLevelSetFilter ( const Image & featureImage , double scaling = 20.0 ); Image & topologyPreservingSmooth ( float scaling = 20.0 , float sigmoidAlpha = 10.5 , float sigmoidBeta = 10.0 ); Image & applyIntensityFilter ( double minVal , double maxVal ); Image & gaussianBlur ( double sigma = 0.0 ); Image & crop ( PhysicalRegion region , const int padding = 0 ); Image & clip ( const Plane plane , const PixelType val = 0.0 ); Image & reflect ( const Axis & axis ); Image & setOrigin ( Point3 origin = Point3 ({ 0 , 0 , 0 })); Image & setSpacing ( Vector3 spacing ); Image & setCoordsys ( ImageType :: DirectionType coordsys ); Image & isolate (); // query functions // Dims dims () const { return itk_image_ -> GetLargestPossibleRegion (). GetSize (); } Point3 size () const { return toPoint ( spacing ()) * toPoint ( dims ()); } Vector spacing () const { return itk_image_ -> GetSpacing (); } Point3 origin () const { return itk_image_ -> GetOrigin (); } Point3 center () const { return origin () + size () / 2.0 ; } ImageType :: DirectionType coordsys () const { return itk_image_ -> GetDirection (); }; Point3 centerOfMass ( PixelType minVal = 0.0 , PixelType maxVal = 1.0 ) const ; PixelType min (); PixelType max (); PixelType mean (); PixelType std (); IndexRegion logicalBoundingBox () const ; PhysicalRegion physicalBoundingBox () const ; PhysicalRegion physicalBoundingBox ( PixelType isovalue ) const ; PhysicalRegion logicalToPhysical ( IndexRegion region ) const ; IndexRegion physicalToLogical ( PhysicalRegion region ) const ; Point3 logicalToPhysical ( const Coord & c ) const ; Coord physicalToLogical ( const Point3 & p ) const ; bool isInside ( const Point3 & p ) const ; ImageIterator iterator (); bool compare ( const Image & other , bool verifyall = true , double tolerance = 0.0 , double precision = 1e-12 ) const ; bool operator == ( const Image & other ) const { return compare ( other ); } // export functions // Image & write ( const std :: string & filename , bool compressed = true ); Mesh toMesh ( PixelType isovalue ) const ; Image :: PixelType evaluate ( Point p ); static std :: vector < std :: string > getSupportedTypes () { return { \"nrrd\" , \"nii\" , \"nii.gz\" , \"mhd\" , \"tiff\" , \"jpeg\" , \"jpg\" , \"png\" , \"dcm\" , \"ima\" }; } private : friend struct SharedCommandData ; Image () : itk_image_ ( nullptr ) { } // only for use by SharedCommandData since an Image should always be valid, never \"empty\" static ImageType :: Pointer read ( const std :: string & filename ); static ImageType :: Pointer readDICOMImage ( const std :: string & pathname ); static ImageType :: Pointer cloneData ( const ImageType :: Pointer img ); static vtkSmartPointer < vtkPolyData > getPolyData ( const Image & image , PixelType isoValue = 0.0 ); Image & pad ( Dims lowerExtendRegion , Dims upperExtendRegion , PixelType value = 0.0 ); StatsPtr statsFilter (); ImageType :: Pointer itk_image_ ; InterpolatorType :: Pointer interpolator_ ; }; std :: ostream & operator << ( std :: ostream & os , const Image & img ); template <> Image operator * ( const Image & img , const double x ); template <> Image operator / ( const Image & img , const double x ); template <> Image & operator *= ( Image & img , const double x ); template <> Image & operator /= ( Image & img , const double x ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html","text":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ImplicitSurfaceDomain Source code #pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#libsoptimizedomainimplicitsurfacedomainh","text":"","title":"Libs/Optimize/Domain/ImplicitSurfaceDomain.h"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#classes","text":"Name class shapeworks::ImplicitSurfaceDomain","title":"Classes"},{"location":"api/Files/ImplicitSurfaceDomain_8h.html#source-code","text":"#pragma once #include \"ImageDomainWithCurvature.h\" #include \"vnl/vnl_cross.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_math.h\" namespace shapeworks { template < class T > class ImplicitSurfaceDomain : public ImageDomainWithCurvature < T > { public : typedef ImageDomainWithCurvature < T > Superclass ; typedef std :: shared_ptr < ImplicitSurfaceDomain > Pointer ; typedef typename Superclass :: ImageType ImageType ; typedef typename Superclass :: PointType PointType ; virtual void SetTolerance ( const T _Tolerance ) { if ( this -> m_Tolerance != _Tolerance ) { this -> m_Tolerance = _Tolerance ; // this->Modified(); } } virtual T GetTolerance () { return this -> m_Tolerance ; } shapeworks :: DomainType GetDomainType () const override { return shapeworks :: DomainType :: Image ; } virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override { // First apply and constraints imposed by superclasses. This will // guarantee the point starts in the correct image domain. bool flag = Superclass :: ApplyConstraints ( p ); unsigned int k = 0 ; double mult = 1.0 ; const T epsilon = m_Tolerance * 0.001 ; T f = this -> Sample ( p ); T gradmag = 1.0 ; while ( fabs ( f ) > ( m_Tolerance * mult ) || gradmag < epsilon ) // while ( fabs(f) > m_Tolerance || gradmag < epsilon) { PointType p_old = p ; // vnl_vector_fixed grad = -this->SampleGradientAtPoint(p); vnl_vector_fixed < T , DIMENSION > gradf = this -> SampleGradientAtPoint ( p , idx ); vnl_vector_fixed < double , DIMENSION > grad ; grad [ 0 ] = double ( gradf [ 0 ]); grad [ 1 ] = double ( gradf [ 1 ]); grad [ 2 ] = double ( gradf [ 2 ]); gradmag = grad . magnitude (); // vnl_vector_fixed vec = grad * (f / (gradmag + epsilon)); vnl_vector_fixed < double , DIMENSION > vec = grad * ( double ( f ) / ( gradmag + double ( epsilon ))); for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { p [ i ] -= vec [ i ]; } f = this -> Sample ( p ); // Raise the tolerance if we have done too many iterations. k ++ ; if ( k > 10000 ) { mult *= 2.0 ; k = 0 ; } } // end while return flag ; }; inline PointType UpdateParticlePosition ( const PointType & point , int idx , vnl_vector_fixed < double , DIMENSION >& update ) const override { PointType newpoint ; for ( unsigned int i = 0 ; i < 3 ; i ++ ) { newpoint [ i ] = point [ i ] - update [ i ]; } ApplyConstraints ( newpoint , idx ); return newpoint ; } PointType GetZeroCrossingPoint () const override { PointType p ; // TODO Hong // Return point that doesn't violate plane constraints. return p ; } ImplicitSurfaceDomain () : m_Tolerance ( 1.0e-4 ) { } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"m_Tolerance = \" << m_Tolerance << std :: endl ; } virtual ~ ImplicitSurfaceDomain (){}; private : T m_Tolerance ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Intersect_8h.html","text":"Libs/Mesh/PreviewMeshQC/Intersect.h Classes Name struct Ray struct Intersection struct Triangle struct Quad Functions Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) Functions Documentation function IntersectTriangle bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ) function IntersectQuad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) function FastIntersectQuad bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ) Source code #pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#libsmeshpreviewmeshqcintersecth","text":"","title":"Libs/Mesh/PreviewMeshQC/Intersect.h"},{"location":"api/Files/Intersect_8h.html#classes","text":"Name struct Ray struct Intersection struct Triangle struct Quad","title":"Classes"},{"location":"api/Files/Intersect_8h.html#functions","text":"Name bool IntersectTriangle (const Ray & ray, const Triangle & tri, Intersection & q, bool evalNormal =true) bool IntersectQuad (const Ray & ray, const Quad & quad, Intersection & q) bool FastIntersectQuad (const Ray & ray, const Quad & quad, Intersection & q)","title":"Functions"},{"location":"api/Files/Intersect_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/Intersect_8h.html#function-intersecttriangle","text":"bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true )","title":"function IntersectTriangle"},{"location":"api/Files/Intersect_8h.html#function-intersectquad","text":"bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function IntersectQuad"},{"location":"api/Files/Intersect_8h.html#function-fastintersectquad","text":"bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q )","title":"function FastIntersectQuad"},{"location":"api/Files/Intersect_8h.html#source-code","text":"#pragma once #include \"math3d.h\" // tools for finding intersections struct Ray { vec3d origin ; // origin of ray vec3d direction ; // direction of ray (must be unit vector!) }; //----------------------------------------------------------------------------- struct Intersection { vec3d point ; // point of intersection float r [ 2 ]; // natural coordinates int m_index ; // index of item that was intersected (context dependent) int m_faceIndex ; // index of face that was intersected (context dependent) }; //----------------------------------------------------------------------------- struct Triangle { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d fn ; // face normal }; //----------------------------------------------------------------------------- struct Quad { vec3d r0 ; vec3d r1 ; vec3d r2 ; vec3d r3 ; }; //----------------------------------------------------------------------------- // Find intersection of a ray with a triangle // To evaluate the normal automatically, set evalNormal to true. Otherwise, the normal in Triangle is used bool IntersectTriangle ( const Ray & ray , const Triangle & tri , Intersection & q , bool evalNormal = true ); //----------------------------------------------------------------------------- // Find intersection of a ray with a quad bool IntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); bool FastIntersectQuad ( const Ray & ray , const Quad & quad , Intersection & q ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ItkToVtk_8h.html","text":"Libs/Analyze/ItkToVtk.h Functions Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer) Functions Documentation function ConnectPipelines template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter. Source code #pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#libsanalyzeitktovtkh","text":"","title":"Libs/Analyze/ItkToVtk.h"},{"location":"api/Files/ItkToVtk_8h.html#functions","text":"Name template void ConnectPipelines (ITK_Exporter exporter, VTK_Importer * importer)","title":"Functions"},{"location":"api/Files/ItkToVtk_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ItkToVtk_8h.html#function-connectpipelines","text":"template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) This function will connect the given itk::VTKImageExport filter to the given vtkImageImport filter.","title":"function ConnectPipelines"},{"location":"api/Files/ItkToVtk_8h.html#source-code","text":"#pragma once template < typename ITK_Exporter , typename VTK_Importer > void ConnectPipelines ( ITK_Exporter exporter , VTK_Importer * importer ) { importer -> SetUpdateInformationCallback ( exporter -> GetUpdateInformationCallback ()); importer -> SetPipelineModifiedCallback ( exporter -> GetPipelineModifiedCallback ()); importer -> SetWholeExtentCallback ( exporter -> GetWholeExtentCallback ()); importer -> SetSpacingCallback ( exporter -> GetSpacingCallback ()); importer -> SetOriginCallback ( exporter -> GetOriginCallback ()); importer -> SetScalarTypeCallback ( exporter -> GetScalarTypeCallback ()); importer -> SetNumberOfComponentsCallback ( exporter -> GetNumberOfComponentsCallback ()); importer -> SetPropagateUpdateExtentCallback ( exporter -> GetPropagateUpdateExtentCallback ()); importer -> SetUpdateDataCallback ( exporter -> GetUpdateDataCallback ()); importer -> SetDataExtentCallback ( exporter -> GetDataExtentCallback ()); importer -> SetBufferPointerCallback ( exporter -> GetBufferPointerCallback ()); importer -> SetCallbackUserData ( exporter -> GetCallbackUserData ()); } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Job_8h.html","text":"Studio/Job/Job.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Job Source code #pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#studiojobjobh","text":"","title":"Studio/Job/Job.h"},{"location":"api/Files/Job_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Job_8h.html#classes","text":"Name class shapeworks::Job","title":"Classes"},{"location":"api/Files/Job_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Job : public QObject { Q_OBJECT public : Job (); virtual ~ Job (); virtual void run () = 0 ; virtual QString name () = 0 ; virtual QString get_completion_message (); virtual QString get_abort_message (); void start_timer (); qint64 timer_elapsed (); void set_complete ( bool complete ) { complete_ = complete ; } bool is_complete () const { return complete_ ; } void abort () { abort_ = true ; } bool is_aborted () const { return abort_ ; } public Q_SLOTS : Q_SIGNALS : void progress ( double ); void finished (); private : std :: atomic < bool > complete_ = false ; std :: atomic < bool > abort_ = false ; QElapsedTimer timer_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/JsonProjectReader_8h.html","text":"Libs/Project/JsonProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectReader JSON file format reader for Project . Source code #pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#libsprojectjsonprojectreaderh","text":"","title":"Libs/Project/JsonProjectReader.h"},{"location":"api/Files/JsonProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectReader_8h.html#classes","text":"Name class shapeworks::JsonProjectReader JSON file format reader for Project .","title":"Classes"},{"location":"api/Files/JsonProjectReader_8h.html#source-code","text":"#pragma once #include \"ProjectReader.h\" namespace shapeworks { class JsonProjectReader : public ProjectReader { public : JsonProjectReader ( Project & project ); ~ JsonProjectReader (); bool read_project ( std :: string filename ) override ; StringMap get_parameters ( std :: string name ) override ; StringMultiMap get_multi_parameters ( std :: string name ) override ; private : // pimpl container class Container ; std :: unique_ptr < Container > container_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/JsonProjectWriter_8h.html","text":"Libs/Project/JsonProjectWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::JsonProjectWriter JSON file format writer for Project . Source code #pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#libsprojectjsonprojectwriterh","text":"","title":"Libs/Project/JsonProjectWriter.h"},{"location":"api/Files/JsonProjectWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/JsonProjectWriter_8h.html#classes","text":"Name class shapeworks::JsonProjectWriter JSON file format writer for Project .","title":"Classes"},{"location":"api/Files/JsonProjectWriter_8h.html#source-code","text":"#pragma once #include \"Project.h\" namespace shapeworks { class JsonProjectWriter { public : static bool write_project ( Project & project , std :: string filename ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/KeyboardShortcuts_8h.html","text":"Studio/Interface/KeyboardShortcuts.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::KeyboardShortcuts Source code #pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#studiointerfacekeyboardshortcutsh","text":"","title":"Studio/Interface/KeyboardShortcuts.h"},{"location":"api/Files/KeyboardShortcuts_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/KeyboardShortcuts_8h.html#classes","text":"Name class shapeworks::KeyboardShortcuts","title":"Classes"},{"location":"api/Files/KeyboardShortcuts_8h.html#source-code","text":"#pragma once // qt #include class Ui_KeyboardShortcuts ; namespace shapeworks { class KeyboardShortcuts : public QDialog { Q_OBJECT public : KeyboardShortcuts ( QWidget * parent ); virtual ~ KeyboardShortcuts (); private : Ui_KeyboardShortcuts * ui_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LandmarkItemDelegate_8h.html","text":"Studio/Data/LandmarkItemDelegate.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkItemDelegate Source code #pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#studiodatalandmarkitemdelegateh","text":"","title":"Studio/Data/LandmarkItemDelegate.h"},{"location":"api/Files/LandmarkItemDelegate_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkItemDelegate_8h.html#classes","text":"Name class shapeworks::LandmarkItemDelegate","title":"Classes"},{"location":"api/Files/LandmarkItemDelegate_8h.html#source-code","text":"#pragma once #include // Qt includes #include namespace shapeworks { class LandmarkItemDelegatePrivate ; class LandmarkTableModel ; // Delegate for editing length and note columns in measurement table. Note that only one delegate // can be set per view, so this delegate handles all custom columns in the table. class LandmarkItemDelegate : public QStyledItemDelegate { Q_OBJECT public : LandmarkItemDelegate ( QObject * parent = 0 ); void paint ( QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; QWidget * createEditor ( QWidget * parent , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void setEditorData ( QWidget * editor , const QModelIndex & index ) const override ; void setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const override ; QSize sizeHint ( const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void updateEditorGeometry ( QWidget * editor , const QStyleOptionViewItem & option , const QModelIndex & index ) const override ; void set_button_text ( std :: string button_text ); void set_model ( std :: shared_ptr < LandmarkTableModel > model ); Q_SIGNALS : void button_clicked ( int row ); private Q_SLOTS : void set_button_pressed ( int row ); void cell_entered ( QModelIndex index ); private : std :: shared_ptr < LandmarkItemDelegatePrivate > private_ ; std :: shared_ptr < LandmarkTableModel > model_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LandmarkTableModel_8h.html","text":"Studio/Data/LandmarkTableModel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkTableModel Source code #pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#studiodatalandmarktablemodelh","text":"","title":"Studio/Data/LandmarkTableModel.h"},{"location":"api/Files/LandmarkTableModel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkTableModel_8h.html#classes","text":"Name class shapeworks::LandmarkTableModel","title":"Classes"},{"location":"api/Files/LandmarkTableModel_8h.html#source-code","text":"#pragma once // QT Includes #include #include #include #include #include #include namespace shapeworks { class Project ; enum LandmarkColumns { VISIBLE_E , COLOR_E , NAME_E , POSITION_E , SET_BUTTON_E , COMMENT_E , END_E }; enum LandmarkVisibility { ALL_VISIBLE_E , NONE_VISIBLE_E , SOME_VISIBLE_E }; class LandmarkTableModel : public QAbstractTableModel { Q_OBJECT public : LandmarkTableModel ( QObject * parent = 0 ); virtual ~ LandmarkTableModel (); void set_session ( QSharedPointer < Session > session ); void store_landmarks (); void set_active_domain ( int domain ); void update_table (); void update_cells (); void remove_rows ( const std :: vector < int > & rows ); void toggle_visible (); void set_placing_landmark ( int row ); void delete_landmarks ( const QModelIndexList & list ); //------------------ QAbstractTableModel implementation ------------------ int rowCount ( const QModelIndex & index ) const override ; int columnCount ( const QModelIndex & index ) const override ; QVariant data ( const QModelIndex & index , int role ) const override ; bool setData ( const QModelIndex & index , const QVariant & value , int role ) override ; QVariant headerData ( int section , Qt :: Orientation orientation , int role ) const override ; Qt :: ItemFlags flags ( const QModelIndex & index ) const override ; public Q_SLOTS : void new_landmark (); void handle_click ( const QModelIndex & index ); void handle_double_click ( const QModelIndex & index ); void handle_header_click ( int index ); private : void update_visibility (); static void remove_eigen_row ( Eigen :: MatrixXd & matrix , unsigned int row_to_remove ); std :: shared_ptr < Project > project_ ; QSharedPointer < Session > session_ ; int visibility_ = LandmarkVisibility :: ALL_VISIBLE_E ; std :: string button_text_ = \" Place \" ; std :: vector < LandmarkDefinition > landmarks_ ; QIcon visible_ ; QIcon visible_off_ ; int active_domain_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LandmarkWidget_8h.html","text":"Studio/Visualization/LandmarkWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkWidget LandmarkWidget . Source code #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#studiovisualizationlandmarkwidgeth","text":"","title":"Studio/Visualization/LandmarkWidget.h"},{"location":"api/Files/LandmarkWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LandmarkWidget_8h.html#classes","text":"Name class shapeworks::LandmarkWidget LandmarkWidget .","title":"Classes"},{"location":"api/Files/LandmarkWidget_8h.html#source-code","text":"#include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPolyDataMapper ; class vtkPoints ; class vtkPolyData ; class vtkGlyph3D ; class vtkActor ; class vtkLookupTable ; namespace shapeworks { class Viewer ; class LandmarkCallback ; class LandmarkWidget { public : LandmarkWidget ( Viewer * viewer ); ~ LandmarkWidget (); void update_landmarks (); void store_positions (); void update_glyph_properties (); void clear_landmark_handles (); private : vtkSmartPointer < vtkHandleWidget > create_handle (); bool is_drag_mode (); bool is_glyph_mode (); void update_glyphs (); void assign_handle_to_domain ( vtkSmartPointer < vtkHandleWidget > handle , int domain_id ); Viewer * viewer_ = nullptr ; std :: vector < vtkSmartPointer < vtkHandleWidget >> handles_ ; vtkSmartPointer < vtkSphereSource > sphere_ ; vtkSmartPointer < LandmarkCallback > callback_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html","text":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyCorrespondenceFunction Source code #pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#libsoptimizefunctionlegacycorrespondencefunctionh","text":"","title":"Libs/Optimize/Function/LegacyCorrespondenceFunction.h"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#classes","text":"Name class shapeworks::LegacyCorrespondenceFunction","title":"Classes"},{"location":"api/Files/LegacyCorrespondenceFunction_8h.html#source-code","text":"#pragma once #include #include \"LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"VectorFunction.h\" namespace shapeworks { class LegacyCorrespondenceFunction : public VectorFunction { public : constexpr static unsigned int VDimension = 3 ; typedef LegacyCorrespondenceFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( LegacyCorrespondenceFunction , VectorFunction ); typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & , double & ) const ; virtual VectorType Evaluate ( unsigned int a , unsigned int b , const ParticleSystem * c , double & d ) const { double e ; return this -> Evaluate ( a , b , c , d , e ); } virtual double Energy ( unsigned int a , unsigned int b , const ParticleSystem * c ) const { double e , d ; this -> Evaluate ( a , b , c , d , e ); return e ; } void WriteModes ( const std :: string & , int ) const ; void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } virtual void BeforeIteration () { m_ShapeMatrix -> BeforeIteration (); if ( m_Counter == 0 ) { this -> ComputeCovarianceMatrix (); } } virtual void AfterIteration () { m_ShapeMatrix -> AfterIteration (); // Update the annealing parameter. if ( m_HoldMinimumVariance != true && ! m_UseMeanEnergy ) { m_Counter ++ ; if ( m_Counter >= m_RecomputeCovarianceInterval ) { m_Counter = 0 ; m_MinimumVariance *= m_MinimumVarianceDecayConstant ; } } } void SetMinimumVariance ( double d ) { m_MinimumVariance = d ; } double GetMinimumVariance () const { return m_MinimumVariance ; } void SetMinimumVarianceDecay ( double initial_value , double final_value , double time_period ) { m_MinimumVarianceDecayConstant = exp ( log ( final_value / initial_value ) / time_period ); m_MinimumVariance = initial_value ; m_HoldMinimumVariance = false ; } bool GetMinimumVarianceDecayConstant () const { return m_MinimumVarianceDecayConstant ; } void PrintShapeMatrix () { m_ShapeMatrix -> PrintMatrix (); } void UseMeanEnergy () { m_UseMeanEnergy = true ; } void UseEntropy () { m_UseMeanEnergy = false ; } bool GetHoldMinimumVariance () const { return m_HoldMinimumVariance ; } void SetHoldMinimumVariance ( bool b ) { m_HoldMinimumVariance = b ; } void SetRecomputeCovarianceInterval ( int i ) { m_RecomputeCovarianceInterval = i ; } int GetRecomputeCovarianceInterval () const { return m_RecomputeCovarianceInterval ; } virtual VectorFunction :: Pointer Clone () { LegacyCorrespondenceFunction :: Pointer copy = LegacyCorrespondenceFunction :: New (); copy -> m_PointsUpdate = this -> m_PointsUpdate ; copy -> m_MinimumVariance = this -> m_MinimumVariance ; copy -> m_MinimumEigenValue = this -> m_MinimumEigenValue ; copy -> m_CurrentEnergy = this -> m_CurrentEnergy ; copy -> m_HoldMinimumVariance = this -> m_HoldMinimumVariance ; copy -> m_MinimumVarianceDecayConstant = this -> m_MinimumVarianceDecayConstant ; copy -> m_RecomputeCovarianceInterval = this -> m_RecomputeCovarianceInterval ; copy -> m_Counter = m_Counter ; copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; copy -> m_ShapeMatrix = this -> m_ShapeMatrix ; copy -> m_InverseCovMatrix = this -> m_InverseCovMatrix ; copy -> m_points_mean = this -> m_points_mean ; copy -> m_UseMeanEnergy = this -> m_UseMeanEnergy ; return ( VectorFunction :: Pointer ) copy ; } protected : LegacyCorrespondenceFunction () { // m_MinimumVarianceBase = 1.0;//exp(log(1.0e-5)/10000.0); m_HoldMinimumVariance = true ; m_MinimumVariance = 1.0e-5 ; m_MinimumEigenValue = 0.0 ; m_MinimumVarianceDecayConstant = 1.0 ; // log(2.0) / 50000.0; m_RecomputeCovarianceInterval = 1 ; m_Counter = 0 ; m_UseMeanEnergy = true ; m_PointsUpdate = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); m_InverseCovMatrix = std :: make_shared < Eigen :: MatrixXd > ( 10 , 10 ); m_points_mean = std :: make_shared < vnl_matrix_type > ( 10 , 10 ); } virtual ~ LegacyCorrespondenceFunction () {} void operator = ( const LegacyCorrespondenceFunction & ); LegacyCorrespondenceFunction ( const LegacyCorrespondenceFunction & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; virtual void ComputeCovarianceMatrix (); std :: shared_ptr < vnl_matrix_type > m_PointsUpdate ; double m_MinimumVariance ; double m_MinimumEigenValue ; double m_CurrentEnergy ; bool m_HoldMinimumVariance ; double m_MinimumVarianceDecayConstant ; int m_RecomputeCovarianceInterval ; int m_Counter ; bool m_UseMeanEnergy ; std :: shared_ptr < vnl_matrix_type > m_points_mean ; // 3Nx3N - used for energy computation std :: shared_ptr < Eigen :: MatrixXd > m_InverseCovMatrix ; // 3NxM - used for energy computation }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LegacyMeshGenerator_8h.html","text":"Libs/Analyze/LegacyMeshGenerator.h Mesh generation. More... Classes Name class LegacyMeshGenerator Detailed Description Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code /* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#libsanalyzelegacymeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/LegacyMeshGenerator.h"},{"location":"api/Files/LegacyMeshGenerator_8h.html#classes","text":"Name class LegacyMeshGenerator","title":"Classes"},{"location":"api/Files/LegacyMeshGenerator_8h.html#detailed-description","text":"Mesh generation. The LegacyMeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/LegacyMeshGenerator_8h.html#source-code","text":"/* * Shapeworks license */ #pragma once #include \"vnl/vnl_vector.h\" #include #include #include //#include //#define SW_USE_POWERCRUST class CustomSurfaceReconstructionFilter ; class vtkPowerCrustSurfaceReconstruction ; class vtkContourFilter ; class vtkReverseSense ; class vtkSmoothPolyDataFilter ; class vtkPolyDataNormals ; class vtkPoints ; class vtkPolyData ; class vtkTriangleFilter ; class vtkWindowedSincPolyDataFilter ; class vtkPolyDataToImageData ; class LegacyMeshGenerator { public : LegacyMeshGenerator (); ~ LegacyMeshGenerator (); void setNeighborhoodSize ( int size ); void setSampleSpacing ( double spacing ); void setUsePowerCrust ( bool enabled ); void setSmoothingAmount ( float amount ); // 0-100 vtkSmartPointer < vtkPolyData > buildMesh ( const Eigen :: VectorXd & shape ); //void set_surface_reconstructor(QSharedPointer reconstructor); private : void updatePipeline (); vtkSmartPointer < CustomSurfaceReconstructionFilter > surfaceReconstruction ; vtkSmartPointer < vtkPowerCrustSurfaceReconstruction > powercrust ; vtkSmartPointer < vtkPoints > points ; vtkSmartPointer < vtkPolyData > pointSet ; vtkSmartPointer < vtkContourFilter > contourFilter ; vtkSmartPointer < vtkReverseSense > reverseSense ; vtkSmartPointer < vtkPolyDataNormals > polydataNormals ; vtkSmartPointer < vtkTriangleFilter > triangleFilter ; vtkSmartPointer < vtkWindowedSincPolyDataFilter > windowSincFilter ; vtkSmartPointer < vtkPolyDataToImageData > polydataToImageData ; bool usePowerCrust ; bool smoothingEnabled ; //QSharedPointer surface_reconstructor_; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LegacyShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LegacyShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LegacyShapeMatrix Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#libsoptimizematrixlegacyshapematrixh","text":"","title":"Libs/Optimize/Matrix/LegacyShapeMatrix.h"},{"location":"api/Files/LegacyShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LegacyShapeMatrix_8h.html#classes","text":"Name class shapeworks::LegacyShapeMatrix","title":"Classes"},{"location":"api/Files/LegacyShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class LegacyShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef LegacyShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ) itkTypeMacro ( LegacyShapeMatrix , Observer ) virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; for ( int i = 0 ; i < dom ; i ++ ) k += VDimension * ps -> GetNumberOfParticles ( i ); k += idx * VDimension ; for ( unsigned int i = 0 ; i < VDimension ; i ++ ) this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ]; } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } // For debugging purposes. void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } virtual void BeforeIteration () {} virtual void AfterIteration () {} virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } protected : LegacyShapeMatrix () : m_DomainsPerShape ( 1 ) { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ LegacyShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : LegacyShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Lightbox_8h.html","text":"Studio/Visualization/Lightbox.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Lightbox Display multiple Viewers in a tiled display. Source code #pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#studiovisualizationlightboxh","text":"","title":"Studio/Visualization/Lightbox.h"},{"location":"api/Files/Lightbox_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Lightbox_8h.html#classes","text":"Name class shapeworks::Lightbox Display multiple Viewers in a tiled display.","title":"Classes"},{"location":"api/Files/Lightbox_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include class vtkOrientationMarkerWidget ; namespace shapeworks { class StudioMesh ; class Shape ; class StudioInteractorStyle ; class StudioSliceInteractorStyle ; class Visualizer ; class Lightbox ; typedef QSharedPointer < Lightbox > LightboxHandle ; class Lightbox : public QObject { Q_OBJECT ; public : Lightbox (); ~ Lightbox (); void set_shapes ( ShapeList shapes ); ShapeList get_shapes (); void set_interactor ( vtkRenderWindowInteractor * interactor ); void set_render_window ( vtkRenderWindow * render_window ); void set_tile_layout ( int width , int height ); void setup_renderers (); int get_num_rows (); int get_num_rows_visible (); void set_start_row ( int row ); ViewerList get_viewers (); void redraw (); void handle_pick ( int * click_pos , bool one , bool ctrl ); void handle_hover ( int * click_pos ); void handle_key ( int * click_pos , std :: string key ); void handle_right_click ( int * click_pos , vtkRenderer * renderer ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_session ( QSharedPointer < Session > session ); void set_visualizer ( Visualizer * visualizer ); bool render_window_ready () { return render_window_ != NULL ; } void clear_renderers (); std :: array < double , 3 > initPos (); void handle_new_mesh (); void reset_camera (); void reset_camera_clipping_range (); void set_orientation_marker ( Preferences :: OrientationMarkerType type , Preferences :: OrientationMarkerCorner corner ); void set_orientation_marker_viewport (); void update_feature_range (); void update_interactor_style (); void set_shared_window_and_level ( double window , double level ); vtkRenderWindow * get_render_window (); public Q_SLOTS : void handle_timer_callback (); Q_SIGNALS : void right_click ( int index ); private : vtkSmartPointer < vtkOrientationMarkerWidget > create_orientation_marker (); void check_for_first_draw (); void display_shapes (); void insert_shape_into_viewer ( std :: shared_ptr < Shape > shape , int position ); int get_start_shape (); vtkSmartPointer < vtkRenderer > renderer_ ; ShapeList shapes_ ; // there is one viewer for every tile in the lightbox display ViewerList viewers_ ; vtkRenderWindow * render_window_ = nullptr ; vtkRenderWindowInteractor * interactor_ = nullptr ; vtkCamera * camera_ = nullptr ; int tile_layout_width_ = 4 ; int tile_layout_height_ = 4 ; int start_row_ = 0 ; bool first_draw_ = true ; vtkSmartPointer < StudioInteractorStyle > style_ ; vtkSmartPointer < StudioSliceInteractorStyle > slice_style_ ; Visualizer * visualizer_ { nullptr }; std :: vector < vtkSmartPointer < vtkImageData >> spinner_images_ ; QTimer loading_timer_ ; int timer_callback_count_ = 0 ; std :: array < double , 3 > initPos_ ; vtkSmartPointer < vtkOrientationMarkerWidget > orientation_marker_widget_ ; Preferences :: OrientationMarkerType current_orientation_marker_type_ = Preferences :: OrientationMarkerType :: none ; Preferences :: OrientationMarkerCorner current_orientation_marker_corner_ = Preferences :: OrientationMarkerCorner :: upper_right ; QSharedPointer < Session > session_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LinearRegressionShapeMatrix Source code #pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#libsoptimizematrixlinearregressionshapematrixh","text":"","title":"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#classes","text":"Name class shapeworks::LinearRegressionShapeMatrix","title":"Classes"},{"location":"api/Files/LinearRegressionShapeMatrix_8h.html#source-code","text":"#pragma once #include \"LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class LinearRegressionShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef LinearRegressionShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( LinearRegressionShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { // compute the mean m_MeanMatrix . set_column ( i , m_Intercept + m_Slope * m_Expl ( i )); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * 3 * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * 3 * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * 3 * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = 3 * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * 3 ) + ( idx * 3 ); for ( unsigned int i = 0 ; i < 3 ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetExplanatory ( std :: vector < double > v ) { ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples double n = static_cast < double > ( X . cols ()); vnl_vector < double > sumtx = m_Expl [ 0 ] * X . get_column ( 0 ); vnl_vector < double > sumx = X . get_column ( 0 ); double sumt = m_Expl [ 0 ]; double sumt2 = m_Expl [ 0 ] * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) // k is the sample number { sumtx += m_Expl [ k ] * X . get_column ( k ); sumx += X . get_column ( k ); sumt += m_Expl [ k ]; sumt2 += m_Expl [ k ] * m_Expl [ k ]; } m_Slope = ( n * sumtx - ( sumx * sumt )) / ( n * sumt2 - ( sumt * sumt )); vnl_vector < double > sumbt = m_Slope * m_Expl [ 0 ]; for ( unsigned int k = 1 ; k < X . cols (); k ++ ) { sumbt += m_Slope * m_Expl [ k ]; } m_Intercept = ( sumx - sumbt ) / n ; } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : LinearRegressionShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; } virtual ~ LinearRegressionShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : LinearRegressionShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/LogWindow_8h.html","text":"Studio/Interface/LogWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LogWindow Log Window. Source code #pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#studiointerfacelogwindowh","text":"","title":"Studio/Interface/LogWindow.h"},{"location":"api/Files/LogWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/LogWindow_8h.html#classes","text":"Name class shapeworks::LogWindow Log Window.","title":"Classes"},{"location":"api/Files/LogWindow_8h.html#source-code","text":"#pragma once #include #include // Forward Qt class declarations class Ui_LogWindow ; namespace shapeworks { class LogWindow : public QDialog { Q_OBJECT public : LogWindow ( QWidget * parent = 0 ); void add_message ( MessageType message_type , QString message ); private : Ui_LogWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Logging_8h.html","text":"Libs/Common/Logging.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library. Defines Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once. Macros Documentation define SW_LOG_STACK #define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro. define SW_LOG #define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro. define SW_WARN #define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro. define SW_ERROR #define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro. define SW_DEBUG #define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro. define SW_TRACE #define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = ) define SW_MESSAGE #define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro. define SW_STATUS #define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar) define SW_PROGRESS #define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ )); define SW_CLOSE_LOG #define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro. define SW_LOG_ONCE #define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once. Source code #pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#libscommonloggingh","text":"","title":"Libs/Common/Logging.h"},{"location":"api/Files/Logging_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Logging_8h.html#classes","text":"Name struct fmt::formatter< QString > class shapeworks::Logging ShapeWorks Logging Library.","title":"Classes"},{"location":"api/Files/Logging_8h.html#defines","text":"Name SW_LOG_STACK (message) Log stack macro. SW_LOG (message, ...) Log message macro. SW_WARN (message, ...) Log warning macro. SW_ERROR (message, ...) Log error macro. SW_DEBUG (message, ...) Log debug macro. SW_TRACE (x) Variable trace macro (e.g. output variable name = ) SW_MESSAGE (message, ...) Log show message macro. SW_STATUS (message, ...) Don't write to log, but set status (e.g. in the Studio statusbar) SW_PROGRESS (value, message, ...) SW_CLOSE_LOG () Close session macro. SW_LOG_ONCE (message, ...) Log once macro, will only log the message once.","title":"Defines"},{"location":"api/Files/Logging_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Logging_8h.html#define-sw_log_stack","text":"#define SW_LOG_STACK( message ) shapeworks :: Logging :: Instance (). log_stack ( message ) Log stack macro.","title":"define SW_LOG_STACK"},{"location":"api/Files/Logging_8h.html#define-sw_log","text":"#define SW_LOG( message , ... ) shapeworks :: Logging :: Instance (). log_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log message macro.","title":"define SW_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_warn","text":"#define SW_WARN( message , ... ) shapeworks :: Logging :: Instance (). log_warning ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log warning macro.","title":"define SW_WARN"},{"location":"api/Files/Logging_8h.html#define-sw_error","text":"#define SW_ERROR( message , ... ) shapeworks :: Logging :: Instance (). log_error ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log error macro.","title":"define SW_ERROR"},{"location":"api/Files/Logging_8h.html#define-sw_debug","text":"#define SW_DEBUG( message , ... ) shapeworks :: Logging :: Instance (). log_debug ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log debug macro.","title":"define SW_DEBUG"},{"location":"api/Files/Logging_8h.html#define-sw_trace","text":"#define SW_TRACE( x ) SW_DEBUG ( # x \" = {}\" , x ); Variable trace macro (e.g. output variable name = )","title":"define SW_TRACE"},{"location":"api/Files/Logging_8h.html#define-sw_message","text":"#define SW_MESSAGE( message , ... ) shapeworks :: Logging :: Instance (). show_message ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Log show message macro.","title":"define SW_MESSAGE"},{"location":"api/Files/Logging_8h.html#define-sw_status","text":"#define SW_STATUS( message , ... ) shapeworks :: Logging :: Instance (). show_status ( fmt :: format ( message , ## __VA_ARGS__ ), __LINE__ , __FILE__ ) Don't write to log, but set status (e.g. in the Studio statusbar)","title":"define SW_STATUS"},{"location":"api/Files/Logging_8h.html#define-sw_progress","text":"#define SW_PROGRESS( value , message , ... ) shapeworks :: Logging :: Instance (). show_progress ( value , fmt :: format ( message , ## __VA_ARGS__ ));","title":"define SW_PROGRESS"},{"location":"api/Files/Logging_8h.html#define-sw_close_log","text":"#define SW_CLOSE_LOG( ) shapeworks :: Logging :: Instance (). close_log (); Close session macro.","title":"define SW_CLOSE_LOG"},{"location":"api/Files/Logging_8h.html#define-sw_log_once","text":"#define SW_LOG_ONCE( message , ... ) { \\ static bool logged = false ; \\ if ( ! logged ) { \\ SW_LOG ( message , ## __VA_ARGS__ ); \\ logged = true ; \\ } \\ } Log once macro, will only log the message once.","title":"define SW_LOG_ONCE"},{"location":"api/Files/Logging_8h.html#source-code","text":"#pragma once #include #include #include template <> struct fmt :: formatter < QString > { constexpr auto parse ( format_parse_context & ctx ) -> decltype ( ctx . begin ()) { return ctx . end (); } template < typename FormatContext > auto format ( const QString & str , FormatContext & ctx ) const -> decltype ( ctx . out ()) { return fmt :: format_to ( ctx . out (), \"{}\" , qUtf8Printable ( str )); } }; namespace shapeworks { class Logging { public : static Logging & Instance (); void open_file_log ( const std :: string & filename ); bool check_log_open () const ; std :: string get_log_filename () const ; void log_message ( const std :: string & message , const int line , const char * file ) const ; void log_stack ( const std :: string & message ) const ; void log_error ( const std :: string & message , const int line , const char * file ) const ; void show_message ( const std :: string & message , const int line , const char * file ) const ; void show_status ( const std :: string & message , const int line , const char * file ) const ; void show_progress ( double value , const std :: string & message ); void log_debug ( const std :: string & message , const int line , const char * file ) const ; void log_warning ( const std :: string & message , const int line , const char * file ) const ; void close_log (); void set_error_callback ( const std :: function < void ( std :: string ) >& callback ); void set_message_callback ( const std :: function < void ( std :: string ) >& callback ); void set_warning_callback ( const std :: function < void ( std :: string ) >& callback ); void set_debug_callback ( const std :: function < void ( std :: string ) >& callback ); void set_status_callback ( const std :: function < void ( std :: string ) >& callback ); void set_progress_callback ( const std :: function < void ( double , std :: string ) >& callback ); private : Logging (); std :: string log_filename_ ; bool log_open_ = false ; std :: function < void ( std :: string ) > error_callback_ ; std :: function < void ( std :: string ) > message_callback_ ; std :: function < void ( std :: string ) > warning_callback_ ; std :: function < void ( std :: string ) > debug_callback_ ; std :: function < void ( std :: string ) > status_callback_ ; std :: function < void ( double , std :: string ) > progress_callback_ ; }; #define SW_LOG_STACK(message) shapeworks::Logging::Instance().log_stack(message) #define SW_LOG(message, ...) \\ shapeworks::Logging::Instance().log_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_WARN(message, ...) \\ shapeworks::Logging::Instance().log_warning(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_ERROR(message, ...) \\ shapeworks::Logging::Instance().log_error(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_DEBUG(message, ...) \\ shapeworks::Logging::Instance().log_debug(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_TRACE(x) SW_DEBUG(#x \" = {}\", x); #define SW_MESSAGE(message, ...) \\ shapeworks::Logging::Instance().show_message(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_STATUS(message, ...) \\ shapeworks::Logging::Instance().show_status(fmt::format(message, ##__VA_ARGS__), __LINE__, __FILE__) #define SW_PROGRESS(value, message, ...) \\ shapeworks::Logging::Instance().show_progress(value, fmt::format(message, ##__VA_ARGS__)); #define SW_CLOSE_LOG() shapeworks::Logging::Instance().close_log(); #define SW_LOG_ONCE(message, ...) \\ { \\ static bool logged = false; \\ if (!logged) { \\ SW_LOG(message, ##__VA_ARGS__); \\ logged = true; \\ } \\ } } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeanCurvatureContainer_8h.html","text":"Libs/Optimize/Container/MeanCurvatureContainer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeanCurvatureContainer Source code #pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#libsoptimizecontainermeancurvaturecontainerh","text":"","title":"Libs/Optimize/Container/MeanCurvatureContainer.h"},{"location":"api/Files/MeanCurvatureContainer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeanCurvatureContainer_8h.html#classes","text":"Name class shapeworks::MeanCurvatureContainer","title":"Classes"},{"location":"api/Files/MeanCurvatureContainer_8h.html#source-code","text":"#pragma once #include \"GenericContainer.h\" #include \"GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithCurvature.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < class TNumericType , unsigned int VDimension > class MeanCurvatureContainer : public GenericContainerArray < TNumericType > { public : typedef TNumericType NumericType ; typedef MeanCurvatureContainer Self ; typedef GenericContainerArray < TNumericType > Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector_fixed < TNumericType , VDimension > VnlVectorType ; itkNewMacro ( Self ); itkTypeMacro ( ParticleMeanCurvatureAttribute , GenericContainerArray ); void SetVerbosity ( unsigned int val ) { m_verbosity = val ; } unsigned int GetVerbosity () { return m_verbosity ; } virtual void PositionAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: PositionAddEventCallback ( o , e ); const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void PositionSetEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); this -> ComputeMeanCurvature ( ps , event . GetPositionIndex (), event . GetDomainIndex ()); } virtual void DomainAddEventCallback ( itk :: Object * o , const itk :: EventObject & e ) { Superclass :: DomainAddEventCallback ( o , e ); m_MeanCurvatureList . push_back ( 0.0 ); m_CurvatureStandardDeviationList . push_back ( 0.0 ); const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); const ParticleSystemType * ps = dynamic_cast < const ParticleSystemType *> ( o ); if ( ! ps -> GetDomainFlag ( event . GetDomainIndex ())) { this -> ComputeCurvatureStatistics ( ps , event . GetDomainIndex ()); } } inline void ComputeMeanCurvature ( const ParticleSystemType * system , unsigned int idx , unsigned int dom ) { // Get the position and index. PointType pos = system -> GetPosition ( idx , dom ); this -> operator []( dom ) -> operator []( idx ) = system -> GetDomain ( dom ) -> GetCurvature ( pos , idx ); } virtual void ComputeCurvatureStatistics ( const ParticleSystemType * , unsigned int d ); double GetMeanCurvature ( int d ) { return m_MeanCurvatureList [ d ]; } double GetCurvatureStandardDeviation ( int d ) { return m_CurvatureStandardDeviationList [ d ]; } protected : MeanCurvatureContainer () { this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . DomainAddEvent = true ; } virtual ~ MeanCurvatureContainer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MeanCurvatureContainer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < double > m_MeanCurvatureList ; std :: vector < double > m_CurvatureStandardDeviationList ; unsigned int m_verbosity ; }; } // namespace shapeworks #include \"MeanCurvatureContainer.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MemoryUsage_8h.html","text":"Libs/Optimize/Utils/MemoryUsage.h Functions Name void process_mem_usage (double & vm_usage, double & resident_set) Functions Documentation function process_mem_usage void process_mem_usage ( double & vm_usage , double & resident_set ) Source code #pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#libsoptimizeutilsmemoryusageh","text":"","title":"Libs/Optimize/Utils/MemoryUsage.h"},{"location":"api/Files/MemoryUsage_8h.html#functions","text":"Name void process_mem_usage (double & vm_usage, double & resident_set)","title":"Functions"},{"location":"api/Files/MemoryUsage_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MemoryUsage_8h.html#function-process_mem_usage","text":"void process_mem_usage ( double & vm_usage , double & resident_set )","title":"function process_mem_usage"},{"location":"api/Files/MemoryUsage_8h.html#source-code","text":"#pragma once //TODO: Figure out memory logging in Windows or get rid of this // Disabled by default because this code is *nix specific. // #define LOG_MEMORY_USAGE void process_mem_usage ( double & vm_usage , double & resident_set ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshCache_8h.html","text":"Libs/Analyze/MeshCache.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshCache Thread safe cache for meshes index by shape. Source code #pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#libsanalyzemeshcacheh","text":"","title":"Libs/Analyze/MeshCache.h"},{"location":"api/Files/MeshCache_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshCache_8h.html#classes","text":"Name class shapeworks::MeshCache Thread safe cache for meshes index by shape.","title":"Classes"},{"location":"api/Files/MeshCache_8h.html#source-code","text":"#pragma once #include \"MeshWorkQueue.h\" #include \"StudioMesh.h\" // qt #include // std #include #include namespace shapeworks { // mesh cache type using CacheMap = std :: map < MeshWorkItem , MeshHandle > ; // LRU list using CacheList = std :: list < MeshWorkItem > ; class MeshCache { public : MeshCache (); void set_cache_enabled ( bool enabled ) { cache_enabled_ = enabled ; } void set_memory_percent ( int percent ) { cache_memory_percent_ = percent ; } MeshHandle get_mesh ( const MeshWorkItem & vector ); void insert_mesh ( const MeshWorkItem & item , MeshHandle mesh ); void clear (); private : void freeSpaceForAmount ( size_t allocation ); static long long get_total_physical_memory (); static long long get_total_addressable_memory (); static long long get_total_addressable_physical_memory (); // mesh cache CacheMap mesh_cache_ ; // lrc list CacheList cache_list_ ; // size of memory in use by the cache size_t current_memory_size_ = 0 ; // maximum memory long long max_memory_ = 0 ; // for concurrent access QMutex mutex_ ; bool cache_enabled_ = true ; int cache_memory_percent_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshComputeThickness_8h.html","text":"Libs/Mesh/MeshComputeThickness.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::mesh Source code #pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#libsmeshmeshcomputethicknessh","text":"","title":"Libs/Mesh/MeshComputeThickness.h"},{"location":"api/Files/MeshComputeThickness_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::mesh","title":"Namespaces"},{"location":"api/Files/MeshComputeThickness_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks :: mesh { void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ); } // namespace shapeworks::mesh Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshDomain_8h.html","text":"Libs/Optimize/Domain/MeshDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshDomain Source code #pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#libsoptimizedomainmeshdomainh","text":"","title":"Libs/Optimize/Domain/MeshDomain.h"},{"location":"api/Files/MeshDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshDomain_8h.html#classes","text":"Name class shapeworks::MeshDomain","title":"Classes"},{"location":"api/Files/MeshDomain_8h.html#source-code","text":"#pragma once #include #include \"MeshWrapper.h\" #include \"ParticleDomain.h\" namespace shapeworks { class MeshDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < MeshDomain > ; DomainType GetDomainType () const override { return DomainType :: Mesh ; } bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const override ; bool ApplyVectorConstraints ( VectorDoubleType & gradE , const PointType & pos ) const ; VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const override ; PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const override ; virtual void InvalidateParticlePosition ( int idx ) const override ; double GetCurvature ( const PointType & p , int idx ) const override { // TODO Why not return the actual curvature return GetSurfaceMeanCurvature (); } inline double GetSurfaceMeanCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.15 ; } inline double GetSurfaceStdDevCurvature () const override { // This function is used by MeanCurvatureAttribute which is used for good/bad assessment // These arbitrary values should eventually be replaced with actual computation return 0.02 ; } const PointType & GetLowerBound () const override { return mesh_wrapper_ -> GetMeshLowerBound (); } const PointType & GetUpperBound () const override { return mesh_wrapper_ -> GetMeshUpperBound (); } PointType GetZeroCrossingPoint () const override { // TODO Hong // Apply constraints somehow if ( mesh_wrapper_ == nullptr ) { // Fixed domain. Unsure if this is the correct thing to do, but it preserves existing behaviour. PointType p ; p [ 0 ] = p [ 1 ] = p [ 2 ] = 0 ; return p ; } return mesh_wrapper_ -> GetPointOnMesh (); } PointType GetValidLocationNear ( PointType p ) const override { PointType valid ; valid [ 0 ] = p [ 0 ]; valid [ 1 ] = p [ 1 ]; valid [ 2 ] = p [ 2 ]; ApplyConstraints ( valid , -1 ); return valid ; } double GetSurfaceArea () const override { // TODO return actual surface area return 0 ; } double GetMaxDiameter () const override ; inline vnl_vector_fixed < float , DIMENSION > SampleGradientAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( const PointType & point , int idx ) const override { return mesh_wrapper_ -> SampleNormalAtPoint ( point , idx ); } inline GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const override { return mesh_wrapper_ -> SampleGradNAtPoint ( p , idx ); } inline double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , vnl_vector_fixed < double , DIMENSION > * out_grad = nullptr ) const override { return mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b , out_grad ); } inline double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const override { double dist = mesh_wrapper_ -> ComputeDistance ( a , idx_a , b , idx_b ); return dist * dist ; } inline bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const override { return mesh_wrapper_ -> IsWithinDistance ( a , idx_a , b , idx_b , test_dist , dist ); } void DeleteImages () override { // TODO Change this to a generic delete function } void DeletePartialDerivativeImages () override { // TODO Change this to a generic delete function } void SetMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh_ ) { m_FixedDomain = false ; mesh_wrapper_ = mesh_ ; sw_mesh_ = std :: make_shared < Mesh > ( mesh_wrapper_ -> GetPolydata ()); } std :: shared_ptr < Mesh > GetSWMesh () const { return sw_mesh_ ; } void UpdateZeroCrossingPoint () override {} private : std :: shared_ptr < MeshWrapper > mesh_wrapper_ ; std :: shared_ptr < Mesh > sw_mesh_ ; PointType zero_crossing_point_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshGenerator_8h.html","text":"Libs/Analyze/MeshGenerator.h Mesh generation. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator Detailed Description Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points). Source code #pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#libsanalyzemeshgeneratorh","text":"Mesh generation. More...","title":"Libs/Analyze/MeshGenerator.h"},{"location":"api/Files/MeshGenerator_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGenerator_8h.html#classes","text":"Name class shapeworks::MeshReconstructors class shapeworks::MeshGenerator","title":"Classes"},{"location":"api/Files/MeshGenerator_8h.html#detailed-description","text":"Mesh generation. The MeshGenerator performs the actual work of reconstructing a mesh from a shape (list of points).","title":"Detailed Description"},{"location":"api/Files/MeshGenerator_8h.html#source-code","text":"#pragma once #include #include \"vnl/vnl_vector.h\" #include \"StudioMesh.h\" #include \"MeshWorkQueue.h\" class SurfaceReconstructor ; namespace shapeworks { class QMeshWarper ; class MeshReconstructors { public : std :: vector < std :: shared_ptr < SurfaceReconstructor >> surface_reconstructors_ ; std :: vector < std :: shared_ptr < QMeshWarper >> mesh_warpers_ ; }; class MeshGenerator { public : MeshGenerator (); ~ MeshGenerator (); MeshHandle build_mesh ( const MeshWorkItem & item ); MeshHandle build_mesh_from_points ( const Eigen :: VectorXd & shape , int domain ); MeshHandle build_mesh_from_image ( ImageType :: Pointer image , float iso_value = 0.0001 ); MeshHandle build_mesh_from_file ( std :: string filename , float iso_value = 0.0001 ); void set_mesh_reconstructors ( std :: shared_ptr < MeshReconstructors > reconstructors ); void set_reconstruction_method ( std :: string method ); std :: string get_reconstruction_method (); static const std :: string RECONSTRUCTION_LEGACY_C ; static const std :: string RECONSTRUCTION_DISTANCE_TRANSFORM_C ; static const std :: string RECONSTRUCTION_MESH_WARPER_C ; private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); std :: string reconstruction_method_ = RECONSTRUCTION_MESH_WARPER_C ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshGeoEntry_8h.html","text":"Libs/Optimize/Domain/MeshGeoEntry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::MeshGeoEntry Source code #pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#libsoptimizedomainmeshgeoentryh","text":"","title":"Libs/Optimize/Domain/MeshGeoEntry.h"},{"location":"api/Files/MeshGeoEntry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGeoEntry_8h.html#classes","text":"Name struct shapeworks::MeshGeoEntry","title":"Classes"},{"location":"api/Files/MeshGeoEntry_8h.html#source-code","text":"#pragma once #include \"robin_hood.h\" #include namespace shapeworks { struct MeshGeoEntry { // in \"Full\" mode, the entry contains geodesics to every vertex. Access via `data_full` // in \"Partial\" mode, the entry only contains geodesics upto max_dist. Access via `data_partial` enum Mode { Full , Partial , }; Mode mode { Mode :: Partial }; double max_dist { 0.0 }; robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > data_partial ; std :: array < Eigen :: VectorXd , 3 > data_full ; void clear () { mode = Mode :: Partial ; max_dist = 0.0 ; // calling `data_partial.clear()` doesn't free the backing memory, so we have to swap to an empty robin_hood :: unordered_flat_map < int , Eigen :: Vector3d > new_data_partial ; std :: swap ( new_data_partial , data_partial ); data_full [ 0 ]. resize ( 0 ); data_full [ 1 ]. resize ( 0 ); data_full [ 2 ]. resize ( 0 ); } bool is_full_mode () const { return mode == Mode :: Full ; } void update_max_dist () { assert ( is_full_mode ()); // the caller most likely has a more efficient way to compute this if partial mode const auto max0 = data_full [ 0 ]. maxCoeff (); const auto max1 = data_full [ 1 ]. maxCoeff (); const auto max2 = data_full [ 2 ]. maxCoeff (); max_dist = std :: max ({ max0 , max1 , max2 }); } bool has_entry ( int target ) { return is_full_mode () || data_partial . find ( target ) != data_partial . end (); } }; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshGroup_8h.html","text":"Libs/Analyze/MeshGroup.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshGroup Representation of a group of meshes. Source code #pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#libsanalyzemeshgrouph","text":"","title":"Libs/Analyze/MeshGroup.h"},{"location":"api/Files/MeshGroup_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshGroup_8h.html#classes","text":"Name class shapeworks::MeshGroup Representation of a group of meshes.","title":"Classes"},{"location":"api/Files/MeshGroup_8h.html#source-code","text":"#pragma once #include \"StudioMesh.h\" namespace shapeworks { class MeshGroup { public : MeshGroup (); MeshGroup ( unsigned long num_meshes ); ~ MeshGroup (); void set_number_of_meshes ( int n ); bool valid (); void set_mesh ( int i , MeshHandle mesh ); MeshList & meshes (); vtkSmartPointer < vtkPolyData > get_combined_poly_data (); private : MeshList meshes_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshManager_8h.html","text":"Libs/Analyze/MeshManager.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshManager Class to manage meshes. Source code #pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#libsanalyzemeshmanagerh","text":"","title":"Libs/Analyze/MeshManager.h"},{"location":"api/Files/MeshManager_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshManager_8h.html#classes","text":"Name class shapeworks::MeshManager Class to manage meshes.","title":"Classes"},{"location":"api/Files/MeshManager_8h.html#source-code","text":"#pragma once #include \"MeshCache.h\" #include \"MeshGenerator.h\" #include \"MeshWorkQueue.h\" #include \"MeshWorker.h\" #include #include #include class SurfaceReconstructor ; namespace shapeworks { class MeshWarper ; class MeshManager : public QObject { Q_OBJECT public : MeshManager (); ~ MeshManager (); void set_cache_enabled ( bool enabled ); void set_cache_memory_percent ( int percent ); void set_parallel_enabled ( bool enabled ) { parallel_enabled_ = enabled ; } void set_num_threads ( int num_threads ) { num_threads_ = num_threads ; } void generate_mesh ( const MeshWorkItem item ); MeshHandle get_mesh ( const MeshWorkItem & item , bool wait = false ); MeshHandle get_mesh ( const Eigen :: VectorXd & points , int domain , bool wait = false ); std :: shared_ptr < SurfaceReconstructor > get_surface_reconstructor ( int domain ); std :: shared_ptr < MeshWarper > get_mesh_warper ( int domain ); std :: shared_ptr < MeshGenerator > get_mesh_generator () { return this -> mesh_generator_ ; } void clear_cache (); public Q_SLOTS : void handle_thread_complete ( const MeshWorkItem & item , MeshHandle mesh ); void handle_warper_progress (); Q_SIGNALS : void new_mesh (); void error_encountered ( QString message ); void progress ( int ); void status ( std :: string ); private : std :: shared_ptr < MeshReconstructors > reconstructors_ = std :: make_shared < MeshReconstructors > (); void check_error_status ( MeshHandle mesh ); // cache of shape meshes MeshCache mesh_cache_ ; // the mesh generator std :: shared_ptr < MeshGenerator > mesh_generator_ = std :: make_shared < MeshGenerator > (); // queue of meshes to build MeshWorkQueue work_queue_ ; QThreadPool thread_pool_ ; bool cache_enabled_ = true ; bool parallel_enabled_ = true ; int num_threads_ = 1 ; bool error_emitted_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshSettings_8h.html","text":"Studio/Data/MeshSettings.h Classes Name class MeshSettings Settings for creating a mesh. Types Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle Types Documentation typedef MeshSettingsHandle typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; Source code #pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#studiodatameshsettingsh","text":"","title":"Studio/Data/MeshSettings.h"},{"location":"api/Files/MeshSettings_8h.html#classes","text":"Name class MeshSettings Settings for creating a mesh.","title":"Classes"},{"location":"api/Files/MeshSettings_8h.html#types","text":"Name typedef QSharedPointer< MeshSettings > MeshSettingsHandle","title":"Types"},{"location":"api/Files/MeshSettings_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/MeshSettings_8h.html#typedef-meshsettingshandle","text":"typedef QSharedPointer < MeshSettings > MeshSettingsHandle ;","title":"typedef MeshSettingsHandle"},{"location":"api/Files/MeshSettings_8h.html#source-code","text":"#pragma once #include #include #include #include #include class MeshSettings ; typedef QSharedPointer < MeshSettings > MeshSettingsHandle ; class MeshSettings { public : MeshSettings (); ~ MeshSettings (); private : }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshSlice_8h.html","text":"Studio/Visualization/MeshSlice.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshSlice MeshSlice . Source code #pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#studiovisualizationmeshsliceh","text":"","title":"Studio/Visualization/MeshSlice.h"},{"location":"api/Files/MeshSlice_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshSlice_8h.html#classes","text":"Name class shapeworks::MeshSlice MeshSlice .","title":"Classes"},{"location":"api/Files/MeshSlice_8h.html#source-code","text":"#pragma once #include class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; namespace shapeworks { class Viewer ; class MeshSlice { public : MeshSlice ( Viewer * viewer ); void set_volume ( vtkSmartPointer < vtkImageData > volume ); bool is_image_loaded (); void update_renderer (); void update_camera (); void handle_key ( std :: string key ); private : Viewer * viewer_ ; vtkSmartPointer < vtkImageSlice > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; vtkSmartPointer < vtkImageData > volume_ ; int image_slice_number_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshUtils_8h.html","text":"Libs/Mesh/MeshUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshUtils Source code #pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#libsmeshmeshutilsh","text":"","title":"Libs/Mesh/MeshUtils.h"},{"location":"api/Files/MeshUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshUtils_8h.html#classes","text":"Name class shapeworks::MeshUtils","title":"Classes"},{"location":"api/Files/MeshUtils_8h.html#source-code","text":"#pragma once #include \"ShapeworksUtils.h\" #include \"Mesh.h\" #include \"Eigen/Core\" #include \"Eigen/Dense\" class vtkActor ; namespace shapeworks { class MeshUtils { public : static const vtkSmartPointer < vtkMatrix4x4 > createICPTransform ( const Mesh source , const Mesh target , Mesh :: AlignmentType align , const unsigned iterations = 20 , bool meshTransform = false ); static Mesh threadSafeReadMesh ( std :: string filename ); static void threadSafeWriteMesh ( std :: string filename , Mesh mesh ); static PhysicalRegion boundingBox ( const std :: vector < std :: string >& filenames , bool center = false ); static PhysicalRegion boundingBox ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes , bool center = false ); static size_t findReferenceMesh ( std :: vector < Mesh > & meshes ); static Mesh boundaryLoopExtractor ( Mesh mesh ); static std :: array < Mesh , 3 > sharedBoundaryExtractor ( const Mesh & mesh_l , const Mesh & mesh_r , double tol ); static void generateNormals ( const std :: vector < std :: reference_wrapper < Mesh >>& meshes , bool forceRegen = false ); static Field computeMeanNormals ( const std :: vector < std :: string >& filenames , bool autoGenerateNormals = true ); static Field computeMeanNormals ( const std :: vector < std :: reference_wrapper < const Mesh >>& meshes ); void visualizeVectorFieldForFFCs ( std :: shared_ptr < Mesh > mesh ); vtkSmartPointer < vtkActor > getArrow ( Eigen :: Vector3d start , Eigen :: Vector3d end ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWarper_8h.html","text":"Libs/Mesh/MeshWarper.h Mesh warping capability. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWarper Detailed Description Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction Source code #pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#libsmeshmeshwarperh","text":"Mesh warping capability. More...","title":"Libs/Mesh/MeshWarper.h"},{"location":"api/Files/MeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWarper_8h.html#classes","text":"Name class shapeworks::MeshWarper","title":"Classes"},{"location":"api/Files/MeshWarper_8h.html#detailed-description","text":"Mesh warping capability. The MeshWarper provides an object to warp meshes for surface reconstruction","title":"Detailed Description"},{"location":"api/Files/MeshWarper_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class MeshWarper { public : void set_reference_mesh ( vtkSmartPointer < vtkPolyData > reference_mesh , const Eigen :: MatrixXd & reference_particles , const Eigen :: MatrixXd & landmarks = {}); bool generate_warp (); bool get_warp_available (); bool is_contour () const { return is_contour_ ; } vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: MatrixXd & particles ); Eigen :: MatrixXd extract_landmarks ( vtkSmartPointer < vtkPolyData > warped_mesh ); bool is_contour () { return this -> is_contour_ ; } std :: map < int , int > get_landmarks_map () const { return landmarks_map_ ; } std :: vector < int > get_good_particle_indices () const { return good_particles_ ; } const Eigen :: MatrixXd & get_warp_matrix () const { return this -> warp_ ; } bool has_bad_particles () const { return this -> bad_particle_count () > 0 ; } vtkSmartPointer < vtkPolyData > get_reference_mesh () { return this -> reference_mesh_ ; } const Eigen :: MatrixXd & get_reference_particles () const { return this -> reference_particles_ ; } static vtkSmartPointer < vtkPolyData > prep_mesh ( vtkSmartPointer < vtkPolyData > mesh ); protected : virtual void update_progress ( float p ) {} private : bool check_warp_ready (); void add_particle_vertices ( Eigen :: MatrixXd & vertices ); Eigen :: MatrixXd remove_bad_particles ( const Eigen :: MatrixXd & particles ); void split_cell_on_edge ( int cell_id , int new_vertex , int v0 , int v1 , std :: vector < vtkSmartPointer < vtkIdList >>& new_triangles ); void find_good_particles (); bool find_landmarks_vertices_on_ref_mesh (); static vtkSmartPointer < vtkPolyData > clean_mesh ( vtkSmartPointer < vtkPolyData > mesh ); static vtkSmartPointer < vtkPolyData > recreate_mesh ( vtkSmartPointer < vtkPolyData > mesh ); bool generate_warp_matrix ( Eigen :: MatrixXd TV , Eigen :: MatrixXi TF , const Eigen :: MatrixXd & Vref , Eigen :: MatrixXd & W ); vtkSmartPointer < vtkPolyData > warp_mesh ( const Eigen :: MatrixXd & points ); size_t bad_particle_count () const { return size_t ( reference_particles_ . rows ()) - good_particles_ . size (); } // Members Eigen :: MatrixXi faces_ ; Eigen :: MatrixXd vertices_ ; Eigen :: MatrixXd warp_ ; Eigen :: MatrixXd landmarks_points_ ; std :: vector < int > good_particles_ ; bool needs_warp_ = true ; bool warp_available_ = false ; std :: map < int , int > landmarks_map_ ; // map the landmarks id (Key) to the vertex(point) id (Value) belonging to the clean Reference mesh vtkSmartPointer < vtkPolyData > incoming_reference_mesh_ ; vtkSmartPointer < vtkPolyData > reference_mesh_ ; Eigen :: MatrixXd reference_particles_ ; bool is_contour_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWorkQueue_8h.html","text":"Libs/Analyze/MeshWorkQueue.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue Functions Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ) Source code #pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#libsanalyzemeshworkqueueh","text":"","title":"Libs/Analyze/MeshWorkQueue.h"},{"location":"api/Files/MeshWorkQueue_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorkQueue_8h.html#classes","text":"Name class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue","title":"Classes"},{"location":"api/Files/MeshWorkQueue_8h.html#functions","text":"Name Q_DECLARE_METATYPE ( shapeworks::MeshWorkItem )","title":"Functions"},{"location":"api/Files/MeshWorkQueue_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorkQueue_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorkQueue_8h.html#source-code","text":"#pragma once // stl #include // qt #include #include // eigen #include namespace shapeworks { class MeshWorkItem { public : std :: string filename ; Eigen :: VectorXd points ; int domain { 0 }; size_t memory_size { 0 }; friend bool operator < ( const MeshWorkItem & a , const MeshWorkItem & b ); friend bool operator == ( const MeshWorkItem & a , const MeshWorkItem & b ); }; class MeshWorkQueue { public : using WorkList = std :: list < MeshWorkItem > ; MeshWorkQueue (); ~ MeshWorkQueue (); void push ( const MeshWorkItem & item ); MeshWorkItem * get_next_work_item (); bool is_inside ( const MeshWorkItem & item ); void remove ( const MeshWorkItem & item ); bool is_empty (); int size (); private : bool in_inside_list ( const MeshWorkItem & item , const WorkList & list ); // for concurrent access QMutex mutex_ ; WorkList work_list_ ; WorkList processing_list_ ; }; } // namespace shapeworks Q_DECLARE_METATYPE ( shapeworks :: MeshWorkItem ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWorker_8h.html","text":"Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. More... Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWorker Functions Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > ) Detailed Description Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ) Source code #pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#libsanalyzemeshworkerh","text":"Worker class for parallel mesh reconstruction. More...","title":"Libs/Analyze/MeshWorker.h"},{"location":"api/Files/MeshWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWorker_8h.html#classes","text":"Name class shapeworks::MeshWorker","title":"Classes"},{"location":"api/Files/MeshWorker_8h.html#functions","text":"Name Q_DECLARE_METATYPE (vtkSmartPointer< vtkPolyData > )","title":"Functions"},{"location":"api/Files/MeshWorker_8h.html#detailed-description","text":"Worker class for parallel mesh reconstruction. The MeshWorker implements each thread's mesh construction management","title":"Detailed Description"},{"location":"api/Files/MeshWorker_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/MeshWorker_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/MeshWorker_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"MeshWorkQueue.h\" #include \"MeshCache.h\" #include \"MeshGenerator.h\" Q_DECLARE_METATYPE ( vtkSmartPointer < vtkPolyData > ); namespace shapeworks { class MeshWorker : public QObject , public QRunnable { Q_OBJECT public : MeshWorker ( MeshWorkQueue * queue , std :: shared_ptr < MeshGenerator > generator ); ~ MeshWorker (); void run (); Q_SIGNALS : void result_ready ( const MeshWorkItem & item , MeshHandle mesh ); void finished (); private : std :: shared_ptr < MeshGenerator > mesh_generator_ ; MeshWorkQueue * queue_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MeshWrapper_8h.html","text":"Libs/Optimize/Domain/MeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MeshWrapper Source code #pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#libsoptimizedomainmeshwrapperh","text":"","title":"Libs/Optimize/Domain/MeshWrapper.h"},{"location":"api/Files/MeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MeshWrapper_8h.html#classes","text":"Name class shapeworks::MeshWrapper","title":"Classes"},{"location":"api/Files/MeshWrapper_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" namespace shapeworks { class MeshWrapper { public : typedef typename ParticleDomain :: PointType PointType ; typedef typename ParticleDomain :: GradNType GradNType ; // Computed distance between points. If out_grad != nullptr, returns the gradient of the distance in that vector virtual double ComputeDistance ( const PointType & pointa , int idx_a , const PointType & pointb , int idx_b , vnl_vector_fixed < double , 3 > * out_grad = nullptr ) const = 0 ; // Return true if the distance between point a and b is within test_dist virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & dist ) const = 0 ; // Returns updated point position after applying the update vector to the initial position. virtual PointType GeodesicWalk ( PointType pointa , int idx , vnl_vector_fixed < double , DIMENSION > vector ) const = 0 ; // Returns a point on the mesh. virtual PointType GetPointOnMesh () const = 0 ; // Returns minimum corner of bounding box. virtual const PointType & GetMeshLowerBound () const = 0 ; // Returns maximum corner of bounding box. virtual const PointType & GetMeshUpperBound () const = 0 ; virtual vnl_vector_fixed < double , DIMENSION > ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , vnl_vector_fixed < double , DIMENSION > & vector ) const = 0 ; virtual vnl_vector_fixed < float , DIMENSION > SampleNormalAtPoint ( PointType p , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( PointType p , int idx ) const = 0 ; // Returns closest point on mesh to pointa. virtual PointType SnapToMesh ( PointType pointa , int idx ) const = 0 ; virtual void InvalidateParticle ( int idx ) {}; virtual bool IsGeodesicsEnabled () const = 0 ; virtual vtkSmartPointer < vtkPolyData > GetPolydata () const = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Mesh_8h.html","text":"Libs/Mesh/Mesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) Source code #pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#libsmeshmeshh","text":"","title":"Libs/Mesh/Mesh.h"},{"location":"api/Files/Mesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Mesh_8h.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors)","title":"Classes"},{"location":"api/Files/Mesh_8h.html#source-code","text":"#pragma once #include #include \"Shapeworks.h\" class vtkStaticCellLocator ; class vtkKdTreePointLocator ; namespace shapeworks { class Mesh { public : enum FieldType { Point , Face }; enum AlignmentType { Rigid , Similarity , Affine }; enum DistanceMethod { PointToPoint , PointToCell }; enum CurvatureType { Principal , Gaussian , Mean }; enum SubdivisionType { Butterfly , Loop }; using MeshType = vtkSmartPointer < vtkPolyData > ; using MeshPoints = vtkSmartPointer < vtkPoints > ; Mesh ( const std :: string & pathname ); Mesh ( MeshType meshPtr ) : poly_data_ ( meshPtr ) { if ( ! poly_data_ ) throw std :: invalid_argument ( \"null meshPtr\" ); invalidateLocators (); } Mesh ( const Mesh & orig ) : poly_data_ ( MeshType :: New ()) { poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); } Mesh ( Mesh && orig ) : poly_data_ ( orig . poly_data_ ) { orig . poly_data_ = nullptr ; } Mesh & operator = ( const Mesh & orig ) { poly_data_ = MeshType :: New (); poly_data_ -> DeepCopy ( orig . poly_data_ ); invalidateLocators (); return * this ; } Mesh ( const Eigen :: MatrixXd & points , const Eigen :: MatrixXi & faces ); Mesh & operator = ( Mesh && orig ) { poly_data_ = orig . poly_data_ ; orig . poly_data_ = nullptr ; return * this ; } Mesh & operator += ( const Mesh & otherMesh ); MeshType getVTKMesh () const { return this -> poly_data_ ; } Mesh & write ( const std :: string & pathname , bool binaryFile = false ); Mesh & coverage ( const Mesh & otherMesh , bool allowBackIntersections = true , double angleThreshold = 0 , double backSearchRadius = 0 ); Mesh & smooth ( int iterations = 0 , double relaxation = 0.0 ); Mesh & smoothSinc ( int iterations = 0 , double passband = 0.0 ); Mesh & remesh ( int numVertices , double adaptivity = 1.0 ); Mesh & remeshPercent ( double percentage , double adaptivity = 1.0 ); Mesh & invertNormals (); Mesh & reflect ( const Axis & axis , const Vector3 & origin = makeVector ({ 0.0 , 0.0 , 0.0 })); MeshTransform createTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ); Mesh & applyTransform ( const MeshTransform transform ); Mesh & rotate ( const double angle , const Axis axis ); Mesh & fillHoles ( double hole_size = 1000.0 ); Mesh & clean (); Mesh & probeVolume ( const Image & image ); Mesh & clip ( const Plane plane ); Mesh & translate ( const Vector3 & v ); Mesh & scale ( const Vector3 & v ); PhysicalRegion boundingBox () const ; Mesh & fixElement (); Mesh & fixNonManifold (); bool detectNonManifold (); bool detectTriangular (); std :: vector < Field > distance ( const Mesh & target , const DistanceMethod method = PointToCell ) const ; Mesh & clipClosedSurface ( const Plane plane ); Mesh & computeNormals (); Point3 closestPoint ( const Point3 point , double & distance , vtkIdType & face_id ) const ; int closestPointId ( const Point3 point ) const ; double geodesicDistance ( int source , int target ) const ; Field geodesicDistance ( const Point3 landmark ) const ; Field geodesicDistance ( const std :: vector < Point3 > curve ) const ; Field curvature ( const CurvatureType type = Principal ) const ; void computeFieldGradient ( const std :: string & field ) const ; Eigen :: Vector3d computeFieldGradientAtPoint ( const std :: string & field , const Point3 & query ) const ; double interpolateFieldAtPoint ( const std :: string & field , const Point3 & query ) const ; Mesh & applySubdivisionFilter ( const SubdivisionType type = Butterfly , int subdivision = 1 ); Image toImage ( PhysicalRegion region = PhysicalRegion (), Point3 spacing = Point3 ({ 1. , 1. , 1. })) const ; Image toDistanceTransform ( PhysicalRegion region = PhysicalRegion (), const Point3 spacing = Point3 ({ 1. , 1. , 1. }), const Dims padding = Dims ({ 1 , 1 , 1 })) const ; Mesh & computeThickness ( Image & image , Image * dt = nullptr , double max_dist = 10000 , double median_radius = 5.0 , std :: string distance_mesh = \"\" ); Mesh & computeLandmarkGeodesics ( const std :: vector < Point3 >& landmarks ); // query functions // Point3 center () const ; Point3 centerOfMass () const ; int numPoints () const { return poly_data_ -> GetNumberOfPoints (); } int numFaces () const { return poly_data_ -> GetNumberOfCells (); } Eigen :: MatrixXd points () const ; Eigen :: MatrixXi faces () const ; Point3 getPoint ( int id ) const ; IPoint3 getFace ( int id ) const ; // fields of mesh points // std :: vector < std :: string > getFieldNames () const ; Mesh & setField ( const std :: string name , Array array , const FieldType type ); Field getField ( const std :: string & name , const FieldType type ) const ; void setFieldValue ( const std :: string & name , int idx , double value ); double getFieldValue ( const std :: string & name , int idx ) const ; Eigen :: VectorXd getMultiFieldValue ( const std :: string & name , int idx ) const ; // mesh comparison // bool compareAllPoints ( const Mesh & other_mesh ) const ; bool compareAllFaces ( const Mesh & other_mesh ) const ; bool compareAllFields ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool compareField ( const Mesh & other_mesh , const std :: string & name1 , const std :: string & name2 = \"\" , const double eps = -1.0 ) const ; // todo: add support for comparison of fields of mesh faces (ex: their normals) bool compare ( const Mesh & other_mesh , const double eps = -1.0 ) const ; bool operator == ( const Mesh & other ) const { return compare ( other ); } // public static functions // static std :: vector < std :: string > getSupportedTypes () { return { \"vtk\" , \"vtp\" , \"ply\" , \"stl\" , \"obj\" }; } double getFFCValue ( Eigen :: Vector3d query ) const ; Eigen :: Vector3d getFFCGradient ( Eigen :: Vector3d query ) const ; MeshPoints getIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Copied directly from VtkMeshWrapper. this->poly_data_ becomes this->mesh. // WARNING: Copied directly // from Meshwrapper. TODO: When refactoring, take this into account. vtkSmartPointer < vtkPolyData > clipByField ( const std :: string & name , double value ); vtkSmartPointer < vtkStaticCellLocator > getCellLocator () const { updateCellLocator (); return cellLocator ; } int getClosestFace ( const Point3 & point ) const ; Eigen :: Vector3d computeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; // // WARNING: Copied directly from Meshwrapper. TODO: When refactoring, take this into account. private : friend struct SharedCommandData ; Mesh () : poly_data_ ( nullptr ) {} // only for use by SharedCommandData since a Mesh should always be valid, never \"empty\" MeshTransform createRegistrationTransform ( const Mesh & target , AlignmentType align = Similarity , unsigned iterations = 10 ) const ; MeshType poly_data_ ; Mesh & setFieldForFaces ( const std :: string name , Array array ); Field getFieldForFaces ( const std :: string & name ) const ; void invalidateLocators () const ; mutable vtkSmartPointer < vtkStaticCellLocator > cellLocator ; void updateCellLocator () const ; mutable vtkSmartPointer < vtkKdTreePointLocator > pointLocator ; void updatePointLocator () const ; }; std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ); class MeshReader { static Mesh :: MeshType read ( const std :: string & pathname ); friend Mesh :: Mesh ( const std :: string & pathname ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MixedEffectsShapeMatrix Source code /* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#libsoptimizematrixmixedeffectsshapematrixh","text":"","title":"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#classes","text":"Name class shapeworks::MixedEffectsShapeMatrix","title":"Classes"},{"location":"api/Files/MixedEffectsShapeMatrix_8h.html#source-code","text":"/* Class for Mixed-effects regression */ #pragma once #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_trace.h\" #include \"vnl/vnl_vector.h\" namespace shapeworks { class MixedEffectsShapeMatrix : public LegacyShapeMatrix { public : typedef double DataType ; typedef MixedEffectsShapeMatrix Self ; typedef LegacyShapeMatrix Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( MixedEffectsShapeMatrix , LegacyShapeMatrix ); void UpdateMeanMatrix () { // for each sample vnl_vector < double > tempvect ; tempvect . set_size ( m_MeanMatrix . rows ()); tempvect . fill ( 0.0 ); for ( unsigned int i = 0 ; i < m_MeanMatrix . cols (); i ++ ) { int group_indx = i / m_TimeptsPerIndividual ; tempvect = m_Intercept + m_Slope * m_Expl ( i ); tempvect = tempvect + m_InterceptRand . get_row ( group_indx ); tempvect = tempvect + m_SlopeRand . get_row ( group_indx ) * m_Expl ( i ); // compute the mean m_MeanMatrix . set_column ( i , tempvect ); } } inline vnl_vector < double > ComputeMean ( double k ) const { return m_Intercept + m_Slope * k ; } void ResizeParameters ( unsigned int n ) { vnl_vector < double > tmpA = m_Intercept ; // copy existing matrix vnl_vector < double > tmpB = m_Slope ; // copy existing matrix // Create new m_Intercept . set_size ( n ); m_Slope . set_size ( n ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmpA . size (); r ++ ) { m_Intercept ( r ) = tmpA ( r ); m_Slope ( r ) = tmpB ( r ); } } virtual void ResizeMeanMatrix ( int rs , int cs ) { vnl_matrix < double > tmp = m_MeanMatrix ; // copy existing matrix // Create new column (shape) m_MeanMatrix . set_size ( rs , cs ); m_MeanMatrix . fill ( 0.0 ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { m_MeanMatrix ( r , c ) = tmp ( r , c ); } } } void ResizeExplanatory ( unsigned int n ) { if ( n > m_Expl . size ()) { vnl_vector < double > tmp = m_Expl ; // copy existing matrix // Create new m_Expl . set_size ( n ); m_Expl . fill ( 0.0 ); // Copy old data into new vector. for ( unsigned int r = 0 ; r < tmp . size (); r ++ ) { m_Expl ( r ) = tmp ( r ); } } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % this -> m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeMeanMatrix ( this -> rows (), this -> cols () + 1 ); this -> ResizeExplanatory ( this -> cols ()); } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Make sure we have enough rows. if (( ps -> GetNumberOfParticles ( d ) * VDimension * this -> m_DomainsPerShape ) > this -> rows ()) { this -> ResizeParameters ( PointsPerDomain * VDimension * this -> m_DomainsPerShape ); this -> ResizeMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); this -> ResizeMeanMatrix ( PointsPerDomain * VDimension * this -> m_DomainsPerShape , this -> cols ()); } // CANNOT ADD POSITION INFO UNTIL ALL POINTS PER DOMAIN IS KNOWN // Add position info to the matrix unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ]; } // std::cout << \"Row \" << k << \" Col \" << d / this->m_DomainsPerShape << \" = \" << pos << std::endl; } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const unsigned int PointsPerDomain = ps -> GetNumberOfParticles ( d ); // Modify matrix info // unsigned int k = VDimension * idx; unsigned int k = (( d % this -> m_DomainsPerShape ) * PointsPerDomain * VDimension ) + ( idx * VDimension ); for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / this -> m_DomainsPerShape ) = pos [ i ] - m_MeanMatrix ( i + k , d / this -> m_DomainsPerShape ); } } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void SetDomainsPerShape ( int i ) { this -> m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return this -> m_DomainsPerShape ; } void SetTimeptsPerIndividual ( int i ) { this -> m_TimeptsPerIndividual = i ; } int GetTimeptsPerIndividual () const { return this -> m_TimeptsPerIndividual ; } void SetExplanatory ( std :: vector < double > v ) { // std::cout << \"Setting expl \" << std::endl; ResizeExplanatory ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { // std::cout << v[i] << std::endl; m_Expl [ i ] = v [ i ]; } } void SetExplanatory ( unsigned int i , double q ) { m_Expl [ i ] = q ; } const double & GetExplanatory ( unsigned int i ) const { return m_Expl [ i ]; } double & GetExplanatory ( unsigned int i ) { return m_Expl [ i ]; } const vnl_vector < double >& GetSlope () const { return m_Slope ; } const vnl_vector < double >& GetIntercept () const { return m_Intercept ; } const vnl_matrix < double >& GetSlopeRandom () const { return m_SlopeRand ; } const vnl_matrix < double >& GetInterceptRandom () const { return m_InterceptRand ; } void SetSlope ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Slope [ i ] = v [ i ]; } } void SetIntercept ( const std :: vector < double >& v ) { ResizeParameters ( v . size ()); for ( unsigned int i = 0 ; i < v . size (); i ++ ) { m_Intercept [ i ] = v [ i ]; } } void EstimateParameters () { // std::cout << \"Estimating params\" << std::endl; // std::cout << \"Explanatory: \" << m_Expl << std::endl; vnl_matrix < double > X = * this + m_MeanMatrix ; // Number of samples int num_shapes = static_cast < double > ( X . cols ()); this -> m_NumIndividuals = num_shapes / this -> GetTimeptsPerIndividual (); int nr = X . rows (); // number of points*3 // set the sizes of random slope and intercept matrix m_SlopeRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 m_InterceptRand . set_size ( m_NumIndividuals , nr ); // num_groups X num_points*3 vnl_matrix < double > fixed ; // slopes + intercepts for all points vnl_matrix < double > random ; // slopes + intercepts for all groups, for all points fixed . set_size ( 2 , nr ); random . set_size ( 2 , nr * m_NumIndividuals ); vnl_matrix < double > Ds ( 2 , 2 ); // covariance matrix of random parameters (2x2) Ds . set_identity (); // initialize to identity double sigma2s = 1 ; // variance of error vnl_matrix < double > identity_n ; identity_n . set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); identity_n . set_identity (); vnl_matrix < double > identity_2 ; identity_2 . set_size ( 2 , 2 ); identity_2 . set_identity (); vnl_matrix < double >* Ws = NULL , * Vs = NULL ; Ws = new vnl_matrix < double > [ m_NumIndividuals ]; Vs = new vnl_matrix < double > [ m_NumIndividuals ]; for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { Vs [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); Ws [ i ]. set_size ( m_TimeptsPerIndividual , m_TimeptsPerIndividual ); } vnl_matrix < double > sum_mat1 ( 2 , 2 , 0 ); vnl_vector < double > sum_mat2 ( 2 ); sum_mat2 . fill ( 0.0 ); vnl_vector < double > residual ; residual . set_size ( m_TimeptsPerIndividual ); residual . fill ( 0.0 ); double ecorr = 0.0 ; double tracevar = 0.0 ; vnl_matrix < double > bscorr ( 2 , 2 , 0.0 ); vnl_matrix < double > bsvar ( 2 , 2 , 0.0 ); vnl_matrix < double > Xp ; Xp . set_size ( m_TimeptsPerIndividual , 2 ); vnl_vector < double > y ; y . set_size ( m_TimeptsPerIndividual ); vnl_vector < double > tempvect ; tempvect . set_size ( 2 ); for ( int i = 0 ; i < nr ; i ++ ) // for all points (x,y,z coordinates) { sigma2s = 1.0 ; Ds . set_identity (); for ( int j = 0 ; j < 50 ; j ++ ) // EM iterations { sum_mat1 . fill ( 0.0 ); sum_mat2 . fill ( 0.0 ); residual . fill ( 0.0 ); ecorr = 0.0 ; tracevar = 0.0 ; bscorr . fill ( 0.0 ); bsvar . fill ( 0.0 ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } Vs [ k ] = ( identity_n * sigma2s ) + Xp * Ds * vnl_transpose ( Xp ); // Ws = static_cast (vnl_matrix_inverse(Vs)); Ws [ k ] = vnl_inverse ( Vs [ k ]); sum_mat1 = sum_mat1 + vnl_transpose ( Xp ) * Ws [ k ] * Xp ; sum_mat2 = sum_mat2 + vnl_transpose ( Xp ) * Ws [ k ] * y ; } tempvect = vnl_inverse ( sum_mat1 ) * sum_mat2 ; fixed . set_column ( i , tempvect ); for ( int k = 0 ; k < m_NumIndividuals ; k ++ ) { for ( int l = 0 ; l < m_TimeptsPerIndividual ; l ++ ) { Xp ( l , 0 ) = m_Expl ( k * m_TimeptsPerIndividual + l ); Xp ( l , 1 ) = 1 ; y ( l ) = X ( i , k * m_TimeptsPerIndividual + l ); } tempvect = Ds * vnl_transpose ( Xp ) * Ws [ k ] * ( y - ( Xp * fixed . get_column ( i ))); random . set_column ( i * m_NumIndividuals + k , tempvect ); residual = y - ( Xp * fixed . get_column ( i )) - ( Xp * random . get_column ( i * m_NumIndividuals + k )); ecorr = ecorr + dot_product ( residual , residual ); tracevar = tracevar + ( m_TimeptsPerIndividual - sigma2s * vnl_trace ( Ws [ k ])); bscorr = bscorr + outer_product ( random . get_column ( i * m_NumIndividuals + k ), random . get_column ( i * m_NumIndividuals + k )); bsvar = bsvar + ( identity_2 - ( vnl_transpose ( Xp ) * Ws [ k ] * Xp * Ds )); } sigma2s = ( ecorr + sigma2s * tracevar ) / ( num_shapes ); Ds = ( bscorr + Ds * bsvar ) / m_NumIndividuals ; } // endfor EM iterations // printf (\"point #%d\\n\", i); } // endfor all points on shape (x,y & z) m_Slope = fixed . get_row ( 0 ); m_Intercept = fixed . get_row ( 1 ); for ( int i = 0 ; i < m_NumIndividuals ; i ++ ) { for ( int j = 0 ; j < nr ; j ++ ) // for all points * 3 { m_SlopeRand ( i , j ) = random ( 0 , j * m_NumIndividuals + i ); m_InterceptRand ( i , j ) = random ( 1 , j * m_NumIndividuals + i ); } } delete [] Vs ; delete [] Ws ; // printf (\"points:\\n\"); // for (int k = 0; k < m_NumIndividuals; k++) // for (int l = 0; l < m_TimeptsPerIndividual; l++) // printf (\"%g %g\\n\", X(0,k*m_TimeptsPerIndividual + l), m_Expl(k*m_TimeptsPerIndividual + l)); // printf (\"fixed: slope %g, intercept %g\", m_Slope(0), m_Intercept(0)); // printf (\"random: slopes %g %g, intercepts %g %g\", m_SlopeRand(0,0), m_SlopeRand(1,0), m_InterceptRand(0,0), // m_InterceptRand(1,0)); } // void Initialize () { m_Intercept . fill ( 0.0 ); m_Slope . fill ( 0.0 ); m_MeanMatrix . fill ( 0.0 ); m_SlopeRand . fill ( 0.0 ); m_InterceptRand . fill ( 0.0 ); } virtual void BeforeIteration () { m_UpdateCounter ++ ; if ( m_UpdateCounter >= m_RegressionInterval ) { m_UpdateCounter = 0 ; this -> EstimateParameters (); this -> UpdateMeanMatrix (); } } void SetRegressionInterval ( int i ) { m_RegressionInterval = i ; } int GetRegressionInterval () const { return m_RegressionInterval ; } protected : MixedEffectsShapeMatrix () { this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; m_UpdateCounter = 0 ; m_RegressionInterval = 1 ; m_NumIndividuals = 13 ; m_TimeptsPerIndividual = 3 ; } virtual ~ MixedEffectsShapeMatrix (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : MixedEffectsShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented int m_UpdateCounter ; int m_RegressionInterval ; // Parameters for the linear model vnl_vector < double > m_Intercept ; vnl_vector < double > m_Slope ; // The explanatory variable value for each sample (matrix column) vnl_vector < double > m_Expl ; // A matrix to store the mean estimated for each explanatory variable (each sample) vnl_matrix < double > m_MeanMatrix ; vnl_matrix < double > m_InterceptRand ; // added: AK , random intercepts for each group vnl_matrix < double > m_SlopeRand ; // added: AK , random slopes for each group int m_NumIndividuals ; int m_TimeptsPerIndividual ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Module_8dox.html","text":"Module.dox Updated on 2023-10-25 at 15:40:28 +0000","title":"Module.dox"},{"location":"api/Files/Module_8dox.html#moduledox","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"Module.dox"},{"location":"api/Files/NetworkAnalysisJob_8h.html","text":"Studio/Job/NetworkAnalysisJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::NetworkAnalysisJob Source code #pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#studiojobnetworkanalysisjobh","text":"","title":"Studio/Job/NetworkAnalysisJob.h"},{"location":"api/Files/NetworkAnalysisJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/NetworkAnalysisJob_8h.html#classes","text":"Name class shapeworks::NetworkAnalysisJob","title":"Classes"},{"location":"api/Files/NetworkAnalysisJob_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Project ; class NetworkAnalysisJob : public Job { Q_OBJECT public : NetworkAnalysisJob ( std :: shared_ptr < Project > project , std :: string target_group , std :: string target_feature ); void run () override ; QString name () override ; void set_pvalue_of_interest ( double pvalue_of_interest ); void set_pvalue_threshold ( double pvalue_threshold ); void set_num_iterations ( int num_iterations ); Eigen :: VectorXf get_tvalues (); Eigen :: VectorXf get_spm_values (); private : std :: shared_ptr < Project > project_ ; ParticleShapeStatistics stats_ ; Eigen :: VectorXf tvalues_ ; Eigen :: VectorXf spm_values_ ; std :: string target_group_ ; std :: string target_feature_ ; double pvalue_of_interest_ = 0 ; double pvalue_threshold_ = 0 ; int num_iterations_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ObjectReader_8h.html","text":"Libs/Optimize/Utils/ObjectReader.h Classes Name class ObjectReader Source code #pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#libsoptimizeutilsobjectreaderh","text":"","title":"Libs/Optimize/Utils/ObjectReader.h"},{"location":"api/Files/ObjectReader_8h.html#classes","text":"Name class ObjectReader","title":"Classes"},{"location":"api/Files/ObjectReader_8h.html#source-code","text":"#pragma once #include #include #include template < class T > class ObjectReader { public : typedef ObjectReader Self ; typedef T ObjectType ; const std :: vector < ObjectType > & GetOutput () const { return m_Output ; } std :: vector < ObjectType > & GetOutput () { return m_Output ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Read () { this -> Update (); } void Update () { // Open the output file. std :: ifstream in ( m_FileName . c_str (), std :: ios :: binary ); if ( ! in ) { std :: cerr << \"Could not open filename \" << m_FileName << std :: endl ; throw 1 ; } // Read the number of transforms int N ; in . read ( reinterpret_cast < char *> ( & N ), sizeof ( int )); int sz = sizeof ( ObjectType ); // Read the transforms for ( unsigned int i = 0 ; i < ( unsigned int ) N ; i ++ ) { ObjectType q ; // maybe not the most efficient, but safe in . read ( reinterpret_cast < char *> ( & q ), sz ); m_Output . push_back ( q ); } in . close (); } ObjectReader () {} virtual ~ ObjectReader (){}; private : ObjectReader ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Output ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ObjectWriter_8h.html","text":"Libs/Optimize/Utils/ObjectWriter.h Classes Name class ObjectWriter Source code #pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#libsoptimizeutilsobjectwriterh","text":"","title":"Libs/Optimize/Utils/ObjectWriter.h"},{"location":"api/Files/ObjectWriter_8h.html#classes","text":"Name class ObjectWriter","title":"Classes"},{"location":"api/Files/ObjectWriter_8h.html#source-code","text":"#pragma once #include #include #include #include template < class T > class ObjectWriter { public : typedef ObjectWriter Self ; typedef T ObjectType ; void SetInput ( const std :: vector < ObjectType > & p ) { m_Input = p ; } void SetFileName ( const char * fn ) { m_FileName = fn ; } void SetFileName ( const std :: string & fn ) { m_FileName = fn ; } const std :: string & GetFileName () const { return m_FileName ; } inline void Write () { this -> Update (); } void Update () { // Open the output file. // std::ofstream out( m_FileName.c_str(), std::ios::binary ); std :: ofstream out ( m_FileName . c_str ()); if ( ! out ) { std :: cerr << \"Could not open point file for output: \" << m_FileName << std :: endl ; throw 1 ; } // Write the number of objects int sz = m_Input . size (); out . write ( reinterpret_cast < char *> ( & sz ), sizeof ( int )); sz = sizeof ( ObjectType ); // Write the objects for ( typename std :: vector < ObjectType >:: const_iterator it = m_Input . begin (); it != m_Input . end (); it ++ ) { ObjectType q = * it ; // maybe not the most efficient, but safe out . write ( reinterpret_cast < char *> ( & q ), sz ); } out . close (); } ObjectWriter () {} virtual ~ ObjectWriter (){}; private : ObjectWriter ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < ObjectType > m_Input ; std :: string m_FileName ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Observer_8h.html","text":"Libs/Optimize/Observer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct Source code #pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#libsoptimizeobserverh","text":"","title":"Libs/Optimize/Observer.h"},{"location":"api/Files/Observer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Observer_8h.html#classes","text":"Name class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) struct shapeworks::Observer::DefinedCallbacksStruct","title":"Classes"},{"location":"api/Files/Observer_8h.html#source-code","text":"#pragma once #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class Observer : public itk :: DataObject { public : typedef Observer Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( Observer , DataObject ); struct DefinedCallbacksStruct { DefinedCallbacksStruct () : DomainAddEvent ( false ), TransformSetEvent ( false ), PrefixTransformSetEvent ( false ), NeighborhoodSetEvent ( false ), PositionSetEvent ( false ), PositionAddEvent ( false ), PositionRemoveEvent ( false ) {} bool DomainAddEvent ; bool TransformSetEvent ; bool PrefixTransformSetEvent ; bool NeighborhoodSetEvent ; bool PositionSetEvent ; bool PositionAddEvent ; bool PositionRemoveEvent ; }; DefinedCallbacksStruct m_DefinedCallbacks ; virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void TransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PrefixTransformSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void NeighborhoodSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionSetEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionAddEventCallback ( Object * , const itk :: EventObject & ) {} virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) {} protected : Observer () {} virtual ~ Observer (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } private : Observer ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizationVisualizer_8h.html","text":"Libs/Optimize/Utils/OptimizationVisualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizationVisualizer Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#libsoptimizeutilsoptimizationvisualizerh","text":"","title":"Libs/Optimize/Utils/OptimizationVisualizer.h"},{"location":"api/Files/OptimizationVisualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizationVisualizer_8h.html#classes","text":"Name class shapeworks::OptimizationVisualizer","title":"Classes"},{"location":"api/Files/OptimizationVisualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include \"TriMesh.h\" #include \"ParticleSystem.h\" namespace shapeworks { class OptimizationVisualizer { public : void AddMesh ( vtkPolyData * mesh , std :: shared_ptr < trimesh :: TriMesh > tmesh ); void IterationCallback ( ParticleSystem * particleSystem ); void SetWireFrame ( bool enabled ); void SetSaveScreenshots ( bool enabled , std :: string path ); OptimizationVisualizer () {} ~ OptimizationVisualizer () {} private : void initialize (); std :: string screenshotDirectory ; bool saveScreenshots = false ; bool wireFrame = false ; bool colorNormals = false ; bool initialized = false ; double * focalPoint ; int iteration = 0 ; double radius ; std :: vector < vtkSmartPointer < vtkPolyData >> meshes ; std :: vector < std :: shared_ptr < trimesh :: TriMesh >> tmeshes ; vtkSmartPointer < vtkPolyDataMapper > mapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > actor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkRenderer > mainRenderer = vtkSmartPointer < vtkRenderer >:: New (); vtkSmartPointer < vtkRenderWindow > renderWindow = vtkSmartPointer < vtkRenderWindow >:: New (); vtkSmartPointer < vtkPoints > points = vtkSmartPointer < vtkPoints >:: New (); vtkSmartPointer < vtkPolyData > polydata = vtkSmartPointer < vtkPolyData >:: New (); vtkSmartPointer < vtkSphereSource > cubeSource = vtkSmartPointer < vtkSphereSource >:: New (); vtkSmartPointer < vtkPolyDataMapper > lineMapper = vtkSmartPointer < vtkPolyDataMapper >:: New (); vtkSmartPointer < vtkActor > lineActor = vtkSmartPointer < vtkActor >:: New (); vtkSmartPointer < vtkCellArray > lines = vtkSmartPointer < vtkCellArray >:: New (); std :: vector < vtkSmartPointer < vtkRenderer >> sampleRenderers ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> sampleMappers ; std :: vector < vtkSmartPointer < vtkPoints >> samplePoints ; std :: vector < vtkSmartPointer < vtkPolyData >> samplePolyData ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameterFile_8h.html","text":"Libs/Optimize/OptimizeParameterFile.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameterFile Source code #pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#libsoptimizeoptimizeparameterfileh","text":"","title":"Libs/Optimize/OptimizeParameterFile.h"},{"location":"api/Files/OptimizeParameterFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameterFile_8h.html#classes","text":"Name class shapeworks::OptimizeParameterFile","title":"Classes"},{"location":"api/Files/OptimizeParameterFile_8h.html#source-code","text":"#pragma once #include #include #include #include class TiXmlHandle ; namespace shapeworks { class Optimize ; class OptimizeParameterFile { public : OptimizeParameterFile (); bool load_parameter_file ( std :: string filename , Optimize * optimize ); private : bool set_visualizer_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_io_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_optimization_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool set_debug_parameters ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_image_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_contour_inputs ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_mesh_attributes ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_point_files ( TiXmlHandle * docHandle , Optimize * optimize ); bool read_constraints ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_distribution_cutting_plane ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_cutting_planes ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_explanatory_variables ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_particles ( TiXmlHandle * doc_handle , Optimize * optimize ); bool read_flag_domains ( TiXmlHandle * doc_handle , Optimize * optimize ); int get_num_inputs ( TiXmlHandle * docHandle ); private : std :: vector < int > read_int_list ( TiXmlHandle * doc_handle , std :: string name ); int verbosity_level_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizeParameters_8h.html","text":"Libs/Optimize/OptimizeParameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeParameters Source code #pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#libsoptimizeoptimizeparametersh","text":"","title":"Libs/Optimize/OptimizeParameters.h"},{"location":"api/Files/OptimizeParameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeParameters_8h.html#classes","text":"Name class shapeworks::OptimizeParameters","title":"Classes"},{"location":"api/Files/OptimizeParameters_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Optimize ; class OptimizeParameters { public : explicit OptimizeParameters ( ProjectHandle project ); void save_to_project (); std :: string get_optimize_output_prefix (); void set_optimize_output_prefix ( std :: string prefix ); std :: vector < int > get_number_of_particles (); void set_number_of_particles ( std :: vector < int > number_of_particles ); double get_initial_relative_weighting (); void set_initial_relative_weighting ( double value ); double get_relative_weighting (); void set_relative_weighting ( double value ); double get_starting_regularization (); void set_starting_regularization ( double value ); double get_ending_regularization (); void set_ending_regularization ( double value ); int get_iterations_per_split (); void set_iterations_per_split ( int value ); int get_optimization_iterations (); void set_optimization_iterations ( int value ); bool get_use_geodesic_distance (); void set_use_geodesic_distance ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); std :: vector < bool > get_use_normals (); void set_use_normals ( std :: vector < bool > use_normals ); double get_normals_strength (); void set_normals_strength ( double value ); bool get_use_disentangled_ssm (); void set_use_disentangled_ssm ( bool value ); bool get_use_procrustes (); void set_use_procrustes ( bool value ); bool get_use_procrustes_scaling (); void set_use_procrustes_scaling ( bool value ); bool get_use_procrustes_rotation_translation (); void set_use_procrustes_rotation_translation ( bool value ); int get_procrustes_interval (); void set_procrustes_interval ( int value ); bool get_use_multiscale (); void set_use_multiscale ( bool value ); int get_multiscale_particles (); void set_multiscale_particles ( int value ); double get_narrow_band (); void set_narrow_band ( double value ); int get_verbosity (); void set_verbosity ( int value ); bool get_mesh_ffc_mode (); void set_mesh_ffc_mode ( bool value ); bool get_use_landmarks (); void set_use_landmarks ( bool value ); bool get_use_fixed_subjects (); void set_use_fixed_subjects ( bool value ); std :: string get_fixed_subjects_column (); void set_fixed_subject_column ( std :: string column ); std :: string get_fixed_subjects_choice (); void set_fixed_subjects_choice ( std :: string choice ); void set_abort_load ( bool value ); void set_load_callback ( const std :: function < void ( int ) >& f ); bool set_up_optimize ( Optimize * optimize ); bool is_subject_fixed ( std :: shared_ptr < Subject > subject ); int get_checkpoint_interval (); void set_checkpoint_interval ( int iterations ); bool get_save_init_splits (); void set_save_init_splits ( bool enabled ); bool get_keep_checkpoints (); void set_keep_checkpoints ( bool enabled ); std :: vector < std :: string > get_field_attributes (); void set_field_attributes ( std :: vector < std :: string > attributes ); std :: vector < double > get_field_attribute_weights (); void set_field_attribute_weights ( std :: vector < double > weights ); bool get_use_geodesics_to_landmarks (); void set_use_geodesics_to_landmarks ( bool value ); double get_geodesic_to_landmarks_weight (); void set_geodesic_to_landmarks_weight ( double value ); std :: string get_particle_format (); void set_particle_format ( std :: string format ); private : std :: string get_output_prefix (); std :: vector < std :: vector < itk :: Point < double >>> get_initial_points (); Parameters params_ ; ProjectHandle project_ ; std :: function < void ( int ) > load_callback_ ; bool abort_load_ = false ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/OptimizeTool_8h.html","text":"Studio/Optimize/OptimizeTool.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::OptimizeTool Source code #pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#studiooptimizeoptimizetoolh","text":"","title":"Studio/Optimize/OptimizeTool.h"},{"location":"api/Files/OptimizeTool_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/OptimizeTool_8h.html#classes","text":"Name class shapeworks::OptimizeTool","title":"Classes"},{"location":"api/Files/OptimizeTool_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include class Ui_OptimizeTool ; class QLineEdit ; namespace shapeworks { class QOptimize ; class OptimizeParameters ; class Session ; class OptimizeTool : public QWidget { Q_OBJECT ; public : OptimizeTool ( Preferences & prefs , Telemetry & telemetry ); ~ OptimizeTool (); void set_session ( QSharedPointer < Session > session ); void activate (); void load_params (); void store_params (); void enable_actions (); void disable_actions (); void shutdown_threads (); public Q_SLOTS : void on_run_optimize_button_clicked (); void on_restoreDefaults_clicked (); void handle_optimize_complete (); void handle_optimize_failed (); void handle_progress ( int val , QString message ); void handle_error ( QString ); void handle_warning ( QString ); void handle_message ( QString ); void update_ui_elements (); bool validate_inputs (); Q_SIGNALS : void optimize_start (); void optimize_complete (); void progress ( int ); void status ( std :: string ); private : void setup_domain_boxes (); void update_run_button (); void handle_load_progress ( int count ); std :: vector < QLineEdit *> particle_boxes_ ; Preferences & preferences_ ; Telemetry & telemetry_ ; std :: vector < QLineEdit *> line_edits_ ; QList < QThread *> threads_ ; bool optimization_is_running_ = false ; QSharedPointer < QOptimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; QElapsedTimer elapsed_timer_ ; Ui_OptimizeTool * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Optimize_8h.html","text":"Libs/Optimize/Optimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::MatrixContainer class shapeworks::Optimize Source code #pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#libsoptimizeoptimizeh","text":"","title":"Libs/Optimize/Optimize.h"},{"location":"api/Files/Optimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Optimize_8h.html#classes","text":"Name class shapeworks::MatrixContainer class shapeworks::Optimize","title":"Classes"},{"location":"api/Files/Optimize_8h.html#source-code","text":"#pragma once #ifdef _WIN32 #pragma warning(disable : 4996) #endif // std #include #include #include // itk #include #include #include // shapeworks #include #include \"Libs/Optimize/Domain/DomainType.h\" #include \"Libs/Optimize/Function/VectorFunction.h\" #include \"Libs/Optimize/Utils/OptimizationVisualizer.h\" #include \"ProcrustesRegistration.h\" #include \"Sampler.h\" namespace shapeworks { class Project ; class ParticleGoodBadAssessment ; class MatrixContainer { public : Eigen :: MatrixXd matrix_ ; }; class Optimize { public : using ImageType = itk :: Image < float , 3 > ; using VectorType = VectorFunction :: VectorType ; using MatrixType = Eigen :: MatrixXd ; Optimize (); virtual ~ Optimize (); bool Run (); bool LoadParameterFile ( std :: string filename ); bool SetUpOptimize ( ProjectHandle project ); void SetProject ( std :: shared_ptr < Project > project ); void SetIterationCallbackFunction ( const std :: function < void ( void ) >& f ) { this -> iteration_callback_ = f ; } void AbortOptimization (); bool GetAborted (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints (); virtual std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints (); void SetCutPlanes ( std :: vector < std :: array < itk :: Point < double > , 3 >> cut_planes ); void SetVerbosity ( int verbosity_level ); void SetDomainsPerShape ( int domains_per_shape ); int GetDomainsPerShape (); void SetDomainType ( shapeworks :: DomainType type ); shapeworks :: DomainType GetDomainType (); void SetNumberOfParticles ( std :: vector < int > number_of_particles ); std :: vector < int > GetNumberOfParticles (); void SetTransformFile ( std :: string filename ); std :: string GetTransformFile (); void SetPrefixTransformFile ( std :: string prefix_transform_file ); std :: string GetPrefixTransformFile (); void SetOutputDir ( std :: string output_dir ); void SetOutputTransformFile ( std :: string output_transform_file ); void SetOutputIndividualTransformFiles ( bool value ); void SetUseMeshBasedAttributes ( bool use_mesh_based_attributes ); bool GetUseMeshBasedAttributes (); void SetUseXYZ ( std :: vector < bool > use_xyz ); void SetUseNormals ( std :: vector < bool > use_normals ); void SetAttributesPerDomain ( std :: vector < int > attributes_per_domain ); std :: vector < int > GetAttributesPerDomain (); void SetDistributionDomainID ( int distribution_domain_id ); int GetDistributionDomainID (); void SetOutputCuttingPlaneFile ( std :: string output_cutting_plane_file ); void SetUseCuttingPlanes ( bool use_cutting_planes ); void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , 3 >& va , const vnl_vector_fixed < double , 3 >& vb , const vnl_vector_fixed < double , 3 >& vc ); void SetProcessingMode ( int mode ); void SetAdaptivityMode ( int adaptivity_mode ); void SetMeshFFCMode ( int mesh_ffc_mode ) { m_mesh_ffc_mode = mesh_ffc_mode ; m_sampler -> SetMeshFFCMode ( mesh_ffc_mode ); } void SetAdaptivityStrength ( double adaptivity_strength ); void SetTimePtsPerSubject ( int time_pts_per_subject ); int GetTimePtsPerSubject (); void SetOptimizationIterations ( int optimization_iterations ); void SetOptimizationIterationsCompleted ( int optimization_iterations_completed ); void SetIterationsPerSplit ( int iterations_per_split ); void SetUseShapeStatisticsInInit ( bool use_shape_statistics_in_init ); void SetProcrustesInterval ( int procrustes_interval ); void SetProcrustesScaling ( bool procrustes_scaling ); void SetProcrustesRotationTranslation ( bool procrustes_rotation_translation ); void SetRelativeWeighting ( double relative_weighting ); void SetInitialRelativeWeighting ( double initial_relative_weighting ); void SetStartingRegularization ( double starting_regularization ); void SetEndingRegularization ( double ending_regularization ); void SetRecomputeRegularizationInterval ( int recompute_regularization_interval ); void SetSaveInitSplits ( bool save_init_splits ); void SetCheckpointingInterval ( int checkpointing_interval ); void SetKeepCheckpoints ( int keep_checkpoints ); void SetUseRegression ( bool use_regression ); void SetUseMixedEffects ( bool use_mixed_effects ); void SetUseDisentangledSpatiotemporalSSM ( bool use_disentangled_ssm_4d ); bool GetUseDisentangledSpatiotemporalSSM (); void SetNormalAngle ( double normal_angle ); void SetPerformGoodBad ( bool perform_good_bad ); void SetLogEnergy ( bool log_energy ); void AddImage ( ImageType :: Pointer image , std :: string name = \"\" ); void AddMesh ( vtkSmartPointer < vtkPolyData > poly_data ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFilenames ( const std :: vector < std :: string >& filenames ); void SetPointFiles ( const std :: vector < std :: string >& point_files ); void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ); int GetNumShapes (); void SetAttributeScales ( const std :: vector < double >& scales ); void SetFieldAttributes ( const std :: vector < std :: string >& field_attributes ); void SetParticleFlags ( std :: vector < int > flags ); void SetFixedDomains ( std :: vector < int > flags ); void SetSharedBoundaryEnabled ( bool enabled ); void SetSharedBoundaryWeight ( double weight ); const std :: vector < int >& GetDomainFlags (); void SetFileOutputEnabled ( bool enabled ); std :: vector < bool > GetUseXYZ (); std :: vector < bool > GetUseNormals (); void SetNarrowBand ( double v ); double GetNarrowBand (); void SetUseShapeStatisticsAfter ( int num_particles ); int GetUseShapeStatisticsAfter (); void PrintParamInfo (); std :: shared_ptr < Sampler > GetSampler () { return m_sampler ; } MatrixContainer GetParticleSystem (); void SetPythonFile ( std :: string filename ); void SetGeodesicsEnabled ( bool is_enabled ); void SetGeodesicsCacheSizeMultiplier ( size_t n ); OptimizationVisualizer & GetVisualizer (); void SetShowVisualizer ( bool show ); bool GetShowVisualizer (); bool GetMeshFFCMode () { return m_mesh_ffc_mode ; } vnl_vector_fixed < double , 3 > TransformPoint ( int domain , vnl_vector_fixed < double , 3 > input ); void UpdateProgress (); void set_particle_format ( std :: string format ) { particle_format_ = format ; } protected : virtual void SetIterationCallback (); void ComputeTotalIterations (); void OptimizerStop (); void ReadTransformFile (); void ReadPrefixTransformFile ( const std :: string & s ); void InitializeSampler (); double GetMinNeighborhoodRadius (); void AddSinglePoint (); void Initialize (); void AddAdaptivity (); void RunOptimize (); virtual void IterateCallback ( itk :: Object * , const itk :: EventObject & ); void ComputeEnergyAfterIteration (); void SetCotanSigma (); void WriteTransformFile ( int iter = -1 ) const ; void WriteTransformFile ( std :: string iter_prefix ) const ; void WriteTransformFiles ( int iter = -1 ) const ; void WriteTransformFiles ( std :: string iter_prefix ) const ; void WritePointFiles ( int iter = -1 ); void WritePointFiles ( std :: string iter_prefix ); void WritePointFilesWithFeatures ( int iter = -1 ); void WritePointFilesWithFeatures ( std :: string iter_prefix ); void WriteEnergyFiles (); void WriteSplitFiles ( std :: string name ); void WriteCuttingPlanePoints ( int iter = -1 ); void WriteParameters ( std :: string output_dir = \"\" ); void ReportBadParticles (); int SetParameters (); void WriteModes (); void PrintStartMessage ( std :: string str , unsigned int vlevel = 0 ) const ; void PrintDoneMessage ( unsigned int vlevel = 0 ) const ; virtual void UpdateExportablePoints (); virtual std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms (); void UpdateProject (); // return a checkpoint dir for the current iteration std :: string GetCheckpointDir (); std :: shared_ptr < Sampler > m_sampler ; ProcrustesRegistration :: Pointer m_procrustes ; std :: shared_ptr < ParticleGoodBadAssessment > m_good_bad ; unsigned int m_verbosity_level = 0 ; std :: vector < std :: vector < itk :: Point < double >>> m_local_points , m_global_points ; int m_checkpoint_counter = 0 ; int m_procrustes_counter = 0 ; bool m_use_cutting_planes = false ; bool m_optimizing = false ; bool m_use_regression = false ; bool m_use_mixed_effects = false ; bool m_use_disentangled_ssm = false ; // IO Parameters unsigned int m_domains_per_shape = 1 ; shapeworks :: DomainType m_domain_type = shapeworks :: DomainType :: Image ; std :: vector < int > m_number_of_particles ; std :: string m_transform_file ; std :: string m_prefix_transform_file ; std :: string m_output_dir ; std :: string m_output_transform_file ; bool m_output_transform_files = false ; bool m_mesh_based_attributes = false ; std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_attributes_per_domain ; int m_distribution_domain_id = -1 ; std :: string m_output_cutting_plane_file ; // Optimization Parameters int m_processing_mode = 3 ; int m_adaptivity_mode = 0 ; double m_adaptivity_strength = 0.0 ; bool m_mesh_ffc_mode = 0 ; unsigned int m_timepts_per_subject = 1 ; int m_optimization_iterations = 2000 ; int m_optimization_iterations_completed = 0 ; int m_iterations_per_split = 1000 ; bool m_use_shape_statistics_in_init = false ; unsigned int m_procrustes_interval = 3 ; bool m_procrustes_scaling = true ; bool m_procrustes_rotation_translation = true ; double m_relative_weighting = 1.0 ; double m_initial_relative_weighting = 0.05 ; double m_starting_regularization = 1000 ; double m_ending_regularization = 1.0 ; int m_recompute_regularization_interval = 1 ; bool m_save_init_splits = false ; unsigned int m_checkpointing_interval = 50 ; int m_keep_checkpoints = 0 ; double m_cotan_sigma_factor = 5.0 ; std :: vector < int > m_particle_flags ; std :: vector < int > m_domain_flags ; double m_narrow_band = 0.0 ; bool m_narrow_band_set = false ; bool m_fixed_domains_present = false ; int m_use_shape_statistics_after = -1 ; std :: string m_python_filename ; bool m_geodesics_enabled = false ; // geodesics disabled by default size_t m_geodesic_cache_size_multiplier = 0 ; // 0 => VtkMeshWrapper will use a heuristic to determine cache size // m_spacing is used to scale the random update vector for particle splitting. double m_spacing = 0 ; std :: vector < std :: string > m_filenames ; int m_num_shapes = 0 ; std :: vector < double > m_energy_a ; std :: vector < double > m_energy_b ; std :: vector < double > m_total_energy ; bool m_log_energy = false ; std :: string m_str_energy ; // GoodBadAssessment std :: vector < std :: vector < int >> m_bad_ids ; double m_normal_angle = itk :: Math :: pi / 2.0 ; bool m_perform_good_bad = false ; std :: vector < int > m_cutting_planes_per_input ; std :: vector < int > m_spheres_per_input ; bool m_file_output_enabled = true ; bool m_aborted = false ; std :: vector < std :: array < itk :: Point < double > , 3 >> m_cut_planes ; int m_total_iterations = 0 ; int m_iteration_count = 0 ; int m_split_number = 0 ; int current_particle_iterations_ = 0 ; int total_particle_iterations_ = 0 ; std :: function < void ( void ) > iteration_callback_ ; bool show_visualizer_ = false ; shapeworks :: OptimizationVisualizer visualizer_ ; std :: string particle_format_ = \"particles\" ; std :: shared_ptr < Project > project_ ; std :: chrono :: system_clock :: time_point m_start_time ; std :: chrono :: system_clock :: time_point m_last_update_time ; std :: chrono :: system_clock :: time_point m_last_remaining_update_time ; std :: string m_remaining_time_message ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PaintWidget_8h.html","text":"Studio/Visualization/PaintWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PaintWidget Source code #pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#studiovisualizationpaintwidgeth","text":"","title":"Studio/Visualization/PaintWidget.h"},{"location":"api/Files/PaintWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PaintWidget_8h.html#classes","text":"Name class shapeworks::PaintWidget","title":"Classes"},{"location":"api/Files/PaintWidget_8h.html#source-code","text":"#pragma once #include \"vtkAbstractWidget.h\" class vtkContourRepresentation ; class vtkPolyData ; class vtkPointPlacer ; class vtkRenderer ; namespace shapeworks { class Viewer ; class StudioSphereRepresentation ; class PaintWidget : public vtkAbstractWidget { public : // Description: // Instantiate this class. static PaintWidget * New (); // Description: // Standard methods for a VTK class. vtkTypeMacro ( PaintWidget , vtkAbstractWidget ); void PrintSelf ( ostream & os , vtkIndent indent ); // Description: // Set / get the Point Placer. The point placer is // responsible for converting display coordinates into // world coordinates according to some constraints, and // for validating world positions. // void SetPointPlacer( vtkPointPlacer * ); vtkSetMacro ( PointPlacer , vtkPointPlacer * ); vtkGetMacro ( PointPlacer , vtkPointPlacer * ); vtkSetMacro ( Renderer , vtkRenderer * ); vtkGetMacro ( Renderer , vtkRenderer * ); void set_viewer ( Viewer * viewer ); // Description: // The method for activiating and deactiviating this widget. This method // must be overridden because it is a composite widget and does more than // its superclasses' vtkAbstractWidget::SetEnabled() method. virtual void SetEnabled ( int ); // Description: // Specify an instance of vtkWidgetRepresentation used to represent this // widget in the scene. Note that the representation is a subclass of vtkProp // so it can be added to the renderer independent of the widget. void SetRepresentation ( vtkContourRepresentation * r ) { this -> Superclass :: SetWidgetRepresentation ( reinterpret_cast < vtkWidgetRepresentation *> ( r )); } // Description: // Create the default widget representation if one is not set. void CreateDefaultRepresentation (); void update_position (); // Description: // Initialize the contour widget from a user supplied set of points. The // state of the widget decides if you are still defining the widget, or // if you've finished defining (added the last point) are manipulating // it. Note that if the polydata supplied is closed, the state will be // set to manipulate. // State: Define = 0, Manipulate = 1. virtual void Initialize ( vtkPolyData * poly , int state = 1 ); virtual void Initialize () { this -> Initialize ( NULL ); } void set_brush_size ( double size ); double get_brush_size (); void set_brush_color ( float r , float g , float b ); protected : PaintWidget (); ~ PaintWidget (); // The state of the widget // BTX enum { Start , Paint , Erase }; // ETX int WidgetState ; vtkPointPlacer * PointPlacer ; vtkRenderer * Renderer ; // Callback interface to capture events when // placing the widget. static void StartPaintAction ( vtkAbstractWidget * w ); static void EndPaintAction ( vtkAbstractWidget * w ); static void StartEraseAction ( vtkAbstractWidget * w ); static void EndEraseAction ( vtkAbstractWidget * w ); static void MoveAction ( vtkAbstractWidget * w ); static void LeaveAction ( vtkAbstractWidget * w ); static void KeyPressAction ( vtkAbstractWidget * w ); bool use_point_placer ( double displayPos [ 2 ], int newState ); void set_cursor ( int requestedShape ); StudioSphereRepresentation * sphere_cursor_ ; bool mouse_in_window_ ; Viewer * viewer_ ; private : PaintWidget ( const PaintWidget & ); // Not implemented void operator = ( const PaintWidget & ); // Not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Parameters_8h.html","text":"Libs/Project/Parameters.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Parameters Parameter settings. Source code #pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#libsprojectparametersh","text":"","title":"Libs/Project/Parameters.h"},{"location":"api/Files/Parameters_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Parameters_8h.html#classes","text":"Name class shapeworks::Parameters Parameter settings.","title":"Classes"},{"location":"api/Files/Parameters_8h.html#source-code","text":"#pragma once #include \"ProjectUtils.h\" #include \"Variant.h\" namespace shapeworks { class Parameters { using StringMap = project :: types :: StringMap ; public : static constexpr const char * ANALYSIS_PARAMS = \"analysis\" ; static constexpr const char * GROOM_PARAMS = \"groom\" ; static constexpr const char * OPTIMIZE_PARAMS = \"optimize\" ; static constexpr const char * STUDIO_PARAMS = \"studio\" ; static constexpr const char * PROJECT_PARAMS = \"project\" ; static constexpr const char * DEEPSSM_PARAMS = \"deepssm\" ; Parameters (); explicit Parameters ( StringMap map ); Variant get ( std :: string key , Variant default_value ); bool key_exists ( std :: string key ); void set ( std :: string key , Variant value ); void remove_entry ( std :: string key ); void set_map ( StringMap map ); StringMap get_map () const ; void reset_parameters (); private : StringMap map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaJob_8h.html","text":"Studio/Job/ParticleAreaJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaJob Source code #pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#studiojobparticleareajobh","text":"","title":"Studio/Job/ParticleAreaJob.h"},{"location":"api/Files/ParticleAreaJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaJob_8h.html#classes","text":"Name class shapeworks::ParticleAreaJob","title":"Classes"},{"location":"api/Files/ParticleAreaJob_8h.html#source-code","text":"#pragma once #include #include #include class vtkLookupTable ; namespace shapeworks { class Session ; class ParticleAreaJob : public Job { Q_OBJECT public : ParticleAreaJob ( QSharedPointer < Session > session ); void run () override ; QString name () override { return \"Particle Normal Evaluation\" ; } const Eigen :: VectorXf & get_mean_areas () const { return mean_areas_ ; } const Eigen :: VectorXf & get_stddev_areas () const { return stddev_areas_ ; } Q_SIGNALS : private : QSharedPointer < Session > session_ ; Eigen :: VectorXf mean_areas_ ; Eigen :: VectorXf stddev_areas_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleAreaPanel_8h.html","text":"Studio/Analysis/ParticleAreaPanel.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleAreaPanel Source code #pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#studioanalysisparticleareapanelh","text":"","title":"Studio/Analysis/ParticleAreaPanel.h"},{"location":"api/Files/ParticleAreaPanel_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleAreaPanel_8h.html#classes","text":"Name class shapeworks::ParticleAreaPanel","title":"Classes"},{"location":"api/Files/ParticleAreaPanel_8h.html#source-code","text":"#pragma once #include #include // Qt #include #include // ShapeWorks #include // Studio #include #include #include #include class Ui_ParticleAreaPanel ; class JKQTPlotter ; namespace shapeworks { class Session ; class Lightbox ; class ShapeWorksStudioApp ; class ParticleAreaPanel : public QWidget { Q_OBJECT ; public : ParticleAreaPanel ( QWidget * parent = 0 ); ~ ParticleAreaPanel (); void set_session ( QSharedPointer < Session > session ); void reset (); bool get_display_particle_area () const ; Eigen :: VectorXf get_computed_values () const ; std :: string get_computed_value_name () const ; public Q_SLOTS : void run_clicked (); void show_particle_area_clicked (); void display_option_changed (); void handle_job_progress ( int progress ); void handle_job_complete (); Q_SIGNALS : void update_view (); private : void update_run_button (); void update_graphs (); QSharedPointer < Session > session_ ; QSharedPointer < ParticleAreaJob > job_ ; Ui_ParticleAreaPanel * ui_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleArea_8h.html","text":"Libs/Analyze/ParticleArea.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleArea Source code #pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#libsanalyzeparticleareah","text":"","title":"Libs/Analyze/ParticleArea.h"},{"location":"api/Files/ParticleArea_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleArea_8h.html#classes","text":"Name class shapeworks::ParticleArea","title":"Classes"},{"location":"api/Files/ParticleArea_8h.html#source-code","text":"#pragma once #include #include #include #include \"vtkPolyData.h\" namespace shapeworks { class ParticleArea { public : static void assign_vertex_particles ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); static void assign_vertex_colors ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < QColor > colors ); static void assign_vertex_areas ( vtkSmartPointer < vtkPolyData > poly_data , Eigen :: VectorXd areas ); static std :: vector < QColor > colors_from_lut ( vtkSmartPointer < vtkLookupTable > lut ); static Eigen :: VectorXd compute_particle_triangle_areas ( vtkSmartPointer < vtkPolyData > poly_data , std :: vector < itk :: Point < double >> particles ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleColors_8h.html","text":"Studio/Visualization/ParticleColors.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleColors Supplies particle colors. Source code #pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#studiovisualizationparticlecolorsh","text":"","title":"Studio/Visualization/ParticleColors.h"},{"location":"api/Files/ParticleColors_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleColors_8h.html#classes","text":"Name class shapeworks::ParticleColors Supplies particle colors.","title":"Classes"},{"location":"api/Files/ParticleColors_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleColors : public QObject { Q_OBJECT ; public : enum ParticleColorsType { Distinct = 0 , Original = 1 }; Q_ENUM ( ParticleColorsType ); static vtkSmartPointer < vtkLookupTable > construct_distinct (); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleDomain_8h.html","text":"Libs/Optimize/Domain/ParticleDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleDomain Source code #pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#libsoptimizedomainparticledomainh","text":"","title":"Libs/Optimize/Domain/ParticleDomain.h"},{"location":"api/Files/ParticleDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleDomain_8h.html#classes","text":"Name class shapeworks::ParticleDomain","title":"Classes"},{"location":"api/Files/ParticleDomain_8h.html#source-code","text":"#pragma once #include \"DomainType.h\" #include \"Libs/Optimize/Constraints/Constraints.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleDomain { public : typedef std :: shared_ptr < ParticleDomain > Pointer ; using PointType = itk :: Point < double , 3 > ; using GradNType = vnl_matrix_fixed < float , 3 , 3 > ; using VectorDoubleType = vnl_vector_fixed < double , 3 > ; using VectorFloatType = vnl_vector_fixed < float , 3 > ; virtual bool ApplyConstraints ( PointType & p , int idx , bool dbg = false ) const = 0 ; // todo update should be const? virtual PointType UpdateParticlePosition ( const PointType & point , int idx , VectorDoubleType & update ) const = 0 ; virtual void InvalidateParticlePosition ( int idx ) const {} virtual VectorDoubleType ProjectVectorToSurfaceTangent ( VectorDoubleType & gradE , const PointType & pos , int idx ) const = 0 ; virtual VectorFloatType SampleGradientAtPoint ( const PointType & point , int idx ) const = 0 ; virtual VectorFloatType SampleNormalAtPoint ( const PointType & point , int idx ) const = 0 ; virtual GradNType SampleGradNAtPoint ( const PointType & p , int idx ) const = 0 ; virtual double Distance ( const PointType & a , int idx_a , const PointType & b , int idx_b , VectorDoubleType * out_grad = nullptr ) const { if ( out_grad != nullptr ) { for ( int i = 0 ; i < DIMENSION ; i ++ ) { ( * out_grad )[ i ] = a [ i ] - b [ i ]; } } return a . EuclideanDistanceTo ( b ); } virtual double SquaredDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b ) const { return a . SquaredEuclideanDistanceTo ( b ); } virtual bool IsWithinDistance ( const PointType & a , int idx_a , const PointType & b , int idx_b , double test_dist , double & distance ) const { distance = this -> Distance ( a , idx_a , b , idx_b ); return distance < test_dist ; } virtual double GetCurvature ( const PointType & p , int idx ) const = 0 ; virtual double GetSurfaceMeanCurvature () const = 0 ; virtual double GetSurfaceStdDevCurvature () const = 0 ; virtual const PointType & GetLowerBound () const = 0 ; virtual const PointType & GetUpperBound () const = 0 ; virtual PointType GetZeroCrossingPoint () const = 0 ; virtual double GetSurfaceArea () const = 0 ; virtual PointType GetValidLocationNear ( PointType p ) const = 0 ; virtual double GetMaxDiameter () const = 0 ; virtual void DeleteImages () = 0 ; virtual void DeletePartialDerivativeImages () = 0 ; virtual void UpdateZeroCrossingPoint () = 0 ; bool IsDomainFixed () const { return m_FixedDomain ; } virtual shapeworks :: DomainType GetDomainType () const = 0 ; std :: shared_ptr < shapeworks :: Constraints > GetConstraints () const { return constraints ; } // Use `random` to advance a particle and return a new position virtual PointType GetPositionAfterSplit ( const PointType & pt , const VectorDoubleType & local_direction , const VectorDoubleType & global_direction , double epsilon ) const { // todo this has been copied from itkParticleSystem::AdvancedAllParticleSplitting. // Ideally, we should compute a direction that is \"consistent\" depending on the domain type and use the // `UpdateParticlePosition` API to advance the particle. See ContourDomain for an example. Leaving this be for // now because we'd have to retest all MeshDomain and ImageDomain use cases if this behaviour changes. PointType new_pt ; for ( unsigned int k = 0 ; k < 3 ; k ++ ) { new_pt [ k ] = pt [ k ] + epsilon * local_direction [ k ] / 5. ; } return new_pt ; } void SetDomainID ( int id ) { this -> m_DomainID = id ; } void SetDomainName ( std :: string name ) { this -> m_DomainName = name ; } protected : // is this a fixed domain or not? We start as fixed and if an image or mesh is set, we set this to false bool m_FixedDomain { true }; int m_DomainID { -1 }; std :: string m_DomainName ; ParticleDomain () { this -> constraints = std :: make_shared < shapeworks :: Constraints > (); } virtual ~ ParticleDomain () {} std :: shared_ptr < shapeworks :: Constraints > constraints ; private : ParticleDomain ( const ParticleDomain & ); // purposely not implemented void operator = ( const ParticleDomain & ); // purposely not implemented }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleEvents_8h.html","text":"Libs/Optimize/ParticleEvents.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleEvent Source code #pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#libsoptimizeparticleeventsh","text":"","title":"Libs/Optimize/ParticleEvents.h"},{"location":"api/Files/ParticleEvents_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleEvents_8h.html#classes","text":"Name class shapeworks::ParticleEvent","title":"Classes"},{"location":"api/Files/ParticleEvents_8h.html#source-code","text":"#pragma once #include \"itkEventObject.h\" namespace shapeworks { class ParticleEvent : public itk :: EventObject { public : typedef ParticleEvent Self ; ParticleEvent () {} virtual ~ ParticleEvent () {} ParticleEvent ( const ParticleEvent & v ) : itk :: EventObject ( v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; } const ParticleEvent & operator = ( const ParticleEvent & v ) { m_PositionIndex = v . m_PositionIndex ; m_DomainIndex = v . m_DomainIndex ; return * this ; } virtual const char * GetEventName () const { return \"ParticleEvent\" ; } virtual bool CheckEvent ( const :: itk :: EventObject * e ) const { return dynamic_cast < const Self *> ( e ); } virtual :: itk :: EventObject * MakeObject () const { return new Self ; } inline void SetPositionIndex ( int i ) { m_PositionIndex = i ; } int GetPositionIndex () const { return m_PositionIndex ; } inline void SetDomainIndex ( int i ) { m_DomainIndex = i ; } int GetDomainIndex () const { return m_DomainIndex ; } private : int m_PositionIndex ; int m_DomainIndex ; }; itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ); itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ); itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ); itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ); itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ); } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleFile_8h.html","text":"Libs/Particles/ParticleFile.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::particles Source code #pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#libsparticlesparticlefileh","text":"","title":"Libs/Particles/ParticleFile.h"},{"location":"api/Files/ParticleFile_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::particles","title":"Namespaces"},{"location":"api/Files/ParticleFile_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { namespace particles { //--------------------------------------------------------------------------- Eigen :: VectorXd read_particles ( std :: string filename ); //--------------------------------------------------------------------------- std :: vector < itk :: Point < double , 3 >> read_particles_as_vector ( std :: string filename ); //--------------------------------------------------------------------------- void write_particles ( std :: string filename , const Eigen :: VectorXd & points ); //--------------------------------------------------------------------------- void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 >> points ); } // namespace particles } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html","text":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGaussianModeWriter Source code #pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#libsoptimizeutilsparticlegaussianmodewriterh","text":"","title":"Libs/Optimize/Utils/ParticleGaussianModeWriter.h"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#classes","text":"Name class shapeworks::ParticleGaussianModeWriter","title":"Classes"},{"location":"api/Files/ParticleGaussianModeWriter_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Matrix/LegacyShapeMatrix.h\" #include \"itkDataObject.h\" namespace shapeworks { template < unsigned int VDimension > class ParticleGaussianModeWriter : public itk :: DataObject { public : typedef ParticleGaussianModeWriter Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef DataObject Superclass ; itkTypeMacro ( ParticleGaussianModeWriter , DataObject ); typedef ParticleSystem ParticleSystemType ; typedef LegacyShapeMatrix ShapeMatrixType ; typedef typename ShapeMatrixType :: DataType DataType ; typedef typename ParticleSystemType :: PointType PointType ; typedef vnl_vector < DataType > vnl_vector_type ; typedef vnl_matrix < DataType > vnl_matrix_type ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); void Update () const ; int GetNumberOfModes () const { return m_NumberOfModes ; } void SetNumberOfModes ( int b ) { m_NumberOfModes = b ; } void SetShapeMatrix ( ShapeMatrixType * s ) { m_ShapeMatrix = s ; } ShapeMatrixType * GetShapeMatrix () { return m_ShapeMatrix . GetPointer (); } const ShapeMatrixType * GetShapeMatrix () const { return m_ShapeMatrix . GetPointer (); } void SetFileName ( const std :: string & s ) { m_FileName = s ; } void SetFileName ( const char * s ) { m_FileName = s ; } const std :: string & GetFileName () const { return m_FileName ; } protected : ParticleGaussianModeWriter () : m_NumberOfModes ( 3 ) {} virtual ~ ParticleGaussianModeWriter () {} void operator = ( const ParticleGaussianModeWriter & ); ParticleGaussianModeWriter ( const ParticleGaussianModeWriter & ); typename ShapeMatrixType :: Pointer m_ShapeMatrix ; int m_NumberOfModes ; std :: string m_FileName ; }; } // namespace shapeworks #include \"ParticleGaussianModeWriter.txx\" Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html","text":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. Source code #pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#libsoptimizeutilsparticlegoodbadassessmenth","text":"","title":"Libs/Optimize/Utils/ParticleGoodBadAssessment.h"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#classes","text":"Name class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system.","title":"Classes"},{"location":"api/Files/ParticleGoodBadAssessment_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"ParticleSystem.h\" namespace shapeworks { class ParticleGoodBadAssessment { public : using MeanCurvatureCacheType = MeanCurvatureContainer < float , 3 > ; void set_domains_per_shape ( int i ) { domains_per_shape_ = i ; } void set_criterion_angle ( double a ) { criterion_angle_ = a ; } std :: vector < std :: vector < int >> run_assessment ( const ParticleSystem * ps , MeanCurvatureCacheType * mean_curvature_cache ); private : vnl_matrix < double > compute_particles_normals ( int d , const ParticleSystem * ps ); int domains_per_shape_ = 1 ; double criterion_angle_ = 90.0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNeighborhood Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#libsoptimizeneighborhoodparticleneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleNeighborhood.h"},{"location":"api/Files/ParticleNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleNeighborhood","title":"Classes"},{"location":"api/Files/ParticleNeighborhood_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" namespace shapeworks { class ParticleNeighborhood : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleNeighborhood Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleNeighborhood , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef itk :: Point < double , VDimension > PointType ; using DomainType = shapeworks :: ParticleDomain ; typedef GenericContainer < PointType > PointContainerType ; typedef std :: vector < ParticlePointIndexPair > PointVectorType ; itkSetObjectMacro ( PointContainer , PointContainerType ); itkGetConstObjectMacro ( PointContainer , PointContainerType ); virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); } virtual unsigned int FindNeighborhoodPoints ( const PointType & , int idx , double , PointVectorType & ) const { itkExceptionMacro ( \"No algorithm for finding neighbors has been specified.\" ); return 0 ; } // itkSetObjectMacro(Domain, DomainType); // itkGetConstObjectMacro(Domain, DomainType); virtual void SetDomain ( DomainType :: Pointer domain ) { m_Domain = domain ; this -> Modified (); }; DomainType :: Pointer GetDomain () const { return m_Domain ; }; virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ) {} virtual void RemovePosition ( unsigned int idx , int threadId = 0 ) {} protected : ParticleNeighborhood () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } virtual ~ ParticleNeighborhood (){}; private : ParticleNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented typename PointContainerType :: Pointer m_PointContainer ; typename DomainType :: Pointer m_Domain ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html","text":"Studio/Job/ParticleNormalEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluationJob Source code #pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#studiojobparticlenormalevaluationjobh","text":"","title":"Studio/Job/ParticleNormalEvaluationJob.h"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluationJob","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Session ; class ParticleNormalEvaluationJob : public Job { Q_OBJECT public : ParticleNormalEvaluationJob ( QSharedPointer < Session > session , double max_angle_degrees ); void run () override ; QString name () override ; std :: vector < bool > get_good_bad (); Q_SIGNALS : void result_ready ( std :: vector < bool > good_bad ); private : QSharedPointer < Session > session_ ; double max_angle_degrees_ ; std :: vector < bool > good_bad_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleNormalEvaluation_8h.html","text":"Libs/Particles/ParticleNormalEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleNormalEvaluation Source code #pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#libsparticlesparticlenormalevaluationh","text":"","title":"Libs/Particles/ParticleNormalEvaluation.h"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleNormalEvaluation","title":"Classes"},{"location":"api/Files/ParticleNormalEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class VtkMeshWrapper ; class ParticleNormalEvaluation { public : static std :: vector < double > evaluate_particle_normals ( const Eigen :: MatrixXd & particles , const Eigen :: MatrixXd & normals ); static std :: vector < bool > threshold_particle_normals ( std :: vector < double > angles , double max_angle_degrees ); static Eigen :: MatrixXd compute_particle_normals ( const Eigen :: MatrixXd & particles , std :: vector < std :: shared_ptr < VtkMeshWrapper >> meshes ); private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticlePointIndexPair_8h.html","text":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::ParticlePointIndexPair Source code #pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#libsoptimizeneighborhoodparticlepointindexpairh","text":"","title":"Libs/Optimize/Neighborhood/ParticlePointIndexPair.h"},{"location":"api/Files/ParticlePointIndexPair_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticlePointIndexPair_8h.html#classes","text":"Name struct shapeworks::ParticlePointIndexPair","title":"Classes"},{"location":"api/Files/ParticlePointIndexPair_8h.html#source-code","text":"#pragma once #include \"itkPoint.h\" namespace shapeworks { struct ParticlePointIndexPair { typedef itk :: Point < double , 3 > PointType ; ParticlePointIndexPair () {} ParticlePointIndexPair ( const PointType & p , unsigned int i = 0 ) { Point = p ; Index = i ; } ParticlePointIndexPair ( const ParticlePointIndexPair & o ) { this -> operator = ( o ); } const ParticlePointIndexPair & operator = ( const ParticlePointIndexPair & o ) { Point = o . Point ; Index = o . Index ; return * this ; } PointType Point ; unsigned int Index ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionDomain_8h.html","text":"Libs/Optimize/Domain/ParticleRegionDomain.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionDomain Source code #pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#libsoptimizedomainparticleregiondomainh","text":"","title":"Libs/Optimize/Domain/ParticleRegionDomain.h"},{"location":"api/Files/ParticleRegionDomain_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionDomain_8h.html#classes","text":"Name class shapeworks::ParticleRegionDomain","title":"Classes"},{"location":"api/Files/ParticleRegionDomain_8h.html#source-code","text":"#pragma once #include \"ParticleDomain.h\" namespace shapeworks { class ParticleRegionDomain : public ParticleDomain { public : using Pointer = std :: shared_ptr < ParticleRegionDomain > ; typedef typename ParticleDomain :: PointType PointType ; virtual bool ApplyConstraints ( PointType & p ) const { bool changed = false ; for ( unsigned int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < GetLowerBound ()[ i ]) { changed = true ; p [ i ] = GetLowerBound ()[ i ]; } else if ( p [ i ] > GetUpperBound ()[ i ]) { changed = true ; p [ i ] = GetUpperBound ()[ i ]; } } return changed ; } virtual const PointType & GetUpperBound () const { return m_UpperBound ; } virtual const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType _UpperBound ) { m_UpperBound = _UpperBound ; } void SetLowerBound ( const PointType _LowerBound ) { m_LowerBound = _LowerBound ; } void SetRegion ( const PointType & lowerBound , const PointType & upperBound ) { SetLowerBound ( lowerBound ); SetUpperBound ( upperBound ); } protected : ParticleRegionDomain () {} virtual ~ ParticleRegionDomain (){}; void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << \"LowerBound = \" << GetLowerBound () << std :: endl ; os << \"UpperBound = \" << GetUpperBound () << std :: endl ; } inline bool IsInsideBuffer ( const PointType & p ) const { for ( int i = 0 ; i < DIMENSION ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } private : PointType m_LowerBound ; PointType m_UpperBound ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleRegionNeighborhood Source code #pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#libsoptimizeneighborhoodparticleregionneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleRegionNeighborhood","title":"Classes"},{"location":"api/Files/ParticleRegionNeighborhood_8h.html#source-code","text":"#pragma once #include \"ParticleNeighborhood.h\" #include \"PowerOfTwoPointTree.h\" namespace shapeworks { class ParticleRegionNeighborhood : public ParticleNeighborhood { public : constexpr static unsigned int VDimension = 3 ; typedef ParticleRegionNeighborhood Self ; typedef ParticleNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; using DomainType = ParticleDomain ; itkNewMacro ( Self ); itkTypeMacro ( ParticleRegionNeighborhood , ParticleNeighborhood ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef typename Superclass :: PointVectorType PointVectorType ; typedef PowerOfTwoPointTree PointTreeType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , double ) const ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetDomain ( DomainType :: Pointer p ) override ; itkSetMacro ( TreeLevels , unsigned int ); itkGetMacro ( TreeLevels , unsigned int ); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { os << indent << \"m_TreeLevels = \" << m_TreeLevels << std :: endl ; m_Tree -> PrintSelf ( os , indent ); Superclass :: PrintSelf ( os , indent ); } virtual void AddPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void SetPosition ( const PointType & p , unsigned int idx , int threadId = 0 ); virtual void RemovePosition ( unsigned int idx , int threadId = 0 ); protected : ParticleRegionNeighborhood () : m_TreeLevels ( 3 ) { m_Tree = PointTreeType :: New (); m_IteratorMap = IteratorMapType :: New (); } virtual ~ ParticleRegionNeighborhood (){}; struct IteratorNodePair { typedef typename PointTreeType :: NodePointerType NodePointerType ; typedef typename PointTreeType :: PointListType :: iterator IteratorType ; IteratorNodePair () {} ~ IteratorNodePair () {} IteratorNodePair ( const IteratorType & p , const NodePointerType & n ) { Iterator = p ; NodePointer = n ; } IteratorNodePair ( const IteratorNodePair & o ) { this -> operator = ( o ); } const IteratorNodePair & operator = ( const IteratorNodePair & o ) { Iterator = o . Iterator ; NodePointer = o . NodePointer ; return * this ; } IteratorType Iterator ; NodePointerType NodePointer ; }; typedef GenericContainer < IteratorNodePair > IteratorMapType ; protected : typename PointTreeType :: Pointer m_Tree ; typename IteratorMapType :: Pointer m_IteratorMap ; unsigned int m_TreeLevels ; private : ParticleRegionNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleShapeStatistics_8h.html","text":"Libs/Particles/ParticleShapeStatistics.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleShapeStatistics Source code #pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#libsparticlesparticleshapestatisticsh","text":"","title":"Libs/Particles/ParticleShapeStatistics.h"},{"location":"api/Files/ParticleShapeStatistics_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleShapeStatistics_8h.html#classes","text":"Name class shapeworks::ParticleShapeStatistics","title":"Classes"},{"location":"api/Files/ParticleShapeStatistics_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { class Project ; class ParticleShapeStatistics { public : constexpr static int VDimension = 3 ; ParticleShapeStatistics (){}; ParticleShapeStatistics ( std :: shared_ptr < Project > project ); ~ ParticleShapeStatistics (){}; int DoPCA ( std :: vector < std :: vector < Point >> global_pts , int domainsPerShape = 1 ); int DoPCA ( ParticleSystemEvaluation particleSystem , int domainsPerShape = 1 ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); int ImportPoints ( std :: vector < Eigen :: VectorXd > points , std :: vector < int > group_ids ); void ComputeMultiLevelAnalysisStatistics ( std :: vector < Eigen :: VectorXd > points , unsigned int dps ); int ComputeShapeDevModesForMca (); int ComputeRelPoseModesForMca (); void SetNumberOfParticlesArray ( const std :: vector < int >& num_particles_array ); int ReadPointFiles ( const std :: string & s ); int ReloadPointFiles (); int WriteCSVFile ( const std :: string & s ); int WriteCSVFile2 ( const std :: string & s ); int ComputeModes (); int get_num_modes () const ; int PrincipalComponentProjections (); int FisherLinearDiscriminant ( unsigned int numModes ); int SampleSize () const { return m_numSamples ; } int Group1SampleSize () const { return m_numSamples1 ; } int Group2SampleSize () const { return m_numSamples2 ; } int NumberOfDimensions () const { return m_numDimensions ; } int NumberOfObjects () { return m_dps ; } // !Returns Number of Particles Array std :: vector < int > NumberOfPointsArray () { return m_num_particles_array ; } int GroupID ( unsigned int i ) const { return m_groupIDs [ i ]; } const std :: vector < int >& GroupID () const { return m_groupIDs ; } const Eigen :: MatrixXd & Eigenvectors () const { return m_eigenvectors ; } const std :: vector < double >& Eigenvalues () const { return m_eigenvalues ; } const Eigen :: MatrixXd & EigenvectorsRelPose () { return m_Eigenvectors_rel_pose ; } const std :: vector < double >& EigenvaluesShapeDev () { return m_Eigenvalues_shape_dev ; } const Eigen :: MatrixXd & EigenvectorsShapeDev () { return m_Eigenvectors_shape_dev ; } const std :: vector < double >& EigenvaluesRelPose () { return m_Eigenvalues_rel_pose ; } const Eigen :: VectorXd & MeanShapeDev () { return m_mean_shape_dev ; } const Eigen :: VectorXd & MeanRelPose () { return m_mean_rel_pose ; } const Eigen :: VectorXd & Mean () const { return m_mean ; } const Eigen :: VectorXd & Group1Mean () const { return m_mean1 ; } const Eigen :: VectorXd & Group2Mean () const { return m_mean2 ; } const Eigen :: VectorXd & NormalizedGroupDifference () const { return m_groupdiffnorm ; } const Eigen :: VectorXd & GroupDifference () const { return m_groupdiff ; } int ComputeMedianShape ( const int ID ); double L1Norm ( unsigned int a , unsigned int b ); Eigen :: MatrixXd & PCALoadings () { return m_principals ; } const Eigen :: VectorXd & FishersLDA () const { return m_fishersLD ; } const Eigen :: MatrixXd & ShapeMatrix () const { return m_shapes ; } const Eigen :: MatrixXd & RecenteredShape () const { return m_pointsMinusMean ; } const std :: vector < double >& PercentVarByMode () const { return m_percentVarByMode ; } int SimpleLinearRegression ( const std :: vector < double >& y , const std :: vector < double >& x , double & a , double & b ) const ; Eigen :: VectorXd get_compactness ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_specificity ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: VectorXd get_generalization ( const std :: function < void ( float ) >& progress_callback = nullptr ) const ; Eigen :: MatrixXd get_group1_matrix () const ; Eigen :: MatrixXd get_group2_matrix () const ; Eigen :: MatrixXd & matrix () { return m_Matrix ; }; private : unsigned int m_numSamples1 ; unsigned int m_numSamples2 ; unsigned int m_numSamples ; unsigned int m_domainsPerShape ; unsigned int m_numDimensions ; std :: vector < int > m_groupIDs ; Eigen :: MatrixXd m_eigenvectors ; std :: vector < double > m_eigenvalues ; Eigen :: VectorXd m_mean ; Eigen :: VectorXd m_mean1 ; Eigen :: VectorXd m_mean2 ; Eigen :: MatrixXd m_pointsMinusMean ; Eigen :: MatrixXd m_shapes ; Eigen :: MatrixXd m_projectedPMM1 ; Eigen :: MatrixXd m_projectedPMM2 ; Eigen :: VectorXd m_projectedMean1 ; Eigen :: VectorXd m_projectedMean2 ; std :: vector < double > m_fishersProjection ; std :: vector < double > m_percentVarByMode ; Eigen :: VectorXd m_fishersLD ; Eigen :: MatrixXd m_principals ; Eigen :: VectorXd m_groupdiff ; Eigen :: VectorXd m_groupdiffnorm ; // Variables for MLCA unsigned int m_dps ; // Number of objects in the multi-object shape structure unsigned int m_N ; // Number of Subjects std :: vector < int > m_num_particles_array ; // Number of Particles for each object in the multi-object shape structure Eigen :: MatrixXd m_Eigenvectors_rel_pose ; // Eigenvectors defined for relative pose subspace Eigen :: MatrixXd m_Eigenvectors_shape_dev ; // Eigenvectors defined for morphological subspace std :: vector < double > m_Eigenvalues_rel_pose ; // Eigenvalues defined in relative pose subspace std :: vector < double > m_Eigenvalues_shape_dev ; // Eigenvectors defined in morphological subspace Eigen :: MatrixXd m_pointsMinusMean_for_rel_pose ; Eigen :: MatrixXd m_pointsMinusMean_for_shape_dev ; Eigen :: VectorXd m_mean_shape_dev ; Eigen :: VectorXd m_mean_rel_pose ; Eigen :: MatrixXd m_super_matrix ; // Shape Matrix reshaped, used to compute MLCA statistics // used to keep the points' files that needs to be reloaded when new updates come in. std :: vector < std :: string > m_pointsfiles ; Eigen :: MatrixXd m_Matrix ; Eigen :: MatrixXd m_group_1_matrix ; Eigen :: MatrixXd m_group_2_matrix ; // 0 = bad, 1 = good std :: vector < bool > m_goodPoints ; std :: vector < Eigen :: VectorXd > points_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html","text":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSurfaceNeighborhood Source code #pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#libsoptimizeneighborhoodparticlesurfaceneighborhoodh","text":"","title":"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#classes","text":"Name class shapeworks::ParticleSurfaceNeighborhood","title":"Classes"},{"location":"api/Files/ParticleSurfaceNeighborhood_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"ParticleRegionNeighborhood.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSurfaceNeighborhood : public ParticleRegionNeighborhood { public : typedef itk :: Image < float , 3 > TImage ; typedef TImage ImageType ; typedef ParticleSurfaceNeighborhood Self ; typedef ParticleRegionNeighborhood Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef typename ImageType :: PixelType NumericType ; typedef typename Superclass :: PointTreeType PointTreeType ; typedef vnl_vector_fixed < NumericType , TImage :: ImageDimension > GradientVectorType ; itkStaticConstMacro ( Dimension , unsigned int , 3 ); itkNewMacro ( Self ); itkTypeMacro ( ParticleSurfaceNeighborhood , ParticleRegionNeighborhood ); typedef typename Superclass :: PointType PointType ; typedef typename Superclass :: PointContainerType PointContainerType ; typedef shapeworks :: ImplicitSurfaceDomain < typename TImage :: PixelType > DomainType ; typedef typename Superclass :: PointVectorType PointVectorType ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , std :: vector < double >& , double ) const override ; virtual PointVectorType FindNeighborhoodPoints ( const PointType & , int idx , std :: vector < double >& , double ) const override ; // virtual unsigned int FindNeighborhoodPoints(const PointType &, double, PointVectorType &) const; void SetWeightingEnabled ( bool is_enabled ) { m_WeightingEnabled = is_enabled ; } bool IsWeightingEnabled () const { return m_WeightingEnabled ; } void SetForceEuclidean ( bool is_enabled ) { m_ForceEuclidean = is_enabled ; } bool IsForceEuclidean () const { return m_ForceEuclidean ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } protected : ParticleSurfaceNeighborhood () : m_FlatCutoff ( 0.30 ) {} virtual ~ ParticleSurfaceNeighborhood (){}; private : ParticleSurfaceNeighborhood ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented double m_FlatCutoff ; bool m_WeightingEnabled { true }; bool m_ForceEuclidean { false }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleSystemEvaluation_8h.html","text":"Libs/Particles/ParticleSystemEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystemEvaluation Source code #pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#libsparticlesparticlesystemevaluationh","text":"","title":"Libs/Particles/ParticleSystemEvaluation.h"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#classes","text":"Name class shapeworks::ParticleSystemEvaluation","title":"Classes"},{"location":"api/Files/ParticleSystemEvaluation_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class ParticleSystemEvaluation { public : ParticleSystemEvaluation ( const std :: vector < std :: string >& paths ); // Initialize particle system from eigen matrix (rows=dimensions, cols=num_samples) ParticleSystemEvaluation ( const Eigen :: MatrixXd & matrix ); const Eigen :: MatrixXd & Particles () const { return P ; }; const std :: vector < std :: string >& Paths () const { return paths ; } int N () const { return P . cols (); } int D () const { return P . rows (); } bool ExactCompare ( const ParticleSystemEvaluation & other ) const ; bool EvaluationCompare ( const ParticleSystemEvaluation & other ) const ; static bool ReadParticleFile ( std :: string filename , Eigen :: VectorXd & points ); private : friend struct SharedCommandData ; ParticleSystemEvaluation () { } // only for use by SharedCommandData since a ParticleSystem should always be valid, never \"empty\" Eigen :: MatrixXd P ; std :: vector < std :: string > paths ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ParticleSystem_8h.html","text":"Libs/Optimize/ParticleSystem.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system. Source code #pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#libsoptimizeparticlesystemh","text":"","title":"Libs/Optimize/ParticleSystem.h"},{"location":"api/Files/ParticleSystem_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ParticleSystem_8h.html#classes","text":"Name class shapeworks::ParticleSystem A facade class managing interactions with a particle system.","title":"Classes"},{"location":"api/Files/ParticleSystem_8h.html#source-code","text":"#pragma once #include #include #include #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ParticleDomain.h\" #include \"Libs/Optimize/Neighborhood/ParticleNeighborhood.h\" #include \"Observer.h\" #include \"ParticleEvents.h\" #include \"itkCommand.h\" #include \"itkDataObject.h\" #include \"itkEventObject.h\" #include \"itkObjectFactory.h\" #include \"itkPoint.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_inverse.h\" #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class ParticleSystem : public itk :: DataObject { public : static constexpr int VDimension = 3 ; typedef ParticleSystem Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ParticleSystem , itk :: DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); using DomainType = shapeworks :: ParticleDomain ; typedef itk :: Point < double , VDimension > PointType ; typedef ParticleNeighborhood NeighborhoodType ; typedef GenericContainer < PointType > PointContainerType ; typedef NeighborhoodType :: PointVectorType PointVectorType ; // typedef Transform TransformType; typedef vnl_matrix_fixed < double , VDimension + 1 , VDimension + 1 > TransformType ; typedef vnl_vector_fixed < double , VDimension > VectorType ; typedef vnl_matrix < double > VnlMatrixType ; void RegisterObserver ( Observer * attr ); void SynchronizePositions () { for ( unsigned int d = 0 ; d < this -> GetNumberOfDomains (); d ++ ) { for ( unsigned int p = 0 ; p < this -> GetNumberOfParticles ( d ); p ++ ) { this -> SetPosition ( this -> GetPosition ( p , d ), p , d ); } } } unsigned long int GetNumberOfParticles ( unsigned int d = 0 ) const { return m_Positions [ d ] -> GetSize (); } const PointType & AddPosition ( const PointType & , unsigned int d = 0 ); const PointType & SetPosition ( const PointType & , unsigned long int k , unsigned int d = 0 ); void RemovePosition ( unsigned long int k , unsigned int d = 0 ); PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) { return m_Positions [ d ] -> operator []( k ); } const PointType & GetPosition ( unsigned long int k , unsigned int d = 0 ) const { return m_Positions [ d ] -> operator []( k ); } PointType GetTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_Transforms [ d ] * m_PrefixTransforms [ d ]); } PointType GetPrefixTransformedPosition ( unsigned long int k , unsigned int d = 0 ) const { return this -> TransformPoint ( m_Positions [ d ] -> operator []( k ), m_PrefixTransforms [ d ]); } void SplitAllParticles ( double epsilon ); void SplitParticle ( double epsilon , unsigned int idx , unsigned int d = 0 ); void AdvancedAllParticleSplitting ( double epsilon , unsigned int domains_per_shape , unsigned int dom_to_process ); // Debug function void PrintParticleSystem (); void SetNeighborhood ( unsigned int , NeighborhoodType * ); void SetNeighborhood ( NeighborhoodType * n ) { this -> SetNeighborhood ( 0 , n ); } NeighborhoodType :: ConstPointer GetNeighborhood ( unsigned int k ) const { return m_Neighborhoods [ k ]; } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( const PointType & p , int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( p , idx , w , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , std :: vector < double > & distances , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , distances , r ); } inline PointVectorType FindNeighborhoodPoints ( unsigned int idx , std :: vector < double > & w , double r , unsigned int d = 0 ) const { return m_Neighborhoods [ d ] -> FindNeighborhoodPoints ( this -> GetPosition ( idx , d ), idx , w , r ); } // inline int FindNeighborhoodPoints(const PointType &p, double r, PointVectorType &vec, unsigned int d = 0) const // { return m_Neighborhoods[d]->FindNeighborhoodPoints(p, r, vec); } // PointVectorType FindTransformedNeighborhoodPoints(const PointType &p, double r, unsigned int d = 0) const // { // PointVectorType ans = m_Neighborhoods[d] // ->FindNeighborhoodPoints(this->TransformPoint(p, InverseTransform[d]), r); // for (unsigned int i = 0; i < ans.size(); i++) // { // ans.Point[i] = this->TransformPoint(ans.Point[i], m_Transform[d]); // } // return ans; // } void AddDomain ( DomainType :: Pointer input ); std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsBegin () const { return m_Domains . begin (); } std :: vector < DomainType :: Pointer >:: const_iterator GetDomainsEnd () const { return m_Domains . end (); } DomainType * GetDomain ( unsigned int i ) { return m_Domains [ i ]. get (); } DomainType * GetDomain () { return m_Domains [ 0 ]. get (); } const DomainType * GetDomain ( unsigned int i ) const { return m_Domains [ i ]. get (); } const DomainType * GetDomain () const { return m_Domains [ 0 ]. get (); } unsigned int GetNumberOfDomains () const { return m_Domains . size (); } void SetTransform ( unsigned int i , const TransformType & ); void SetTransform ( const TransformType & p ) { this -> SetTransform ( 0 , p ); } void SetPrefixTransform ( unsigned int i , const TransformType & ); void SetPrefixTransform ( const TransformType & p ) { this -> SetPrefixTransform ( 0 , p ); } std :: vector < TransformType >:: const_iterator GetTransformsBegin () const { return m_Transforms . begin (); } std :: vector < TransformType >:: const_iterator GetTransformsEnd () const { return m_Transforms . end (); } const TransformType & GetTransform ( unsigned int i ) const { return m_Transforms [ i ]; } const TransformType & GetTransform () const { return m_Transforms [ 0 ]; } TransformType GetTransform ( unsigned int i ) { return m_Transforms [ i ]; } TransformType GetTransform () { return m_Transforms [ 0 ]; } const TransformType & GetPrefixTransform ( unsigned int i ) const { return m_PrefixTransforms [ i ]; } const TransformType & GetPrefixTransform () const { return m_PrefixTransforms [ 0 ]; } TransformType GetPrefixTransform ( unsigned int i ) { return m_PrefixTransforms [ i ]; } TransformType GetPrefixTransform () { return m_PrefixTransforms [ 0 ]; } std :: vector < TransformType >:: const_iterator GetInverseTransformsBegin () const { return m_InverseTransforms . begin (); } std :: vector < TransformType >:: const_iterator GetInverseTransformsEnd () const { return m_InverseTransforms . end (); } const TransformType & GetInverseTransform ( unsigned int i ) const { return m_InverseTransforms [ i ]; } const TransformType & GetInverseTransform () const { return m_InverseTransforms [ 0 ]; } const TransformType & GetInversePrefixTransform ( unsigned int i ) const { return m_InversePrefixTransforms [ i ]; } const TransformType & GetInversePrefixTransform () const { return m_InversePrefixTransforms [ 0 ]; } const std :: vector < PointContainerType :: Pointer > & GetPositions () const { return m_Positions ; } const PointContainerType :: Pointer & GetPositions ( unsigned int d ) const { return m_Positions [ d ]; } void AddPositionList ( const std :: vector < PointType > & , unsigned int d = 0 ); PointType TransformPoint ( const PointType & , const TransformType & ) const ; VectorType TransformVector ( const VectorType & , const TransformType & ) const ; VnlMatrixType TransformNormalDerivative ( const VnlMatrixType & , const TransformType & ) const ; inline TransformType InvertTransform ( const TransformType & T ) const { // Note, vnl_inverse is optimized for small matrices 1x1 - 4x4 return vnl_inverse ( T ); } void FlagDomain ( unsigned int i ) { // ensure large enough while ( i >= this -> m_DomainFlags . size ()) { m_DomainFlags . push_back ( false ); } // set the flag m_DomainFlags [ i ] = true ; } void UnflagDomain ( unsigned int i ) { m_DomainFlags [ i ] = false ; } bool GetDomainFlag ( unsigned int i ) const { if ( i >= m_DomainFlags . size ()) { // not set return false ; } return m_DomainFlags [ i ]; } const std :: vector < bool > & GetDomainFlags () const { return m_DomainFlags ; } void SetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = true ; } } void ResetDomainFlags () { for ( unsigned int i = 0 ; i < m_DomainFlags . size (); i ++ ) { m_DomainFlags [ i ] = false ; } } void SetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = true ; } void ResetFixedParticleFlag ( unsigned int d , unsigned int i ) { m_FixedParticleFlags [ d ][ i ] = false ; } bool GetFixedParticleFlag ( unsigned int d , unsigned int i ) const { return m_FixedParticleFlags [ d ][ i ]; } void ResetFixedParticleFlags () { for ( unsigned d = 0 ; d < m_FixedParticleFlags . size (); d ++ ) { for ( unsigned int i = 0 ; i < m_FixedParticleFlags [ d ]. size (); i ++ ) m_FixedParticleFlags [ d ][ i ] = false ; } } void SetDomainsPerShape ( unsigned int num ) { m_DomainsPerShape = num ; m_FixedParticleFlags . resize ( m_DomainsPerShape ); } unsigned int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetNumberOfDomains ( unsigned int ); // Returns the maximum distance between nearest neighbors in domain dom double ComputeMaxDistNearestNeighbors ( size_t dom ); void SetFieldAttributes ( const std :: vector < std :: string > & field_attributes ) { m_FieldAttributes = field_attributes ; } const std :: vector < std :: string > & GetFieldAttributes () const { return m_FieldAttributes ; } protected : ParticleSystem (); void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; virtual ~ ParticleSystem (){}; TransformType & GetInverseTransform ( unsigned int i ) { return m_InverseTransforms [ i ]; } TransformType & GetInverseTransform () { return m_InverseTransforms [ 0 ]; } TransformType & GetInversePrefixTransform ( unsigned int i ) { return m_InversePrefixTransforms [ i ]; } TransformType & GetInversePrefixTransform () { return m_InversePrefixTransforms [ 0 ]; } private : ParticleSystem ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < PointContainerType :: Pointer > m_Positions ; std :: vector < DomainType :: Pointer > m_Domains ; unsigned int m_DomainsPerShape ; std :: vector < NeighborhoodType :: Pointer > m_Neighborhoods ; std :: vector < TransformType > m_Transforms ; std :: vector < TransformType > m_InverseTransforms ; std :: vector < TransformType > m_PrefixTransforms ; std :: vector < TransformType > m_InversePrefixTransforms ; std :: vector < unsigned long int > m_IndexCounters ; std :: vector < bool > m_DomainFlags ; std :: vector < std :: vector < bool >> m_FixedParticleFlags ; std :: vector < std :: string > m_FieldAttributes ; std :: mt19937 m_rand { 42 }; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Particles_8h.html","text":"Libs/Analyze/Particles.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. Source code #pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#libsanalyzeparticlesh","text":"","title":"Libs/Analyze/Particles.h"},{"location":"api/Files/Particles_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Particles_8h.html#classes","text":"Name class shapeworks::Particles Representation of correspondence points for a shape including multiple domains.","title":"Classes"},{"location":"api/Files/Particles_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Shapeworks.h\" class vtkTransform ; namespace shapeworks { class Particles { public : Particles () = default ; void set_local_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_world_particles ( int domain , const std :: vector < itk :: Point < double >>& particles ); void set_local_particles ( int domain , Eigen :: VectorXd particles ); void set_world_particles ( int domain , Eigen :: VectorXd particles ); std :: vector < Eigen :: VectorXd > get_local_particles () const ; // one Eigen::VectorXd per domain std :: vector < Eigen :: VectorXd > get_world_particles () const ; // one Eigen::VectorXd per domain Eigen :: VectorXd get_local_particles ( int domain ); Eigen :: VectorXd get_world_particles ( int domain ); Eigen :: VectorXd get_raw_world_particles ( int domain ); Eigen :: VectorXd get_combined_local_particles () const ; Eigen :: VectorXd get_combined_global_particles () const ; void set_combined_global_particles ( const Eigen :: VectorXd & particles ); std :: vector < itk :: Point < double >> get_local_points ( int domain ); std :: vector < itk :: Point < double >> get_world_points ( int domain ); int get_domain_for_combined_id ( int id ); void set_transform ( vtkSmartPointer < vtkTransform > transform ); void set_procrustes_transforms ( const std :: vector < vtkSmartPointer < vtkTransform >>& transforms ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_difference_vectors ( const Particles & other ) const ; static void save_particles_file ( std :: string filename , const Eigen :: VectorXd & points ); private : void transform_global_particles (); std :: vector < itk :: Point < double >> eigen_to_point_vector ( const Eigen :: VectorXd & particles ) const ; Eigen :: VectorXd combine ( const std :: vector < Eigen :: VectorXd >& particles ) const ; void set_particles ( int domain , std :: vector < itk :: Point < double >> particles , bool local ); std :: vector < Eigen :: VectorXd > local_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > global_particles_ ; // one for each domain std :: vector < Eigen :: VectorXd > transformed_global_particles_ ; // one for each domain vtkSmartPointer < vtkTransform > transform_ ; std :: vector < vtkSmartPointer < vtkTransform >> procrustes_transforms_ ; int alignment_type_ = -3 ; // not a valid value }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PlaneConstraint_8h.html","text":"Libs/Optimize/Constraints/PlaneConstraint.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneConstraint Source code #pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#libsoptimizeconstraintsplaneconstrainth","text":"","title":"Libs/Optimize/Constraints/PlaneConstraint.h"},{"location":"api/Files/PlaneConstraint_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneConstraint_8h.html#classes","text":"Name class shapeworks::PlaneConstraint","title":"Classes"},{"location":"api/Files/PlaneConstraint_8h.html#source-code","text":"#pragma once #include #include #include \"Libs/Optimize/Constraints/Constraint.h\" class vtkPlane ; namespace shapeworks { class PlaneConstraint : public Constraint { public : bool isViolated ( const Eigen :: Vector3d & pt ) const override ; void print () const override ; Eigen :: Vector3d getPlaneNormal () { return planeNormal_ ; } void setPlaneNormal ( const Eigen :: Vector3d & inPlane ) { planeNormal_ = inPlane ; } Eigen :: Vector3d getPlanePoint () { return planePoint_ ; } void setPlanePoint ( const vnl_vector < double > & point ) { planePoint_ = Eigen :: Vector3d ( point [ 0 ], point [ 1 ], point [ 2 ]); } void setPlanePoint ( const Eigen :: Vector3d & p ) { planePoint_ = p ; } Eigen :: Vector3d constraintGradient ( const Eigen :: Vector3d & pt ) const override { return - planeNormal_ ; } std :: vector < Eigen :: Vector3d > & points () { return points_ ; }; double getOffset (); void setOffset ( double offset ); double constraintEval ( const Eigen :: Vector3d & pt ) const override ; void updatePlaneFromPoints (); vtkSmartPointer < vtkPlane > getVTKPlane (); private : Eigen :: Vector3d planeNormal_ ; Eigen :: Vector3d planePoint_ ; std :: vector < Eigen :: Vector3d > points_ ; double offset_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PlaneWidget_8h.html","text":"Studio/Visualization/PlaneWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PlaneWidget PlaneWidget . Source code #include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#studiovisualizationplanewidgeth","text":"","title":"Studio/Visualization/PlaneWidget.h"},{"location":"api/Files/PlaneWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PlaneWidget_8h.html#classes","text":"Name class shapeworks::PlaneWidget PlaneWidget .","title":"Classes"},{"location":"api/Files/PlaneWidget_8h.html#source-code","text":"#include #include #include class vtkHandleWidget ; class vtkSphereSource ; class vtkPlaneSource ; class vtkPolyDataMapper ; class vtkActor ; namespace shapeworks { class Viewer ; class PlaneCallback ; class StudioHandleWidget ; class PlaneWidget { public : PlaneWidget ( Viewer * viewer ); ~ PlaneWidget (); void update (); void store_positions (); void update_glyph_properties (); void clear_planes (); void handle_right_click ( int domain , int plane , int point ); void delete_plane ( int domain , int plane_id ); void flip_plane ( int domain , int plane_id ); void apply_plane ( int domain , int plane_id ); void set_plane_offset ( int domain , int plane_id , int offset ); void finalize_plane_offset ( int domain , int plane_id ); private : void update_plane_points (); void update_planes (); vtkSmartPointer < StudioHandleWidget > create_handle (); void assign_handle_to_domain ( vtkSmartPointer < StudioHandleWidget > handle , int domain_id ); int count_plane_points (); int count_complete_planes (); PlaneConstraint & get_plane_reference ( int domain , int plane ); double get_offset_scale ( int domain_id ); bool block_update_ = false ; Viewer * viewer_ = nullptr ; // control points vtkSmartPointer < vtkSphereSource > sphere_ ; std :: vector < vtkSmartPointer < StudioHandleWidget >> handles_ ; // planes std :: vector < vtkSmartPointer < vtkPlaneSource >> plane_sources_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> plane_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> plane_actors_ ; vtkSmartPointer < PlaneCallback > callback_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PowerOfTwoPointTree_8h.html","text":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree Source code #pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#libsoptimizeneighborhoodpoweroftwopointtreeh","text":"","title":"Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#classes","text":"Name struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PowerOfTwoPointTreeNode class shapeworks::PowerOfTwoPointTree","title":"Classes"},{"location":"api/Files/PowerOfTwoPointTree_8h.html#source-code","text":"#pragma once #include #include \"ParticlePointIndexPair.h\" #include \"itkDataObject.h\" #include \"itkLightObject.h\" #include \"itkPoint.h\" #include \"itkTreeContainer.h\" #include \"itkWeakPointer.h\" namespace shapeworks { template < int a , int b > struct powstruct { static const int c = a * powstruct < a , b - 1 >:: c ; }; template < int a > struct powstruct < a , 0 > { static const int c = 1 ; }; class PowerOfTwoPointTreeNode : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTreeNode Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( PowerOfTwoPointTreeNode , LightObject ); itkNewMacro ( Self ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); typedef itk :: Point < double , VDimension > PointType ; typedef std :: list < ParticlePointIndexPair > PointListType ; bool operator == ( const PowerOfTwoPointTreeNode & o ) const { if (( m_LowerBound == o . m_LowerBound ) && ( m_UpperBound == o . m_UpperBound )) return true ; else return false ; } bool IsLeaf () const { if ( m_Branches [ 0 ]. GetPointer () != 0 ) return false ; else return true ; } typename PointListType :: iterator InsertElement ( const ParticlePointIndexPair & elem ) { return m_List . insert ( m_List . end (), elem ); } bool Contains ( const PointType & p ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < m_LowerBound [ i ] || p [ i ] > m_UpperBound [ i ]) { return false ; } } return true ; } void SetLowerBound ( const PointType & p ) { m_LowerBound = p ; } const PointType & GetLowerBound () const { return m_LowerBound ; } void SetUpperBound ( const PointType & p ) { m_UpperBound = p ; } const PointType & GetUpperBound () const { return m_UpperBound ; } typename Self :: Pointer * GetBranches () { return m_Branches ; } const typename Self :: Pointer * GetBranches () const { return m_Branches ; } typename Self :: Pointer & GetBranch ( unsigned int i ) { return m_Branches [ i ]; } const typename Self :: Pointer & GetBranch ( unsigned int i ) const { return m_Branches [ i ]; } void SetBranch ( unsigned int b , typename Self :: Pointer n ) { this -> GetBranch ( b ) = n ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; const PointListType & GetList () const { return m_List ; } PointListType & GetList () { return m_List ; } protected : PowerOfTwoPointTreeNode () {} ~ PowerOfTwoPointTreeNode () {} PowerOfTwoPointTreeNode ( const PowerOfTwoPointTreeNode & o ); // purposely not implemented const PowerOfTwoPointTreeNode & operator = ( const PowerOfTwoPointTreeNode & o ); private : PointType m_LowerBound ; PointType m_UpperBound ; PointListType m_List ; typename Self :: Pointer m_Branches [ powstruct < 2 , VDimension >:: c ]; }; class PowerOfTwoPointTree : public itk :: DataObject { public : constexpr static unsigned int VDimension = 3 ; typedef PowerOfTwoPointTree Self ; typedef DataObject Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef PowerOfTwoPointTreeNode NodeType ; typedef typename NodeType :: Pointer NodePointerType ; typedef typename PowerOfTwoPointTreeNode :: PointType PointType ; typedef typename NodeType :: PointListType PointListType ; typedef std :: vector < typename PointListType :: const_iterator > PointIteratorListType ; itkNewMacro ( Self ); itkTypeMacro ( PowerOfTwoPointTree , DataObject ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); itkStaticConstMacro ( BranchesPerNode , int , ( powstruct < 2 , VDimension >:: c )); itkGetMacro ( Depth , unsigned int ); void ConstructTree ( const PointType & , const PointType & , unsigned int ); PointIteratorListType FindPointsInRegion ( const PointType & , const PointType & ) const ; unsigned int FindPointsInRegion ( const PointType & , const PointType & , PointIteratorListType & ) const ; NodePointerType GetNode ( const PointType & ); const NodePointerType GetNode ( const PointType & ) const ; itkGetObjectMacro ( Root , NodeType ); itkSetObjectMacro ( Root , NodeType ); typename PointListType :: iterator AddPoint ( const PointType & , unsigned int , NodePointerType & ); typename PointListType :: iterator AddPoint ( const PointType & p , unsigned int i ) { NodePointerType node = NodeType :: New (); return this -> AddPoint ( p , i , node ); } bool Overlap ( const NodePointerType & , const PointType & , const PointType & ) const ; inline bool RegionContains ( const PointType & p , const PointType & lowerbound , const PointType & upperbound ) const { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { if ( p [ i ] < lowerbound [ i ] || p [ i ] >= upperbound [ i ]) return false ; } return true ; } void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const ; protected : PowerOfTwoPointTree () { m_Depth = 0 ; } virtual ~ PowerOfTwoPointTree () {} void BranchNode ( NodePointerType & , unsigned int ); void FindOneNodeInRegion ( const NodePointerType & , const PointType & , const PointType & , PointIteratorListType & ) const ; private : PowerOfTwoPointTree ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented NodePointerType m_Root ; unsigned int m_Depth ; }; } // end namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PreferencesWindow_8h.html","text":"Studio/Data/PreferencesWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences. Source code #pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#studiodatapreferenceswindowh","text":"","title":"Studio/Data/PreferencesWindow.h"},{"location":"api/Files/PreferencesWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PreferencesWindow_8h.html#classes","text":"Name class shapeworks::PreferencesWindow Qt UI dialog to control preferences.","title":"Classes"},{"location":"api/Files/PreferencesWindow_8h.html#source-code","text":"#pragma once #include #include \"Data/Preferences.h\" class Ui_PreferencesWindow ; class QAbstractButton ; namespace shapeworks { class PreferencesWindow : public QDialog { Q_OBJECT public : PreferencesWindow ( QWidget * parent , Preferences & prefs ); void set_values_from_preferences (); void closeEvent ( QCloseEvent * event ) override ; public Q_SLOTS : void on_mesh_cache_enabled_stateChanged ( int state ); void on_mesh_cache_memory_valueChanged ( int value ); void on_color_scheme_currentIndexChanged ( int index ); void on_pca_range_valueChanged ( double value ); void on_pca_steps_valueChanged ( int value ); void on_parallel_enabled_toggled ( bool b ); void on_num_threads_valueChanged ( int i ); void accept () override ; void restore_defaults (); void save_to_preferences (); Q_SIGNALS : void clear_cache (); void update_view (); void slider_update (); private : void update_labels (); Preferences & preferences_ ; Ui_PreferencesWindow * ui_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Preferences_8h.html","text":"Studio/Data/Preferences.h Classes Name class Preferences Application preferences. Source code #pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#studiodatapreferencesh","text":"","title":"Studio/Data/Preferences.h"},{"location":"api/Files/Preferences_8h.html#classes","text":"Name class Preferences Application preferences.","title":"Classes"},{"location":"api/Files/Preferences_8h.html#source-code","text":"#pragma once #include #include class Preferences : public QObject { Q_OBJECT ; public : enum OrientationMarkerType { medical = 0 , triad = 1 , none = 2 }; enum OrientationMarkerCorner { upper_right = 0 , lower_right = 1 , lower_left = 2 , upper_left = 3 }; Preferences (); enum { MAX_RECENT_FILES = 64 }; void restore_defaults (); void add_recent_file ( QString file , QString path ); QStringList get_recent_files (); QStringList get_recent_paths (); bool not_saved (); void set_saved ( bool saved = true ); QByteArray get_window_geometry (); void set_window_geometry ( QByteArray geometry ); QByteArray get_window_state (); void set_window_state ( QByteArray state ); QString get_last_directory (); void set_last_directory ( QString value ); bool get_cache_enabled (); void set_cache_enabled ( bool value ); bool get_parallel_enabled (); void set_parallel_enabled ( bool value ); int get_memory_cache_percent (); void set_memory_cache_percent ( int value ); int get_num_threads (); void set_num_threads ( int num_threads ); float get_glyph_size (); void set_glyph_size ( float value ); float get_glyph_quality (); void set_glyph_quality ( float value ); bool get_glyph_auto_size (); void set_glyph_auto_size ( bool value ); bool get_glyph_scale_arrows (); void set_glyph_scale_arrows ( bool value ); float get_pca_range (); void set_pca_range ( float value ); int get_pca_steps (); void set_pca_steps ( int value ); void set_color_scheme ( int value ); int get_color_scheme (); void set_particle_colors ( int value ); int get_particle_colors (); void set_color_map ( int value ); int get_color_map (); void set_discrete_color_mode ( bool value ); bool get_discrete_color_mode (); void set_reverse_color_map ( bool value ); bool get_reverse_color_map (); bool get_center_checked (); void set_center_checked ( bool value ); int get_geodesic_cache_multiplier (); void set_geodesic_cache_multiplier ( int value ); OrientationMarkerType get_orientation_marker_type (); void set_orientation_marker_type ( OrientationMarkerType type ); OrientationMarkerCorner get_orientation_marker_corner (); void set_orientation_marker_corner ( OrientationMarkerCorner corner ); QString get_groom_file_template (); void set_groom_file_template ( QString groom_file_template ); QString get_optimize_file_template (); void set_optimize_file_template ( QString optimize_file_template ); QSize get_export_override_size (); void set_export_override_size ( QSize size ); bool get_export_override_size_enabled (); void set_export_override_size_enabled ( bool enabled ); bool get_export_show_orientation_marker (); void set_export_show_orientation_marker ( bool value ); bool get_export_show_color_scale (); void set_export_show_color_scale ( bool value ); int get_export_num_pca_images (); void set_export_num_pca_images ( int number ); double get_export_pca_range (); void set_export_pca_range ( double range ); void set_export_pca_modes ( QString string ); QString get_export_pca_modes (); bool get_auto_update_check (); void set_auto_update_check ( bool enabled ); QDateTime get_update_snooze_until (); void set_update_snooze_until ( QDateTime date ); QString get_device_id (); bool get_telemetry_enabled (); void set_telemetry_enabled ( bool enabled ); bool get_telemetry_asked (); void set_telemetry_asked ( bool asked ); QStringList get_pending_telemetry_events (); void set_pending_telemetry_events ( QStringList events ); Q_SIGNALS : void color_scheme_changed ( int newIndex ); void glyph_properties_changed (); void threading_changed_signal (); void sliders_changed_signal (); private : void update_recent_files (); QStringList recent_files_ ; QStringList recent_paths_ ; QSettings settings_ ; bool saved_ = true ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Procrustes3D_8h.html","text":"Libs/Alignment/Procrustes3D.h Classes Name struct SimilarityTransform3D class Procrustes3D Source code #pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#libsalignmentprocrustes3dh","text":"","title":"Libs/Alignment/Procrustes3D.h"},{"location":"api/Files/Procrustes3D_8h.html#classes","text":"Name struct SimilarityTransform3D class Procrustes3D","title":"Classes"},{"location":"api/Files/Procrustes3D_8h.html#source-code","text":"#pragma once #include #include #include #include struct SimilarityTransform3D { vnl_matrix_fixed < double , 3 , 3 > rotation ; double scale ; vnl_vector_fixed < double , 3 > translation ; }; class Procrustes3D { public : typedef double RealType ; typedef vnl_vector_fixed < double , 3 > PointType ; typedef std :: vector < PointType > ShapeType ; typedef ShapeType :: iterator ShapeIteratorType ; typedef std :: vector < ShapeType > ShapeListType ; typedef ShapeListType :: iterator ShapeListIteratorType ; typedef std :: vector < SimilarityTransform3D > SimilarityTransformListType ; typedef SimilarityTransformListType :: iterator SimilarityTransformListIteratorType ; typedef vnl_matrix_fixed < double , 3 + 1 , 3 + 1 > TransformMatrixType ; typedef std :: vector < TransformMatrixType > TransformMatrixListType ; typedef TransformMatrixListType :: iterator TransformMatrixIteratorType ; public : Procrustes3D () : m_Scaling ( true ), m_RotationTranslation ( true ) {} Procrustes3D ( bool do_scaling , bool do_rotation_translation ) : m_Scaling ( do_scaling ), m_RotationTranslation ( do_rotation_translation ) {} bool GetScaling () const { return m_Scaling ; } void ScalingOn () { m_Scaling = true ; } void ScalingOff () { m_Scaling = false ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void RotationTranslationOn () { m_RotationTranslation = true ; } void RotationTranslationOff () { m_RotationTranslation = false ; } // Align a list of shapes using Generalized Procrustes Analysis void AlignShapes ( SimilarityTransformListType & transforms , ShapeListType & shapes ); void RemoveTranslation ( SimilarityTransformListType & transforms , ShapeListType & shapes ); // Helper function to transform a shape by a similarity transform static void TransformShape ( ShapeType & shape , SimilarityTransform3D & transform ); // Helper function to transform a list of shapes by a list of transforms static void TransformShapes ( ShapeListType & shapes , SimilarityTransformListType & transforms ); static RealType ComputeSumOfSquares ( ShapeListType & shapes ); // Transform from Configuration space to Procrustes space. Translation // followed by rotation and scaling. void ConstructTransformMatrices ( SimilarityTransformListType & transforms , TransformMatrixListType & transformMatrices ); void ConstructTransformMatrix ( SimilarityTransform3D & transform , TransformMatrixType & transformMatrix ); void ComputeMeanShape ( ShapeType & mean , ShapeListType & shapeList ); void ComputeCenterOfMass ( ShapeType & shape , PointType & center ); void CenterShape ( ShapeType & shape ); // this is the center which needed for translation of the shapes to coincide on the image origin // so that the whole object is in the image and won't go outside void ComputeCommonCenter ( SimilarityTransformListType & transforms , PointType & center ); // Align source shape to target using Ordinary Procrustes Analysis (translation, scaling and rotation) // the target shape is assumed to be centered at the origin void AlignSourceToTarget ( SimilarityTransform3D & transform , ShapeType & target , ShapeType & source ); /* The median shape is defined as the shape with the minimum sum of Euclidean L1 norms to all other shapes in that group. */ int ComputeMedianShape ( ShapeListType & shapeList ); private : // Align two shapes (rotation & scale) using Ordinary Procrustes Analysis void AlignTwoShapes ( SimilarityTransform3D & transform , ShapeType & shape1 , ShapeType & shape2 ); bool m_Scaling ; // a flag to factor out scaling bool m_RotationTranslation ; // a flag for rotation + translation + (scale depending on m_Scaling), if false, the // transformation will only be scaling }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ProcrustesRegistration_8h.html","text":"Libs/Optimize/ProcrustesRegistration.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProcrustesRegistration Source code #pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#libsoptimizeprocrustesregistrationh","text":"","title":"Libs/Optimize/ProcrustesRegistration.h"},{"location":"api/Files/ProcrustesRegistration_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProcrustesRegistration_8h.html#classes","text":"Name class shapeworks::ProcrustesRegistration","title":"Classes"},{"location":"api/Files/ProcrustesRegistration_8h.html#source-code","text":"#pragma once #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ProcrustesRegistration { public : using Pointer = std :: shared_ptr < ProcrustesRegistration > ; // Particle system typedefs using ParticleSystemType = ParticleSystem ; using PointType = ParticleSystemType :: PointType ; void SetParticleSystem ( ParticleSystemType * p ) { m_ParticleSystem = p ; } ParticleSystemType * GetParticleSystem () const { return m_ParticleSystem ; } ParticleSystemType * GetParticleSystem () { return m_ParticleSystem ; } void RunRegistration ( int i ); void RunRegistration (); void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } bool GetScaling () const { return m_Scaling ; } void SetScaling ( bool scaling ) { m_Scaling = scaling ; } bool GetRotationTranslation () const { return m_RotationTranslation ; } void SetRotationTranslation ( bool rotationTranslation ) { m_RotationTranslation = rotationTranslation ; } private : int m_DomainsPerShape = 1 ; bool m_Scaling = true ; bool m_RotationTranslation = true ; ParticleSystemType * m_ParticleSystem = nullptr ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ProjectReader_8h.html","text":"Libs/Project/ProjectReader.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ProjectReader Base class for Project readers. Source code #pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#libsprojectprojectreaderh","text":"","title":"Libs/Project/ProjectReader.h"},{"location":"api/Files/ProjectReader_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ProjectReader_8h.html#classes","text":"Name class shapeworks::ProjectReader Base class for Project readers.","title":"Classes"},{"location":"api/Files/ProjectReader_8h.html#source-code","text":"#pragma once #include \"Project.h\" #include \"ProjectUtils.h\" namespace shapeworks { class ProjectReader { public : using StringMapList = project :: types :: StringMapList ; using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; using StringMultiMap = project :: types :: StringMultiMap ; ProjectReader ( Project & project ); virtual ~ ProjectReader () = default ; virtual bool read_project ( std :: string filename ) = 0 ; virtual StringMap get_parameters ( std :: string name ) = 0 ; virtual StringMultiMap get_multi_parameters ( std :: string name ) = 0 ; protected : void load_subjects ( StringMapList list ); void load_parameters (); void load_parameter ( std :: string name , StringMap map ); void load_landmark_definitions ( StringMapList list ); static StringList get_keys ( StringMap map ); bool contains ( StringMap map , std :: string key ); Project & project_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ProjectUtils_8h.html","text":"Libs/Project/ProjectUtils.h Namespaces Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types Classes Name class shapeworks::ProjectUtils Source code #pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#libsprojectprojectutilsh","text":"","title":"Libs/Project/ProjectUtils.h"},{"location":"api/Files/ProjectUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry) shapeworks::project shapeworks::project::prefixes shapeworks::project::types","title":"Namespaces"},{"location":"api/Files/ProjectUtils_8h.html#classes","text":"Name class shapeworks::ProjectUtils","title":"Classes"},{"location":"api/Files/ProjectUtils_8h.html#source-code","text":"#pragma once // std #include #include #include // tsl #include // vtk #include #include // shapeworks #include namespace shapeworks { class Project ; class Subject ; namespace project :: prefixes { static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; static constexpr const char * SHAPE_PREFIX = \"shape_\" ; static constexpr const char * MESH_PREFIX = \"mesh_\" ; static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; static constexpr const char * IMAGE_PREFIX = \"image_\" ; static constexpr const char * FEATURE_PREFIX = \"feature_\" ; static constexpr const char * GROUP_PREFIX = \"group_\" ; static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; } // namespace project::prefixes namespace project :: types { using StringMap = tsl :: ordered_map < std :: string , std :: string > ; using StringList = std :: vector < std :: string > ; using StringMapList = std :: vector < StringMap > ; using StringMultiMap = std :: map < std :: string , StringMap > ; } // namespace project::types class ProjectUtils { public : using StringList = project :: types :: StringList ; using StringMap = project :: types :: StringMap ; static vtkSmartPointer < vtkTransform > convert_transform ( std :: vector < double > list ); static std :: vector < double > convert_transform ( vtkSmartPointer < vtkTransform > transform ); static StringList determine_domain_names ( StringList keys ); static void determine_domain_types ( Project * project , StringMap key_map ); static StringList get_input_prefixes (); static StringList get_groomed_prefixes (); static StringList get_original_keys ( StringList domain_names , StringMap key_map ); static StringList get_values ( StringList prefixes , StringList domain_names , StringMap key_map ); static std :: vector < std :: vector < double >> get_transforms ( std :: string prefix , StringList domain_names , StringMap key_map ); static StringMap get_value_map ( std :: vector < std :: string > prefix , StringMap key_map ); static StringMap get_extra_columns ( StringMap key_map ); static DomainType determine_domain_type ( std :: string filename ); static bool starts_with ( std :: string str , std :: string prefix ); static std :: string transform_to_string ( std :: vector < double > transform ); static std :: vector < std :: string > convert_domain_types ( std :: vector < DomainType > domain_types ); static std :: vector < std :: string > convert_groomed_domain_types ( std :: vector < DomainType > domain_types ); static StringMap convert_subject_to_map ( Project * project , Subject * subject ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Project_8h.html","text":"Libs/Project/Project.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project. Source code #pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#libsprojectprojecth","text":"","title":"Libs/Project/Project.h"},{"location":"api/Files/Project_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Project_8h.html#classes","text":"Name class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::Project Representation of a project.","title":"Classes"},{"location":"api/Files/Project_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include \"Parameters.h\" #include \"Subject.h\" namespace shapeworks { class Project ; using ProjectHandle = std :: shared_ptr < Project > ; class LandmarkDefinition { public : std :: string domain_ ; int domain_id_ = -1 ; int landmark_id = -1 ; std :: string name_ ; bool visible_ = true ; std :: string color_ ; std :: string comment_ ; }; class Project { public : using StringMap = std :: map < std :: string , std :: string > ; Project (); ~ Project (); bool load ( const std :: string & filename ); bool save ( const std :: string & filename ); void set_project_path ( const std :: string & path ); std :: string get_filename (); void set_filename ( std :: string filename ); std :: vector < std :: string > get_headers (); std :: vector < std :: string > get_string_column ( const std :: string & name ) const ; int get_number_of_subjects (); int get_number_of_domains_per_subject (); std :: vector < std :: string > get_domain_names (); void set_domain_names ( std :: vector < std :: string > domain_names ); std :: vector < std :: shared_ptr < Subject >>& get_subjects (); void set_subjects ( const std :: vector < std :: shared_ptr < Subject >>& subjects ); void update_subjects (); bool get_originals_present () const ; bool get_groomed_present () const ; bool get_particles_present () const ; bool get_images_present (); bool get_fixed_subjects_present (); std :: vector < std :: string > get_feature_names (); std :: vector < std :: string > get_image_names (); std :: vector < std :: string > get_group_names (); std :: vector < std :: string > get_group_values ( const std :: string & group_name ) const ; Parameters get_parameters ( const std :: string & name , std :: string domain_name = \"\" ); std :: map < std :: string , Parameters > get_parameter_map ( const std :: string & name ); void set_parameter_map ( const std :: string & name , std :: map < std :: string , Parameters > map ); void set_parameters ( const std :: string & name , Parameters params , std :: string domain_name = \"\" ); void clear_parameters ( const std :: string & name ); int get_supported_version () const ; int get_version () const ; std :: vector < LandmarkDefinition > get_landmarks ( int domain_id ); std :: vector < std :: vector < LandmarkDefinition >> get_all_landmark_definitions (); void set_landmark_definitions ( std :: vector < std :: vector < LandmarkDefinition >> defs ); bool get_landmarks_present (); void set_landmarks ( int domain_id , std :: vector < LandmarkDefinition > landmarks ); void new_landmark ( int domain_id ); std :: vector < DomainType > get_original_domain_types (); std :: vector < DomainType > get_groomed_domain_types (); void set_original_domain_types ( std :: vector < DomainType > domain_types ); void set_groomed_domain_types ( std :: vector < DomainType > domain_types ); private : void set_default_landmark_colors (); void determine_feature_names (); std :: string get_next_landmark_name ( int domain_id ); std :: string get_next_landmark_color ( int domain_id ); std :: vector < std :: shared_ptr < Subject >> subjects_ ; bool loaded_ { false }; std :: string filename_ ; std :: string project_path_ ; std :: vector < std :: string > default_landmark_colors_ ; bool originals_present_ { false }; bool groomed_present_ { false }; bool particles_present_ { false }; bool images_present_ { false }; std :: vector < std :: string > feature_names_ ; std :: vector < std :: string > image_names_ ; std :: vector < std :: vector < LandmarkDefinition >> landmark_definitions_ ; std :: vector < std :: string > domain_names_ ; std :: vector < DomainType > original_domain_types_ ; std :: vector < DomainType > groomed_domain_types_ ; // map of type (e.g. groom, optimize) to map (domain->Parameters) std :: map < std :: string , std :: map < std :: string , Parameters >> parameters_ ; const int supported_version_ { 2 }; int version_ { 2 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PythonAnalyze_8h.html","text":"Libs/Python/PythonAnalyze.h Functions Name void define_python_analyze (pybind11::module_ m) Functions Documentation function define_python_analyze void define_python_analyze ( pybind11 :: module_ m ) Source code #pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#libspythonpythonanalyzeh","text":"","title":"Libs/Python/PythonAnalyze.h"},{"location":"api/Files/PythonAnalyze_8h.html#functions","text":"Name void define_python_analyze (pybind11::module_ m)","title":"Functions"},{"location":"api/Files/PythonAnalyze_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/PythonAnalyze_8h.html#function-define_python_analyze","text":"void define_python_analyze ( pybind11 :: module_ m )","title":"function define_python_analyze"},{"location":"api/Files/PythonAnalyze_8h.html#source-code","text":"#pragma once #include void define_python_analyze ( pybind11 :: module_ m ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/PythonWorker_8h.html","text":"Studio/Python/PythonWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PythonWorker Source code #pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#studiopythonpythonworkerh","text":"","title":"Studio/Python/PythonWorker.h"},{"location":"api/Files/PythonWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/PythonWorker_8h.html#classes","text":"Name class shapeworks::PythonWorker","title":"Classes"},{"location":"api/Files/PythonWorker_8h.html#source-code","text":"#pragma once // qt #include #include // vtk #include // studio #include #include namespace shapeworks { class PythonLogger ; class PythonWorker : public QObject { Q_OBJECT public : constexpr static const char * python_api_version = \"6.5\" ; PythonWorker (); ~ PythonWorker (); void set_vtk_output_window ( vtkSmartPointer < StudioVtkOutputWindow > output_window ); void run_job ( QSharedPointer < Job > job ); void incoming_python_message ( std :: string message_string ); void incoming_python_progress ( double value ); void end_python (); void abort_job (); public Q_SLOTS : bool init (); void start_job ( QSharedPointer < Job > job ); void finalize_python (); Q_SIGNALS : void result_ready (); void finished (); private : bool initialized_ = false ; bool initialized_success_ = false ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; QSharedPointer < PythonLogger > python_logger_ ; QSharedPointer < Job > current_job_ ; QThread * thread_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/QMeshWarper_8h.html","text":"Libs/Analyze/QMeshWarper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. Source code #pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#libsanalyzeqmeshwarperh","text":"","title":"Libs/Analyze/QMeshWarper.h"},{"location":"api/Files/QMeshWarper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QMeshWarper_8h.html#classes","text":"Name class shapeworks::QMeshWarper Wraps MeshWarper as a QObject.","title":"Classes"},{"location":"api/Files/QMeshWarper_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { class QMeshWarper : public QObject , public MeshWarper { Q_OBJECT ; public : QMeshWarper ( QObject * parent = nullptr ); float get_progress (); protected : void update_progress ( float p ) override ; Q_SIGNALS : void progress (); private : float current_progress_ = 0 ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/QOptimize_8h.html","text":"Studio/Optimize/QOptimize.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::QOptimize Wraps Optimize as a QObject. Source code #pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#studiooptimizeqoptimizeh","text":"","title":"Studio/Optimize/QOptimize.h"},{"location":"api/Files/QOptimize_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/QOptimize_8h.html#classes","text":"Name class shapeworks::QOptimize Wraps Optimize as a QObject.","title":"Classes"},{"location":"api/Files/QOptimize_8h.html#source-code","text":"#pragma once #ifndef Q_MOC_RUN #include #include #endif #include #include #include namespace shapeworks { class QOptimize : public QObject , public Optimize { Q_OBJECT ; public : QOptimize ( QObject * parent = nullptr ); virtual ~ QOptimize (); std :: vector < std :: vector < itk :: Point < double >>> GetLocalPoints () override ; std :: vector < std :: vector < itk :: Point < double >>> GetGlobalPoints () override ; std :: vector < Particles > GetParticles (); std :: vector < std :: vector < std :: vector < double >>> GetProcrustesTransforms () override ; void UpdateExportablePoints () override ; protected : virtual void SetIterationCallback () override ; virtual void IterateCallback ( itk :: Object * caller , const itk :: EventObject & ) override ; Q_SIGNALS : void progress ( int , QString ); private : itk :: MemberCommand < QOptimize >:: Pointer iterate_command_ ; // for concurrent access QMutex qmutex_ ; QElapsedTimer time_since_last_update_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ReconstructSurface_8h.html","text":"Libs/Particles/ReconstructSurface.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ReconstructSurface Source code #pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#libsparticlesreconstructsurfaceh","text":"","title":"Libs/Particles/ReconstructSurface.h"},{"location":"api/Files/ReconstructSurface_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ReconstructSurface_8h.html#classes","text":"Name class shapeworks::ReconstructSurface","title":"Classes"},{"location":"api/Files/ReconstructSurface_8h.html#source-code","text":"#pragma once #include \"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h\" #include \"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h\" #include \"Mesh.h\" #include namespace shapeworks { using ThinPlateSplineTransform = itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; using RBFSSparseTransform = itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; template < class TransformType > class ReconstructSurface { public : using TransformTypePtr = typename TransformType :: Pointer ; using PointSetType = typename TransformType :: PointSetType ; using PointIdType = typename PointSetType :: PointIdentifier ; ReconstructSurface () = default ; ReconstructSurface ( const std :: string & denseFile , const std :: string & sparseFile , const std :: string & goodPointsFile ); double computeAverageDistanceToNeighbors ( Mesh :: MeshPoints points , std :: vector < int > particlesIndices ); void checkMapping ( TransformTypePtr transform , Mesh :: MeshPoints sourcePoints , Mesh :: MeshPoints targetPoints ); void generateWarpedMeshes ( TransformTypePtr transform , vtkSmartPointer < vtkPolyData >& outputMesh ); Mesh getMesh ( PointArray localPoints ); Mesh :: MeshPoints convertToImageCoordinates ( Mesh :: MeshPoints particles , const Vector & spacing , const Point3 & origin ); int computeMedianShape ( std :: vector < Eigen :: MatrixXd >& shapeList ); void performKMeansClustering ( std :: vector < PointArray > worldPoints , int numberOfParticles , std :: vector < int >& centroidIndices ); Eigen :: MatrixXd computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , Image dt ); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distance_transform ); void computeDenseMean ( std :: vector < PointArray > localPoints , std :: vector < PointArray > worldPoints , std :: vector < std :: string > distanceTransform ); std :: vector < PointArray > computeSparseMean ( std :: vector < PointArray > localPoints , Point3 commonCenter ); void writeMeanInfo (); void surface ( const std :: vector < std :: string > localPointsFiles ); void samplesAlongPCAModes ( const std :: vector < std :: string > worldPointsFiles ); void meanSurface ( const std :: vector < std :: string > distanceTransformFiles , const std :: vector < std :: string > localPointsFiles , const std :: vector < std :: string > worldPointsFiles ); // set operations // void setOutPrefix ( std :: string prefix ) { this -> outPrefix = prefix ; } void setOutPath ( std :: string path ) { this -> outPath = path ; } void setDoProcrustes ( bool doProcrusts ) { this -> doProcrustes = doProcrustes ; } void setDoProcrustesScaling ( bool doProcrustsScaling ) { this -> doProcrustesScaling = doProcrustesScaling ; } void setPairwiseNormalsDiffForGoodBad ( bool pairwiseNormalsDiffForGoodBad ) { this -> pairwiseNormalsDiffForGoodBad = pairwiseNormalsDiffForGoodBad ; } void setMeanBeforeWarp ( bool meanBeforeWarp ) { this -> meanBeforeWarp = meanBeforeWarp ; } void setEnableOutput ( bool enableOutput ) { this -> enableOutput = enableOutput ; } void setModeIndex ( int modeIndex ) { this -> modeIndex = modeIndex ; } void setNumOfModes ( int numOfModes ) { this -> numOfModes = numOfModes ; } void setNumOfSamplesPerMode ( int numOfSamplesPerMode ) { this -> numOfSamplesPerMode = numOfSamplesPerMode ; } void setNumOfParticles ( int numOfParticles ) { this -> numOfParticles = numOfParticles ; } void setNumOfClusters ( int numOfClusters ) { this -> numOfClusters = numOfClusters ; } void setMaxStdDev ( float maxStdDev ) { this -> maxStdDev = maxStdDev ; } void setMaxVarianceCaptured ( float maxVarianceCaptured ) { this -> maxVarianceCaptured = maxVarianceCaptured ; } void setMaxAngleDegrees ( float maxAngleDegrees ) { this -> maxAngleDegrees = maxAngleDegrees ; } private : float normalAngle = Pi / 2.0 ; std :: vector < std :: string > localPointsFiles ; std :: vector < std :: string > worldPointsFiles ; std :: vector < std :: string > distanceTransformFiles ; vtkSmartPointer < vtkPolyData > denseMean ; Mesh :: MeshPoints sparseMean ; std :: vector < bool > goodPoints ; std :: string outPrefix ; std :: string outPath ; bool denseDone = true ; bool doProcrustes ; bool doProcrustesScaling ; bool pairwiseNormalsDiffForGoodBad = false ; bool meanBeforeWarp = true ; bool enableOutput = true ; int modeIndex = -1 ; int numOfModes = -1 ; int numOfSamplesPerMode = -1 ; int numOfParticles = -1 ; int numOfClusters = -1 ; float maxStdDev = 0 ; float maxVarianceCaptured = 0 ; float maxAngleDegrees = 0 ; Mesh :: MeshPoints setSparseMean ( const std :: string & sparsePath ); std :: vector < bool > setGoodPoints ( const std :: string & pointsPath ); std :: vector < PointArray > setLocalPointsFiles ( const std :: vector < std :: string > localPointsFiles ); std :: vector < PointArray > setWorldPointsFiles ( const std :: vector < std :: string > worldPointsFiles ); }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Reconstruction_8h.html","text":"Libs/Analyze/Reconstruction.h Namespaces Name itk Classes Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction Source code #ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#libsanalyzereconstructionh","text":"","title":"Libs/Analyze/Reconstruction.h"},{"location":"api/Files/Reconstruction_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/Reconstruction_8h.html#classes","text":"Name class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class Reconstruction","title":"Classes"},{"location":"api/Files/Reconstruction_8h.html#source-code","text":"#ifndef __RECONSTRUCTION_H__ #define __RECONSTRUCTION_H__ #include #include #include \"itkThinPlateSplineKernelTransform2.h\" #include \"itkCompactlySupportedRBFSparseKernelTransform.h\" #include #include #include #include #include #include #include #include #include #include #include \"itkImageRegionConstIterator.h\" #include #include #include #include \"Procrustes3D.h\" #ifdef assert #undef assert #define assert(a) { if (!static_cast(a)) { throw std::runtime_error(\"a\"); } } #endif namespace itk { template < typename TImageType , typename TCoordRep = double > class ITK_TEMPLATE_EXPORT BSplineInterpolateImageFunctionWithDoubleCoefficents : public BSplineInterpolateImageFunction < TImageType , TCoordRep , double > {}; } template < template < typename TCoordRep , unsigned > class TTransformType = itk :: CompactlySupportedRBFSparseKernelTransform , template < typename ImageType , typename TCoordRep > class TInterpolatorType = itk :: LinearInterpolateImageFunction , typename TCoordRep = double , typename PixelType = float , typename ImageType = itk :: Image < PixelType , 3 >> class Reconstruction { public : typedef itk :: GradientImageFilter < ImageType , PixelType > GradientFilterType ; typedef itk :: GradientMagnitudeImageFilter < ImageType , ImageType > GradientMagnitudeFilterType ; typedef itk :: Image < itk :: CovariantVector < PixelType , 3 > , 3 > GradientImageType ; typedef itk :: ImageRegionIterator < GradientImageType > GradientImageIteratorType ; typedef itk :: ImageRegionIterator < ImageType > ImageIteratorType ; typedef itk :: ImageFileWriter < ImageType > WriterType ; typedef itk :: ImageToVTKImageFilter < ImageType > ITK2VTKConnectorType ; typedef itk :: AddImageFilter < ImageType , ImageType > AddImageFilterType ; typedef itk :: ResampleImageFilter < ImageType , ImageType > ResampleFilterType ; typedef TInterpolatorType < ImageType , TCoordRep > InterpolatorType ; typedef itk :: MultiplyImageFilter < ImageType , ImageType , ImageType > MultiplyByConstantImageFilterType ; typedef itk :: ImageDuplicator < ImageType > DuplicatorType ; typedef TTransformType < TCoordRep , 3 > TransformType ; typedef itk :: Point < TCoordRep , 3 > PointType ; typedef std :: vector < PointType > PointArrayType ; typedef typename TransformType :: PointSetType PointSetType ; typedef typename PointSetType :: PointIdentifier PointIdType ; Reconstruction ( std :: string out_prefix = \"\" , float decimationPercent = 0.3f , double angleThresh = 45.0f , size_t numClusters = 5 , bool fixWinding = true , bool doLaplacianSmoothingBeforeDecimation = true , bool doLaplacianSmoothingAfterDecimation = true , float smoothingLambda = 0.5f , int smoothingIterations = 1 , bool usePairwiseNormalsDifferencesForGoodBad = false ); ~ Reconstruction (); vtkSmartPointer < vtkPolyData > getDenseMean ( std :: vector < PointArrayType > local_pts = std :: vector < PointArrayType > (), std :: vector < PointArrayType > global_pts = std :: vector < PointArrayType > (), std :: vector < std :: string > distance_transform = std :: vector < std :: string > () ); void reset (); void setDecimation ( float dec ); void setNumClusters ( int num ); void setMaxAngle ( double angleDegrees ); void setFixWinding ( bool fixWinding ); void setLaplacianSmoothingBeforeDecimation ( bool doLaplacianSmoothingBeforeDecimation ); void setLaplacianSmoothingAfterDecimation ( bool doLaplacianSmoothingAfterDecimation ); void setSmoothingLambda ( float smoothingLambda ); void setSmoothingIterations ( int smoothingIterations ); void setOutputEnabled ( bool enabled ); void setMeanBeforeWarpEnabled ( bool enabled ); vtkSmartPointer < vtkPolyData > getMesh ( PointArrayType local_pts ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); bool sparseDone (); bool denseDone (); void writeMeanInfo ( std :: string nameBase ); vtkSmartPointer < vtkPoints > SparseMean (){ return sparseMean_ ;} vtkSmartPointer < vtkPolyData > DenseMean () { return denseMean_ ;} std :: vector < bool > GoodPoints (){ return goodPoints_ ;} std :: string OutPrefix (){ return out_prefix_ ;} void setOutPrefix ( std :: string out_prefix ){ out_prefix_ = out_prefix ;} std :: vector < PointArrayType > computeSparseMean ( std :: vector < PointArrayType > local_pts , itk :: Point < TCoordRep >& common_center , bool do_procrustes = true , bool do_procrustes_scaling = false ); void setOrigin ( typename ImageType :: PointType origin ) { use_origin = true ; origin_ [ 0 ] = origin [ 0 ]; origin_ [ 1 ] = origin [ 1 ]; origin_ [ 2 ] = origin [ 2 ]; } void EnablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = true ;} void DisablePairwiseNormalsDifferencesForGoodBad (){ usePairwiseNormalsDifferencesForGoodBad_ = false ;} private : int ComputeMedianShape ( std :: vector < vnl_matrix < double >> & shapeList ); void computeDenseMean ( std :: vector < PointArrayType > local_pts , std :: vector < PointArrayType > global_pts , std :: vector < std :: string > distance_transform ); vnl_matrix < double > computeParticlesNormals ( vtkSmartPointer < vtkPoints > particles , typename ImageType :: Pointer distance_transform ); void generateWarpedMeshes ( typename TransformType :: Pointer transform , vtkSmartPointer < vtkPolyData >& outputMesh ); double computeAverageDistanceToNeighbors ( vtkSmartPointer < vtkPoints > points , std :: vector < int > particles_indices ); void CheckMapping ( vtkSmartPointer < vtkPoints > sourcePts , vtkSmartPointer < vtkPoints > targetPts , typename TransformType :: Pointer transform , vtkSmartPointer < vtkPoints > & mappedCorrespondences , double & rms , double & rms_wo_mapping , double & maxmDist ); vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); vtkSmartPointer < vtkPolyData > extractIsosurface ( vtkSmartPointer < vtkImageData > volData , float levelsetValue = 0.0f , float targetReduction = 0.1f , float featureAngle = 30 , int lsSmootherIterations = 1 , int meshSmootherIterations = 1 , bool preserveTopology = true ); vtkSmartPointer < vtkPolyData > MeshQC ( vtkSmartPointer < vtkPolyData > meshIn ); typename ImageType :: Pointer loadImage ( std :: string filename ); void performKMeansClustering ( std :: vector < PointArrayType > global_pts , unsigned int number_of_particles , std :: vector < int > & centroidIndices ); void writePLY ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); void writeVTK ( char * filename , vtkSmartPointer < vtkPolyData > meshIn ); //members. vtkSmartPointer < vtkPoints > sparseMean_ ; vtkSmartPointer < vtkPolyData > denseMean_ ; std :: vector < bool > goodPoints_ ; bool sparseDone_ ; bool denseDone_ ; float decimationPercent_ ; double maxAngleDegrees_ ; size_t numClusters_ ; int medianShapeIndex_ ; bool fixWinding_ ; bool doLaplacianSmoothingBeforeDecimation_ ; bool doLaplacianSmoothingAfterDecimation_ ; float smoothingLambda_ ; int smoothingIterations_ ; typename ImageType :: PointType origin_ ; bool use_origin ; std :: string out_prefix_ ; // to save intermediate files in case needed bool output_enabled_ = true ; bool usePairwiseNormalsDifferencesForGoodBad_ = false ; bool mean_before_warp_enabled_ = true ; }; #include \"Reconstruction.cpp\" //need to include template definition in order for it to be instantiated #endif // !__RECONSTRUCTION_H__ Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Region_8h.html","text":"Libs/Common/Region.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space Source code #pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#libscommonregionh","text":"","title":"Libs/Common/Region.h"},{"location":"api/Files/Region_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Region_8h.html#classes","text":"Name class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::PhysicalRegion physical bounds of a 3d region of space","title":"Classes"},{"location":"api/Files/Region_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" namespace shapeworks { // A logical region of an Image or a Mesh class IndexRegion ; // A physical region of an Image or a Mesh class PhysicalRegion ; class IndexRegion { public : Coord min { 1000000000 , 1000000000 , 1000000000 }; Coord max { -1000000000 , -1000000000 , -1000000000 }; IndexRegion () = default ; IndexRegion ( const IndexRegion & ) = default ; IndexRegion ( const Dims & dims ) : min { 0 , 0 , 0 } { if ( 0 != ( dims [ 0 ] + dims [ 1 ] + dims [ 2 ])) { max = { static_cast < Coord :: value_type > ( dims [ 0 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 1 ]) - 1 , static_cast < Coord :: value_type > ( dims [ 2 ]) - 1 }; } } IndexRegion ( const Coord & _min , const Coord & _max ) : min { _min [ 0 ], _min [ 1 ], _min [ 2 ]}, max { _max [ 0 ], _max [ 1 ], _max [ 2 ]} {} bool operator == ( const IndexRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { return max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; } Coord origin () const { return Coord ({ min [ 0 ], min [ 1 ], min [ 2 ]}); } Dims size () const { return Dims ({ static_cast < Dims :: value_type > ( max [ 0 ] - min [ 0 ] + 1 ), static_cast < Dims :: value_type > ( max [ 1 ] - min [ 1 ] + 1 ), static_cast < Dims :: value_type > ( max [ 2 ] - min [ 2 ] + 1 )}); } IndexRegion & pad ( int padding ); }; std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ); class PhysicalRegion { public : Point min ; Point max ; PhysicalRegion ( const PhysicalRegion & ) = default ; PhysicalRegion ( const Point & _min , const Point & _max ) { min [ 0 ] = _min [ 0 ]; min [ 1 ] = _min [ 1 ]; min [ 2 ] = _min [ 2 ]; max [ 0 ] = _max [ 0 ]; max [ 1 ] = _max [ 1 ]; max [ 2 ] = _max [ 2 ]; } PhysicalRegion () { min = Point ({ 1000000000 , 1000000000 , 1000000000 }); max = Point ({ -1000000000 , -1000000000 , -1000000000 }); } bool operator == ( const PhysicalRegion & other ) const { return min == other . min && max == other . max ; } bool valid () const { bool minLessThanMax = max [ 0 ] > min [ 0 ] && max [ 1 ] > min [ 1 ] && max [ 2 ] > min [ 2 ]; return minLessThanMax ; } Point origin () const { return min ; } Point size () const { return max - min ; } PhysicalRegion & shrink ( const PhysicalRegion & other ); PhysicalRegion & expand ( const PhysicalRegion & other ); PhysicalRegion & expand ( const Point & pt ); PhysicalRegion & pad ( double padding ); }; std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Sampler_8h.html","text":"Libs/Optimize/Sampler.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType Source code #pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#libsoptimizesamplerh","text":"","title":"Libs/Optimize/Sampler.h"},{"location":"api/Files/Sampler_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Sampler_8h.html#classes","text":"Name class shapeworks::Sampler struct shapeworks::Sampler::CuttingPlaneType struct shapeworks::Sampler::SphereType","title":"Classes"},{"location":"api/Files/Sampler_8h.html#source-code","text":"#pragma once #include #include #include \"CorrespondenceMode.h\" #include \"GradientDescentOptimizer.h\" #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Container/MeanCurvatureContainer.h\" #include \"Libs/Optimize/Domain/MeshWrapper.h\" #include \"Libs/Optimize/Function/CorrespondenceFunction.h\" #include \"Libs/Optimize/Function/CurvatureSamplingFunction.h\" #include \"Libs/Optimize/Function/DisentangledCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/DualVectorFunction.h\" #include \"Libs/Optimize/Function/LegacyCorrespondenceFunction.h\" #include \"Libs/Optimize/Function/SamplingFunction.h\" #include \"Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h\" #include \"Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h\" #include \"Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h\" #include \"ParticleSystem.h\" #include \"vnl/vnl_matrix_fixed.h\" // Uncomment to visualize FFCs with scalar and vector fields // #define VIZFFC #if defined(VIZFFC) #include \"MeshUtils.h\" #endif namespace shapeworks { class Sampler { public : using PixelType = float ; static constexpr unsigned int Dimension = 3 ; using ImageType = itk :: Image < PixelType , Dimension > ; using PointType = ImageType :: PointType ; using MeanCurvatureCacheType = MeanCurvatureContainer < PixelType , Dimension > ; using TransformType = vnl_matrix_fixed < double , Dimension + 1 , Dimension + 1 > ; using OptimizerType = GradientDescentOptimizer ; struct CuttingPlaneType { vnl_vector_fixed < double , 3 > a ; vnl_vector_fixed < double , 3 > b ; vnl_vector_fixed < double , 3 > c ; }; struct SphereType { vnl_vector_fixed < double , Dimension > center ; double radius ; }; Sampler (); virtual ~ Sampler (){}; ParticleSystem * GetParticleSystem () { return m_ParticleSystem ; } const ParticleSystem * GetParticleSystem () const { return m_ParticleSystem . GetPointer (); } SamplingFunction * GetGradientFunction () { return m_GradientFunction ; } CurvatureSamplingFunction * GetCurvatureGradientFunction () { return m_CurvatureGradientFunction ; } OptimizerType * GetOptimizer () { return m_Optimizer ; } const OptimizerType * GetOptimizer () const { return m_Optimizer . GetPointer (); } void SetPointsFile ( unsigned int i , const std :: string & s ) { if ( m_PointsFiles . size () < i + 1 ) { m_PointsFiles . resize ( i + 1 ); } m_PointsFiles [ i ] = s ; } void SetPointsFile ( const std :: string & s ) { this -> SetPointsFile ( 0 , s ); } void SetInitialPoints ( std :: vector < std :: vector < itk :: Point < double >>> initial_points ) { initial_points_ = initial_points ; } void AddImage ( ImageType :: Pointer image , double narrow_band , std :: string name = \"\" ); void ApplyConstraintsToZeroCrossing () { for ( size_t i = 0 ; i < m_DomainList . size (); i ++ ) { this -> m_DomainList [ i ] -> UpdateZeroCrossingPoint (); } } void AddMesh ( std :: shared_ptr < shapeworks :: MeshWrapper > mesh ); void AddContour ( vtkSmartPointer < vtkPolyData > poly_data ); void SetFieldAttributes ( const std :: vector < std :: string >& s ); void SetDomainsPerShape ( int n ) { m_DomainsPerShape = n ; m_LinearRegressionShapeMatrix -> SetDomainsPerShape ( n ); m_MixedEffectsShapeMatrix -> SetDomainsPerShape ( n ); m_LegacyShapeMatrix -> SetDomainsPerShape ( n ); m_CorrespondenceFunction -> SetDomainsPerShape ( n ); m_GeneralShapeMatrix -> SetDomainsPerShape ( n ); m_GeneralShapeGradMatrix -> SetDomainsPerShape ( n ); } void SetCuttingPlane ( unsigned int i , const vnl_vector_fixed < double , Dimension >& va , const vnl_vector_fixed < double , Dimension >& vb , const vnl_vector_fixed < double , Dimension >& vc ); void AddFreeFormConstraint ( int domain , const FreeFormConstraint & ffc ); void TransformCuttingPlanes ( unsigned int i ); void AddSphere ( unsigned int i , vnl_vector_fixed < double , Dimension >& c , double r ); void SetAdaptivityMode ( int mode ) { // SW_LOG(\"SetAdaptivityMode: {}, pairwise_potential_type: {}\", mode, m_pairwise_potential_type); if ( mode == 0 ) { m_LinkingFunction -> SetFunctionA ( this -> GetCurvatureGradientFunction ()); } else if ( mode == 1 ) { m_LinkingFunction -> SetFunctionA ( this -> GetGradientFunction ()); } this -> m_AdaptivityMode = mode ; } int GetAdaptivityMode () const { return m_AdaptivityMode ; } void SetCorrespondenceOn () { m_LinkingFunction -> SetBOn (); } void SetCorrespondenceOff () { m_LinkingFunction -> SetBOff (); } void SetSamplingOn () { m_LinkingFunction -> SetAOn (); } void SetSamplingOff () { m_LinkingFunction -> SetAOff (); } bool GetCorrespondenceOn () const { return m_LinkingFunction -> GetBOn (); } bool GetSamplingOn () const { return m_LinkingFunction -> GetAOn (); } void SetCorrespondenceMode ( shapeworks :: CorrespondenceMode mode ); void RegisterGeneralShapeMatrices () { this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeMatrix ); this -> m_ParticleSystem -> RegisterObserver ( m_GeneralShapeGradMatrix ); } void SetAttributeScales ( const std :: vector < double >& s ) { m_CorrespondenceFunction -> SetAttributeScales ( s ); m_GeneralShapeMatrix -> SetAttributeScales ( s ); m_GeneralShapeGradMatrix -> SetAttributeScales ( s ); } void SetXYZ ( unsigned int i , bool flag ) { m_CorrespondenceFunction -> SetXYZ ( i , flag ); m_GeneralShapeMatrix -> SetXYZ ( i , flag ); m_GeneralShapeGradMatrix -> SetXYZ ( i , flag ); } void SetNormals ( int i , bool flag ) { m_CorrespondenceFunction -> SetNormals ( i , flag ); m_GeneralShapeMatrix -> SetNormals ( i , flag ); m_GeneralShapeGradMatrix -> SetNormals ( i , flag ); } void SetAttributesPerDomain ( const std :: vector < int > s ); LegacyShapeMatrix * GetShapeMatrix () { return m_LegacyShapeMatrix . GetPointer (); } ShapeMatrix * GetGeneralShapeMatrix () { return m_GeneralShapeMatrix . GetPointer (); } ShapeGradientMatrix * GetGeneralShapeGradientMatrix () { return m_GeneralShapeGradMatrix . GetPointer (); } DualVectorFunction * GetLinkingFunction () { return m_LinkingFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () { return m_EnsembleEntropyFunction . GetPointer (); } DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () { return m_EnsembleRegressionEntropyFunction . GetPointer (); } LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () { return m_CorrespondenceFunction . GetPointer (); } const DualVectorFunction * GetLinkingFunction () const { return m_LinkingFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleEntropyFunction () const { return m_EnsembleEntropyFunction . GetPointer (); } const DisentangledCorrespondenceFunction * GetDisentangledEnsembleEntropyFunction () const { return m_DisentangledEnsembleEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleRegressionEntropyFunction () const { return m_EnsembleRegressionEntropyFunction . GetPointer (); } const LegacyCorrespondenceFunction * GetEnsembleMixedEffectsEntropyFunction () const { return m_EnsembleMixedEffectsEntropyFunction . GetPointer (); } const CorrespondenceFunction * GetMeshBasedGeneralEntropyGradientFunction () const { return m_CorrespondenceFunction . GetPointer (); } void SetTimeptsPerIndividual ( int n ) { m_MixedEffectsShapeMatrix -> SetTimeptsPerIndividual ( n ); } shapeworks :: CorrespondenceMode GetCorrespondenceMode () const { return m_CorrespondenceMode ; } void SetTransformFile ( const std :: string & s ) { m_TransformFile = s ; } void SetTransformFile ( const char * s ) { m_TransformFile = std :: string ( s ); } void SetPrefixTransformFile ( const std :: string & s ) { m_PrefixTransformFile = s ; } void SetPrefixTransformFile ( const char * s ) { m_PrefixTransformFile = std :: string ( s ); } void SetPairwisePotentialType ( int pairwise_potential_type ) { m_pairwise_potential_type = pairwise_potential_type ; } int GetPairwisePotentialType () { return m_pairwise_potential_type ; } void SetVerbosity ( unsigned int val ) { m_verbosity = val ; m_Optimizer -> SetVerbosity ( val ); } unsigned int GetVerbosity () { return m_verbosity ; } MeanCurvatureCacheType * GetMeanCurvatureCache () { return m_MeanCurvatureCache . GetPointer (); } void SetSharedBoundaryEnabled ( bool enabled ) { m_IsSharedBoundaryEnabled = enabled ; } void SetSharedBoundaryWeight ( double weight ) { m_SharedBoundaryWeight = weight ; } void ReadTransforms (); void ReadPointsFiles (); void AllocateDataCaches (); void AllocateDomainsAndNeighborhoods (); void InitializeOptimizationFunctions (); void initialize_initial_positions (); void Initialize () { this -> m_Initializing = true ; this -> Execute (); this -> m_Initializing = false ; } void ReInitialize (); void Execute (); using CuttingPlaneList = std :: vector < std :: vector < std :: pair < Eigen :: Vector3d , Eigen :: Vector3d >>> ; CuttingPlaneList ComputeCuttingPlanes (); Eigen :: Vector3d ComputePlaneNormal ( const vnl_vector < double >& a , const vnl_vector < double >& b , const vnl_vector < double >& c ); std :: vector < FreeFormConstraint > GetFFCs () { return m_FFCs ; } void SetMeshFFCMode ( bool mesh_ffc_mode ) { m_meshFFCMode = mesh_ffc_mode ; } private : bool GetInitialized () { return this -> m_Initialized ; } void SetInitialized ( bool value ) { this -> m_Initialized = value ; } bool GetInitializing () { return this -> m_Initializing ; } void SetInitializing ( bool value ) { this -> m_Initializing = value ; } bool m_Initialized { false }; int m_AdaptivityMode { 0 }; bool m_Initializing { false }; OptimizerType :: Pointer m_Optimizer ; SamplingFunction :: Pointer m_GradientFunction ; CurvatureSamplingFunction :: Pointer m_CurvatureGradientFunction ; GenericContainerArray < double >:: Pointer m_Sigma1Cache ; GenericContainerArray < double >:: Pointer m_Sigma2Cache ; MeanCurvatureCacheType :: Pointer m_MeanCurvatureCache ; ParticleSystem :: Pointer m_ParticleSystem ; std :: vector < ParticleDomain :: Pointer > m_DomainList ; std :: vector < ParticleSurfaceNeighborhood :: Pointer > m_NeighborhoodList ; int m_pairwise_potential_type ; shapeworks :: CorrespondenceMode m_CorrespondenceMode ; DualVectorFunction :: Pointer m_LinkingFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleRegressionEntropyFunction ; LegacyCorrespondenceFunction :: Pointer m_EnsembleMixedEffectsEntropyFunction ; DisentangledCorrespondenceFunction :: Pointer m_DisentangledEnsembleEntropyFunction ; CorrespondenceFunction :: Pointer m_CorrespondenceFunction ; LegacyShapeMatrix :: Pointer m_LegacyShapeMatrix ; LinearRegressionShapeMatrix :: Pointer m_LinearRegressionShapeMatrix ; MixedEffectsShapeMatrix :: Pointer m_MixedEffectsShapeMatrix ; shapeworks :: ShapeMatrix :: Pointer m_GeneralShapeMatrix ; shapeworks :: ShapeGradientMatrix :: Pointer m_GeneralShapeGradMatrix ; bool initialize_ffcs ( size_t dom ); private : Sampler ( const Sampler & ); // purposely not implemented void operator = ( const Sampler & ); // purposely not implemented std :: vector < std :: string > m_PointsFiles ; std :: vector < int > m_AttributesPerDomain ; int m_DomainsPerShape ; double m_Spacing { 0 }; bool m_IsSharedBoundaryEnabled ; double m_SharedBoundaryWeight { 0.5 }; std :: string m_TransformFile ; std :: string m_PrefixTransformFile ; std :: vector < std :: vector < CuttingPlaneType >> m_CuttingPlanes ; std :: vector < std :: vector < SphereType >> m_Spheres ; std :: vector < FreeFormConstraint > m_FFCs ; std :: vector < vtkSmartPointer < vtkPolyData >> m_meshes ; bool m_meshFFCMode = false ; std :: vector < std :: string > fieldAttributes_ ; std :: vector < std :: vector < itk :: Point < double >>> initial_points_ ; unsigned int m_verbosity ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SamplingFunction_8h.html","text":"Libs/Optimize/Function/SamplingFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. Source code #pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#libsoptimizefunctionsamplingfunctionh","text":"","title":"Libs/Optimize/Function/SamplingFunction.h"},{"location":"api/Files/SamplingFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SamplingFunction_8h.html#classes","text":"Name class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution.","title":"Classes"},{"location":"api/Files/SamplingFunction_8h.html#source-code","text":"#pragma once #include #include \"Libs/Optimize/Container/GenericContainerArray.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"VectorFunction.h\" namespace shapeworks { class SamplingFunction : public VectorFunction { public : constexpr static int VDimension = 3 ; typedef float TGradientNumericType ; // This has always been used on float images, so the curvature cache is also float typedef SamplingFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef VectorFunction Superclass ; itkTypeMacro ( SamplingFunction , VectorFunction ); typedef TGradientNumericType GradientNumericType ; typedef GenericContainerArray < double > SigmaCacheType ; typedef typename Superclass :: VectorType VectorType ; typedef typename ParticleSystem :: PointType PointType ; typedef vnl_vector_fixed < TGradientNumericType , VDimension > GradientVectorType ; itkNewMacro ( Self ); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt ) const ; virtual VectorType Evaluate ( unsigned int idx , unsigned int d , const ParticleSystem * system , double & maxdt , double & energy ) const { itkExceptionMacro ( \"This method not implemented\" ); return VectorType (); } virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const { itkExceptionMacro ( \"This method not implemented\" ); return 0.0 ; } virtual void ResetBuffers () { m_SpatialSigmaCache -> ZeroAllValues (); } virtual double EstimateSigma ( unsigned int idx , const typename ParticleSystem :: PointVectorType & neighborhood , const shapeworks :: ParticleDomain * domain , const std :: vector < double >& weights , const PointType & pos , double initial_sigma , double precision , int & err ) const ; TGradientNumericType AngleCoefficient ( const GradientVectorType & , const GradientVectorType & ) const ; void SetMinimumNeighborhoodRadius ( double s ) { m_MinimumNeighborhoodRadius = s ; } double GetMinimumNeighborhoodRadius () const { return m_MinimumNeighborhoodRadius ; } void SetMaximumNeighborhoodRadius ( double s ) { m_MaximumNeighborhoodRadius = s ; } double GetMaximumNeighborhoodRadius () const { return m_MaximumNeighborhoodRadius ; } void SetFlatCutoff ( double s ) { m_FlatCutoff = s ; } double GetFlatCutoff () const { return m_FlatCutoff ; } void SetNeighborhoodToSigmaRatio ( double s ) { m_NeighborhoodToSigmaRatio = s ; } double GetNeighborhoodToSigmaRatio () const { return m_NeighborhoodToSigmaRatio ; } void SetSpatialSigmaCache ( SigmaCacheType * s ) { m_SpatialSigmaCache = s ; } SigmaCacheType * GetSpatialSigmaCache () { return m_SpatialSigmaCache . GetPointer (); } const SigmaCacheType * GetSpatialSigmaCache () const { return m_SpatialSigmaCache . GetPointer (); } void ComputeAngularWeights ( const PointType & , int , const typename ParticleSystem :: PointVectorType & , const shapeworks :: ParticleDomain * , std :: vector < double >& ) const ; // void ComputeNeighborho0d(); virtual VectorFunction :: Pointer Clone () { SamplingFunction :: Pointer copy = SamplingFunction :: New (); // from itkParticleVectorFunction copy -> m_DomainNumber = this -> m_DomainNumber ; copy -> m_ParticleSystem = this -> m_ParticleSystem ; // local copy -> m_FlatCutoff = this -> m_FlatCutoff ; copy -> m_MaximumNeighborhoodRadius = this -> m_MaximumNeighborhoodRadius ; copy -> m_MinimumNeighborhoodRadius = this -> m_MinimumNeighborhoodRadius ; copy -> m_NeighborhoodToSigmaRatio = this -> m_NeighborhoodToSigmaRatio ; copy -> m_SpatialSigmaCache = this -> m_SpatialSigmaCache ; return ( typename VectorFunction :: Pointer ) copy ; } protected : SamplingFunction () : m_FlatCutoff ( 0.05 ), m_NeighborhoodToSigmaRatio ( 3.0 ) {} virtual ~ SamplingFunction () {} void operator = ( const SamplingFunction & ); SamplingFunction ( const SamplingFunction & ); double m_MinimumNeighborhoodRadius ; double m_MaximumNeighborhoodRadius ; double m_FlatCutoff ; double m_NeighborhoodToSigmaRatio ; typename SigmaCacheType :: Pointer m_SpatialSigmaCache ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Session_8h.html","text":"Studio/Data/Session.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#studiodatasessionh","text":"","title":"Studio/Data/Session.h"},{"location":"api/Files/Session_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Session_8h.html#classes","text":"Name class shapeworks::CompareSettings class shapeworks::Session Representation of a session.","title":"Classes"},{"location":"api/Files/Session_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { class CompareSettings { public : bool compare_enabled_ = false ; bool surface_distance_mode_ = false ; bool original_checked_ = false ; bool groomed_checked_ = false ; bool reconstructed_checked_ = false ; bool mean_shape_checked_ = false ; float opacity_ = 1.0 ; DisplayMode get_display_mode () { if ( original_checked_ ) { return DisplayMode :: Original ; } else if ( groomed_checked_ ) { return DisplayMode :: Groomed ; } else { return DisplayMode :: Reconstructed ; } } bool get_mean_shape_checked () { return mean_shape_checked_ ; } }; class Shape ; class Session ; typedef QSharedPointer < Session > SessionHandle ; using TransformType = vtkSmartPointer < vtkTransform > ; class Session : public QObject , public QEnableSharedFromThis < Session > { Q_OBJECT ; public : Session ( QWidget * parent , Preferences & prefs ); ~ Session (); void set_parent ( QWidget * parent ); bool save_project ( QString filename ); bool load_project ( QString filename ); bool load_light_project ( QString filename ); bool load_xl_project ( QString filename ); void set_project_path ( QString relative_path ); std :: shared_ptr < shapeworks :: Project > get_project (); void load_original_files ( std :: vector < std :: string > filenames ); void load_groomed_files ( std :: vector < std :: string > file_names , double iso , int domains_per_shape ); bool load_point_files ( std :: vector < std :: string > local , std :: vector < std :: string > world , int domains_per_shape ); bool update_particles ( std :: vector < Particles > particles ); int get_num_particles (); ParticleSystemEvaluation get_local_particle_system ( int domain ); void update_procrustes_transforms ( std :: vector < std :: vector < std :: vector < double >>> transforms ); bool is_light_project (); bool get_groomed_present (); void remove_shapes ( QList < int > list ); ShapeList get_shapes (); void calculate_reconstructed_samples (); QString get_filename (); QString get_display_name (); bool original_present (); bool groomed_present (); bool particles_present (); bool groups_available (); int get_num_shapes (); int get_domains_per_shape (); std :: string get_default_feature_map (); static bool is_supported_file_format ( std :: string filename ); std :: shared_ptr < MeshManager > get_mesh_manager () { return this -> mesh_manager_ ; } shapeworks :: Parameters & parameters (); std :: vector < DomainType > get_groomed_domain_types (); double update_auto_glyph_size (); double get_auto_glyph_size (); static Point3 get_point ( const Eigen :: VectorXd & points , int i ); void clear_particles (); bool get_feature_auto_scale (); double get_feature_range_max (); double get_feature_range_min (); void set_feature_range ( double min , double max ); void set_feature_range_min ( double value ); void set_feature_range_max ( double value ); void handle_ctrl_click ( PickResult result ); void trigger_landmarks_changed (); void trigger_planes_changed (); void trigger_ffc_changed (); void set_active_landmark_domain ( int id ); int get_active_landmark_domain (); void set_placing_landmark ( int id ); int get_placing_landmark (); void set_landmarks_active ( bool active ); bool get_landmarks_active (); void set_planes_active ( bool active ); bool get_planes_active (); void set_show_landmark_labels ( bool show ); bool get_show_landmark_labels (); void set_show_planes ( bool show ); bool get_show_planes (); bool should_show_planes (); void set_show_landmarks ( bool show ); bool get_show_landmarks (); // image volume bool set_image_name ( std :: string image_name ); std :: string get_image_name (); // image axis void set_image_axis ( QString axis ); Axis get_image_axis (); // image view 3d mode void set_image_3d_mode ( bool mode ); bool get_image_3d_mode (); // image sync/share window width and level void set_image_share_window_and_level ( bool enabled ); bool get_image_share_window_and_level (); // image sync slice void set_image_sync_slice ( bool enabled ); bool get_image_sync_slice (); bool has_constraints (); void set_loading ( bool loading ); bool is_loading (); void set_tool_state ( std :: string state ); std :: string get_tool_state (); bool is_analysis_mode (); void set_ffc_paint_active ( bool enabled ); bool get_ffc_paint_active (); void set_ffc_paint_mode_inclusive ( bool inclusive ); bool get_ffc_paint_mode_inclusive (); void set_ffc_paint_size ( double size ); double get_ffc_paint_size (); bool get_show_good_bad_particles (); void set_show_good_bad_particles ( bool enabled ); bool get_show_difference_vectors (); void set_show_difference_vectors ( bool enabled ); bool should_difference_vectors_show (); std :: vector < bool > get_good_bad_particles (); void set_good_bad_particles ( const std :: vector < bool >& good_bad ); // for setting difference to mean, etc void set_difference_particles ( Particles particles ) { difference_particles_ = particles ; } Particles get_difference_particles () { return difference_particles_ ; } void set_compare_settings ( CompareSettings settings ); CompareSettings get_compare_settings (); void trigger_repaint (); void trigger_reinsert_shapes (); void set_display_mode ( DisplayMode mode ); DisplayMode get_display_mode (); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ) { glyph_lut_ = lut ; } vtkSmartPointer < vtkLookupTable > get_glyph_lut () { return glyph_lut_ ; } public Q_SLOTS : void set_feature_auto_scale ( bool value ); void set_landmark_drag_mode ( bool mode ); bool get_landmark_drag_mode (); void handle_clear_cache (); void handle_new_mesh (); void handle_thread_complete (); Q_SIGNALS : void data_changed (); void points_changed (); void landmarks_changed (); void planes_changed (); void ffc_changed (); void update_display (); void new_mesh (); void feature_range_changed (); void update_view_mode (); void image_slice_settings_changed (); void ffc_paint_mode_changed (); void repaint (); void reinsert_shapes (); public : // constants const static std :: string DATA_C ; const static std :: string GROOM_C ; const static std :: string OPTIMIZE_C ; const static std :: string ANALYSIS_C ; const static std :: string DEEPSSM_C ; private : void renumber_shapes (); void new_landmark ( PickResult result ); void new_plane_point ( PickResult result ); QWidget * parent_ { nullptr }; Preferences & preferences_ ; QString filename_ ; ShapeList shapes_ ; Particles difference_particles_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; bool groups_available_ { false }; bool is_light_project_ { false }; bool unsaved_particle_files_ { false }; Parameters params_ ; std :: shared_ptr < Project > project_ { new Project ()}; double auto_glyph_size_ = -1 ; int active_landmark_domain_ = -1 ; int placing_landmark_ = -1 ; bool landmark_drag_mode_ = false ; bool landmarks_active_ = false ; bool planes_active_ = false ; bool show_landmark_labels_ = false ; bool show_difference_vectors_ = false ; bool ffc_painting_active_ = false ; bool ffc_painting_inclusive_mode_ = false ; double ffc_paint_size_ = 50 ; bool is_loading_ = false ; CompareSettings compare_settings_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluationJob_8h.html","text":"Studio/Analysis/ShapeEvaluationJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluationJob Functions Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType ) Functions Documentation function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( Eigen :: VectorXd ) function Q_DECLARE_METATYPE Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ) Source code #pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#studioanalysisshapeevaluationjobh","text":"","title":"Studio/Analysis/ShapeEvaluationJob.h"},{"location":"api/Files/ShapeEvaluationJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluationJob_8h.html#classes","text":"Name class shapeworks::ShapeEvaluationJob","title":"Classes"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions","text":"Name Q_DECLARE_METATYPE (Eigen::VectorXd ) Q_DECLARE_METATYPE (shapeworks::ShapeEvaluationJob::JobType )","title":"Functions"},{"location":"api/Files/ShapeEvaluationJob_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype","text":"Q_DECLARE_METATYPE ( Eigen :: VectorXd )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#function-q_declare_metatype_1","text":"Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType )","title":"function Q_DECLARE_METATYPE"},{"location":"api/Files/ShapeEvaluationJob_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class ShapeEvaluationJob : public Job { Q_OBJECT public : enum class JobType { CompactnessType , SpecificityType , GeneralizationType }; ShapeEvaluationJob ( JobType job_type , ParticleShapeStatistics stats ); void run () override ; QString name () override ; Q_SIGNALS : void report_progress ( shapeworks :: ShapeEvaluationJob :: JobType job_type , float progress ); void result_ready ( shapeworks :: ShapeEvaluationJob :: JobType job_type , Eigen :: VectorXd data ); private : void receive_progress ( float progress ); JobType job_type_ ; ParticleShapeStatistics stats_ ; }; } Q_DECLARE_METATYPE ( Eigen :: VectorXd ); Q_DECLARE_METATYPE ( shapeworks :: ShapeEvaluationJob :: JobType ); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeEvaluation_8h.html","text":"Libs/Particles/ShapeEvaluation.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeEvaluation Source code #pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#libsparticlesshapeevaluationh","text":"","title":"Libs/Particles/ShapeEvaluation.h"},{"location":"api/Files/ShapeEvaluation_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeEvaluation_8h.html#classes","text":"Name class shapeworks::ShapeEvaluation","title":"Classes"},{"location":"api/Files/ShapeEvaluation_8h.html#source-code","text":"#pragma once #include #include #include \"ParticleShapeStatistics.h\" #include \"ParticleSystemEvaluation.h\" namespace shapeworks { class ShapeEvaluation { public : static const unsigned VDimension = 3 ; ShapeEvaluation (); static double ComputeCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullCompactness ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullGeneralization ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); static double ComputeSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , const int nModes , const std :: string & saveTo = \"\" ); static Eigen :: VectorXd ComputeFullSpecificity ( const ParticleSystemEvaluation & ParticleSystemEvaluation , std :: function < void ( float ) > progress_callback = nullptr ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeGradientMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeGradientMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#libsoptimizematrixshapegradientmatrixh","text":"","title":"Libs/Optimize/Matrix/ShapeGradientMatrix.h"},{"location":"api/Files/ShapeGradientMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeGradientMatrix_8h.html#classes","text":"Name class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeGradientMatrix_8h.html#source-code","text":"#pragma once #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradN.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeGradientMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeGradientMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; typedef ParticleSystem ParticleSystemType ; itkNewMacro ( Self ); itkTypeMacro ( ShapeGradientMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) { m_use_xyz . resize ( m_DomainsPerShape ); } m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) { m_use_normals . resize ( m_DomainsPerShape ); } m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) { this -> operator ()( r , c ) = tmp ( r , c ); } } } void SetValues ( const ParticleSystemType * ps , int idx , int d ); virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) { this -> ResizeMatrix ( this -> rows (), this -> cols () + 3 ); // 3 columns for every shape } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } if ( m_use_normals [ i ]) { numRows += 3 * ps -> GetNumberOfParticles ( i ); } numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) { this -> ResizeMatrix ( numRows , this -> cols ()); } this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } protected : ShapeGradientMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeGradientMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeGradientMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; // one per anatomy/domain? std :: vector < bool > m_use_normals ; // one per anatomy/domain? std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeMatrix_8h.html","text":"Libs/Optimize/Matrix/ShapeMatrix.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! Source code #pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#libsoptimizematrixshapematrixh","text":"","title":"Libs/Optimize/Matrix/ShapeMatrix.h"},{"location":"api/Files/ShapeMatrix_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeMatrix_8h.html#classes","text":"Name class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES!","title":"Classes"},{"location":"api/Files/ShapeMatrix_8h.html#source-code","text":"#pragma once #include #include \"Domain/MeshDomain.h\" #include \"Libs/Optimize/Container/GenericContainer.h\" #include \"Libs/Optimize/Domain/ImageDomainWithGradients.h\" #include \"Libs/Optimize/Domain/ImplicitSurfaceDomain.h\" #include \"Observer.h\" #include \"ParticleSystem.h\" #include \"itkDataObject.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_matrix.h\" namespace shapeworks { class ShapeMatrix : public vnl_matrix < double > , public Observer { public : typedef double DataType ; typedef ShapeMatrix Self ; typedef Observer Superclass ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: WeakPointer < const Self > ConstWeakPointer ; itkNewMacro ( Self ); itkTypeMacro ( ShapeMatrix , Observer ); virtual void BeforeIteration () {} virtual void AfterIteration () {} void SetDomainsPerShape ( int i ) { m_DomainsPerShape = i ; } int GetDomainsPerShape () const { return m_DomainsPerShape ; } void SetAttributesPerDomain ( const std :: vector < int >& i ) { m_AttributesPerDomain = i ; } void SetAttributeScales ( const std :: vector < double >& s ) { m_AttributeScales = s ; } void SetXYZ ( int i , bool val ) { if ( m_use_xyz . size () != m_DomainsPerShape ) m_use_xyz . resize ( m_DomainsPerShape ); m_use_xyz [ i ] = val ; } void SetNormals ( int i , bool val ) { if ( m_use_normals . size () != m_DomainsPerShape ) m_use_normals . resize ( m_DomainsPerShape ); m_use_normals [ i ] = val ; } virtual void SetMatrix ( const vnl_matrix < double >& m ) { vnl_matrix < double >:: operator = ( m ); } virtual void ResizeMatrix ( int rs , int cs ) { vnl_matrix < double > tmp ( * this ); // copy existing matrix // Create new column (shape) this -> set_size ( rs , cs ); // Copy old data into new matrix. for ( unsigned int c = 0 ; c < tmp . cols (); c ++ ) { for ( unsigned int r = 0 ; r < tmp . rows (); r ++ ) this -> operator ()( r , c ) = tmp ( r , c ); } } virtual void DomainAddEventCallback ( Object * , const itk :: EventObject & e ) { const ParticleDomainAddEvent & event = dynamic_cast < const ParticleDomainAddEvent &> ( e ); unsigned int d = event . GetDomainIndex (); if ( d % m_DomainsPerShape == 0 ) this -> ResizeMatrix ( this -> rows (), this -> cols () + 1 ); } void SetValues ( const ParticleSystem * ps , int idx , int d ) { const int VDimension = 3 ; const typename ParticleSystem :: PointType pos = ps -> GetTransformedPosition ( idx , d ); const typename ParticleSystem :: PointType posLocal = ps -> GetPosition ( idx , d ); unsigned int k = 0 ; int dom = d % m_DomainsPerShape ; int num = 0 ; for ( int i = 0 ; i < dom ; i ++ ) { if ( m_use_xyz [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } if ( m_use_normals [ i ]) { k += VDimension * ps -> GetNumberOfParticles ( i ); num += VDimension ; } k += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); num += m_AttributesPerDomain [ i ]; } if ( m_use_xyz [ dom ]) k += idx * VDimension ; if ( m_use_normals [ dom ]) k += idx * VDimension ; k += idx * m_AttributesPerDomain [ dom ]; int s = 0 ; if ( m_use_xyz [ dom ]) { for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pos [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } if ( m_use_normals [ dom ]) { vnl_vector_fixed < float , DIMENSION > pN = ps -> GetDomain ( d ) -> SampleNormalAtPoint ( posLocal , idx ); ParticleSystem :: VectorType tmp ; tmp [ 0 ] = pN [ 0 ]; tmp [ 1 ] = pN [ 1 ]; tmp [ 2 ] = pN [ 2 ]; tmp = ps -> TransformVector ( tmp , ps -> GetTransform ( d ) * ps -> GetPrefixTransform ( d )); pN [ 0 ] = tmp [ 0 ]; pN [ 1 ] = tmp [ 1 ]; pN [ 2 ] = tmp [ 2 ]; pN = pN . normalize (); // contains scaling for ( unsigned int i = 0 ; i < VDimension ; i ++ ) { this -> operator ()( i + k , d / m_DomainsPerShape ) = pN [ i ] * m_AttributeScales [ num + i + s ]; } k += VDimension ; s += VDimension ; } std :: vector < float > feature_values ; if ( m_AttributesPerDomain [ dom ] > 0 ) { Point3 pt ; pt [ 0 ] = posLocal [ 0 ]; pt [ 1 ] = posLocal [ 1 ]; pt [ 2 ] = posLocal [ 2 ]; feature_values . clear (); const MeshDomain * domain = static_cast < const MeshDomain *> ( ps -> GetDomain ( d )); auto mesh = domain -> GetSWMesh (); auto field_attributes = ps -> GetFieldAttributes (); for ( int i = 0 ; i < field_attributes . size (); i ++ ) { feature_values . push_back ( mesh -> interpolateFieldAtPoint ( field_attributes [ i ], pt )); } for ( int aa = 0 ; aa < m_AttributesPerDomain [ dom ]; aa ++ ) { this -> operator ()( aa + k , d / m_DomainsPerShape ) = feature_values [ aa ] * m_AttributeScales [ aa + num + s ]; } } } virtual void PositionAddEventCallback ( Object * o , const itk :: EventObject & e ) { const int VDimension = 3 ; // update the size of matrix based on xyz, normals and number of attributes being used const ParticlePositionAddEvent & event = dynamic_cast < const ParticlePositionAddEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); int numRows = 0 ; for ( int i = 0 ; i < m_DomainsPerShape ; i ++ ) { if ( m_use_xyz [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); if ( m_use_normals [ i ]) numRows += VDimension * ps -> GetNumberOfParticles ( i ); numRows += m_AttributesPerDomain [ i ] * ps -> GetNumberOfParticles ( i ); } if ( numRows > this -> rows ()) this -> ResizeMatrix ( numRows , this -> cols ()); this -> SetValues ( ps , idx , d ); } virtual void PositionSetEventCallback ( Object * o , const itk :: EventObject & e ) { // update xyz, normals and number of attributes being used const ParticlePositionSetEvent & event = dynamic_cast < const ParticlePositionSetEvent &> ( e ); const ParticleSystem * ps = dynamic_cast < const ParticleSystem *> ( o ); const int d = event . GetDomainIndex (); const unsigned int idx = event . GetPositionIndex (); this -> SetValues ( ps , idx , d ); } virtual void PositionRemoveEventCallback ( Object * , const itk :: EventObject & ) { // NEED TO IMPLEMENT THIS } void PrintMatrix () { std :: cout << std :: endl ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { std :: cout << this -> operator ()( r , c ) << \" \" ; } std :: cout << std :: endl ; } } bool CheckForNans () { bool flag = false ; for ( unsigned int r = 0 ; r < this -> rows (); r ++ ) { for ( unsigned int c = 0 ; c < this -> cols (); c ++ ) { if ( std :: isnan ( this -> operator ()( r , c ))) { flag = true ; break ; } } } return flag ; } protected : ShapeMatrix () { m_DomainsPerShape = 1 ; this -> m_DefinedCallbacks . DomainAddEvent = true ; this -> m_DefinedCallbacks . PositionAddEvent = true ; this -> m_DefinedCallbacks . PositionSetEvent = true ; this -> m_DefinedCallbacks . PositionRemoveEvent = true ; } virtual ~ ShapeMatrix () {} void PrintSelf ( std :: ostream & os , itk :: Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } int m_DomainsPerShape ; private : ShapeMatrix ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented std :: vector < bool > m_use_xyz ; std :: vector < bool > m_use_normals ; std :: vector < int > m_AttributesPerDomain ; std :: vector < double > m_AttributeScales ; }; // end class } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksStudioApp_8h.html","text":"Studio/Interface/ShapeWorksStudioApp.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#studiointerfaceshapeworksstudioapph","text":"","title":"Studio/Interface/ShapeWorksStudioApp.h"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#classes","text":"Name class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window.","title":"Classes"},{"location":"api/Files/ShapeWorksStudioApp_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Forward Qt class declarations class Ui_ShapeWorksStudioApp ; namespace shapeworks { class Lightbox ; class DataTool ; class GroomTool ; class OptimizeTool ; class AnalysisTool ; class DeepSSMTool ; class Session ; class Visualizer ; class SplashScreen ; class WheelEventForwarder ; class StatusBarWidget ; class PythonWorker ; class CompareWidget ; class ShapeWorksStudioApp : public QMainWindow { Q_OBJECT public : ShapeWorksStudioApp (); ~ ShapeWorksStudioApp (); void closeEvent ( QCloseEvent * event ) override ; void initialize_vtk (); void import_files ( QStringList file_names ); public Q_SLOTS : void open_project ( QString filename ); void on_action_new_project_triggered (); void on_action_open_project_triggered (); void on_action_show_project_folder_triggered (); bool on_action_save_project_triggered (); bool save_project_as ( QString type ); void save_as_swproj_clicked (); void save_as_xlsx_clicked (); void on_action_quit_triggered (); void on_action_import_triggered (); void splash_screen_closed (); void on_vertical_scroll_bar_valueChanged (); void on_action_import_mode_triggered (); void on_action_groom_mode_triggered (); void on_action_optimize_mode_triggered (); void on_action_analysis_mode_triggered (); void on_action_deepssm_mode_triggered (); void on_actionShow_Tool_Window_triggered (); void on_actionExport_PCA_Mesh_triggered (); void on_actionExport_Eigenvalues_triggered (); void on_actionExport_Eigenvectors_triggered (); void on_actionExport_PCA_Mode_Points_triggered (); void on_action_preferences_triggered (); void action_export_current_mesh_triggered ( int index = 0 ); void on_action_export_current_particles_triggered (); void on_action_export_mesh_scalars_triggered (); void on_action_export_pca_scores_triggered (); void action_export_pca_montage_triggered (); void action_export_screenshot_triggered (); void action_export_particle_scalars_triggered (); void action_export_all_subjects_particle_scalars_triggered (); void on_center_checkbox_stateChanged (); void on_zoom_slider_valueChanged (); void on_view_mode_combobox_currentIndexChanged ( QString disp_mode ); void on_auto_view_button_clicked (); void handle_pca_changed (); void handle_slider_update (); void handle_mca_changed (); void handle_project_changed (); void handle_points_changed (); void handle_groom_start (); void handle_groom_complete (); void handle_optimize_start (); void handle_optimize_complete (); void handle_reconstruction_complete (); void handle_display_setting_changed (); void handle_glyph_changed (); void handle_opacity_changed (); void handle_alignment_changed (); void handle_open_recent (); void handle_color_scheme (); void handle_pca_update (); void clear_message (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress_with_message ( int amt , std :: string str ); void handle_progress ( int amt ); void message_callback ( std :: string str ); void handle_new_mesh (); void handle_clear_cache (); void handle_compare_settings_changed (); void handle_lightbox_right_click ( int index ); void update_feature_map_selection ( int index ); void update_feature_map_scale (); void image_combo_changed ( int index ); void show_splash_screen (); void hide_splash_screen (); void about (); void keyboard_shortcuts (); void toggle_log_window (); QSharedPointer < PythonWorker > get_py_worker (); Preferences & prefs () { return preferences_ ; } QSharedPointer < Session > session () { return session_ ; } protected : void dragEnterEvent ( QDragEnterEvent * event ) override ; void dragLeaveEvent ( QDragLeaveEvent * event ) override ; void dropEvent ( QDropEvent * event ) override ; private : void new_session (); void update_tool_mode (); void update_view_mode (); void reset_num_viewers (); void update_view_combo (); void update_compare_menu (); bool should_reconstruct_view_show (); static bool write_particle_file ( std :: string filename , Eigen :: VectorXd particles ); static QString get_mesh_file_filter (); static const std :: string SETTING_ZOOM_C ; void set_view_combo_item_enabled ( int item , bool value ); bool is_view_combo_item_enabled ( int item ); void disable_all_actions (); void enable_possible_actions (); void update_from_preferences (); void update_scrollbar (); void update_table (); void update_display ( bool force = false ); void display_mode_shape (); bool set_feature_map ( std :: string feature_map ); std :: string get_feature_map (); bool get_feature_uniform_scale (); void set_feature_uniform_scale ( bool value ); void update_recent_files (); void update_alignment_options (); void save_project ( QString filename ); bool write_mesh ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); bool write_scalars ( vtkSmartPointer < vtkPolyData > poly_data , QString filename ); void set_message ( MessageType message_type , QString message ); void create_glyph_submenu (); void create_iso_submenu (); void create_compare_submenu (); Ui_ShapeWorksStudioApp * ui_ ; QActionGroup * action_group_ = nullptr ; QSharedPointer < Lightbox > lightbox_ ; QSharedPointer < DataTool > data_tool_ ; QSharedPointer < GroomTool > groom_tool_ ; QSharedPointer < OptimizeTool > optimize_tool_ ; QSharedPointer < AnalysisTool > analysis_tool_ ; QSharedPointer < DeepSSMTool > deepssm_tool_ ; QSharedPointer < Visualizer > visualizer_ ; QSharedPointer < PreferencesWindow > preferences_window_ ; CompareWidget * compare_widget_ = nullptr ; vtkSmartPointer < StudioVtkOutputWindow > studio_vtk_output_window_ ; // all the preferences Preferences preferences_ ; QSharedPointer < Session > session_ ; QSharedPointer < WheelEventForwarder > wheel_event_forwarder_ ; // programmatic UI elements CustomSlider * glyph_size_slider_ ; CustomSlider * glyph_quality_slider_ ; QLabel * glyph_size_label_ ; QLabel * glyph_quality_label_ ; QCheckBox * glyph_auto_size_ ; QCheckBox * glyph_arrow_scale_ { nullptr }; QList < QAction *> recent_file_actions_ ; LogWindow log_window_ ; QPointer < StatusBarWidget > status_bar_ ; QSharedPointer < shapeworks :: SplashScreen > splash_screen_ ; QErrorMessage error_message_dialog_ ; std :: vector < CustomSlider *> iso_opacity_sliders_ ; std :: vector < QCheckBox *> domain_particle_checkboxes_ ; QString current_message_ ; std :: string current_display_mode_ ; bool block_update_ { false }; QElapsedTimer time_since_last_update_ ; qint64 last_render_ = -1 ; QStringList current_features_ ; QStringList current_image_list_ ; QSharedPointer < PythonWorker > py_worker_ ; StudioLogger logger_ ; UpdateChecker update_checker_ { preferences_ }; Telemetry telemetry_ { preferences_ }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeWorksWorker_8h.html","text":"Studio/Data/ShapeWorksWorker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksWorker Source code #pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#studiodatashapeworksworkerh","text":"","title":"Studio/Data/ShapeWorksWorker.h"},{"location":"api/Files/ShapeWorksWorker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeWorksWorker_8h.html#classes","text":"Name class shapeworks::ShapeworksWorker","title":"Classes"},{"location":"api/Files/ShapeWorksWorker_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Optimize ; class Groom ; class OptimizeParameters ; class ShapeworksWorker : public QObject { Q_OBJECT public : enum ThreadType { GroomType , OptimizeType , ReconstructType }; ShapeworksWorker ( ThreadType type , QSharedPointer < Groom > groom , QSharedPointer < Optimize > optimize , QSharedPointer < OptimizeParameters > optimize_parameters , QSharedPointer < Session > session , double maxAngle = 45. , float decimationPercent = 0.3f , int numClusters = 5 ); ~ ShapeworksWorker (); public Q_SLOTS : void process (); Q_SIGNALS : void result_ready (); void failure (); void finished (); private : QSharedPointer < Groom > groom_ ; QSharedPointer < Optimize > optimize_ ; QSharedPointer < OptimizeParameters > optimize_parameters_ ; QSharedPointer < Session > session_ ; ThreadType type_ ; float decimation_percent_ ; double max_angle_ ; int num_clusters_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Shape_8h.html","text":"Libs/Analyze/Shape.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used. Source code #pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#libsanalyzeshapeh","text":"","title":"Libs/Analyze/Shape.h"},{"location":"api/Files/Shape_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shape_8h.html#classes","text":"Name class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::Shape::Point TODO: replace this wherever it is used.","title":"Classes"},{"location":"api/Files/Shape_8h.html#source-code","text":"#pragma once #include #include #include #include // studio #include \"MeshGroup.h\" #include \"MeshManager.h\" #include \"StudioEnums.h\" #include \"StudioMesh.h\" // shapeworks #include #include #include namespace shapeworks { class Shape ; using ShapeHandle = std :: shared_ptr < Shape > ; using ShapeList = std :: vector < ShapeHandle > ; class VtkMeshWrapper ; class Shape { public : class Point { public : Point (){}; Point ( double _x , double _y , double _z ) : x ( _x ), y ( _y ), z ( _z ){}; double x , y , z ; }; Shape (); ~ Shape (); std :: string get_display_name (); MeshGroup get_meshes ( DisplayMode display_mode , bool wait = false ); void set_annotations ( std :: vector < std :: string > annotations , bool only_overwrite_blank = true ); std :: vector < std :: string > get_annotations (); void set_mesh_manager ( std :: shared_ptr < MeshManager > mesh_manager ); void set_subject ( std :: shared_ptr < shapeworks :: Subject > subject ); bool is_subject (); std :: shared_ptr < shapeworks :: Subject > get_subject (); void import_original_file ( const std :: string & filename ); MeshGroup get_original_meshes ( bool wait = false ); MeshGroup get_groomed_meshes ( bool wait = false ); MeshGroup get_reconstructed_meshes ( bool wait = false ); void reset_groomed_mesh (); bool import_global_point_files ( std :: vector < std :: string > filenames ); bool import_local_point_files ( std :: vector < std :: string > filenames ); bool import_landmarks_files ( std :: vector < std :: string > filenames ); bool store_landmarks (); bool import_constraints ( std :: vector < std :: string > filenames ); bool store_constraints (); void set_particles ( Particles particles ); Particles get_particles (); void set_particle_transform ( vtkSmartPointer < vtkTransform > transform ); void set_alignment_type ( int alignment ); Eigen :: VectorXd get_global_correspondence_points (); std :: vector < Eigen :: VectorXd > get_particles_for_display (); Eigen :: VectorXd get_local_correspondence_points (); void clear_reconstructed_mesh (); int get_id (); void set_id ( int id ); std :: vector < std :: string > get_original_filenames (); std :: vector < std :: string > get_original_filenames_with_path (); std :: string get_original_filename (); std :: string get_original_filename_with_path (); std :: string get_groomed_filename (); std :: string get_groomed_filename_with_path ( int domain ); std :: string get_global_point_filename (); std :: string get_global_point_filename_with_path (); std :: string get_local_point_filename (); std :: string get_local_point_filename_with_path (); void set_transform ( vtkSmartPointer < vtkTransform > transform ); vtkSmartPointer < vtkTransform > get_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_inverse_transform ( int domain = 0 ); bool has_alignment (); vtkSmartPointer < vtkTransform > get_original_transform ( int domain = 0 ); void set_reconstruction_transforms ( std :: vector < vtkSmartPointer < vtkTransform >> transforms ); vtkSmartPointer < vtkTransform > get_reconstruction_transform ( int domain ); vtkSmartPointer < vtkTransform > get_groomed_transform ( int domain = 0 ); vtkSmartPointer < vtkTransform > get_procrustes_transform ( int domain = 0 ); std :: vector < vtkSmartPointer < vtkTransform >> get_procrustes_transforms (); vtkSmartPointer < vtkTransform > get_alignment ( int domain = 0 ); void load_feature ( DisplayMode display_mode , std :: string feature ); std :: shared_ptr < Image > get_image_volume ( std :: string image_volume_name ); Eigen :: VectorXf get_point_features ( std :: string feature ); void set_point_features ( std :: string feature , Eigen :: VectorXf values ); void load_feature_from_scalar_file ( std :: string filename , std :: string feature_name ); void set_override_feature ( std :: string feature ); std :: string get_override_feature (); Eigen :: MatrixXd & landmarks (); std :: vector < Constraints >& constraints (); Constraints & get_constraints ( int domain_id ); bool has_planes (); std :: vector < std :: shared_ptr < VtkMeshWrapper >> get_groomed_mesh_wrappers (); private : void generate_meshes ( std :: vector < std :: string > filenames , MeshGroup & mesh_list , bool save_transform , bool wait = false ); static bool import_point_file ( std :: string filename , Eigen :: VectorXd & points ); void apply_feature_to_points ( std :: string feature , ImageType :: Pointer image ); void load_feature_from_mesh ( std :: string feature , MeshHandle mesh ); int id_ ; MeshGroup original_meshes_ ; MeshGroup groomed_meshes_ ; MeshGroup reconstructed_meshes_ ; std :: vector < std :: shared_ptr < VtkMeshWrapper >> groomed_mesh_wrappers_ ; std :: string override_feature_ ; std :: vector < std :: string > global_point_filenames_ ; std :: vector < std :: string > local_point_filenames_ ; std :: map < std :: string , Eigen :: VectorXf > point_features_ ; Particles particles_ ; std :: shared_ptr < shapeworks :: Subject > subject_ ; vtkSmartPointer < vtkTransform > transform_ = vtkSmartPointer < vtkTransform >:: New (); std :: vector < vtkSmartPointer < vtkTransform >> reconstruction_transforms_ ; std :: vector < std :: string > corner_annotations_ ; std :: shared_ptr < MeshManager > mesh_manager_ ; Eigen :: MatrixXd landmarks_ ; std :: shared_ptr < Image > image_volume_ ; std :: string image_volume_filename_ ; std :: vector < Constraints > constraints_ ; // one set for each domain int alignment_type_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/ShapeworksUtils_8h.html","text":"Libs/Common/ShapeworksUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::ShapeworksUtils Source code #pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#libscommonshapeworksutilsh","text":"","title":"Libs/Common/ShapeworksUtils.h"},{"location":"api/Files/ShapeworksUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/ShapeworksUtils_8h.html#classes","text":"Name class shapeworks::ShapeworksUtils","title":"Classes"},{"location":"api/Files/ShapeworksUtils_8h.html#source-code","text":"#pragma once #include \"Shapeworks.h\" #include #include #include #include #include namespace shapeworks { class ShapeworksUtils { using time_point = std :: chrono :: time_point < std :: chrono :: steady_clock > ; public : static time_point now () { return std :: chrono :: steady_clock :: now (); } static double elapsed ( time_point start , time_point end , bool print_elapsed = true ); static unsigned rngSeed () { return rngSeed_ ; } static void setRngSeed ( const unsigned seed ); static unsigned generateNumber () { return mt_ (); } // TODO: in C++17 this is a standard function static bool is_directory ( const std :: string & pathname ); // TODO: in C++17 this is a standard function static bool exists ( const std :: string & filename ); static Matrix33 getMatrix ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); static Vector3 getOffset ( const vtkSmartPointer < vtkMatrix4x4 >& mat ); private : static unsigned rngSeed_ ; static std :: mt19937 mt_ ; }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Shapeworks_8h.html","text":"Libs/Common/Shapeworks.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#libscommonshapeworksh","text":"","title":"Libs/Common/Shapeworks.h"},{"location":"api/Files/Shapeworks_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Shapeworks_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace shapeworks { const auto Pi = std :: atan ( 1.0 ) * 4.0 ; using Coord = itk :: Index < 3 > ; using Dims = itk :: Size < 3 > ; using Point3 = itk :: Point < double , 3 > ; using Vector3 = itk :: Vector < double , 3 > ; using Matrix44 = itk :: Matrix < double , 4 , 4 > ; using Matrix33 = itk :: Matrix < double , 3 , 3 > ; using IPoint3 = itk :: Point < int , 3 > ; using FPoint3 = itk :: Point < float , 3 > ; using Covariant = itk :: CovariantVector < float , 3 > ; using Vector = Vector3 ; using Point = Point3 ; using Matrix = Matrix33 ; using Plane = vtkSmartPointer < vtkPlane > ; // While doubles are the most commonly stored items, vtkDataArray can store any // type, yet has a default interface that conveniently stores and retrieves // doubles. When required, one can convert a vtkDataArray to a vtkDoubleArray // explicitly using `dynamic_cast(vtk_data_array)`. using Array = vtkSmartPointer < vtkDataArray > ; using Field = Array ; using PointArray = std :: vector < Point3 > ; Vector3 makeVector ( std :: array < double , 3 >&& arr ); PointArray makePointArray ( int size , Point3 value ); using GenericTransform = itk :: Transform < double , 3 > ; using IdentityTransform = itk :: IdentityTransform < double , 3 > ; using TransformPtr = GenericTransform :: Pointer ; TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 })); Plane makePlane ( const Point & p , const Vector3 & n ); Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ); Point getOrigin ( const Plane plane ); Vector3 getNormal ( const Plane plane ); using AffineTransform = itk :: AffineTransform < double , 3 > ; using AffineTransformPtr = AffineTransform :: Pointer ; using MeshTransform = vtkSmartPointer < vtkTransform > ; MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ); Point toPoint ( const Dims & d ); Point toPoint ( const Coord & c ); Vector toVector ( const Dims & d ); Vector toVector ( const Point & p ); Vector toVector ( const itk :: CovariantVector < double , 3 > & v ); Point toPoint ( const Vector & v ); Coord toCoord ( const Dims & d ); Dims toDims ( const Coord & c ); Dims toDims ( const Point & p ); Coord toCoord ( const Point & p ); template < typename P > P negate ( const P & p ) { return P ({ - p [ 0 ], - p [ 1 ], - p [ 2 ]}); } template <> Vector3 negate ( const Vector3 & v ); template < typename P > P invertValue ( const P & p ) { return P ({ 1.0 / p [ 0 ], 1.0 / p [ 1 ], 1.0 / p [ 2 ]}); } template <> Vector3 invertValue ( const Vector3 & v ); Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ); Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ); double length ( const Vector3 & v ); enum Axis { invalid = -1 , X , Y , Z }; Axis toAxis ( const std :: string & str ); std :: string axisToString ( Axis axis ); bool axis_is_valid ( const Vector3 & axis ); bool axis_is_valid ( const Axis & axis ); double degToRad ( const double deg ); double mean ( const Field field ); double stddev ( const Field field ); std :: vector < double > range ( const Field field ); class Image ; template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator + ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] + q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator - ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] - q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator*(v0, v1); (or call dotProduct) std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || // use operator/(v0, v1); std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const P & q ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / q [ i ]; return ret ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator += ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] += q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator -= ( P & p , const P & q ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] -= q [ i ]; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator * ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] * x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P operator / ( const P & p , const double x ) { P ret ; for ( unsigned i = 0 ; i < 3 ; i ++ ) ret [ i ] = p [ i ] / x ; return std :: move ( ret ); } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator *= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] *= x ; return p ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > P & operator /= ( P & p , const double x ) { for ( unsigned i = 0 ; i < 3 ; i ++ ) p [ i ] /= x ; return p ; } template < typename T > bool epsEqual ( T a , T b , T epsilon ) { return std :: abs ( a - b ) < epsilon ; } template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value > > bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) { return std :: abs ( a [ 0 ] - b [ 0 ]) < eps && std :: abs ( a [ 1 ] - b [ 1 ]) < eps && std :: abs ( a [ 2 ] - b [ 2 ]) < eps ; } bool epsEqual ( double a , double b , double eps ); template < typename T > T clamp ( T value , T min , T max ) { value = std :: min < T > ( value , max ); value = std :: max < T > ( value , min ); return value ; } } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SharedCommandData_8h.html","text":"Applications/shapeworks/SharedCommandData.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name struct shapeworks::SharedCommandData Source code #pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#applicationsshapeworkssharedcommanddatah","text":"","title":"Applications/shapeworks/SharedCommandData.h"},{"location":"api/Files/SharedCommandData_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SharedCommandData_8h.html#classes","text":"Name struct shapeworks::SharedCommandData","title":"Classes"},{"location":"api/Files/SharedCommandData_8h.html#source-code","text":"#pragma once #include #include \"Image.h\" #include \"Mesh.h\" #include \"ParticleSystemEvaluation.h\" #include \"Shapeworks.h\" namespace shapeworks { struct SharedCommandData { Image image ; std :: unique_ptr < Mesh > mesh ; PhysicalRegion region ; ParticleSystemEvaluation particleSystem ; Field field ; bool validImage () const { return image . itk_image_ != nullptr ; } bool validMesh () const { return mesh != nullptr ; } bool validParticleSystem () const { return particleSystem . N () >= 1 && particleSystem . D () >= 1 ; } }; } // shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SliceView_8h.html","text":"Studio/Visualization/SliceView.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SliceView SliceView . Source code #pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#studiovisualizationsliceviewh","text":"","title":"Studio/Visualization/SliceView.h"},{"location":"api/Files/SliceView_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SliceView_8h.html#classes","text":"Name class shapeworks::SliceView SliceView .","title":"Classes"},{"location":"api/Files/SliceView_8h.html#source-code","text":"#pragma once #include #include class vtkImageActor ; class vtkImageSliceMapper ; class vtkImageData ; class vtkPolyData ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransformPolyDataFilter ; class vtkCutter ; class vtkStripper ; class vtkImageActorPointPlacer ; namespace shapeworks { class SeedWidget ; class Viewer ; class SliceView { public : enum SliceChange { Down , Up }; SliceView ( Viewer * viewer ); void set_volume ( std :: shared_ptr < Image > volume ); void set_mesh ( vtkSmartPointer < vtkPolyData > poly_data ); void set_orientation ( int orientation ); bool is_image_loaded (); void update_renderer (); void update_camera (); Point handle_key ( std :: string key ); void change_slice ( SliceChange change ); Point get_slice_position (); void set_slice_position ( Point point ); void set_window_and_level ( double window , double level ); double get_spacing (); int get_orientation_index (); void update_particles (); Viewer * get_viewer (); bool should_point_show ( double x , double y , double z ); private : void set_slice_number ( int slice ); void update_extent (); Viewer * viewer_ ; vtkSmartPointer < vtkImageActor > image_slice_ ; vtkSmartPointer < vtkImageSliceMapper > slice_mapper_ ; std :: shared_ptr < Image > volume_ ; vtkSmartPointer < vtkImageData > vtk_volume_ ; vtkSmartPointer < vtkImageActorPointPlacer > placer_ ; int current_slice_number_ = 0 ; vtkSmartPointer < vtkPolyDataMapper > cut_mapper_ ; vtkSmartPointer < vtkActor > cut_actor_ ; vtkSmartPointer < vtkTransformPolyDataFilter > cut_transform_filter_ ; vtkSmartPointer < vtkCutter > cutter_ ; vtkSmartPointer < vtkStripper > stripper_ ; vtkSmartPointer < vtkPolyData > current_poly_data_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SplashScreen_8h.html","text":"Studio/Interface/SplashScreen.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::SplashScreen Source code #pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#studiointerfacesplashscreenh","text":"","title":"Studio/Interface/SplashScreen.h"},{"location":"api/Files/SplashScreen_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/SplashScreen_8h.html#classes","text":"Name class shapeworks::SplashScreen","title":"Classes"},{"location":"api/Files/SplashScreen_8h.html#source-code","text":"#pragma once // qt #include // studio #include class Ui_SplashScreen ; class QListWidgetItem ; namespace shapeworks { class SplashScreen : public QDialog { Q_OBJECT public : SplashScreen ( QWidget * parent , Preferences & preferences ); virtual ~ SplashScreen (); private Q_SLOTS : void new_project (); void open_existing (); void open_recent (); void quit (); void enable_load_recent_button ( QListWidgetItem * item ); Q_SIGNALS : void open_project ( QString file_path ); private : void resizeEvent ( QResizeEvent * event ) override ; void populate_recent_projects (); Ui_SplashScreen * ui_ ; Preferences & preferences_ ; }; } // end namespace Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StackWalker_8h.html","text":"Studio/Utils/StackWalker.h Source code #ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#studioutilsstackwalkerh","text":"","title":"Studio/Utils/StackWalker.h"},{"location":"api/Files/StackWalker_8h.html#source-code","text":"#ifdef _WIN32 /********************************************************************** * * StackWalker.h * * * * LICENSE (http://www.opensource.org/licenses/bsd-license.php) * * Copyright (c) 2005-2009, Jochen Kalmbach * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * Neither the name of Jochen Kalmbach nor the names of its contributors may be * used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * **********************************************************************/ // #pragma once is supported starting with _MCS_VER 1000, // so we need not to check the version (because we only support _MSC_VER >= 1100)! #pragma once #include // special defines for VC5/6 (if no actual PSDK is installed): #if _MSC_VER < 1300 typedef unsigned __int64 DWORD64 , * PDWORD64 ; #if defined(_WIN64) typedef unsigned __int64 SIZE_T , * PSIZE_T ; #else typedef unsigned long SIZE_T , * PSIZE_T ; #endif #endif // _MSC_VER < 1300 class StackWalkerInternal ; // forward class StackWalker { public : typedef enum StackWalkOptions { // No addition info will be retrived // (only the address is available) RetrieveNone = 0 , // Try to get the symbol-name RetrieveSymbol = 1 , // Try to get the line for this symbol RetrieveLine = 2 , // Try to retrieve the module-infos RetrieveModuleInfo = 4 , // Also retrieve the version for the DLL/EXE RetrieveFileVersion = 8 , // Contains all the abouve RetrieveVerbose = 0xF , // Generate a \"good\" symbol-search-path SymBuildPath = 0x10 , // Also use the public Microsoft-Symbol-Server SymUseSymSrv = 0x20 , // Contains all the abouve \"Sym\"-options SymAll = 0x30 , // Contains all options (default) OptionsAll = 0x3F } StackWalkOptions ; StackWalker ( int options = OptionsAll , // 'int' is by design, to combine the enum-flags LPCSTR szSymPath = NULL , DWORD dwProcessId = GetCurrentProcessId (), HANDLE hProcess = GetCurrentProcess () ); StackWalker ( DWORD dwProcessId , HANDLE hProcess ); virtual ~ StackWalker (); typedef BOOL ( __stdcall * PReadProcessMemoryRoutine )( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead , LPVOID pUserData // optional data, which was passed in \"ShowCallstack\" ); BOOL LoadModules (); BOOL ShowCallstack ( HANDLE hThread = GetCurrentThread (), const CONTEXT * context = NULL , PReadProcessMemoryRoutine readMemoryFunction = NULL , LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback ); #if _MSC_VER >= 1300 // due to some reasons, the \"STACKWALK_MAX_NAMELEN\" must be declared as \"public\" // in older compilers in order to use it... starting with VC7 we can declare it as \"protected\" protected : #endif enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols protected : // Entry for each Callstack-Entry typedef struct CallstackEntry { DWORD64 offset ; // if 0, we have no valid entry CHAR name [ STACKWALK_MAX_NAMELEN ]; CHAR undName [ STACKWALK_MAX_NAMELEN ]; CHAR undFullName [ STACKWALK_MAX_NAMELEN ]; DWORD64 offsetFromSmybol ; DWORD offsetFromLine ; DWORD lineNumber ; CHAR lineFileName [ STACKWALK_MAX_NAMELEN ]; DWORD symType ; LPCSTR symTypeString ; CHAR moduleName [ STACKWALK_MAX_NAMELEN ]; DWORD64 baseOfImage ; CHAR loadedImageName [ STACKWALK_MAX_NAMELEN ]; } CallstackEntry ; typedef enum CallstackEntryType { firstEntry , nextEntry , lastEntry }; virtual void OnSymInit ( LPCSTR szSearchPath , DWORD symOptions , LPCSTR szUserName ); virtual void OnLoadModule ( LPCSTR img , LPCSTR mod , DWORD64 baseAddr , DWORD size , DWORD result , LPCSTR symType , LPCSTR pdbName , ULONGLONG fileVersion ); virtual void OnCallstackEntry ( CallstackEntryType eType , CallstackEntry & entry ); virtual void OnDbgHelpErr ( LPCSTR szFuncName , DWORD gle , DWORD64 addr ); virtual void OnOutput ( LPCSTR szText ); StackWalkerInternal * m_sw ; HANDLE m_hProcess ; DWORD m_dwProcessId ; BOOL m_modulesLoaded ; LPSTR m_szSymPath ; int m_options ; int m_MaxRecursionCount ; static BOOL __stdcall myReadProcMem ( HANDLE hProcess , DWORD64 qwBaseAddress , PVOID lpBuffer , DWORD nSize , LPDWORD lpNumberOfBytesRead ); friend StackWalkerInternal ; }; // class StackWalker // The \"ugly\" assembler-implementation is needed for systems before XP // If you have a new PSDK and you only compile for XP and later, then you can use // the \"RtlCaptureContext\" // Currently there is no define which determines the PSDK-Version... // So we just use the compiler-version (and assumes that the PSDK is // the one which was installed by the VS-IDE) // INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... // But I currently use it in x64/IA64 environments... //#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) #if defined(_M_IX86) #ifdef CURRENT_THREAD_VIA_EXCEPTION // TODO: The following is not a \"good\" implementation, // because the callstack is only valid in the \"__except\" block... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ EXCEPTION_POINTERS *pExp = NULL; \\ __try { \\ throw 0; \\ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \\ if (pExp != NULL) \\ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ } while(0); #else // The following should be enough for walking the callstack... #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ __asm call x \\ __asm x: pop eax \\ __asm mov c.Eip, eax \\ __asm mov c.Ebp, ebp \\ __asm mov c.Esp, esp \\ } while(0); #endif #else // The following is defined for x86 (XP and higher), x64 and IA64: #define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \\ do { \\ memset(&c, 0, sizeof(CONTEXT)); \\ c.ContextFlags = contextFlags; \\ RtlCaptureContext(&c); \\ } while(0); #endif #endif // win32 Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StatsGroupLDAJob_8h.html","text":"Studio/Job/StatsGroupLDAJob.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatsGroupLDAJob Source code #pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#studiojobstatsgroupldajobh","text":"","title":"Studio/Job/StatsGroupLDAJob.h"},{"location":"api/Files/StatsGroupLDAJob_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatsGroupLDAJob_8h.html#classes","text":"Name class shapeworks::StatsGroupLDAJob","title":"Classes"},{"location":"api/Files/StatsGroupLDAJob_8h.html#source-code","text":"#pragma once #include #include class JKQTPlotter ; namespace shapeworks { class StatsGroupLDAJob : public Job { Q_OBJECT public : StatsGroupLDAJob (); void set_stats ( ParticleShapeStatistics stats ); void run () override ; QString name () override ; Eigen :: VectorXf get_group_pvalues (); void plot ( JKQTPlotter * plot , QString group_1_name , QString group_2_name ); private : ParticleShapeStatistics stats_ ; Eigen :: MatrixXd group1_x_ , group2_x_ , group1_pdf_ , group2_pdf_ , group1_map_ , group2_map_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StatusBarWidget_8h.html","text":"Studio/Interface/StatusBarWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StatusBarWidget StatusBarWidget . Source code #pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#studiointerfacestatusbarwidgeth","text":"","title":"Studio/Interface/StatusBarWidget.h"},{"location":"api/Files/StatusBarWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StatusBarWidget_8h.html#classes","text":"Name class shapeworks::StatusBarWidget StatusBarWidget .","title":"Classes"},{"location":"api/Files/StatusBarWidget_8h.html#source-code","text":"#pragma once #include // Forward Qt class declarations class Ui_StatusBarWidget ; namespace shapeworks { enum class MessageType { normal , warning , error , debug }; class StatusBarWidget : public QWidget { Q_OBJECT public : StatusBarWidget ( QMainWindow * parent = 0 ); void set_message ( MessageType message_type , QString message ); void set_progress ( int value ); void resizeEvent ( QResizeEvent * event ) override ; Q_SIGNALS : void toggle_log_window (); private : void update_layout (); Ui_StatusBarWidget * ui_ ; QStatusBar * q_status_bar_ ; QIcon normal_message_icon_ ; QIcon warning_message_icon_ ; QIcon error_message_icon_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StringUtils_8h.html","text":"Libs/Utils/StringUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StringUtils String utility functions. Source code #pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#libsutilsstringutilsh","text":"","title":"Libs/Utils/StringUtils.h"},{"location":"api/Files/StringUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StringUtils_8h.html#classes","text":"Name class shapeworks::StringUtils String utility functions.","title":"Classes"},{"location":"api/Files/StringUtils_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StringUtils { public : static std :: string removeExtension ( std :: string const & filename ); static std :: string getPath ( std :: string const & filename ); static std :: string getFilename ( std :: string const & pathname ); static std :: string getBaseFilenameWithoutExtension ( std :: string const & pathname ); static std :: string toLower ( std :: string s ); static bool hasSuffix ( std :: string const & filename , std :: string const & suffix ); static std :: vector < std :: string > getFileNamesFromPaths ( const std :: vector < std :: string >& paths ); static std :: string getLowerExtension ( std :: string const & filename ); // safely convert a const char* to string, allowing for nullptr static std :: string safeString ( const char * s ) { return s == nullptr ? std :: string () : s ; } static std :: string replace_string ( std :: string str , const std :: string & search , const std :: string & replace ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioEnums_8h.html","text":"Libs/Analyze/StudioEnums.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#libsanalyzestudioenumsh","text":"","title":"Libs/Analyze/StudioEnums.h"},{"location":"api/Files/StudioEnums_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioEnums_8h.html#source-code","text":"#pragma once #include namespace shapeworks { //----------------------------------------------------------------------------- enum DisplayMode { Original = 0 , Groomed = 1 , Reconstructed = 2 }; //----------------------------------------------------------------------------- std :: string display_mode_to_string ( DisplayMode display_mode ); //----------------------------------------------------------------------------- DisplayMode string_to_display_mode ( std :: string str ); } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioHandleWidget_8h.html","text":"Studio/Visualization/StudioHandleWidget.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioHandleWidget Source code #include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#studiovisualizationstudiohandlewidgeth","text":"","title":"Studio/Visualization/StudioHandleWidget.h"},{"location":"api/Files/StudioHandleWidget_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioHandleWidget_8h.html#classes","text":"Name class shapeworks::StudioHandleWidget","title":"Classes"},{"location":"api/Files/StudioHandleWidget_8h.html#source-code","text":"#include namespace shapeworks { class PlaneWidget ; class StudioHandleWidget : public vtkHandleWidget { public : static StudioHandleWidget * New (); StudioHandleWidget (); void set_domain ( int domain ) { domain_ = domain ; }; void set_plane ( int plane ) { plane_ = plane ; }; void set_point ( int point ) { point_ = point ; }; void set_plane_widget ( PlaneWidget * plane_widget ) { plane_widget_ = plane_widget ; } protected : static void RightClickSelectAction ( vtkAbstractWidget * w ); static void CustomMoveAction ( vtkAbstractWidget * w ); static void CustomSelectAction ( vtkAbstractWidget * w ); static void CustomEndSelectAction ( vtkAbstractWidget * w ); int domain_ = -1 ; int plane_ = -1 ; int point_ = -1 ; PlaneWidget * plane_widget_ ; bool shift_active_ = false ; int start_y_ = 0 ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioInteractorStyle_8h.html","text":"Studio/Visualization/StudioInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#studiovisualizationstudiointeractorstyleh","text":"","title":"Studio/Visualization/StudioInteractorStyle.h"},{"location":"api/Files/StudioInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioInteractorStyle","title":"Classes"},{"location":"api/Files/StudioInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioInteractorStyle : public vtkInteractorStyleTrackballCamera { public : static StudioInteractorStyle * New (); vtkTypeMacro ( StudioInteractorStyle , vtkInteractorStyleTrackballCamera ); void set_lightbox ( Lightbox * lightbox ); StudioInteractorStyle (); virtual ~ StudioInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnRightButtonUp () override ; void OnMouseWheelForward () override ; void OnMouseWheelBackward () override ; void OnKeyDown () override ; void Dolly () override ; void Rotate () override ; void OnMouseMove () override ; protected : void Dolly ( double factor ) override ; private : Lightbox * lightbox_ ; bool right_click_dragged_ { false }; bool right_button_down_ { false }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioLogger_8h.html","text":"Studio/Interface/StudioLogger.h Classes Name class StudioLogger Handle logger callbacks via Qt for thread correctness. Source code #pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#studiointerfacestudiologgerh","text":"","title":"Studio/Interface/StudioLogger.h"},{"location":"api/Files/StudioLogger_8h.html#classes","text":"Name class StudioLogger Handle logger callbacks via Qt for thread correctness.","title":"Classes"},{"location":"api/Files/StudioLogger_8h.html#source-code","text":"#pragma once #include class StudioLogger : public QObject { Q_OBJECT public : StudioLogger () {} virtual ~ StudioLogger () {} void register_callbacks (); // callbacks from logger void handle_message ( std :: string str ); void handle_error ( std :: string str ); void handle_warning ( std :: string str ); void handle_debug ( std :: string str ); void handle_status ( std :: string str ); void handle_progress ( double value , std :: string str ); Q_SIGNALS : void message ( std :: string str ); void error ( std :: string str ); void warning ( std :: string str ); void debug ( std :: string str ); void status ( std :: string str ); void progress ( int value , std :: string str ); }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioMesh_8h.html","text":"Libs/Analyze/StudioMesh.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioMesh Representation of a single mesh. Types Name using float PixelType using itk::Image< PixelType, 3 > ImageType Types Documentation using PixelType using PixelType = float ; using ImageType using ImageType = itk :: Image < PixelType , 3 > ; Source code #pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#libsanalyzestudiomeshh","text":"","title":"Libs/Analyze/StudioMesh.h"},{"location":"api/Files/StudioMesh_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioMesh_8h.html#classes","text":"Name class shapeworks::StudioMesh Representation of a single mesh.","title":"Classes"},{"location":"api/Files/StudioMesh_8h.html#types","text":"Name using float PixelType using itk::Image< PixelType, 3 > ImageType","title":"Types"},{"location":"api/Files/StudioMesh_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/StudioMesh_8h.html#using-pixeltype","text":"using PixelType = float ;","title":"using PixelType"},{"location":"api/Files/StudioMesh_8h.html#using-imagetype","text":"using ImageType = itk :: Image < PixelType , 3 > ;","title":"using ImageType"},{"location":"api/Files/StudioMesh_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include using PixelType = float ; using ImageType = itk :: Image < PixelType , 3 > ; class vtkFloatArray ; class vtkStaticPointLocator ; namespace shapeworks { class StudioMesh ; using MeshHandle = std :: shared_ptr < StudioMesh > ; using MeshList = std :: vector < MeshHandle > ; class StudioMesh { public : StudioMesh (); ~ StudioMesh (); vtkSmartPointer < vtkPolyData > get_poly_data (); void set_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); void set_error_message ( std :: string error_message ); std :: string get_error_message (); void apply_feature_map ( std :: string name , ImageType :: Pointer image ); void apply_scalars ( MeshHandle mesh ); void interpolate_scalars_to_mesh ( std :: string name , Eigen :: VectorXd positions , Eigen :: VectorXf scalar_values ); double get_largest_dimension_size (); vtkFloatArray * get_or_create_array ( std :: string name , float default_value ); void paint_ffc ( double world_pos [], double radius , bool inclusive ); bool has_ffc_paint (); static constexpr const char * const FFC_PAINT = \"ffc_paint\" ; private : vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkStaticPointLocator > locator_ ; // error message if the polydata didn't load std :: string error_message_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html","text":"Studio/Visualization/StudioSliceInteractorStyle.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioSliceInteractorStyle Source code #pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#studiovisualizationstudiosliceinteractorstyleh","text":"","title":"Studio/Visualization/StudioSliceInteractorStyle.h"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#classes","text":"Name class shapeworks::StudioSliceInteractorStyle","title":"Classes"},{"location":"api/Files/StudioSliceInteractorStyle_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Lightbox ; // Handle mouse events class StudioSliceInteractorStyle : public vtkInteractorStyleImage { public : static StudioSliceInteractorStyle * New (); vtkTypeMacro ( StudioSliceInteractorStyle , vtkInteractorStyleImage ); void set_lightbox ( Lightbox * lightbox ); StudioSliceInteractorStyle (); virtual ~ StudioSliceInteractorStyle (); void OnLeftButtonDown () override ; void OnRightButtonDown () override ; void OnKeyDown () override ; void WindowLevel () override ; /* void OnMouseWheelForward() override; void OnMouseWheelBackward() override; void Dolly() override; void Rotate() override; void OnMouseMove() override; */ protected : // void Dolly(double factor) override; private : Lightbox * lightbox_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioUtils_8h.html","text":"Studio/Utils/StudioUtils.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioUtils Utilities for Studio. Source code #pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#studioutilsstudioutilsh","text":"","title":"Studio/Utils/StudioUtils.h"},{"location":"api/Files/StudioUtils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioUtils_8h.html#classes","text":"Name class shapeworks::StudioUtils Utilities for Studio.","title":"Classes"},{"location":"api/Files/StudioUtils_8h.html#source-code","text":"#pragma once #include class QWidget ; #include #include #include #include class vtkImageData ; class vtkRenderer ; namespace shapeworks { class StudioUtils { public : static bool ask_multiple_domains_as_single ( QWidget * parent , std :: shared_ptr < Project > project ); static QStringList to_string_list ( std :: vector < std :: string > vector ); static QImage vtk_image_to_qimage ( vtkSmartPointer < vtkImageData > image_data ); static vtkSmartPointer < vtkPolyData > reverse_poly_data ( vtkSmartPointer < vtkPolyData > poly_data ); static QString get_platform_string (); static void add_viewport_border ( vtkRenderer * renderer , double * color ); }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/StudioVtkOutputWindow_8h.html","text":"Studio/Visualization/StudioVtkOutputWindow.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. Source code #pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#studiovisualizationstudiovtkoutputwindowh","text":"","title":"Studio/Visualization/StudioVtkOutputWindow.h"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#classes","text":"Name class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages.","title":"Classes"},{"location":"api/Files/StudioVtkOutputWindow_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class StudioVtkOutputWindow : public QObject , public vtkOutputWindow { Q_OBJECT ; public : static StudioVtkOutputWindow * New (); vtkTypeMacro ( StudioVtkOutputWindow , vtkOutputWindow ); StudioVtkOutputWindow (); void DisplayErrorText ( const char * text ) override ; void DisplayWarningText ( const char * text ) override ; void DisplayGenericWarningText ( const char * text ) override ; void DisplayDebugText ( const char * text ) override ; private : }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Style_8h.html","text":"Studio/Interface/Style.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Style Source code #pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#studiointerfacestyleh","text":"","title":"Studio/Interface/Style.h"},{"location":"api/Files/Style_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Style_8h.html#classes","text":"Name class shapeworks::Style","title":"Classes"},{"location":"api/Files/Style_8h.html#source-code","text":"#pragma once class QPushButton ; namespace shapeworks { class Style { public : Style (); static void apply_normal_button_style ( QPushButton * button ); static void apply_abort_button_style ( QPushButton * button ); }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Subject_8h.html","text":"Libs/Project/Subject.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Subject Representation of a single subject. Source code #pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#libsprojectsubjecth","text":"","title":"Libs/Project/Subject.h"},{"location":"api/Files/Subject_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Subject_8h.html#classes","text":"Name class shapeworks::Subject Representation of a single subject.","title":"Classes"},{"location":"api/Files/Subject_8h.html#source-code","text":"#pragma once #include #include #include #include #include \"ProjectUtils.h\" namespace shapeworks { class Subject { public : using StringMap = project :: types :: StringMap ; using StringList = project :: types :: StringList ; Subject (); ~ Subject (); void set_original_filenames ( StringList filenames ); StringList get_original_filenames (); void set_groomed_filenames ( StringList filenames ); StringList get_groomed_filenames (); void set_local_particle_filenames ( StringList filenames ); StringList get_local_particle_filenames (); void set_world_particle_filenames ( StringList filenames ); StringList get_world_particle_filenames (); void set_landmarks_filenames ( StringList filenames ); StringList get_landmarks_filenames (); void set_constraints_filenames ( StringList filenames ); StringList get_constraints_filenames (); void set_number_of_domains ( int number_of_domains ); int get_number_of_domains (); StringMap get_feature_filenames () const ; void set_feature_filenames ( const StringMap & feature_filenames ); std :: vector < std :: vector < double >> get_groomed_transforms () const ; void set_groomed_transforms ( std :: vector < std :: vector < double >> transforms ); void set_groomed_transform ( int i , std :: vector < double > transform ); std :: vector < std :: vector < double >> get_procrustes_transforms () const ; void set_procrustes_transforms ( std :: vector < std :: vector < double >> transforms ); StringMap get_group_values () const ; std :: string get_group_value ( std :: string group_name ); void set_group_values ( const StringMap & group_values ); StringMap get_extra_values () const ; void set_extra_values ( StringMap extra_values ); StringMap get_table_values () const ; void set_table_values ( StringMap table_values ); std :: string get_display_name (); void set_display_name ( std :: string display_name ); bool is_fixed (); void set_fixed ( bool fixed ); private : int number_of_domains_ = 0 ; std :: string display_name_ ; bool fixed_ = false ; StringList original_filenames_ ; StringList groomed_filenames_ ; StringList local_particle_filenames_ ; StringList world_particle_filenames_ ; StringList landmarks_filenames_ ; StringList constraints_filenames_ ; std :: vector < std :: vector < double >> groomed_transforms_ ; std :: vector < std :: vector < double >> procrustes_transforms_ ; StringMap feature_filenames_ ; StringMap group_values_ ; StringMap extra_values_ ; StringMap table_values_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/SurfaceReconstructor_8h.html","text":"Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. More... Classes Name class SurfaceReconstructor Detailed Description Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method Source code #pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#libsanalyzesurfacereconstructorh","text":"Surface Reconstruction Layer. More...","title":"Libs/Analyze/SurfaceReconstructor.h"},{"location":"api/Files/SurfaceReconstructor_8h.html#classes","text":"Name class SurfaceReconstructor","title":"Classes"},{"location":"api/Files/SurfaceReconstructor_8h.html#detailed-description","text":"Surface Reconstruction Layer. The SurfaceReconstructor wraps the surface reconstruction method","title":"Detailed Description"},{"location":"api/Files/SurfaceReconstructor_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class SurfaceReconstructorPrivate ; class SurfaceReconstructor { public : SurfaceReconstructor (); ~ SurfaceReconstructor (); //**********************************************// //************Imported From Studio *************// void initializeReconstruction ( std :: vector < std :: vector < itk :: Point < double >>> local_pts , std :: vector < std :: vector < itk :: Point < double >>> global_pts , std :: vector < std :: string > distance_transforms , double maxAngle , float decimationPercent , int numClusters ); bool hasDenseMean (); void setMean ( vtkSmartPointer < vtkPoints > sparseMean , vtkSmartPointer < vtkPolyData > denseMean , std :: vector < bool > goodPoints ); void writeMeanInfo ( std :: string baseName ); void readMeanInfo ( std :: string dense , std :: string sparse , std :: string goodPoints ); void resetReconstruct (); //**********************************************// void set_number_of_clusters ( int num_clusters ); void set_normal_angle ( double angle ); void set_decimation_percent ( double decimation ); bool get_surface_reconstruction_available (); vtkSmartPointer < vtkPolyData > build_mesh ( const Eigen :: VectorXd & shape ); private : std :: unique_ptr < SurfaceReconstructorPrivate > private_ ; bool surface_reconstruction_available_ = false ; int num_clusters_ = -1 ; double decimation_percent_ = 0.3f ; double normal_angle_ = 45.0f ; }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Telemetry_8h.html","text":"Studio/Data/Telemetry.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Telemetry Source code #pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#studiodatatelemetryh","text":"","title":"Studio/Data/Telemetry.h"},{"location":"api/Files/Telemetry_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Telemetry_8h.html#classes","text":"Name class shapeworks::Telemetry","title":"Classes"},{"location":"api/Files/Telemetry_8h.html#source-code","text":"#pragma once #include #include namespace shapeworks { class Telemetry : public QObject { Q_OBJECT public : Telemetry ( Preferences & prefs ); void record_event ( const QString & name , const QVariantMap & params ); public Q_SLOTS : void handle_network_reply ( QNetworkReply * reply ); private : QString create_event ( const QString & name , const QVariantMap & params ); void send_event ( const QString & event ); void store_event ( const QString & event ); bool enabled_ = true ; QNetworkAccessManager network_ ; QString active_event_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/UpdateChecker_8h.html","text":"Studio/Interface/UpdateChecker.h Namespaces Name Ui shapeworks User usage reporting (telemetry) Classes Name class shapeworks::UpdateChecker Update Checker. Source code #pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#studiointerfaceupdatecheckerh","text":"","title":"Studio/Interface/UpdateChecker.h"},{"location":"api/Files/UpdateChecker_8h.html#namespaces","text":"Name Ui shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/UpdateChecker_8h.html#classes","text":"Name class shapeworks::UpdateChecker Update Checker.","title":"Classes"},{"location":"api/Files/UpdateChecker_8h.html#source-code","text":"#pragma once #include #include #include namespace Ui { class UpdateChecker ; } namespace shapeworks { class UpdateChecker : public QDialog { Q_OBJECT public : explicit UpdateChecker ( Preferences & prefs , QWidget * parent = nullptr ); ~ UpdateChecker (); void run_auto_update_check (); void run_manual_update_check (); public Q_SLOTS : void handleNetworkReply ( QNetworkReply * reply ); private : void run_update_check (); bool manual_trigger_ { false }; QNetworkAccessManager network_ ; Ui :: UpdateChecker * ui_ ; Preferences & prefs_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Utils_8h.html","text":"Libs/Utils/Utils.h Namespaces Name utils Classes Name class Utils Defines Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN Macros Documentation define twopi_inv #define twopi_inv 0.5/M_PI define twopi #define twopi 2.0*M_PI define RANDU #define RANDU ((double) rand()/RAND_MAX) define RANDN2 #define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 )) define RANDN #define RANDN RANDN2(0, 1.0) Source code /*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#libsutilsutilsh","text":"","title":"Libs/Utils/Utils.h"},{"location":"api/Files/Utils_8h.html#namespaces","text":"Name utils","title":"Namespaces"},{"location":"api/Files/Utils_8h.html#classes","text":"Name class Utils","title":"Classes"},{"location":"api/Files/Utils_8h.html#defines","text":"Name twopi_inv twopi RANDU RANDN2 (mu, sigma) RANDN","title":"Defines"},{"location":"api/Files/Utils_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/Utils_8h.html#define-twopi_inv","text":"#define twopi_inv 0.5/M_PI","title":"define twopi_inv"},{"location":"api/Files/Utils_8h.html#define-twopi","text":"#define twopi 2.0*M_PI","title":"define twopi"},{"location":"api/Files/Utils_8h.html#define-randu","text":"#define RANDU ((double) rand()/RAND_MAX)","title":"define RANDU"},{"location":"api/Files/Utils_8h.html#define-randn2","text":"#define RANDN2( mu , sigma ) ( mu + ( rand () % 2 ? -1.0 : 1.0 ) * sigma * pow ( - log ( 0.99999 * RANDU ), 0.5 ))","title":"define RANDN2"},{"location":"api/Files/Utils_8h.html#define-randn","text":"#define RANDN RANDN2(0, 1.0)","title":"define RANDN"},{"location":"api/Files/Utils_8h.html#source-code","text":"/*========================================================================= Program: ShapeWorks: Particle-based Shape Correspondence & Visualization Date: $Date: 2014/03/24 01:17:40 $ Version: $Revision: 1.2 $ Author: $Author: elhabian $ Copyright (c) 2009 Scientific Computing and Imaging Institute. See ShapeWorksLicense.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef UTILS_H #define UTILS_H #ifdef _WIN32 #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include #include #include #include // std::istringstream #include #include #include // std::sort #include #include #include #include #include namespace utils //TODO: -> namespace shapeworks (need to change everywhere it's used { #define twopi_inv 0.5/M_PI #define twopi 2.0*M_PI #define RANDU ((double) rand()/RAND_MAX) #define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5)) #define RANDN RANDN2(0, 1.0) } class Utils { public : static std :: vector < int > randperm ( int n ); //--------------------------- IO----------------------------------- static void readSparseShape ( vtkSmartPointer < vtkPoints >& points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , vtkSmartPointer < vtkPoints > particles ); static void readSparseShape ( std :: vector < itk :: Point < double > > & points , char * filename , int number_of_particles = -1 ); static void writeSparseShape ( char * filename , std :: vector < itk :: Point < double , 3 > > points ); static std :: vector < int > readParticleIds ( char * filename ); static void writeParticleIds ( char * filename , std :: vector < int > ids ); //--------------- point cloud queries -------------------------------- static void computeCenterOfMassForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , itk :: Point < double , 3 > & center ); static void computeCenterOfMassForShape ( std :: vector < itk :: Point < double , 3 > > points , itk :: Point < double , 3 > & center ); static void updateMin ( double curVal , double & minVal ); static void updateMax ( double curVal , double & maxVal ); static void getBoundingBoxForShapeEnsemble ( std :: vector < std :: vector < itk :: Point < double , 3 > > > points_list , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); static void getBoundingBoxForShape ( std :: vector < itk :: Point < double , 3 > > points , double & min_x , double & min_y , double & min_z , double & max_x , double & max_y , double & max_z ); //--------------- coordinates transformations -------------------------------- static void spherical2cartesian ( const double inPoint [ 3 ], double outPoint [ 3 ]); static void cartesian2spherical ( const double inPoint [ 3 ], double outPoint [ 3 ]); static vtkSmartPointer < vtkPoints > convertToPhysicalCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static vtkSmartPointer < vtkPoints > convertToImageCoordinates ( vtkSmartPointer < vtkPoints > particles , int number_of_particles , const itk :: Image < float , 3 >:: SpacingType & spacing , const itk :: Image < float , 3 >:: PointType & origin ); static std :: string num2str ( float num ); static std :: string num2str ( int num ); static std :: vector < double > linspace ( double a , double b , size_t N ); static std :: string int2str ( int n , int number_of_zeros ); //--------------- linear algebra ------------------------------------------- // matrix multiplication without an allocation for the output template < typename T > static void multiply_into ( Eigen :: MatrixXd & out , const vnl_matrix < T > & lhs , const vnl_matrix < T > & rhs ); //--------------- average normal directions -------------------------------- /* Trying every theta (with a step size of dtheta), find the theta that results in the smallest MSE. */ static double averageThetaBruteForce ( std :: vector < double > thetas , double dtheta ); // the chord method static double averageThetaChord ( std :: vector < double > thetas ); // the exact method static double averageThetaArc ( std :: vector < double > thetas ); private : // only good for positive numbers. static double mod2pi_pos ( double vin ); // Ensure that v is [-PI, PI] static double mod2pi ( double vin ); /* Returns a value of v wrapped such that ref and v differ by no * more +/-PI */ static double mod2pi ( double ref , double v ); /* For a given theta, compute the MSE. A simple O(N) method used for testing. */ static double computeMSE ( std :: vector < double > thetas , double theta ); }; #endif // UTILS_H Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Variant_8h.html","text":"Libs/Project/Variant.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Variant Variant class to represent multiple types. Source code #pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#libsprojectvarianth","text":"","title":"Libs/Project/Variant.h"},{"location":"api/Files/Variant_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Variant_8h.html#classes","text":"Name class shapeworks::Variant Variant class to represent multiple types.","title":"Classes"},{"location":"api/Files/Variant_8h.html#source-code","text":"#pragma once #include #include #include #include namespace shapeworks { template < typename T > std :: string variant_to_string ( T begin , T end ) { std :: stringstream ss ; bool first = true ; for (; begin != end ; begin ++ ) { if ( ! first ) { ss << \" \" ; } if constexpr ( std :: is_same < T , std :: string >:: value ) { // cast to string and replace spaces std :: string s ( * begin ); ss << StringUtils :: replace_string ( s , \" \" , \"%20\" ); } else { ss << * begin ; } first = false ; } return ss . str (); } class Variant { public : Variant () : str_ (), valid_ ( false ) {} Variant ( const std :: string & v ) : str_ ( v ), valid_ ( true ) {} Variant ( int v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( double v ) : str_ ( std :: to_string ( v )), valid_ ( true ) {} Variant ( const char * v ) : str_ ( v ), valid_ ( true ) {} Variant ( bool v ) : str_ ( v ? \"true\" : \"false\" ), valid_ ( true ) {} Variant ( std :: vector < double > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < int > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < bool > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} Variant ( std :: vector < std :: string > v ) : str_ ( variant_to_string ( v . begin (), v . end ())), valid_ ( true ) {} operator std :: string () const ; operator bool () const ; operator int () const ; operator unsigned int () const ; operator long () const ; operator unsigned long () const ; operator float () const ; operator double () const ; operator std :: vector < double > () const ; operator std :: vector < int > () const ; operator std :: vector < bool > () const ; operator std :: vector < std :: string > () const ; private : std :: string str_ ; bool valid_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/VectorFunction_8h.html","text":"Libs/Optimize/Function/VectorFunction.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorFunction Source code #pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#libsoptimizefunctionvectorfunctionh","text":"","title":"Libs/Optimize/Function/VectorFunction.h"},{"location":"api/Files/VectorFunction_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorFunction_8h.html#classes","text":"Name class shapeworks::VectorFunction","title":"Classes"},{"location":"api/Files/VectorFunction_8h.html#source-code","text":"#pragma once #include \"itkLightObject.h\" #include \"itkObjectFactory.h\" #include \"Libs/Optimize/ParticleSystem.h\" #include \"itkWeakPointer.h\" #include \"vnl/vnl_vector_fixed.h\" namespace shapeworks { class VectorFunction : public itk :: LightObject { public : constexpr static unsigned int VDimension = 3 ; typedef VectorFunction Self ; typedef itk :: SmartPointer < Self > Pointer ; typedef itk :: SmartPointer < const Self > ConstPointer ; typedef itk :: LightObject Superclass ; itkTypeMacro ( VectorFunction , LightObject ); typedef vnl_vector_fixed < double , VDimension > VectorType ; // itkNewMacro(Self); itkStaticConstMacro ( Dimension , unsigned int , VDimension ); virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep ) const = 0 ; virtual VectorType Evaluate ( unsigned int , unsigned int , const ParticleSystem * , double & maxtimestep , double & energy ) const = 0 ; virtual double Energy ( unsigned int , unsigned int , const ParticleSystem * ) const = 0 ; virtual void ResetBuffers () {} virtual void AfterIteration () {} virtual void BeforeIteration () {} virtual void BeforeEvaluate ( unsigned int , unsigned int , const ParticleSystem * ) {} virtual void SetParticleSystem ( ParticleSystem * p ) { m_ParticleSystem = p ; } virtual ParticleSystem * GetParticleSystem () const { return m_ParticleSystem ; } virtual void SetDomainNumber ( unsigned int i ) { m_DomainNumber = i ; } virtual int GetDomainNumber () const { return m_DomainNumber ; } virtual VectorFunction :: Pointer Clone () { std :: cerr << \"Error: base class VectorFunction Clone method called! \\n \" ; std :: cerr << \"Threaded run of current parameters not supported! \\n \" ; return nullptr ; } virtual double GetRelativeEnergyScaling () const { return 1.0 ; } virtual void SetRelativeEnergyScaling ( double r ) { return ; } protected : VectorFunction () : m_ParticleSystem ( 0 ), m_DomainNumber ( 0 ) {} virtual ~ VectorFunction () {} void operator = ( const VectorFunction & ); VectorFunction ( const VectorFunction & ); ParticleSystem * m_ParticleSystem ; unsigned int m_DomainNumber ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/VectorImage_8h.html","text":"Libs/Image/VectorImage.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VectorImage Gradient (vector) image. Source code #pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#libsimagevectorimageh","text":"","title":"Libs/Image/VectorImage.h"},{"location":"api/Files/VectorImage_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VectorImage_8h.html#classes","text":"Name class shapeworks::VectorImage Gradient (vector) image.","title":"Classes"},{"location":"api/Files/VectorImage_8h.html#source-code","text":"#pragma once #include #include #include \"Image.h\" namespace shapeworks { class VectorImage { public : using GradientImageFilter = itk :: GradientImageFilter < Image :: ImageType > ; using ImageType = itk :: Image < Covariant , 3 > ; using GradientInterpolatorType = itk :: VectorLinearInterpolateImageFunction < ImageType , Image :: PixelType > ; using ImageIterator = itk :: ImageRegionIterator < ImageType > ; VectorImage ( const Image & dt_img ); VectorImage () = delete ; ~ VectorImage () = default ; Vector evaluate ( Point p ); ImageIterator iterator (); private : itk :: SmartPointer < ImageType > itk_image_ ; itk :: SmartPointer < GradientInterpolatorType > interpolator_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Viewer_8h.html","text":"Studio/Visualization/Viewer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer Source code #pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#studiovisualizationviewerh","text":"","title":"Studio/Visualization/Viewer.h"},{"location":"api/Files/Viewer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Viewer_8h.html#classes","text":"Name class shapeworks::PickResult class shapeworks::Viewer 3D Viewer","title":"Classes"},{"location":"api/Files/Viewer_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include class vtkRenderer ; class vtkLookupTable ; class vtkRenderWindowInteractor ; class vtkImageData ; class vtkCamera ; class vtkGlyph3D ; class vtkSphereSource ; class vtkArrowSource ; class vtkTransformPolyDataFilter ; class vtkScalarBarActor ; class vtkCornerAnnotation ; class vtkPolyDataMapper ; class vtkActor ; class vtkTransform ; class vtkReverseSense ; class vtkHandleWidget ; class vtkPolygonalSurfacePointPlacer ; class vtkImageSlice ; class vtkImageSliceMapper ; class vtkImageData ; class vtkCellPicker ; class vtkPropPicker ; class vtkColorSeries ; namespace shapeworks { class Shape ; class Viewer ; class Visualizer ; class StudioInteractorStyle ; class LandmarkWidget ; class PlaneWidget ; class PaintWidget ; class Session ; typedef QSharedPointer < Viewer > ViewerHandle ; typedef QVector < ViewerHandle > ViewerList ; class PickResult { public : Shape :: Point pos_ ; int domain_ = -1 ; int subject_ = -1 ; }; class Viewer { public : Viewer (); ~ Viewer () = default ; void set_renderer ( vtkSmartPointer < vtkRenderer > renderer ); vtkSmartPointer < vtkRenderer > get_renderer (); void display_shape ( std :: shared_ptr < Shape > shape ); void clear_viewer (); void reset_camera ( std :: array < double , 3 > c ); void reset_camera (); void set_color_series ( ColorMap color_series ); void set_glyph_size_and_quality ( double size , double quality ); double get_glyph_size (); double get_glyph_quality (); void set_session ( QSharedPointer < Session > session ); QSharedPointer < Session > get_session (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void set_scale_arrows ( bool scale ); void update_points (); void update_glyph_properties (); int handle_pick ( int * click_pos ); PickResult handle_ctrl_click ( int * click_pos ); void set_selected_point ( int id ); void set_glyph_lut ( vtkSmartPointer < vtkLookupTable > lut ); void set_loading_screen ( vtkSmartPointer < vtkImageData > loading_screen ); void set_color_scheme ( int i ); void handle_new_mesh (); bool is_viewer_ready (); void set_visualizer ( Visualizer * visualizer ); void update_feature_range ( double * range ); void update_opacities (); std :: shared_ptr < Shape > get_shape (); void update_landmarks (); void update_planes (); void update_ffc_mode (); std :: vector < vtkSmartPointer < vtkActor >> get_surface_actors (); std :: vector < vtkSmartPointer < vtkActor >> get_unclipped_surface_actors (); MeshGroup get_meshes (); vtkSmartPointer < vtkTransform > get_transform ( int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_inverse_landmark_transform ( int domain ); vtkSmartPointer < vtkTransform > get_image_transform (); SliceView & slice_view (); void update_image_volume (); vtkSmartPointer < vtkPoints > get_glyph_points (); vtkSmartPointer < vtkTransform > get_alignment_transform (); void update_clipping_planes (); vtkSmartPointer < vtkPolygonalSurfacePointPlacer > get_point_placer (); void handle_ffc_paint ( double display_pos [ 2 ], double world_pos [ 3 ]); static bool is_reverse ( vtkSmartPointer < vtkTransform > transform ); void update_actors (); void remove_scalar_bar (); bool is_ready () { return mesh_ready_ ; } vtkFloatArray * get_particle_scalars (); vtkSmartPointer < vtkPolyData > get_particle_poly_data (); void insert_compare_meshes (); void set_scalar_visibility ( vtkSmartPointer < vtkPolyData > poly_data , vtkSmartPointer < vtkPolyDataMapper > mapper , std :: string scalar ); private : void initialize_surfaces (); void display_vector_field (); void compute_point_differences ( const Eigen :: VectorXd & points , vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void compute_surface_differences ( vtkSmartPointer < vtkFloatArray > magnitudes , vtkSmartPointer < vtkFloatArray > vectors ); void update_difference_lut ( float r0 , float r1 ); bool showing_feature_map (); std :: string get_displayed_feature_map (); vtkSmartPointer < vtkPlane > transform_plane ( vtkSmartPointer < vtkPlane > plane , vtkSmartPointer < vtkTransform > transform ); bool visible_ = false ; std :: shared_ptr < Shape > shape_ ; bool show_glyphs_ = true ; bool show_surface_ = true ; double glyph_size_ = 1.0f ; double glyph_quality_ = 5.0f ; bool scale_arrows_ { true }; ColorMap color_series_ ; vtkSmartPointer < vtkRenderer > renderer_ ; vtkSmartPointer < vtkSphereSource > sphere_source_ ; vtkSmartPointer < vtkReverseSense > reverse_sphere_ ; vtkSmartPointer < vtkPoints > glyph_points_ ; vtkSmartPointer < vtkPolyData > glyph_point_set_ ; vtkSmartPointer < vtkGlyph3D > glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > glyph_mapper_ ; vtkSmartPointer < vtkActor > glyph_actor_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> surface_actors_ ; std :: vector < vtkSmartPointer < vtkPolyDataMapper >> unclipped_surface_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> unclipped_surface_actors_ ; std :: vector < vtkSmartPointer < vtkLookupTable >> ffc_luts_ ; // for comparing to other shapes (e.g. original vs groomed) std :: vector < vtkSmartPointer < vtkPolyDataMapper >> compare_mappers_ ; std :: vector < vtkSmartPointer < vtkActor >> compare_actors_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; vtkSmartPointer < vtkLookupTable > surface_lut_ ; vtkSmartPointer < vtkArrowSource > arrow_source_ ; vtkSmartPointer < vtkTransformPolyDataFilter > arrow_flip_filter_ ; vtkSmartPointer < vtkGlyph3D > arrow_glyphs_ ; vtkSmartPointer < vtkPolyDataMapper > arrow_glyph_mapper_ ; vtkSmartPointer < vtkActor > arrow_glyph_actor_ ; vtkSmartPointer < vtkTransform > transform_180_ ; vtkSmartPointer < vtkScalarBarActor > scalar_bar_actor_ ; vtkSmartPointer < vtkCornerAnnotation > corner_annotation_ ; bool arrows_visible_ = false ; ColorSchemes color_schemes_ ; int scheme_ = 0 ; bool mesh_ready_ = false ; bool viewer_ready_ = false ; bool loading_displayed_ = false ; MeshGroup meshes_ ; MeshGroup compare_meshes_ ; Visualizer * visualizer_ { nullptr }; int number_of_domains_ = 0 ; std :: shared_ptr < LandmarkWidget > landmark_widget_ ; std :: shared_ptr < PlaneWidget > plane_widget_ ; vtkSmartPointer < PaintWidget > paint_widget_ ; QSharedPointer < Session > session_ ; std :: string current_image_name_ = \"-none-\" ; vtkSmartPointer < vtkCellPicker > cell_picker_ ; vtkSmartPointer < vtkPropPicker > prop_picker_ ; vtkSmartPointer < vtkPolygonalSurfacePointPlacer > point_placer_ ; // slice viewer SliceView slice_view_ { this }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Visualizer_8h.html","text":"Studio/Visualization/Visualizer.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Visualizer Controls display of objects in viewers. Source code #pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#studiovisualizationvisualizerh","text":"","title":"Studio/Visualization/Visualizer.h"},{"location":"api/Files/Visualizer_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Visualizer_8h.html#classes","text":"Name class shapeworks::Visualizer Controls display of objects in viewers.","title":"Classes"},{"location":"api/Files/Visualizer_8h.html#source-code","text":"#pragma once #include #include #include #include #include namespace shapeworks { class Visualizer ; typedef QSharedPointer < Visualizer > VisualizerHandle ; class Visualizer : public QObject { Q_OBJECT ; public : Visualizer ( Preferences & prefs ); ~ Visualizer (); void set_lightbox ( LightboxHandle lightbox ); void set_session ( SessionHandle session ); void set_center ( bool center ); bool get_center (); void set_alignment_domain ( int domain ); int get_alignment_domain (); void set_show_glyphs ( bool show ); void set_show_surface ( bool show ); void display_samples (); void update_samples (); void update_landmarks (); void update_planes (); void update_ffc_mode (); void display_sample ( int i ); void display_shape ( ShapeHandle shape ); void display_shapes ( ShapeList shapes ); void set_selected_point_one ( int id ); void set_selected_point_two ( int id ); void set_mean ( const Eigen :: VectorXd & mean ); void set_mean_shape ( ShapeHandle mean_shape ); ShapeHandle get_mean_shape (); void reset_camera (); void update_lut (); Particles get_current_shape (); vtkFloatArray * get_current_particle_scalars (); vtkSmartPointer < vtkPolyData > get_current_particle_poly_data (); void handle_new_mesh (); vtkSmartPointer < vtkPolyData > get_current_mesh ( int index ); std :: vector < vtkSmartPointer < vtkPolyData >> get_current_meshes_transformed ( int index ); const std :: string & get_feature_map () const ; void set_uniform_feature_range ( bool value ); bool get_uniform_feature_range ( void ); void set_feature_map ( const std :: string & feature_map ); void clear_viewers (); void reset_feature_range (); double * get_feature_range (); double * get_feature_raw_range (); bool get_feature_range_valid (); void update_feature_range ( double * range ); void update_feature_range ( double min , double max ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , int alignment_domain , int domain ); vtkSmartPointer < vtkTransform > get_transform ( std :: shared_ptr < Shape > shape , DisplayMode display_mode , int alignment_domain , int domain ); void set_opacities ( std :: vector < float > opacities ); std :: vector < float > get_opacities (); void set_domain_particle_visibilities ( std :: vector < bool > visibilities ); std :: vector < bool > get_domain_particle_visibilities (); double get_current_glyph_size (); void handle_ctrl_click ( PickResult result ); void redraw (); QPixmap export_to_pixmap ( QSize size , bool transparent_background , bool show_orientation_marker , bool show_color_scale , bool & ready ); QSize get_render_size (); public Q_SLOTS : void update_viewer_properties (); void handle_feature_range_changed (); void handle_image_slice_settings_changed (); private : Preferences & preferences_ ; void compute_measurements (); void setup_single_selected_point_lut (); std :: string feature_map_ ; int alignment_domain_ ; bool center_ ; bool needs_camera_reset_ = true ; bool show_glyphs_ = true ; bool show_surface_ = true ; LightboxHandle lightbox_ ; SessionHandle session_ ; vtkSmartPointer < vtkLookupTable > glyph_lut_ ; int selected_point_one_ ; int selected_point_two_ ; Eigen :: VectorXd cached_mean_ ; ShapeHandle mean_shape_ ; Particles current_shape_ ; double feature_range_ [ 2 ] = { 0 , 0 }; double feature_manual_range_ [ 2 ] = { 0 , 0 }; bool feature_range_valid_ = false ; bool feature_range_uniform_ = true ; std :: vector < bool > domain_particle_visibilities_ ; std :: vector < float > opacities_ ; double current_glyph_size_ { 0 }; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/VtkMeshWrapper_8h.html","text":"Libs/Optimize/Domain/VtkMeshWrapper.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::VtkMeshWrapper Source code #pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#libsoptimizedomainvtkmeshwrapperh","text":"","title":"Libs/Optimize/Domain/VtkMeshWrapper.h"},{"location":"api/Files/VtkMeshWrapper_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/VtkMeshWrapper_8h.html#classes","text":"Name class shapeworks::VtkMeshWrapper","title":"Classes"},{"location":"api/Files/VtkMeshWrapper_8h.html#source-code","text":"#pragma once #include #include #include #include #include #include #include #include \"ExternalLibs/robin_hood/robin_hood.h\" #include \"MeshGeoEntry.h\" #include \"MeshWrapper.h\" class vtkCellLocator ; namespace shapeworks { class VtkMeshWrapper : public MeshWrapper { public : using PointType = MeshWrapper :: PointType ; using GradNType = MeshWrapper :: GradNType ; using NormalType = vnl_vector_fixed < float , DIMENSION > ; using VectorType = vnl_vector_fixed < double , DIMENSION > ; explicit VtkMeshWrapper ( vtkSmartPointer < vtkPolyData > mesh , bool geodesics_enabled = false , size_t geodesics_cache_multiplier_size = 0 ); // 0 => VtkMeshWrapper will choose a heuristic ~ VtkMeshWrapper () = default ; double ComputeDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , VectorType * out_grad = nullptr ) const override ; bool IsWithinDistance ( const PointType & pointa , int idxa , const PointType & pointb , int idxb , double test_dist , double & dist ) const override ; PointType GeodesicWalk ( PointType p , int idx , VectorType vector ) const override ; VectorType ProjectVectorToSurfaceTangent ( const PointType & pointa , int idx , VectorType & vector ) const override ; NormalType SampleNormalAtPoint ( PointType p , int idx = -1 ) const override ; GradNType SampleGradNAtPoint ( PointType p , int idx ) const override ; PointType SnapToMesh ( PointType pointa , int idx ) const override ; PointType GetPointOnMesh () const override ; inline const PointType & GetMeshLowerBound () const override { return mesh_lower_bound_ ; } inline const PointType & GetMeshUpperBound () const override { return mesh_upper_bound_ ; } virtual void InvalidateParticle ( int idx ) override ; inline vtkSmartPointer < vtkPolyData > GetPolydata () const override { return original_mesh_ ; } private : void ComputeMeshBounds (); void ComputeGradN ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); int GetTriangleForPoint ( const double pt [ 3 ], int idx , double closest_point [ 3 ]) const ; Eigen :: Vector3d ProjectVectorToFace ( const Eigen :: Vector3d & normal , const Eigen :: Vector3d & vector ) const ; const Eigen :: Vector3d GetFaceNormal ( int face_index ) const ; bool IsInTriangle ( const double pt [ 3 ], int face_index ) const ; Eigen :: Vector3d ComputeBarycentricCoordinates ( const Eigen :: Vector3d & pt , int face ) const ; int ComputeFaceAndWeights ( const PointType & p , int idx , Eigen :: Vector3d & weights ) const ; Eigen :: Vector3d GeodesicWalkOnFace ( Eigen :: Vector3d point_a , Eigen :: Vector3d projected_vector , int face_index , int & ending_face ) const ; Eigen :: Vector3d GetBarycentricIntersection ( Eigen :: Vector3d start , Eigen :: Vector3d end , int currentFace , int edge ) const ; int GetAcrossEdge ( int face , int edge ) const ; int GetFacePointID ( int face , int point_id ) const ; int SlideAlongEdge ( Eigen :: Vector3d & point , Eigen :: Vector3d & remainingVector_ , int face_ , int edge_ ) const ; Eigen :: Vector3d GetVertexCoords ( int vertex_id ) const ; Eigen :: Vector3d RotateVectorToFace ( const Eigen :: Vector3d & prev_normal , const Eigen :: Vector3d & next_normal , const Eigen :: Vector3d & vector ) const ; vtkSmartPointer < vtkPolyData > poly_data_ ; vtkSmartPointer < vtkPolyData > original_mesh_ ; NormalType CalculateNormalAtPoint ( VtkMeshWrapper :: PointType p , int idx ) const ; // Caches of triangle, normal and position // Has to be mutable because all of the accessor APIs are const mutable std :: vector < int > particle_triangles_ ; mutable std :: vector < NormalType > particle_normals_ ; mutable std :: vector < PointType > particle_positions_ ; mutable std :: vector < double > particle_neighboorhood_ ; std :: vector < GradNType > grad_normals_ ; // cache of specialized cells for direct access std :: vector < vtkSmartPointer < vtkTriangle >> triangles_ ; // bounds of the mesh plus some buffer PointType mesh_lower_bound_ ; PointType mesh_upper_bound_ ; // cell locator to find closest point on mesh vtkSmartPointer < vtkCellLocator > cell_locator_ ; // Geodesic distances bool is_geodesics_enabled_ { false }; bool IsGeodesicsEnabled () const override { return this -> is_geodesics_enabled_ ; } // Geometry Central data structures std :: unique_ptr < geometrycentral :: surface :: SurfaceMesh > gc_mesh_ ; std :: unique_ptr < geometrycentral :: surface :: VertexPositionGeometry > gc_geometry_ ; std :: unique_ptr < geometrycentral :: surface :: HeatMethodDistanceSolver > gc_heatsolver_ ; size_t geo_max_cache_entries_ { 0 }; mutable size_t geo_cache_size_ { 0 }; // Flattened version of libigl's gradient operator std :: vector < Eigen :: Matrix3d > face_grad_ ; std :: vector < std :: unordered_set < int >> face_kring_ ; // Cache for geodesic distances from a triangle mutable std :: vector < MeshGeoEntry > geo_dist_cache_ ; // Returns true if face f_a is in the K-ring of face f_b bool AreFacesInKRing ( int f_a , int f_b ) const ; const size_t kring_ { 1 }; // Convert the mesh to libigl data structures void GetIGLMesh ( Eigen :: MatrixXd & V , Eigen :: MatrixXi & F ) const ; // Precompute heat data structures for faster geodesic lookups void PrecomputeGeodesics ( const Eigen :: MatrixXd & V , const Eigen :: MatrixXi & F ); void ComputeKRing ( int f , int k , std :: unordered_set < int >& ring ) const ; const MeshGeoEntry & GeodesicsFromTriangle ( int f , double max_dist = std :: numeric_limits < double >:: max (), int req_target_f = -1 ) const ; const Eigen :: Matrix3d GeodesicsFromTriangleToTriangle ( int f_a , int f_b ) const ; void ClearGeodesicCache () const ; // Store some info about the last query. This accelerates the computation // because the optimizer generally asks for the distances _from_ the same // point as the previous query. mutable bool geo_lq_cached_ { false }; mutable PointType geo_lq_pt_a_ { -1 }; mutable int geo_lq_face_ { -1 }; mutable Eigen :: Vector3d geo_lq_bary_ ; void FetchAndCacheFirstPoint ( const PointType pt_a , int idx_a , int & face_a , Eigen :: Vector3d & bary_a ) const ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/WheelEventForwarder_8h.html","text":"Studio/Interface/WheelEventForwarder.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::WheelEventForwarder Source code #pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#studiointerfacewheeleventforwarderh","text":"","title":"Studio/Interface/WheelEventForwarder.h"},{"location":"api/Files/WheelEventForwarder_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/WheelEventForwarder_8h.html#classes","text":"Name class shapeworks::WheelEventForwarder","title":"Classes"},{"location":"api/Files/WheelEventForwarder_8h.html#source-code","text":"#pragma once #include class QScrollBar ; namespace shapeworks { class WheelEventForwarder : public QObject { Q_OBJECT public : explicit WheelEventForwarder ( QScrollBar * target ); ~ WheelEventForwarder (); bool eventFilter ( QObject * obj , QEvent * event ); private : QScrollBar * target_ ; }; } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/WindowsCrashHandler_8h.html","text":"Studio/Utils/WindowsCrashHandler.h Functions Name int init_crash_handler () Functions Documentation function init_crash_handler int init_crash_handler () Source code int init_crash_handler (); Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#studioutilswindowscrashhandlerh","text":"","title":"Studio/Utils/WindowsCrashHandler.h"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions","text":"Name int init_crash_handler ()","title":"Functions"},{"location":"api/Files/WindowsCrashHandler_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/WindowsCrashHandler_8h.html#function-init_crash_handler","text":"int init_crash_handler ()","title":"function init_crash_handler"},{"location":"api/Files/WindowsCrashHandler_8h.html#source-code","text":"int init_crash_handler (); Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/Worker_8h.html","text":"Studio/Data/Worker.h Namespaces Name shapeworks User usage reporting (telemetry) Classes Name class shapeworks::Worker Source code #pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#studiodataworkerh","text":"","title":"Studio/Data/Worker.h"},{"location":"api/Files/Worker_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/Worker_8h.html#classes","text":"Name class shapeworks::Worker","title":"Classes"},{"location":"api/Files/Worker_8h.html#source-code","text":"#pragma once #include #include #include namespace shapeworks { class Worker : public QObject { Q_OBJECT public : Worker (); ~ Worker (); static Worker * create_worker (); void run_job ( QSharedPointer < Job > job ); public Q_SLOTS : void process (); Q_SIGNALS : void error_message ( QString ); void warning_message ( QString ); void status_message ( QString ); void progress ( int ); void finished (); private : QSharedPointer < Job > job_ ; }; } // namespace shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html","text":"Libs/Optimize/Function Files Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#libsoptimizefunction","text":"","title":"Libs/Optimize/Function"},{"location":"api/Files/dir_0e4564af99249380ef1f30404400c0a3.html#files","text":"Name Libs/Optimize/Function/CorrespondenceFunction.h Libs/Optimize/Function/CurvatureSamplingFunction.h Libs/Optimize/Function/DisentangledCorrespondenceFunction.h Libs/Optimize/Function/DualVectorFunction.h Libs/Optimize/Function/LegacyCorrespondenceFunction.h Libs/Optimize/Function/SamplingFunction.h Libs/Optimize/Function/VectorFunction.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html","text":"Libs/Optimize/Matrix Files Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#libsoptimizematrix","text":"","title":"Libs/Optimize/Matrix"},{"location":"api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html#files","text":"Name Libs/Optimize/Matrix/LegacyShapeMatrix.h Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h Libs/Optimize/Matrix/ShapeGradientMatrix.h Libs/Optimize/Matrix/ShapeMatrix.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html","text":"Studio/Analysis Files Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#studioanalysis","text":"","title":"Studio/Analysis"},{"location":"api/Files/dir_2efd803177123288b92908ec296fe578.html#files","text":"Name Studio/Analysis/AnalysisTool.h Studio/Analysis/ParticleAreaPanel.h Studio/Analysis/ShapeEvaluationJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html","text":"Libs/Mesh Directories Name Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#libsmesh","text":"","title":"Libs/Mesh"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#directories","text":"Name Libs/Mesh/PreviewMeshQC","title":"Directories"},{"location":"api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html#files","text":"Name Libs/Mesh/itkMultiplyByConstantImageFilter.h Libs/Mesh/Mesh.h Libs/Mesh/MeshComputeThickness.h Libs/Mesh/meshFIM.h Libs/Mesh/MeshUtils.h Libs/Mesh/MeshWarper.h Mesh warping capability. Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html","text":"Libs/Optimize/Neighborhood Files Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#libsoptimizeneighborhood","text":"","title":"Libs/Optimize/Neighborhood"},{"location":"api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html#files","text":"Name Libs/Optimize/Neighborhood/ParticleNeighborhood.h Libs/Optimize/Neighborhood/ParticlePointIndexPair.h Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html","text":"Libs/Alignment/Transforms Files Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#libsalignmenttransforms","text":"","title":"Libs/Alignment/Transforms"},{"location":"api/Files/dir_3c387d8f52af5a1c9b80596228515621.html#files","text":"Name Libs/Alignment/Transforms/itkAdvancedTransform.h Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Libs/Alignment/Transforms/itkKernelTransform2.h Libs/Alignment/Transforms/itkSparseKernelTransform.h Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html","text":"Libs/Mesh/PreviewMeshQC Files Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#libsmeshpreviewmeshqc","text":"","title":"Libs/Mesh/PreviewMeshQC"},{"location":"api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html#files","text":"Name Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h Libs/Mesh/PreviewMeshQC/FEAutoMesher.h Libs/Mesh/PreviewMeshQC/FECoreMesh.h Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h Libs/Mesh/PreviewMeshQC/FEElement.h Libs/Mesh/PreviewMeshQC/FEFillHole.h Libs/Mesh/PreviewMeshQC/FEFixMesh.h Libs/Mesh/PreviewMeshQC/FEMesh.h Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h Libs/Mesh/PreviewMeshQC/FENodeElementList.h Libs/Mesh/PreviewMeshQC/FENodeFaceList.h Libs/Mesh/PreviewMeshQC/FENodeNodeList.h Libs/Mesh/PreviewMeshQC/FEVTKExport.h Libs/Mesh/PreviewMeshQC/FEVTKImport.h Libs/Mesh/PreviewMeshQC/Intersect.h Libs/Mesh/PreviewMeshQC/math3d.h Libs/Mesh/PreviewMeshQC/stdafx.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html","text":"Studio/Groom Files Name Studio/Groom/GroomTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#studiogroom","text":"","title":"Studio/Groom"},{"location":"api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html#files","text":"Name Studio/Groom/GroomTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html","text":"Studio/Python Files Name Studio/Python/PythonWorker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#studiopython","text":"","title":"Studio/Python"},{"location":"api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html#files","text":"Name Studio/Python/PythonWorker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html","text":"Applications/shapeworks Files Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#applicationsshapeworks","text":"","title":"Applications/shapeworks"},{"location":"api/Files/dir_486a45e6ebc11931a27093b877e14af3.html#files","text":"Name Applications/shapeworks/Command.h Applications/shapeworks/Commands.h Applications/shapeworks/Executable.h Applications/shapeworks/SharedCommandData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html","text":"Libs/Project Files Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#libsproject","text":"","title":"Libs/Project"},{"location":"api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html#files","text":"Name Libs/Project/ExcelProjectReader.h Libs/Project/ExcelProjectWriter.h Libs/Project/JsonProjectReader.h Libs/Project/JsonProjectWriter.h Libs/Project/Parameters.h Libs/Project/Project.h Libs/Project/ProjectReader.h Libs/Project/ProjectUtils.h Libs/Project/Subject.h Libs/Project/Variant.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html","text":"Studio/Utils Files Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#studioutils","text":"","title":"Studio/Utils"},{"location":"api/Files/dir_645c19d7da098e01621cdebb663b8767.html#files","text":"Name Studio/Utils/AnalysisUtils.h Studio/Utils/ImageLabel.h Studio/Utils/StackWalker.h Studio/Utils/StudioUtils.h Studio/Utils/WindowsCrashHandler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html","text":"Libs/Python Files Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#libspython","text":"","title":"Libs/Python"},{"location":"api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html#files","text":"Name Libs/Python/pybind_utils.h Libs/Python/PythonAnalyze.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html","text":"Libs Directories Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#libs","text":"","title":"Libs"},{"location":"api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html#directories","text":"Name Libs/Alignment Libs/Analyze Libs/Common Libs/Groom Libs/Image Libs/Mesh Libs/Optimize Libs/Particles Libs/Project Libs/Python Libs/Utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html","text":"Libs/Utils Files Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#libsutils","text":"","title":"Libs/Utils"},{"location":"api/Files/dir_73a09fceee206218e6d903b3c5deb969.html#files","text":"Name Libs/Utils/EigenUtils.h Libs/Utils/StringUtils.h Libs/Utils/Utils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html","text":"Studio/Job Files Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#studiojob","text":"","title":"Studio/Job"},{"location":"api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html#files","text":"Name Studio/Job/GroupPvalueJob.h Studio/Job/Job.h Studio/Job/NetworkAnalysisJob.h Studio/Job/ParticleAreaJob.h Studio/Job/ParticleNormalEvaluationJob.h Studio/Job/StatsGroupLDAJob.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html","text":"Libs/Optimize/Utils Files Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#libsoptimizeutils","text":"","title":"Libs/Optimize/Utils"},{"location":"api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html#files","text":"Name Libs/Optimize/Utils/MemoryUsage.h Libs/Optimize/Utils/ObjectReader.h Libs/Optimize/Utils/ObjectWriter.h Libs/Optimize/Utils/OptimizationVisualizer.h Libs/Optimize/Utils/ParticleGaussianModeWriter.h Libs/Optimize/Utils/ParticleGoodBadAssessment.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html","text":"Libs/Optimize/Container Files Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#libsoptimizecontainer","text":"","title":"Libs/Optimize/Container"},{"location":"api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html#files","text":"Name Libs/Optimize/Container/GenericContainer.h Libs/Optimize/Container/GenericContainerArray.h Libs/Optimize/Container/MeanCurvatureContainer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html","text":"Applications Directories Name Applications/shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#applications","text":"","title":"Applications"},{"location":"api/Files/dir_8c1195e4829fa17630c4278c41da729a.html#directories","text":"Name Applications/shapeworks Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html","text":"Libs/Image Files Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#libsimage","text":"","title":"Libs/Image"},{"location":"api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html#files","text":"Name Libs/Image/Image.h Libs/Image/ImageUtils.h Libs/Image/itkTPGACLevelSetImageFilter.h Libs/Image/VectorImage.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html","text":"Studio/Optimize Files Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#studiooptimize","text":"","title":"Studio/Optimize"},{"location":"api/Files/dir_9e99c41d3802fada2a0119d079df0956.html#files","text":"Name Studio/Optimize/OptimizeTool.h Studio/Optimize/QOptimize.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html","text":"Studio/Resources Files Name Studio/Resources/resource.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#studioresources","text":"","title":"Studio/Resources"},{"location":"api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html#files","text":"Name Studio/Resources/resource.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html","text":"Libs/Optimize/Constraints Files Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#libsoptimizeconstraints","text":"","title":"Libs/Optimize/Constraints"},{"location":"api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html#files","text":"Name Libs/Optimize/Constraints/Constraint.h Libs/Optimize/Constraints/Constraints.h Libs/Optimize/Constraints/ConstraintType.h Libs/Optimize/Constraints/FreeFormConstraint.h Libs/Optimize/Constraints/PlaneConstraint.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html","text":"Studio/Data Files Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#studiodata","text":"","title":"Studio/Data"},{"location":"api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html#files","text":"Name Studio/Data/DataTool.h Studio/Data/ExportUtils.h Studio/Data/LandmarkItemDelegate.h Studio/Data/LandmarkTableModel.h Studio/Data/MeshSettings.h Studio/Data/Preferences.h Studio/Data/PreferencesWindow.h Studio/Data/Session.h Studio/Data/ShapeWorksWorker.h Studio/Data/Telemetry.h Studio/Data/Worker.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html","text":"Documentation/Doxygen Updated on 2023-10-25 at 15:40:28 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html#documentationdoxygen","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"Documentation/Doxygen"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html","text":"Studio/Visualization Files Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#studiovisualization","text":"","title":"Studio/Visualization"},{"location":"api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html#files","text":"Name Studio/Visualization/ColorMap.h Studio/Visualization/ColorSchemes.h Studio/Visualization/LandmarkWidget.h Studio/Visualization/Lightbox.h Studio/Visualization/MeshSlice.h Studio/Visualization/PaintWidget.h Studio/Visualization/ParticleColors.h Studio/Visualization/PlaneWidget.h Studio/Visualization/SliceView.h Studio/Visualization/StudioHandleWidget.h Studio/Visualization/StudioInteractorStyle.h Studio/Visualization/StudioSliceInteractorStyle.h Studio/Visualization/StudioVtkOutputWindow.h Studio/Visualization/Viewer.h Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html","text":"Libs/Optimize/Domain Files Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#libsoptimizedomain","text":"","title":"Libs/Optimize/Domain"},{"location":"api/Files/dir_b92c77c85671879e4c48e03051777b7e.html#files","text":"Name Libs/Optimize/Domain/ContourDomain.h Libs/Optimize/Domain/DomainType.h Libs/Optimize/Domain/ImageDomain.h Libs/Optimize/Domain/ImageDomainWithCurvature.h Libs/Optimize/Domain/ImageDomainWithGradients.h Libs/Optimize/Domain/ImageDomainWithGradN.h Libs/Optimize/Domain/ImplicitSurfaceDomain.h Libs/Optimize/Domain/MeshDomain.h Libs/Optimize/Domain/MeshGeoEntry.h Libs/Optimize/Domain/MeshWrapper.h Libs/Optimize/Domain/ParticleDomain.h Libs/Optimize/Domain/ParticleRegionDomain.h Libs/Optimize/Domain/VtkMeshWrapper.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html","text":"Studio Directories Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#studio","text":"","title":"Studio"},{"location":"api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html#directories","text":"Name Studio/Analysis Studio/Data Studio/DeepSSM Studio/Groom Studio/Interface Studio/Job Studio/Optimize Studio/Python Studio/Resources Studio/Utils Studio/Visualization Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html","text":"Libs/Common Files Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#libscommon","text":"","title":"Libs/Common"},{"location":"api/Files/dir_c13ed27a749775eeb2d59234813cae48.html#files","text":"Name Libs/Common/Exception.h Libs/Common/Logging.h Libs/Common/Region.h Libs/Common/Shapeworks.h Libs/Common/ShapeworksUtils.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html","text":"Libs/Alignment Directories Name Libs/Alignment/Transforms Files Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#libsalignment","text":"","title":"Libs/Alignment"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#directories","text":"Name Libs/Alignment/Transforms","title":"Directories"},{"location":"api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html#files","text":"Name Libs/Alignment/Procrustes3D.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html","text":"Libs/Groom Files Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#libsgroom","text":"","title":"Libs/Groom"},{"location":"api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html#files","text":"Name Libs/Groom/Groom.h Libs/Groom/GroomParameters.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html","text":"Documentation Directories Name Documentation/Doxygen Updated on 2023-10-25 at 15:40:28 +0000","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#documentation","text":"","title":"Documentation"},{"location":"api/Files/dir_cb8980ab440f994989990a6313097edf.html#directories","text":"Name Documentation/Doxygen Updated on 2023-10-25 at 15:40:28 +0000","title":"Directories"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html","text":"Libs/Analyze Files Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#libsanalyze","text":"","title":"Libs/Analyze"},{"location":"api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html#files","text":"Name Libs/Analyze/Analyze.h Libs/Analyze/CustomSurfaceReconstructionFilter.h Libs/Analyze/ItkToVtk.h Libs/Analyze/LegacyMeshGenerator.h Mesh generation. Libs/Analyze/MeshCache.h Libs/Analyze/MeshGenerator.h Mesh generation. Libs/Analyze/MeshGroup.h Libs/Analyze/MeshManager.h Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. Libs/Analyze/MeshWorkQueue.h Libs/Analyze/ParticleArea.h Libs/Analyze/Particles.h Libs/Analyze/QMeshWarper.h Libs/Analyze/Reconstruction.h Libs/Analyze/Shape.h Libs/Analyze/StudioEnums.h Libs/Analyze/StudioMesh.h Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. Libs/Analyze/vtkPolyDataToImageData.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html","text":"Studio/DeepSSM Files Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#studiodeepssm","text":"","title":"Studio/DeepSSM"},{"location":"api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html#files","text":"Name Studio/DeepSSM/DeepSSMJob.h Studio/DeepSSM/DeepSSMParameters.h Studio/DeepSSM/DeepSSMTool.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html","text":"Libs/Optimize Directories Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils Files Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#libsoptimize","text":"","title":"Libs/Optimize"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#directories","text":"Name Libs/Optimize/Constraints Libs/Optimize/Container Libs/Optimize/Domain Libs/Optimize/Function Libs/Optimize/Matrix Libs/Optimize/Neighborhood Libs/Optimize/Utils","title":"Directories"},{"location":"api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html#files","text":"Name Libs/Optimize/CorrespondenceMode.h Libs/Optimize/GradientDescentOptimizer.h Libs/Optimize/Observer.h Libs/Optimize/Optimize.h Libs/Optimize/OptimizeParameterFile.h Libs/Optimize/OptimizeParameters.h Libs/Optimize/ParticleEvents.h Libs/Optimize/ParticleSystem.h Libs/Optimize/ProcrustesRegistration.h Libs/Optimize/Sampler.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html","text":"Studio/Interface Files Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#studiointerface","text":"","title":"Studio/Interface"},{"location":"api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html#files","text":"Name Studio/Interface/CompareWidget.h Studio/Interface/CustomSlider.h Studio/Interface/ExportImageDialog.h Studio/Interface/KeyboardShortcuts.h Studio/Interface/LogWindow.h Studio/Interface/ShapeWorksStudioApp.h Studio/Interface/SplashScreen.h Studio/Interface/StatusBarWidget.h Studio/Interface/StudioLogger.h Studio/Interface/Style.h Studio/Interface/UpdateChecker.h Studio/Interface/WheelEventForwarder.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html","text":"Libs/Particles Files Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#libsparticles","text":"","title":"Libs/Particles"},{"location":"api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html#files","text":"Name Libs/Particles/EvaluationUtil.h Libs/Particles/ParticleFile.h Libs/Particles/ParticleNormalEvaluation.h Libs/Particles/ParticleShapeStatistics.h Libs/Particles/ParticleSystemEvaluation.h Libs/Particles/ReconstructSurface.h Libs/Particles/ShapeEvaluation.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/index_files.html","text":"Files dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/index_files.html#files","text":"dir Applications dir Applications/shapeworks file Applications/shapeworks/Command.h file Applications/shapeworks/Commands.h file Applications/shapeworks/Executable.h file Applications/shapeworks/SharedCommandData.h dir Documentation dir Documentation/Doxygen dir Libs dir Libs/Alignment dir Libs/Alignment/Transforms file Libs/Alignment/Transforms/itkAdvancedTransform.h file Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h file Libs/Alignment/Transforms/itkKernelTransform2.h file Libs/Alignment/Transforms/itkSparseKernelTransform.h file Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h file Libs/Alignment/Procrustes3D.h dir Libs/Analyze file Libs/Analyze/Analyze.h file Libs/Analyze/CustomSurfaceReconstructionFilter.h file Libs/Analyze/ItkToVtk.h file Libs/Analyze/LegacyMeshGenerator.h Mesh generation. file Libs/Analyze/MeshCache.h file Libs/Analyze/MeshGenerator.h Mesh generation. file Libs/Analyze/MeshGroup.h file Libs/Analyze/MeshManager.h file Libs/Analyze/MeshWorkQueue.h file Libs/Analyze/MeshWorker.h Worker class for parallel mesh reconstruction. file Libs/Analyze/ParticleArea.h file Libs/Analyze/Particles.h file Libs/Analyze/QMeshWarper.h file Libs/Analyze/Reconstruction.h file Libs/Analyze/Shape.h file Libs/Analyze/StudioEnums.h file Libs/Analyze/StudioMesh.h file Libs/Analyze/SurfaceReconstructor.h Surface Reconstruction Layer. file Libs/Analyze/vtkPolyDataToImageData.h dir Libs/Common file Libs/Common/Exception.h file Libs/Common/Logging.h file Libs/Common/Region.h file Libs/Common/Shapeworks.h file Libs/Common/ShapeworksUtils.h dir Libs/Groom file Libs/Groom/Groom.h file Libs/Groom/GroomParameters.h dir Libs/Image file Libs/Image/Image.h file Libs/Image/ImageUtils.h file Libs/Image/VectorImage.h file Libs/Image/itkTPGACLevelSetImageFilter.h dir Libs/Mesh dir Libs/Mesh/PreviewMeshQC file Libs/Mesh/PreviewMeshQC/FEAreaCoverage.h file Libs/Mesh/PreviewMeshQC/FEAutoMesher.h file Libs/Mesh/PreviewMeshQC/FECVDDecimationModifier.h file Libs/Mesh/PreviewMeshQC/FECoreMesh.h file Libs/Mesh/PreviewMeshQC/FEElement.h file Libs/Mesh/PreviewMeshQC/FEFillHole.h file Libs/Mesh/PreviewMeshQC/FEFixMesh.h file Libs/Mesh/PreviewMeshQC/FEMesh.h file Libs/Mesh/PreviewMeshQC/FEMeshSmoothingModifier.h file Libs/Mesh/PreviewMeshQC/FENodeElementList.h file Libs/Mesh/PreviewMeshQC/FENodeFaceList.h file Libs/Mesh/PreviewMeshQC/FENodeNodeList.h file Libs/Mesh/PreviewMeshQC/FEVTKExport.h file Libs/Mesh/PreviewMeshQC/FEVTKImport.h file Libs/Mesh/PreviewMeshQC/Intersect.h file Libs/Mesh/PreviewMeshQC/math3d.h file Libs/Mesh/PreviewMeshQC/stdafx.h file Libs/Mesh/Mesh.h file Libs/Mesh/MeshComputeThickness.h file Libs/Mesh/MeshUtils.h file Libs/Mesh/MeshWarper.h Mesh warping capability. file Libs/Mesh/itkMultiplyByConstantImageFilter.h file Libs/Mesh/meshFIM.h dir Libs/Optimize file Libs/Optimize/CorrespondenceMode.h file Libs/Optimize/GradientDescentOptimizer.h dir Libs/Optimize/Constraints file Libs/Optimize/Constraints/Constraint.h file Libs/Optimize/Constraints/ConstraintType.h file Libs/Optimize/Constraints/Constraints.h file Libs/Optimize/Constraints/FreeFormConstraint.h file Libs/Optimize/Constraints/PlaneConstraint.h dir Libs/Optimize/Container file Libs/Optimize/Container/GenericContainer.h file Libs/Optimize/Container/GenericContainerArray.h file Libs/Optimize/Container/MeanCurvatureContainer.h dir Libs/Optimize/Domain file Libs/Optimize/Domain/ContourDomain.h file Libs/Optimize/Domain/DomainType.h file Libs/Optimize/Domain/ImageDomain.h file Libs/Optimize/Domain/ImageDomainWithCurvature.h file Libs/Optimize/Domain/ImageDomainWithGradN.h file Libs/Optimize/Domain/ImageDomainWithGradients.h file Libs/Optimize/Domain/ImplicitSurfaceDomain.h file Libs/Optimize/Domain/MeshDomain.h file Libs/Optimize/Domain/MeshGeoEntry.h file Libs/Optimize/Domain/MeshWrapper.h file Libs/Optimize/Domain/ParticleDomain.h file Libs/Optimize/Domain/ParticleRegionDomain.h file Libs/Optimize/Domain/VtkMeshWrapper.h dir Libs/Optimize/Function file Libs/Optimize/Function/CorrespondenceFunction.h file Libs/Optimize/Function/CurvatureSamplingFunction.h file Libs/Optimize/Function/DisentangledCorrespondenceFunction.h file Libs/Optimize/Function/DualVectorFunction.h file Libs/Optimize/Function/LegacyCorrespondenceFunction.h file Libs/Optimize/Function/SamplingFunction.h file Libs/Optimize/Function/VectorFunction.h dir Libs/Optimize/Matrix file Libs/Optimize/Matrix/LegacyShapeMatrix.h file Libs/Optimize/Matrix/LinearRegressionShapeMatrix.h file Libs/Optimize/Matrix/MixedEffectsShapeMatrix.h file Libs/Optimize/Matrix/ShapeGradientMatrix.h file Libs/Optimize/Matrix/ShapeMatrix.h dir Libs/Optimize/Neighborhood file Libs/Optimize/Neighborhood/ParticleNeighborhood.h file Libs/Optimize/Neighborhood/ParticlePointIndexPair.h file Libs/Optimize/Neighborhood/ParticleRegionNeighborhood.h file Libs/Optimize/Neighborhood/ParticleSurfaceNeighborhood.h file Libs/Optimize/Neighborhood/PowerOfTwoPointTree.h dir Libs/Optimize/Utils file Libs/Optimize/Utils/MemoryUsage.h file Libs/Optimize/Utils/ObjectReader.h file Libs/Optimize/Utils/ObjectWriter.h file Libs/Optimize/Utils/OptimizationVisualizer.h file Libs/Optimize/Utils/ParticleGaussianModeWriter.h file Libs/Optimize/Utils/ParticleGoodBadAssessment.h file Libs/Optimize/Observer.h file Libs/Optimize/Optimize.h file Libs/Optimize/OptimizeParameterFile.h file Libs/Optimize/OptimizeParameters.h file Libs/Optimize/ParticleEvents.h file Libs/Optimize/ParticleSystem.h file Libs/Optimize/ProcrustesRegistration.h file Libs/Optimize/Sampler.h dir Libs/Particles file Libs/Particles/EvaluationUtil.h file Libs/Particles/ParticleFile.h file Libs/Particles/ParticleNormalEvaluation.h file Libs/Particles/ParticleShapeStatistics.h file Libs/Particles/ParticleSystemEvaluation.h file Libs/Particles/ReconstructSurface.h file Libs/Particles/ShapeEvaluation.h dir Libs/Project file Libs/Project/ExcelProjectReader.h file Libs/Project/ExcelProjectWriter.h file Libs/Project/JsonProjectReader.h file Libs/Project/JsonProjectWriter.h file Libs/Project/Parameters.h file Libs/Project/Project.h file Libs/Project/ProjectReader.h file Libs/Project/ProjectUtils.h file Libs/Project/Subject.h file Libs/Project/Variant.h dir Libs/Python file Libs/Python/PythonAnalyze.h file Libs/Python/pybind_utils.h dir Libs/Utils file Libs/Utils/EigenUtils.h file Libs/Utils/StringUtils.h file Libs/Utils/Utils.h file Module.dox dir Studio dir Studio/Analysis file Studio/Analysis/AnalysisTool.h file Studio/Analysis/ParticleAreaPanel.h file Studio/Analysis/ShapeEvaluationJob.h dir Studio/Data file Studio/Data/DataTool.h file Studio/Data/ExportUtils.h file Studio/Data/LandmarkItemDelegate.h file Studio/Data/LandmarkTableModel.h file Studio/Data/MeshSettings.h file Studio/Data/Preferences.h file Studio/Data/PreferencesWindow.h file Studio/Data/Session.h file Studio/Data/ShapeWorksWorker.h file Studio/Data/Telemetry.h file Studio/Data/Worker.h dir Studio/DeepSSM file Studio/DeepSSM/DeepSSMJob.h file Studio/DeepSSM/DeepSSMParameters.h file Studio/DeepSSM/DeepSSMTool.h dir Studio/Groom file Studio/Groom/GroomTool.h dir Studio/Interface file Studio/Interface/CompareWidget.h file Studio/Interface/CustomSlider.h file Studio/Interface/ExportImageDialog.h file Studio/Interface/KeyboardShortcuts.h file Studio/Interface/LogWindow.h file Studio/Interface/ShapeWorksStudioApp.h file Studio/Interface/SplashScreen.h file Studio/Interface/StatusBarWidget.h file Studio/Interface/StudioLogger.h file Studio/Interface/Style.h file Studio/Interface/UpdateChecker.h file Studio/Interface/WheelEventForwarder.h dir Studio/Job file Studio/Job/GroupPvalueJob.h file Studio/Job/Job.h file Studio/Job/NetworkAnalysisJob.h file Studio/Job/ParticleAreaJob.h file Studio/Job/ParticleNormalEvaluationJob.h file Studio/Job/StatsGroupLDAJob.h dir Studio/Optimize file Studio/Optimize/OptimizeTool.h file Studio/Optimize/QOptimize.h dir Studio/Python file Studio/Python/PythonWorker.h dir Studio/Resources file Studio/Resources/resource.h dir Studio/Utils file Studio/Utils/AnalysisUtils.h file Studio/Utils/ImageLabel.h file Studio/Utils/StackWalker.h file Studio/Utils/StudioUtils.h file Studio/Utils/WindowsCrashHandler.h dir Studio/Visualization file Studio/Visualization/ColorMap.h file Studio/Visualization/ColorSchemes.h file Studio/Visualization/LandmarkWidget.h file Studio/Visualization/Lightbox.h file Studio/Visualization/MeshSlice.h file Studio/Visualization/PaintWidget.h file Studio/Visualization/ParticleColors.h file Studio/Visualization/PlaneWidget.h file Studio/Visualization/SliceView.h file Studio/Visualization/StudioHandleWidget.h file Studio/Visualization/StudioInteractorStyle.h file Studio/Visualization/StudioSliceInteractorStyle.h file Studio/Visualization/StudioVtkOutputWindow.h file Studio/Visualization/Viewer.h file Studio/Visualization/Visualizer.h Updated on 2023-10-25 at 15:40:28 +0000","title":"Files"},{"location":"api/Files/itkAdvancedTransform_8h.html","text":"Libs/Alignment/Transforms/itkAdvancedTransform.h Namespaces Name itk Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#libsalignmenttransformsitkadvancedtransformh","text":"","title":"Libs/Alignment/Transforms/itkAdvancedTransform.h"},{"location":"api/Files/itkAdvancedTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkAdvancedTransform_8h.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space.","title":"Classes"},{"location":"api/Files/itkAdvancedTransform_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkTransform.h,v $ Language: C++ Date: $Date: 2008-06-29 12:58:58 $ Version: $Revision: 1.64 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAdvancedTransform_h #define __itkAdvancedTransform_h #include \"itkTransform.h\" #include \"itkMatrix.h\" #include \"itkFixedArray.h\" namespace itk { template < class TScalarType , unsigned int NInputDimensions = 3 , unsigned int NOutputDimensions = 3 > class AdvancedTransform : public Transform < TScalarType , NInputDimensions , NOutputDimensions > { public : typedef AdvancedTransform Self ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; //itkNewMacro( Self ); itkTypeMacro ( AdvancedTransform , Transform ); itkStaticConstMacro ( InputSpaceDimension , unsigned int , NInputDimensions ); itkStaticConstMacro ( OutputSpaceDimension , unsigned int , NOutputDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: ParametersValueType ParametersValueType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: DerivativeType DerivativeType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InverseTransformBaseType InverseTransformBaseType ; typedef typename Superclass :: InverseTransformBasePointer InverseTransformBasePointer ; typedef Transform < TScalarType , NInputDimensions , NOutputDimensions > TransformType ; typedef typename TransformType :: Pointer TransformTypePointer ; typedef typename TransformType :: ConstPointer TransformTypeConstPointer ; typedef std :: vector < unsigned long > NonZeroJacobianIndicesType ; typedef Matrix < ScalarType , OutputSpaceDimension , InputSpaceDimension > SpatialJacobianType ; typedef std :: vector < SpatialJacobianType > JacobianOfSpatialJacobianType ; // \\todo: think about the SpatialHessian type, should be a 3D native type typedef FixedArray < Matrix < ScalarType , InputSpaceDimension , InputSpaceDimension > , OutputSpaceDimension > SpatialHessianType ; typedef std :: vector < SpatialHessianType > JacobianOfSpatialHessianType ; typedef typename SpatialJacobianType :: InternalMatrixType InternalMatrixType ; typedef OutputCovariantVectorType MovingImageGradientType ; typedef typename MovingImageGradientType :: ValueType MovingImageGradientValueType ; virtual NumberOfParametersType GetNumberOfNonZeroJacobianIndices ( void ) const ; itkGetConstMacro ( HasNonZeroSpatialHessian , bool ); itkGetConstMacro ( HasNonZeroJacobianOfSpatialHessian , bool ); virtual void GetJacobian ( const InputPointType & ipp , JacobianType & j , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void EvaluateJacobianWithImageGradientProduct ( const InputPointType & ipp , const MovingImageGradientType & movingImageGradient , DerivativeType & imageJacobian , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const ; virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const = 0 ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void ComputeJacobianWithRespectToPosition ( const InputPointType & itkNotUsed ( p ), JacobianType & itkNotUsed ( j ) ) const { itkExceptionMacro ( << \"This ITK4 function is currently not used in elastix.\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const = 0 ; protected : AdvancedTransform (); AdvancedTransform ( NumberOfParametersType numberOfParameters ); virtual ~ AdvancedTransform () {} bool m_HasNonZeroSpatialHessian ; bool m_HasNonZeroJacobianOfSpatialHessian ; private : AdvancedTransform ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // end namespace itk #include \"itkAdvancedTransform.cpp\" #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h Namespaces Name itk Classes Name class itk::CompactlySupportedRBFSparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#libsalignmenttransformsitkcompactlysupportedrbfsparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkCompactlySupportedRBFSparseKernelTransform.h"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#classes","text":"Name class itk::CompactlySupportedRBFSparseKernelTransform","title":"Classes"},{"location":"api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkCompactlySupportedRBFSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2014-1-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkCompactlySupportedRBFSparseKernelTransform_h #define __itkCompactlySupportedRBFSparseKernelTransform_h #include \"itkSparseKernelTransform.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ITK_EXPORT CompactlySupportedRBFSparseKernelTransform : public SparseKernelTransform < TScalarType , NDimensions > { public : typedef CompactlySupportedRBFSparseKernelTransform Self ; typedef SparseKernelTransform < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( CompactlySupportedRBFSparseKernelTransform , SparseKernelTransform ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; // void SetParameters( const ParametersType & parameters ); void SetSigma ( double sigma ){ this -> Sigma = sigma ;} virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; protected : CompactlySupportedRBFSparseKernelTransform () { this -> Sigma = 1 ; } virtual ~ CompactlySupportedRBFSparseKernelTransform () {} typedef typename Superclass :: GMatrixType GMatrixType ; const GMatrixType & ComputeG ( const InputVectorType & x ) const override ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const override ; private : CompactlySupportedRBFSparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented // basis support double Sigma ; }; } // namespace itk #include \"itkCompactlySupportedRBFSparseKernelTransform.cpp\" #endif // __itkCompactlySupportedRBFSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkKernelTransform2.h Namespaces Name itk Classes Name class itk::KernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#libsalignmenttransformsitkkerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkKernelTransform2.h"},{"location":"api/Files/itkKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkKernelTransform2_8h.html#classes","text":"Name class itk::KernelTransform2","title":"Classes"},{"location":"api/Files/itkKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkKernelTransform2_h #define __itkKernelTransform2_h #include \"itkAdvancedTransform.h\" #include \"itkPoint.h\" #include \"itkVector.h\" #include \"itkMatrix.h\" #include \"itkPointSet.h\" #include #include #include \"vnl/vnl_matrix_fixed.h\" #include \"vnl/vnl_matrix.h\" #include \"vnl/vnl_vector.h\" #include \"vnl/vnl_vector_fixed.h\" #include \"vnl/vnl_sample.h\" #include \"vnl/algo/vnl_svd.h\" #include \"vnl/algo/vnl_qr.h\" namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class KernelTransform2 : public AdvancedTransform < TScalarType , NDimensions , NDimensions > { public : typedef KernelTransform2 Self ; typedef AdvancedTransform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( KernelTransform2 , AdvancedTransform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: NumberOfParametersType NumberOfParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: InputVnlVectorType InputVnlVectorType ; typedef typename Superclass :: OutputVnlVectorType OutputVnlVectorType ; typedef typename Superclass :: NonZeroJacobianIndicesType NonZeroJacobianIndicesType ; typedef typename Superclass :: SpatialJacobianType SpatialJacobianType ; typedef typename Superclass :: JacobianOfSpatialJacobianType JacobianOfSpatialJacobianType ; typedef typename Superclass :: SpatialHessianType SpatialHessianType ; typedef typename Superclass :: JacobianOfSpatialHessianType JacobianOfSpatialHessianType ; typedef typename Superclass :: InternalMatrixType InternalMatrixType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > IMatrixType ; virtual NumberOfParametersType GetNumberOfParameters ( void ) const { return ( this -> m_SourceLandmarks -> GetNumberOfPoints () * SpaceDimension ); } itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ); void ComputeLInverse ( void ); virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; virtual OutputVectorType TransformVector ( const InputVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputVnlVectorType TransformVector ( const InputVnlVectorType & ) const { itkExceptionMacro ( << \"TransformVector(const InputVnlVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual OutputCovariantVectorType TransformCovariantVector ( const InputCovariantVectorType & ) const { itkExceptionMacro ( << \"TransformCovariantVector(const InputCovariantVectorType &) is not implemented \" << \"for KernelTransform\" ); } virtual void GetJacobian ( const InputPointType & , JacobianType & , NonZeroJacobianIndicesType & ) const ; virtual void SetIdentity ( void ); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ); virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void SetStiffness ( double stiffness ) { this -> m_Stiffness = stiffness > 0 ? stiffness : 0.0 ; this -> m_LMatrixComputed = false ; this -> m_LInverseComputed = false ; this -> m_WMatrixComputed = false ; } itkGetMacro ( Stiffness , double ); virtual void SetAlpha ( TScalarType itkNotUsed ( Alpha ) ) {} virtual TScalarType GetAlpha ( void ) const { return -1.0 ; } itkSetMacro ( PoissonRatio , TScalarType ); virtual const TScalarType GetPoissonRatio ( void ) const { return this -> m_PoissonRatio ; } itkSetMacro ( MatrixInversionMethod , std :: string ); itkGetConstReferenceMacro ( MatrixInversionMethod , std :: string ); virtual void GetSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialJacobian ( const InputPointType & ipp , SpatialJacobianType & sj , JacobianOfSpatialJacobianType & jsj , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } virtual void GetJacobianOfSpatialHessian ( const InputPointType & ipp , SpatialHessianType & sh , JacobianOfSpatialHessianType & jsh , NonZeroJacobianIndicesType & nonZeroJacobianIndices ) const { itkExceptionMacro ( << \"Not implemented for KernelTransform2\" ); } protected : KernelTransform2 (); virtual ~ KernelTransform2 (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > GMatrixType ; typedef vnl_matrix < TScalarType > LMatrixType ; typedef vnl_matrix < TScalarType > KMatrixType ; typedef vnl_matrix < TScalarType > PMatrixType ; typedef vnl_matrix < TScalarType > YMatrixType ; typedef vnl_matrix < TScalarType > WMatrixType ; typedef vnl_matrix < TScalarType > DMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , NDimensions > AMatrixType ; typedef vnl_vector_fixed < TScalarType , NDimensions > BMatrixType ; typedef vnl_matrix_fixed < TScalarType , 1 , NDimensions > RowMatrixType ; typedef vnl_matrix_fixed < TScalarType , NDimensions , 1 > ColumnMatrixType ; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual void ComputeG ( const InputVectorType & landmarkVector , GMatrixType & GMatrix ) const ; virtual void ComputeReflexiveG ( PointsIterator , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK ( void ); void ComputeL ( void ); void ComputeP ( void ); void ComputeY ( void ); void ComputeD ( void ); void ReorganizeW ( void ); double m_Stiffness ; VectorSetPointer m_Displacements ; LMatrixType m_LMatrix ; LMatrixType m_LMatrixInverse ; KMatrixType m_KMatrix ; PMatrixType m_PMatrix ; YMatrixType m_YMatrix ; WMatrixType m_WMatrix ; DMatrixType m_DMatrix ; AMatrixType m_AMatrix ; BMatrixType m_BVector ; //GMatrixType m_GMatrix; bool m_WMatrixComputed ; bool m_LMatrixComputed ; bool m_LInverseComputed ; bool m_LMatrixDecompositionComputed ; typedef vnl_svd < ScalarType > SVDDecompositionType ; typedef vnl_qr < ScalarType > QRDecompositionType ; SVDDecompositionType * m_LMatrixDecompositionSVD ; QRDecompositionType * m_LMatrixDecompositionQR ; IMatrixType m_I ; NonZeroJacobianIndicesType m_NonZeroJacobianIndices ; mutable NonZeroJacobianIndicesType m_NonZeroJacobianIndicesTemp ; bool m_FastComputationPossible ; private : KernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented TScalarType m_PoissonRatio ; std :: string m_MatrixInversionMethod ; }; } // end namespace itk #include \"itkKernelTransform2.cpp\" #endif // __itkKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html","text":"Libs/Mesh/itkMultiplyByConstantImageFilter.h Namespaces Name itk itk::Functor Classes Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#libsmeshitkmultiplybyconstantimagefilterh","text":"","title":"Libs/Mesh/itkMultiplyByConstantImageFilter.h"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#namespaces","text":"Name itk itk::Functor","title":"Namespaces"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#classes","text":"Name class itk::Functor::MultiplyByConstant class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant.","title":"Classes"},{"location":"api/Files/itkMultiplyByConstantImageFilter_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: itkMultiplyByConstantImageFilter.h Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkMultiplyByConstantImageFilter_h #define __itkMultiplyByConstantImageFilter_h #include #include namespace itk { namespace Functor { template < class TInput , class TConstant , class TOutput > class MultiplyByConstant { public : MultiplyByConstant () : m_Constant ( NumericTraits < TConstant >:: One ) {}; ~ MultiplyByConstant () {}; bool operator != ( const MultiplyByConstant & other ) const { return ! ( * this == other ); } bool operator == ( const MultiplyByConstant & other ) const { return other . m_Constant == m_Constant ; } inline TOutput operator ()( const TInput & A ) const { // Because the user has to specify the constant we don't // check if the cte is not 0; return static_cast < TOutput > ( A * m_Constant ); } void SetConstant ( TConstant ct ) { this -> m_Constant = ct ; } const TConstant & GetConstant () const { return m_Constant ; } TConstant m_Constant ; }; } template < class TInputImage , class TConstant , class TOutputImage > class ITK_EXPORT MultiplyByConstantImageFilter : public UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > { public : typedef MultiplyByConstantImageFilter Self ; typedef UnaryFunctorImageFilter < TInputImage , TOutputImage , Functor :: MultiplyByConstant < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( MultiplyByConstantImageFilter , UnaryFunctorImageFilter ); void SetConstant ( TConstant ct ) { if ( ct != this -> GetFunctor (). GetConstant () ) { this -> GetFunctor (). SetConstant ( ct ); this -> Modified (); } } const TConstant & GetConstant () const { return this -> GetFunctor (). GetConstant (); } #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro ( InputConvertibleToOutputCheck , ( Concept :: Convertible < typename TInputImage :: PixelType , typename TOutputImage :: PixelType > )); itkConceptMacro ( Input1Input2OutputMultiplyOperatorCheck , ( Concept :: MultiplyOperator < typename TInputImage :: PixelType , TConstant , typename TOutputImage :: PixelType > )); #endif protected : MultiplyByConstantImageFilter () {}; virtual ~ MultiplyByConstantImageFilter () {}; void PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); os << indent << \"Constant: \" << static_cast < typename NumericTraits < TConstant >:: PrintType > ( this -> GetConstant ()) << std :: endl ; } private : MultiplyByConstantImageFilter ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkSparseKernelTransform_8h.html","text":"Libs/Alignment/Transforms/itkSparseKernelTransform.h Namespaces Name itk Classes Name class itk::SparseKernelTransform Source code /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#libsalignmenttransformsitksparsekerneltransformh","text":"","title":"Libs/Alignment/Transforms/itkSparseKernelTransform.h"},{"location":"api/Files/itkSparseKernelTransform_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkSparseKernelTransform_8h.html#classes","text":"Name class itk::SparseKernelTransform","title":"Classes"},{"location":"api/Files/itkSparseKernelTransform_8h.html#source-code","text":"/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkSparseKernelTransform.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkSparseKernelTransform_h #define __itkSparseKernelTransform_h #include #include #include #include #include #include #include #include #include #include #include #include #include //#define EIGEN_USE_MKL_ALL #include #include #include #include namespace itk { template < class TScalarType , // probably only float and double make sense here unsigned int NDimensions > // Number of dimensions class ITK_EXPORT SparseKernelTransform : public Transform < TScalarType , NDimensions , NDimensions > { public : typedef SparseKernelTransform Self ; typedef Transform < TScalarType , NDimensions , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkTypeMacro ( SparseKernelTransform , Transform ); itkNewMacro ( Self ); itkStaticConstMacro ( SpaceDimension , unsigned int , NDimensions ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef DefaultStaticMeshTraits < TScalarType , NDimensions , NDimensions , TScalarType , TScalarType > PointSetTraitsType ; typedef PointSet < InputPointType , NDimensions , PointSetTraitsType > PointSetType ; typedef typename PointSetType :: Pointer PointSetPointer ; typedef typename PointSetType :: PointsContainer PointsContainer ; typedef typename PointSetType :: PointsContainerIterator PointsIterator ; typedef typename PointSetType :: PointsContainerConstIterator PointsConstIterator ; typedef itk :: VectorContainer < unsigned long , InputVectorType > VectorSetType ; typedef typename VectorSetType :: Pointer VectorSetPointer ; itkGetObjectMacro ( SourceLandmarks , PointSetType ); virtual void SetSourceLandmarks ( PointSetType * ); itkGetObjectMacro ( TargetLandmarks , PointSetType ); virtual void SetTargetLandmarks ( PointSetType * ); itkGetObjectMacro ( Displacements , VectorSetType ); void ComputeWMatrix ( void ) const ; //void ComputeLInverse() const; virtual OutputPointType TransformPoint ( const InputPointType & thisPoint ) const ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > IMatrixType ; //typedef vnl_matrix_fixed IMatrixType; //virtual const JacobianType & GetJacobian(const InputPointType &point ) const; virtual void SetIdentity (); virtual void SetParameters ( const ParametersType & ); virtual void SetFixedParameters ( const ParametersType & ); virtual void UpdateParameters ( void ) const ; virtual const ParametersType & GetParameters ( void ) const ; virtual const ParametersType & GetFixedParameters ( void ) const ; virtual void ComputeJacobianWithRespectToParameters ( const InputPointType & in , JacobianType & jacobian ) const ; virtual void SetStiffness ( double stiffness ) { m_Stiffness = ( stiffness > 0 ) ? stiffness : 0.0 ; m_LMatrixComputed = false ; m_LInverseComputed = false ; m_WMatrixComputed = false ; } //itkSetClampMacro(Stiffness, double, 0.0, NumericTraits::max()); // Cant use the macro because the matrices must be recomputed itkGetMacro ( Stiffness , double ); protected : SparseKernelTransform (); virtual ~ SparseKernelTransform (); void PrintSelf ( std :: ostream & os , Indent indent ) const ; public : typedef Eigen :: Triplet < TScalarType > TripletType ; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > GMatrixType ; //typedef vnl_matrix_fixed GMatrixType; typedef Eigen :: SparseMatrix < TScalarType > LMatrixType ; //typedef vnl_matrix LMatrixType; typedef Eigen :: SparseMatrix < TScalarType > KMatrixType ; //typedef vnl_matrix KMatrixType; typedef Eigen :: SparseMatrix < TScalarType > PMatrixType ; //typedef Eigen::Matrix PMatrixType; //typedef vnl_matrix PMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > YMatrixType ; //typedef vnl_matrix YMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > WMatrixType ; //typedef vnl_matrix WMatrixType; typedef Eigen :: Matrix < TScalarType , Eigen :: Dynamic , Eigen :: Dynamic > DMatrixType ; //typedef vnl_matrix DMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , NDimensions > AMatrixType ; //typedef vnl_matrix_fixed AMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > BMatrixType ; // column vector //typedef vnl_vector_fixed BMatrixType; typedef Eigen :: Matrix < TScalarType , 1 , NDimensions > RowMatrixType ; //typedef vnl_matrix_fixed RowMatrixType; typedef Eigen :: Matrix < TScalarType , NDimensions , 1 > ColumnMatrixType ; //typedef vnl_matrix_fixed ColumnMatrixType; PointSetPointer m_SourceLandmarks ; PointSetPointer m_TargetLandmarks ; protected : virtual const GMatrixType & ComputeG ( const InputVectorType & landmarkVector ) const ; virtual const GMatrixType & ComputeReflexiveG ( PointsIterator ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; void ComputeK () const ; void ComputeL () const ; void ComputeP () const ; void ComputeY () const ; void ComputeD () const ; void ReorganizeW ( void ) const ; double m_Stiffness ; VectorSetPointer m_Displacements ; mutable LMatrixType m_LMatrix ; mutable LMatrixType m_LMatrixInverse ; mutable KMatrixType m_KMatrix ; mutable PMatrixType m_PMatrix ; mutable YMatrixType m_YMatrix ; mutable WMatrixType m_WMatrix ; mutable DMatrixType m_DMatrix ; mutable AMatrixType m_AMatrix ; mutable BMatrixType m_BVector ; mutable GMatrixType m_GMatrix ; mutable bool m_WMatrixComputed ; mutable bool m_LMatrixComputed ; mutable bool m_LInverseComputed ; IMatrixType m_I ; private : SparseKernelTransform ( const Self & ); //purposely not implemented void operator = ( const Self & ); //purposely not implemented }; } // end namespace itk #include \"itkSparseKernelTransform.cpp\" #endif // __itkSparseKernelTransform_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html","text":"Libs/Image/itkTPGACLevelSetImageFilter.h Namespaces Name itk Classes Name class itk::TPGACLevelSetImageFilter Defines Name TPGAC_EPSILON Macros Documentation define TPGAC_EPSILON #define TPGAC_EPSILON 1e-5; Source code #ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#libsimageitktpgaclevelsetimagefilterh","text":"","title":"Libs/Image/itkTPGACLevelSetImageFilter.h"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#classes","text":"Name class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#defines","text":"Name TPGAC_EPSILON","title":"Defines"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#define-tpgac_epsilon","text":"#define TPGAC_EPSILON 1e-5;","title":"define TPGAC_EPSILON"},{"location":"api/Files/itkTPGACLevelSetImageFilter_8h.html#source-code","text":"#ifndef __itkTPGACLevelSetImageFilter_h #define __itkTPGACLevelSetImageFilter_h #include \"itkGeodesicActiveContourLevelSetImageFilter.h\" namespace itk { template < class TInputImage , class TFeatureImage , class TOutputPixelType = float > class ITK_EXPORT TPGACLevelSetImageFilter : public GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > { public : typedef TPGACLevelSetImageFilter Self ; typedef GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputPixelType > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; typedef TInputImage ImageType ; typedef typename ImageType :: IndexType IndexType ; typedef typename Superclass :: TimeStepType TimeStepType ; typedef typename Superclass :: ValueType ValueType ; typedef typename Superclass :: OutputImageType OutputImageType ; typedef typename Superclass :: FeatureImageType FeatureImageType ; itkNewMacro ( Self ); itkTypeMacro ( TPGACLevelSetImageFilter , GeodesicActiveContourLevelSetImageFilter ); protected : ~ TPGACLevelSetImageFilter () {} TPGACLevelSetImageFilter (); virtual void PrintSelf ( std :: ostream & os , Indent indent ) const ; TPGACLevelSetImageFilter ( const Self & ); // purposely not implemented void operator = ( const Self & ); //purposely not implemented inline virtual ValueType CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ); }; template < class TInputImage , class TFeatureImage , class TOutputType > TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: TPGACLevelSetImageFilter () : GeodesicActiveContourLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > () { // call parent constructor } template < class TInputImage , class TFeatureImage , class TOutputType > void TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: PrintSelf ( std :: ostream & os , Indent indent ) const { Superclass :: PrintSelf ( os , indent ); } // 6-neighbour table (including centre voxel, i.e. voxel 13) static int nbh6Table [ 27 ][ 6 ] = { { 1 , 3 , 9 , -1 , -1 , -1 }, // 0 { 0 , 2 , 4 , 10 , -1 , -1 }, // 1 { 1 , 5 , 11 , -1 , -1 , -1 }, // 2 { 0 , 4 , 6 , 12 , -1 , -1 }, // 3 { 1 , 3 , 5 , 7 , 13 , -1 }, // 4 { 2 , 4 , 8 , 14 , -1 , -1 }, // 5 { 3 , 7 , 15 , -1 , -1 , -1 }, // 6 { 4 , 6 , 8 , 16 , -1 , -1 }, // 7 { 5 , 7 , 17 , -1 , -1 , -1 }, // 8 { 0 , 10 , 12 , 18 , -1 , -1 }, // 9 { 1 , 9 , 11 , 13 , 19 , -1 }, // 10 { 2 , 10 , 14 , 20 , -1 , -1 }, // 11 { 3 , 9 , 13 , 15 , 21 , -1 }, // 12 { 4 , 10 , 12 , 14 , 16 , 22 }, // 13 { 5 , 11 , 13 , 17 , 23 , -1 }, // 14 { 6 , 12 , 16 , 24 , -1 , -1 }, // 15 { 7 , 13 , 15 , 17 , 25 , -1 }, // 16 { 8 , 14 , 16 , 26 , -1 , -1 }, // 17 { 9 , 19 , 21 , -1 , -1 , -1 }, // 18 { 10 , 18 , 20 , 22 , -1 , -1 }, // 19 { 11 , 19 , 23 , -1 , -1 , -1 }, // 20 { 12 , 18 , 22 , 24 , -1 , -1 }, // 21 { 13 , 19 , 21 , 23 , 25 , -1 }, // 22 { 14 , 20 , 22 , 26 , -1 , -1 }, // 23 { 15 , 21 , 25 , -1 , -1 , -1 }, // 24 { 16 , 22 , 24 , 26 , -1 , -1 }, // 25 { 17 , 23 , 25 , -1 , -1 , -1 } // 26 }; // generated by gen26neighbourTable.py // includes the centre voxel static int nbh26Table [ 27 ][ 26 ] = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 0 { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 1 { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 2 { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 3 { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 4 { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 5 { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 6 { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 7 { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 8 { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 9 { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 10 { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 11 { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 12 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, // 13 { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 14 { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 15 { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 16 { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 17 { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 18 { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 19 { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 20 { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 21 { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 22 { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 23 { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 24 { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, // 25 { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } // 26 }; static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) { if ( srcNbh [ centre ]) { dstNbh [ centre ] = 1 ; if ( srcNbh [ i0 ]) dstNbh [ i0 ] = 1 ; if ( srcNbh [ i1 ]) dstNbh [ i1 ] = 1 ; if ( srcNbh [ i2 ]) dstNbh [ i2 ] = 1 ; if ( srcNbh [ i3 ]) dstNbh [ i3 ] = 1 ; } } static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 6 neighbours max (also in the lookup table) for ( int i = 0 ; i < 6 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh6Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) { // needs good initial value int nbhIdx = 0 ; // 26 neighbours max (also in the lookup table) for ( int i = 0 ; i < 26 && nbhIdx >= 0 ; i ++ ) { nbhIdx = nbh26Table [ idx ][ i ]; // valid nbh index and the voxel exists and it hasn't been labeled // yet if ( nbhIdx >= 0 && nbh [ nbhIdx ] && nbhlabels [ nbhIdx ] == 0 ) { // then label it nbhlabels [ nbhIdx ] = curlabel ; // and record that it has been labeled, but needs to recursed // we only do this if V doesn't have a value yet if ( nbhv [ nbhIdx ] == 0 ) nbhv [ nbhIdx ] = 1 ; } } } static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * labelNeighboursFunc )( int * , int * , int * , int , int ) ) { // create and init V struct int nbhV [ 27 ]; memset ( nbhV , 0 , 27 * sizeof ( int )); int curlabel = 1 , assignedlabel = 0 ; for ( int i = 0 ; i < 27 ; i ++ ) { // is there a voxel at this position, and has it not been labeled yet? if ( nbh [ i ] && nbhLabels [ i ] == 0 ) { // ON voxel not labeled yet nbhLabels [ i ] = curlabel ; // this is to keep track of how many labels we've actually USED assignedlabel = curlabel ; // mark it as being labeled nbhV [ i ] = 1 ; // now recurse through n26v finding ALL voxels of curlabel // we continue doing this until there are no 1s, i.e. only // 2s (neighbours examined) and 0s (no connected labels) int onesFound ; do { onesFound = 0 ; for ( int j = 0 ; j < 27 ; j ++ ) { if ( nbhV [ j ] == 1 ) { onesFound = 1 ; // this will label 6-neighbours and also flag the fact // that they're labeled by setting a '1' in n26v // neighbours that are already 2 will be left alone labelNeighboursFunc ( nbh , nbhLabels , nbhV , curlabel , j ); // now all neighbours of voxel j have also been labeled nbhV [ j ] = 2 ; } } // for (int j = 0 ... } while ( onesFound ); // if we find the next unlabeled thing, it has to be a new // component by definition curlabel ++ ; } // if (n26nbh[i] && n26labels[i] == 0) ... } // for (int i = 0; i < 27 ... return assignedlabel ; } // you could also use epsilon from the levelset function #define TPGAC_EPSILON 1e-5; template < class TInputImage , class TFeatureImage , class TOutputType > typename TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType >:: ValueType TPGACLevelSetImageFilter < TInputImage , TFeatureImage , TOutputType > :: CalculateUpdateValue ( const IndexType & idx , const TimeStepType & dt , const ValueType & value , const ValueType & change ) { // * calculate new value // * if new value has the same sign as current value, make the // change // * ELSE: // * extract 3x3x3 neighbourhood of the current voxel // * calculate N^2_6(x,X) and N^1_26(x,X') // * count connected components (bail if more than 1) // * if both 1, then x is simple point, allow change // * if not (or bailed) x is not simple point // * newValue = epsilon * sign(value) (epsilon small and positive) ValueType temp_value = value + dt * change ; // sign is the same, we can return what we have if ( temp_value * value >= 0 ) { return temp_value ; } // create a 3x3x3 nbh iterator over the output image Size < 3 > radius = { 1 , 1 , 1 }; NeighborhoodIterator < OutputImageType > nbhIterator ( radius , this -> GetOutput (), this -> GetOutput () -> GetRequestedRegion ()); // move the 3x3x3 nbh iterator over the current voxel nbhIterator . SetLocation ( idx ); // offset of centre pixel //#define c 13 // transfer nbh to our interior/exterior nbh int ieNbh [ 27 ]; for ( int i = 0 ; i < 27 ; i ++ ) { if ( nbhIterator . GetPixel ( i ) >= 0 ) { // interior / inside / foreground ieNbh [ i ] = 1 ; } else { // exterior / outside / background ieNbh [ i ] = 0 ; } } // N^2_6 == n26 // N^1_26 == n126 // now calculate N^2_6(interior) - we do this as straight-forward as // possible for speed reasons // first allocate and clear the nbh array int n26nbh [ 27 ]; memset ( n26nbh , 0 , 27 * sizeof ( int )); // if (ieNbh[4]) // { // n26nbh[4] = 1; // if (ieNbh[1]) n26nbh[1] = 1; // if (ieNbh[3]) n26nbh[3] = 1; // if (ieNbh[5]) n26nbh[5] = 1; // if (ieNbh[7]) n26nbh[7] = 1; // } // then check the 6-neighbours of 4, i.e. 1, 3, 5, 7, but NOT the // center voxel itself... that's explicitly excluded fillLocal6Neighbours ( ieNbh , n26nbh , 4 , 1 , 3 , 5 , 7 ); fillLocal6Neighbours ( ieNbh , n26nbh , 10 , 1 , 9 , 11 , 19 ); fillLocal6Neighbours ( ieNbh , n26nbh , 12 , 3 , 9 , 15 , 21 ); fillLocal6Neighbours ( ieNbh , n26nbh , 14 , 5 , 11 , 17 , 23 ); fillLocal6Neighbours ( ieNbh , n26nbh , 16 , 7 , 15 , 17 , 25 ); fillLocal6Neighbours ( ieNbh , n26nbh , 22 , 19 , 21 , 23 , 25 ); // we should have a complete n^2_6(x,X) now... // now determine number of connected components using // fast method described in borgefors1997 int n26labels [ 27 ]; memset ( n26labels , 0 , 27 * sizeof ( int )); int ncc6 = connectedComponents ( n26nbh , n26labels , label6Neighbours ); if ( ncc6 != 1 ) { // already T6(x,X) != 1, so we bail with epsilon * sign of old // value... this saves us from the 26-neighbourhood background check if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } int n126nbh [ 27 ]; memset ( n126nbh , 0 , 27 * sizeof ( int )); // we just invert ieNbh, because we're going to check the background for ( int i = 0 ; i < 27 ; i ++ ) { n126nbh [ i ] = ! ieNbh [ i ]; } // the centre voxel is NEVER used n126nbh [ 13 ] = 0 ; int n126labels [ 27 ]; memset ( n126labels , 0 , 27 * sizeof ( int )); int ncc26 = connectedComponents ( n126nbh , n126labels , label26Neighbours ); if ( ncc26 != 1 ) { // T26(x,X') != 1, so we bail with epsilon * sign of old // value... if ( value < 0 ) { return -1 * TPGAC_EPSILON ; } else { return TPGAC_EPSILON ; } } // this means the voxel that is to be added is simple... we can just // return the new value return temp_value ; } } // end namespace itk //#if ITK_MANUAL_INSTANTIATION //#include \"itkTPGACLevelSetImageFilter.txx\" //#endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html","text":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h Namespaces Name itk Classes Name class itk::ThinPlateSplineKernelTransform2 Source code /*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#libsalignmenttransformsitkthinplatesplinekerneltransform2h","text":"","title":"Libs/Alignment/Transforms/itkThinPlateSplineKernelTransform2.h"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#namespaces","text":"Name itk","title":"Namespaces"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#classes","text":"Name class itk::ThinPlateSplineKernelTransform2","title":"Classes"},{"location":"api/Files/itkThinPlateSplineKernelTransform2_8h.html#source-code","text":"/*========================================================================= * * Copyright UMC Utrecht and contributors * * Licensed under the Apache License, Version 2.0 (the \"License\"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \"AS IS\" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ /*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkThinPlateSplineKernelTransform2.h,v $ Language: C++ Date: $Date: 2006-11-28 14:22:18 $ Version: $Revision: 1.1 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkThinPlateSplineKernelTransform2_h #define __itkThinPlateSplineKernelTransform2_h #include \"itkKernelTransform2.h\" namespace itk { template < class TScalarType , // Data type for scalars (float or double) unsigned int NDimensions = 3 > // Number of dimensions class ThinPlateSplineKernelTransform2 : public KernelTransform2 < TScalarType , NDimensions > { public : typedef ThinPlateSplineKernelTransform2 Self ; typedef KernelTransform2 < TScalarType , NDimensions > Superclass ; typedef SmartPointer < Self > Pointer ; typedef SmartPointer < const Self > ConstPointer ; itkNewMacro ( Self ); itkTypeMacro ( ThinPlateSplineKernelTransform2 , KernelTransform2 ); typedef typename Superclass :: ScalarType ScalarType ; typedef typename Superclass :: ParametersType ParametersType ; typedef typename Superclass :: JacobianType JacobianType ; itkStaticConstMacro ( SpaceDimension , unsigned int , Superclass :: SpaceDimension ); typedef typename Superclass :: InputPointType InputPointType ; typedef typename Superclass :: OutputPointType OutputPointType ; typedef typename Superclass :: InputVectorType InputVectorType ; typedef typename Superclass :: OutputVectorType OutputVectorType ; typedef typename Superclass :: InputCovariantVectorType InputCovariantVectorType ; typedef typename Superclass :: OutputCovariantVectorType OutputCovariantVectorType ; typedef typename Superclass :: PointsIterator PointsIterator ; void SetSigma ( double sigma ){}; // this is only to match the compact supported class protected : ThinPlateSplineKernelTransform2 () { this -> m_FastComputationPossible = true ; } virtual ~ ThinPlateSplineKernelTransform2 () {} typedef typename Superclass :: GMatrixType GMatrixType ; void ComputeG ( const InputVectorType & x , GMatrixType & GMatrix ) const ; virtual void ComputeDeformationContribution ( const InputPointType & inputPoint , OutputPointType & result ) const ; private : ThinPlateSplineKernelTransform2 ( const Self & ); // purposely not implemented void operator = ( const Self & ); // purposely not implemented }; } // namespace itk #include \"itkThinPlateSplineKernelTransform2.cpp\" #endif // __itkThinPlateSplineKernelTransform2_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/math3d_8h.html","text":"Libs/Mesh/PreviewMeshQC/math3d.h Classes Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR Types Name typedef unsigned char uchar Functions Name quatd operator* (const double a, const quatd & q) Types Documentation typedef uchar typedef unsigned char uchar ; Functions Documentation function operator* inline quatd operator * ( const double a , const quatd & q ) Source code #pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#libsmeshpreviewmeshqcmath3dh","text":"","title":"Libs/Mesh/PreviewMeshQC/math3d.h"},{"location":"api/Files/math3d_8h.html#classes","text":"Name class vec2d class vec3d class vec6d class mat3d class matrix class quatd class GLCOLOR","title":"Classes"},{"location":"api/Files/math3d_8h.html#types","text":"Name typedef unsigned char uchar","title":"Types"},{"location":"api/Files/math3d_8h.html#functions","text":"Name quatd operator* (const double a, const quatd & q)","title":"Functions"},{"location":"api/Files/math3d_8h.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Files/math3d_8h.html#typedef-uchar","text":"typedef unsigned char uchar ;","title":"typedef uchar"},{"location":"api/Files/math3d_8h.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Files/math3d_8h.html#function-operator","text":"inline quatd operator * ( const double a , const quatd & q )","title":"function operator*"},{"location":"api/Files/math3d_8h.html#source-code","text":"#pragma once #include #include #include using namespace std ; //----------------------------------------------------------------------------- // class vec2d defines a 2D vector class vec2d { public : vec2d () { x = y = 0.0 ; } vec2d ( double X , double Y ) { x = X ; y = Y ; } vec2d operator - () { return vec2d ( - x , - y ); } vec2d operator - ( const vec2d & r ) { return vec2d ( x - r . x , y - r . y ); } vec2d operator + ( const vec2d & r ) { return vec2d ( x + r . x , y + r . y ); } vec2d operator * ( double g ) { return vec2d ( x * g , y * g ); } double operator * ( const vec2d & r ) { return ( x * r . x + y * r . y ); } double norm () { return sqrt ( x * x + y * y ); } double unit () { double R = sqrt ( x * x + y * y ); if ( R != 0 ) { x /= R ; y /= R ; }; return R ; } bool operator == ( const vec2d & r ) const { return ( x == r . x ) && ( y == r . y ); } public : double x , y ; }; //----------------------------------------------------------------------------- // class vec3d defines a 3D vector // class vec3d { public : vec3d () { x = y = z = 0 ; } vec3d ( double rx , double ry , double rz ) { x = rx ; y = ry ; z = rz ; } vec3d ( const vec2d & r ) { x = r . x ; y = r . y ; z = 0 ; } vec3d operator + ( const vec3d & v ) const { return vec3d ( x + v . x , y + v . y , z + v . z ); } vec3d operator - ( const vec3d & v ) const { return vec3d ( x - v . x , y - v . y , z - v . z ); } vec3d operator ^ ( const vec3d & v ) const { return vec3d ( y * v . z - z * v . y , z * v . x - x * v . z , x * v . y - y * v . x ); } double operator * ( const vec3d & v ) const { return ( x * v . x + y * v . y + z * v . z ); } vec3d operator * ( const double g ) const { return vec3d ( x * g , y * g , z * g ); } vec3d operator / ( const double g ) const { return vec3d ( x / g , y / g , z / g ); } const vec3d & operator += ( const vec3d & v ) { x += v . x ; y += v . y ; z += v . z ; return ( * this ); } const vec3d & operator -= ( const vec3d & v ) { x -= v . x ; y -= v . y ; z -= v . z ; return ( * this ); } const vec3d & operator /= ( const double f ) { x /= f ; y /= f ; z /= f ; return ( * this ); } const vec3d & operator /= ( const int n ) { x /= n ; y /= n ; z /= n ; return ( * this ); } const vec3d & operator *= ( const double f ) { x *= f ; y *= f ; z *= f ; return ( * this ); } vec3d operator - () const { return vec3d ( - x , - y , - z ); } double Length () const { return ( double ) sqrt ( x * x + y * y + z * z ); } double SqrLength () const { return x * x + y * y + z * z ; } vec3d & Normalize () { double L = Length (); if ( L != 0 ) { x /= L ; y /= L ; z /= L ; } return ( * this ); } public : double x , y , z ; }; // vec6d class vec6d { public : vec6d () { x = y = z = xy = yz = xz = 0 ; } public : double x , y , z ; double xy , yz , xz ; }; // mat3d class mat3d { public : mat3d () { zero (); } mat3d ( double a00 , double a01 , double a02 , double a10 , double a11 , double a12 , double a20 , double a21 , double a22 ); double * operator [] ( int i ) { return m_data [ i ]; } double & operator () ( int i , int j ) { return m_data [ i ][ j ]; } mat3d operator * ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } return a ; } mat3d & operator *= ( mat3d & m ) { mat3d a ; int k ; for ( k = 0 ; k < 3 ; k ++ ) { a [ 0 ][ 0 ] += m_data [ 0 ][ k ] * m [ k ][ 0 ]; a [ 0 ][ 1 ] += m_data [ 0 ][ k ] * m [ k ][ 1 ]; a [ 0 ][ 2 ] += m_data [ 0 ][ k ] * m [ k ][ 2 ]; a [ 1 ][ 0 ] += m_data [ 1 ][ k ] * m [ k ][ 0 ]; a [ 1 ][ 1 ] += m_data [ 1 ][ k ] * m [ k ][ 1 ]; a [ 1 ][ 2 ] += m_data [ 1 ][ k ] * m [ k ][ 2 ]; a [ 2 ][ 0 ] += m_data [ 2 ][ k ] * m [ k ][ 0 ]; a [ 2 ][ 1 ] += m_data [ 2 ][ k ] * m [ k ][ 1 ]; a [ 2 ][ 2 ] += m_data [ 2 ][ k ] * m [ k ][ 2 ]; } m_data [ 0 ][ 0 ] = a . m_data [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] = a . m_data [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] = a . m_data [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] = a . m_data [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] = a . m_data [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] = a . m_data [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] = a . m_data [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] = a . m_data [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] = a . m_data [ 2 ][ 2 ]; return ( * this ); } mat3d & operator += ( mat3d & m ) { m_data [ 0 ][ 0 ] += m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] += m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] += m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] += m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] += m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] += m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] += m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] += m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] += m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator -= ( mat3d & m ) { m_data [ 0 ][ 0 ] -= m [ 0 ][ 0 ]; m_data [ 0 ][ 1 ] -= m [ 0 ][ 1 ]; m_data [ 0 ][ 2 ] -= m [ 0 ][ 2 ]; m_data [ 1 ][ 0 ] -= m [ 1 ][ 0 ]; m_data [ 1 ][ 1 ] -= m [ 1 ][ 1 ]; m_data [ 1 ][ 2 ] -= m [ 1 ][ 2 ]; m_data [ 2 ][ 0 ] -= m [ 2 ][ 0 ]; m_data [ 2 ][ 1 ] -= m [ 2 ][ 1 ]; m_data [ 2 ][ 2 ] -= m [ 2 ][ 2 ]; return ( * this ); } mat3d & operator /= ( const double f ) { m_data [ 0 ][ 0 ] /= f ; m_data [ 0 ][ 1 ] /= f ; m_data [ 0 ][ 2 ] /= f ; m_data [ 1 ][ 0 ] /= f ; m_data [ 1 ][ 1 ] /= f ; m_data [ 1 ][ 2 ] /= f ; m_data [ 2 ][ 0 ] /= f ; m_data [ 2 ][ 1 ] /= f ; m_data [ 2 ][ 2 ] /= f ; return ( * this ); } vec3d operator * ( vec3d b ) { vec3d r ; r . x = m_data [ 0 ][ 0 ] * b . x + m_data [ 0 ][ 1 ] * b . y + m_data [ 0 ][ 2 ] * b . z ; r . y = m_data [ 1 ][ 0 ] * b . x + m_data [ 1 ][ 1 ] * b . y + m_data [ 1 ][ 2 ] * b . z ; r . z = m_data [ 2 ][ 0 ] * b . x + m_data [ 2 ][ 1 ] * b . y + m_data [ 2 ][ 2 ] * b . z ; return r ; } double det () const { double det = 0 ; det += m_data [ 0 ][ 0 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 2 ]; det += m_data [ 0 ][ 1 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 0 ]; det += m_data [ 0 ][ 2 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 1 ]; det -= m_data [ 0 ][ 2 ] * m_data [ 1 ][ 1 ] * m_data [ 2 ][ 0 ]; det -= m_data [ 0 ][ 1 ] * m_data [ 1 ][ 0 ] * m_data [ 2 ][ 2 ]; det -= m_data [ 0 ][ 0 ] * m_data [ 1 ][ 2 ] * m_data [ 2 ][ 1 ]; return det ; } double Invert (); mat3d inverse () const ; void zero () { m_data [ 0 ][ 0 ] = m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = m_data [ 2 ][ 2 ] = 0 ; } void unit () { m_data [ 0 ][ 0 ] = m_data [ 1 ][ 1 ] = m_data [ 2 ][ 2 ] = 1 ; m_data [ 0 ][ 1 ] = m_data [ 0 ][ 2 ] = m_data [ 1 ][ 2 ] = 0 ; m_data [ 1 ][ 0 ] = m_data [ 2 ][ 0 ] = m_data [ 2 ][ 1 ] = 0 ; } mat3d transpose (); protected : double m_data [ 3 ][ 3 ]; }; // matrix class matrix { public : matrix ( int r , int c ); ~ matrix () { delete [] d ; } void zero (); double * operator [] ( int i ) { return d + i * m_nc ; } double & operator () ( int i , int j ) { return d [ i * m_nc + j ]; } bool solve ( vector < double >& x , vector < double >& b ); bool lsq_solve ( vector < double >& x , vector < double >& b ); bool eigen_vectors ( matrix & Eigen , vector < double >& eigen_values ); int Rows () { return m_nr ; } void mult_transpose ( vector < double >& x , vector < double >& y ); void mult_transpose_self ( matrix & AAt ); private : double * d ; int m_nr , m_nc ; int m_ne ; }; // quatd class quatd { public : // constructors quatd () { x = y = z = 0 ; w = 1 ; } quatd ( const double angle , vec3d v ) { w = ( double ) cos ( angle * 0.5 ); double sina = ( double ) sin ( angle * 0.5 ); v . Normalize (); x = v . x * sina ; y = v . y * sina ; z = v . z * sina ; } quatd ( vec3d v1 , vec3d v2 ) { vec3d n = v1 ^ v2 ; n . Normalize (); double d = v1 * v2 ; double sina = ( double ) sqrt (( 1.0 - d ) * 0.5 ); double cosa = ( double ) sqrt (( 1.0 + d ) * 0.5 ); w = cosa ; x = n . x * sina ; y = n . y * sina ; z = n . z * sina ; } quatd ( const double qx , const double qy , const double qz , const double qw = 1.0 ) { w = qw ; x = qx ; y = qy ; z = qz ; } bool operator != ( const quatd & q ) { return (( x != q . x ) || ( y != q . y ) || ( z != q . z ) || ( w != q . w )); } quatd operator - () { return quatd ( - x , - y , - z , - w ); } // addition and substraction quatd operator + ( const quatd & q ) const { return quatd ( x + q . x , y + q . y , z + q . z , w + q . w ); } quatd operator - ( const quatd & q ) const { return quatd ( x - q . x , y - q . y , z - q . z , w - q . w ); } quatd & operator += ( const quatd & q ) { x += q . x ; y += q . y ; z += q . z ; w += q . w ; return * this ; } quatd & operator -= ( const quatd & q ) { x -= q . x ; y -= q . y ; z -= q . z ; w -= q . w ; return * this ; } // multiplication quatd operator * ( const quatd & q ) const { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; return quatd ( qx , qy , qz , qw ); } quatd & operator *= ( const quatd & q ) { double qw = w * q . w - x * q . x - y * q . y - z * q . z ; double qx = w * q . x + x * q . w + y * q . z - z * q . y ; double qy = w * q . y + y * q . w + z * q . x - x * q . z ; double qz = w * q . z + z * q . w + x * q . y - y * q . x ; x = qx ; y = qy ; z = qz ; w = qw ; return * this ; } quatd operator * ( const double a ) const { return quatd ( x * a , y * a , z * a , w * a ); } // division quatd operator / ( const double a ) const { return quatd ( x / a , y / a , z / a , w / a ); } quatd & operator /= ( const double a ) { x /= a ; y /= a ; z /= a ; w /= a ; return * this ; } // Special ops quatd Conjugate () const { return quatd ( - x , - y , - z , w ); } double Norm () const { return w * w + x * x + y * y + z * z ; } void MakeUnit () { double N = ( double ) sqrt ( w * w + x * x + y * y + z * z ); if ( N != 0 ) { x /= N ; y /= N ; z /= N ; w /= N ; } else w = 1.f ; } quatd Inverse () const { double N = w * w + x * x + y * y + z * z ; return quatd ( - x / N , - y / N , - z / N , w / N ); } double DotProduct ( const quatd & q ) const { return w * q . w + x * q . x + y * q . y + z * q . z ; } vec3d GetVector () const { return vec3d ( x , y , z ). Normalize (); } double GetAngle () const { return ( double )( acos ( w ) * 2.0 ); } /* quatd& MultiplyAngle(double fa) { double angle = fa*acos(w)*2.0; w = cos(angle * 0.5); double sina = sin(angle * 0.5); x *= sina; y *= sina; z *= sina; } */ // use only when *this is unit vector void RotateVector ( vec3d & v ) const { if (( w == 0 ) || (( x == 0 ) && ( y == 0 ) && ( z == 0 ))) return ; // v*q^-1 double qw = v . x * x + v . y * y + v . z * z ; double qx = v . x * w - v . y * z + v . z * y ; double qy = v . y * w - v . z * x + v . x * z ; double qz = v . z * w - v . x * y + v . y * x ; // q* (v* q^-1) v . x = ( double ) ( w * qx + x * qw + y * qz - z * qy ); v . y = ( double ) ( w * qy + y * qw + z * qx - x * qz ); v . z = ( double ) ( w * qz + z * qw + x * qy - y * qx ); } // use only when *this is unit vector vec3d operator * ( const vec3d & r ) { vec3d n = r ; // v*q^-1 double qw = n . x * x + n . y * y + n . z * z ; double qx = n . x * w - n . y * z + n . z * y ; double qy = n . y * w - n . z * x + n . x * z ; double qz = n . z * w - n . x * y + n . y * x ; // q* (v* q^-1) n . x = ( w * qx + x * qw + y * qz - z * qy ); n . y = ( w * qy + y * qw + z * qx - x * qz ); n . z = ( w * qz + z * qw + x * qy - y * qx ); return n ; } mat3d operator * ( mat3d m ) { mat3d a ; double qw , qx , qy , qz ; for ( int i = 0 ; i < 3 ; ++ i ) { // v*q^-1 qw = m [ 0 ][ i ] * x + m [ 1 ][ i ] * y + m [ 2 ][ i ] * z ; qx = m [ 0 ][ i ] * w - m [ 1 ][ i ] * z + m [ 2 ][ i ] * y ; qy = m [ 1 ][ i ] * w - m [ 2 ][ i ] * x + m [ 0 ][ i ] * z ; qz = m [ 2 ][ i ] * w - m [ 0 ][ i ] * y + m [ 1 ][ i ] * x ; // q* (v* q^-1) a [ 0 ][ i ] = ( w * qx + x * qw + y * qz - z * qy ); a [ 1 ][ i ] = ( w * qy + y * qw + z * qx - x * qz ); a [ 2 ][ i ] = ( w * qz + z * qw + x * qy - y * qx ); } return a ; } void RotateVectorP ( double * v , double * r ) const { static double fx , fy , fz , fw ; static double qw , qx , qy , qz ; fx = ( double ) x ; fy = ( double ) y ; fz = ( double ) z ; fw = ( double ) w ; qw = v [ 0 ] * fx + v [ 1 ] * fy + v [ 2 ] * fz ; qx = v [ 0 ] * fw - v [ 1 ] * fz + v [ 2 ] * fy ; qy = v [ 1 ] * fw - v [ 2 ] * fx + v [ 0 ] * fz ; qz = v [ 2 ] * fw - v [ 0 ] * fy + v [ 1 ] * fx ; r [ 0 ] = ( double ) ( fw * qx + fx * qw + fy * qz - fz * qy ); r [ 1 ] = ( double ) ( fw * qy + fy * qw + fz * qx - fx * qz ); r [ 2 ] = ( double ) ( fw * qz + fz * qw + fx * qy - fy * qx ); } static double dot ( quatd & q1 , quatd & q2 ) { return q1 . x * q2 . x + q1 . y * q2 . y + q1 . z * q2 . z + q1 . w * q2 . w ; } static quatd lerp ( quatd & q1 , quatd & q2 , double t ) { quatd q = ( q1 * ( 1 - t ) + q2 * t ); q . MakeUnit (); return q ; } static quatd slerp ( quatd & q1 , quatd & q2 , double t ) ; public : double x , y , z ; double w ; }; inline quatd operator * ( const double a , const quatd & q ) { return q * a ; } typedef unsigned char uchar ; class GLCOLOR { public : uchar a , b , g , r ; public : GLCOLOR () : a ( 255 ), b ( 0 ), g ( 0 ), r ( 0 ){} GLCOLOR ( uchar ur , uchar ug , uchar ub , uchar ua = 255 ) { r = ur ; g = ug ; b = ub ; a = ua ; } GLCOLOR operator * ( double f ) { return GLCOLOR (( uchar ) ( r * f ), ( uchar ) ( g * f ), ( uchar ) ( b * f )); } GLCOLOR operator + ( GLCOLOR & c ) { return GLCOLOR ( r + c . r , g + c . g , b + c . b ); } }; Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/meshFIM_8h.html","text":"Libs/Mesh/meshFIM.h Classes Name class meshFIM Defines Name _EPS ONE CURVATURE GENERATE_GEO_FILES Macros Documentation define _EPS #define _EPS 1e-06 define ONE #define ONE 1 define CURVATURE #define CURVATURE 2 define GENERATE_GEO_FILES #define GENERATE_GEO_FILES 1 Source code #ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#libsmeshmeshfimh","text":"","title":"Libs/Mesh/meshFIM.h"},{"location":"api/Files/meshFIM_8h.html#classes","text":"Name class meshFIM","title":"Classes"},{"location":"api/Files/meshFIM_8h.html#defines","text":"Name _EPS ONE CURVATURE GENERATE_GEO_FILES","title":"Defines"},{"location":"api/Files/meshFIM_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/meshFIM_8h.html#define-_eps","text":"#define _EPS 1e-06","title":"define _EPS"},{"location":"api/Files/meshFIM_8h.html#define-one","text":"#define ONE 1","title":"define ONE"},{"location":"api/Files/meshFIM_8h.html#define-curvature","text":"#define CURVATURE 2","title":"define CURVATURE"},{"location":"api/Files/meshFIM_8h.html#define-generate_geo_files","text":"#define GENERATE_GEO_FILES 1","title":"define GENERATE_GEO_FILES"},{"location":"api/Files/meshFIM_8h.html#source-code","text":"#ifndef MESHFIM_H #define MESHFIM_H #include \"TriMesh.h\" #include \"TriMesh_algo.h\" #include \"KDtree.h\" #include \"Color.h\" //#include \"itkImageToImageFilter.h\" //#include \"itkLevelSet.h\" //#include \"itkIndex.h\" //#include \"vnl/vnl_math.h\" //#include \"itkDiffusionTensor3D.h\" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #ifndef _EPS #define _EPS 1e-06 #endif #define ONE 1 #define CURVATURE 2 // SHIREEN #define GENERATE_GEO_FILES 1 // now disable till we incorporate the geodesic repulsion // end SHIREEN using trimesh :: TriMesh ; using trimesh :: vec3 ; using trimesh :: point ; using trimesh :: KDtree ; using trimesh :: Color ; class meshFIM { public : typedef int VoxelIndexType ; typedef int index ; enum LabelType { MaskPoint , SeedPoint , ActivePoint , FarPoint , StopPoint , AlivePoint , ToBeAlivePoint }; TriMesh * m_meshPtr ; int NumComputation ; float imageOrigin [ 3 ]; float imageSpacing [ 3 ]; int imageSize [ 3 ]; int imageIndex [ 3 ]; std :: vector < Color > colors ; void ComputeDistanceToLandmarksGivenTriangleInfo ( TriMesh * mesh , const char * infilename , const char * outfilename ); void computeFIM ( TriMesh * mesh , const char * vertT_filename ); void GetFeatureValues ( point x , std :: vector < float > & vals ); void ReadFaceIndexMap ( const char * infilename ); void ReadFeatureFromFile ( const char * infilename ); void ReadFeatureGradientFromFile ( const char * infilename ); point GetFeatureDerivative ( point p , int fIndex ); void need_abs_curvatures (); void need_edge_lengths (); void need_speed (); void need_oneringfaces (); void need_kdtree (); void SetMesh ( TriMesh * mesh ); void SetStopDistance ( float d ) { m_StopDistance = d ; } void setSpeedType ( int st ) { speedType = st ; if ( st != ONE && st != CURVATURE ) { std :: cout << \"Impossible SpeedType set\" << std :: endl ; throw ( 1 ); } } meshFIM () { m_meshPtr = NULL ; }; ~ meshFIM () {}; protected : private : std :: list < index > m_ActivePoints ; std :: vector < index > m_SeedPoints ; std :: vector < LabelType > m_Label ; float m_StopDistance ; TriMesh * GetOutputMesh () { return m_meshPtr ; } void MeshReader ( char * filename ); bool IsNonObtuse ( int v , TriMesh :: Face f ); void SplitFace ( std :: vector < TriMesh :: Face > & acFaces , int v , TriMesh :: Face cf , int nfAdj ); std :: vector < TriMesh :: Face > GetOneRing ( int v ); float Upwind ( index currentVert , index vet ); void InitializeAttributes ( int currentVert , std :: vector < int > seeds ); void CleanupAttributes (); float LocalSolver ( index C , TriMesh :: Face triangle , index currentVert ); void SetSeedPoint ( std :: vector < index > SeedPoints ) { m_SeedPoints = SeedPoints ; } int getSpeedType () { return speedType ; } float GetStopDistance () { return m_StopDistance ; } void InitializeLabels (); void InitializeActivePoints (); float PointLength ( point v ); void GenerateReducedData (); void loadGeodesicFile ( TriMesh * mesh , const char * geoFilename ); void computeCoordXFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordYFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCoordZFiles ( TriMesh * mesh , const char * vertT_filename ); void computeCurvFiles ( TriMesh * mesh , const char * vertT_filename ); void ComputeDistanceToCurve ( TriMesh * mesh , std :: vector < point > curvePoints , const char * outfilename ); void physicalPointToXYZ ( point x , VoxelIndexType * imageX , float imageOrigin [ 3 ], float imageSpacing [ 3 ]); VoxelIndexType indexToLinearIndex ( VoxelIndexType * imageX , int imageSize [ 3 ]); VoxelIndexType physicalPointToLinearIndex ( point x ); VoxelIndexType physicalPointToLinearIndex ( point x , float imageOrigin [ 3 ], float imageSpacing [ 3 ], int imageSize [ 3 ]); double pointTriangleDistance ( point P , TriMesh :: Face face , point & PP ); vec3 ComputeBarycentricCoordinates ( point p , TriMesh :: Face f ); void need_maxedgelength (); int FindNearestVertex ( point pt ); int GetTriangleInfoForPoint ( point x , TriMesh :: Face & triangleX , float & alphaX , float & betaX , float & gammaX ); //Praful - for Riddhish project //float GetVirtualSource(vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, vnl_vector< float > &x0); //float ComputeThreePointApproximatedGeodesic(vnl_vector x, vnl_vector baryCoord, vnl_matrix X, vnl_vector ds, char *method); float ComputeCanonicalForm ( point s , vnl_vector < float > & x , vnl_matrix < float > & X ); float GetGeodesicDistance ( int v1 , int v2 ); //float GetBronsteinGeodesicDistance(TriMesh::Face Sa, TriMesh::Face Sb, vnl_vector baryCoord_a, vnl_vector baryCoord_b, char *method); // SHIREEN - compute distance to landmarks based on geodesic approximation //float GetBronsteinGeodesicDistance(point a, point b, char *method); void ComputeDistanceToLandmark ( TriMesh * mesh , point landmark , bool apply_log , const char * outfilename ); void UpdateGeodesicMapWithDistancesFromVertices ( std :: vector < int > vertexIdlist ); // end SHIREEN // SHIREEN - computing geo distance on the fly for fuzzy geodesics int GetVertexInfoForPoint ( point x ); //std::vector ComputeDistanceToCurve(TriMesh *mesh, std::vector< point > curvePoints); void WriteFeaFile ( TriMesh * mesh , char * outfilename ); void WriteFeaFile ( std :: vector < float > fea , char * outfilename ); // end SHIREEN point ComputeFeatureDerivative ( int v , int nFeature ); int speedType ; // maps face index to speedInv std :: vector < float > speedInvVector ; // maps vertex index to abs_curv std :: vector < float > abs_curv ; // maps face index to vec3 of edge lengths with edges in this order: {01, 12, 20} std :: vector < vec3 > edgeLengthsVector ; // maps vertex index to vertex index to distance? std :: vector < std :: map < unsigned int , float > > geodesicMap ; // maps vertex index to something to do with the geodesic computation std :: vector < float > geodesic ; // maps something to something std :: map < VoxelIndexType , std :: vector < int > > faceIndexMap ; // Used for ComputeBaryCentricCoordinates when faceIndexMap is unavailable. KDtree * kd ; // Used for GetNearestVertex; double maxEdgeLength ; std :: vector < std :: vector < TriMesh :: Face > > vertOneringFaces ; std :: vector < std :: vector < float > > features ; std :: vector < std :: vector < point > > featureGradients ; }; #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/pybind__utils_8h.html","text":"Libs/Python/pybind_utils.h Namespaces Name shapeworks User usage reporting (telemetry) Source code #pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#libspythonpybind_utilsh","text":"","title":"Libs/Python/pybind_utils.h"},{"location":"api/Files/pybind__utils_8h.html#namespaces","text":"Name shapeworks User usage reporting (telemetry)","title":"Namespaces"},{"location":"api/Files/pybind__utils_8h.html#source-code","text":"#pragma once namespace shapeworks { void printNumpyArrayInfo ( const py :: array & np_array ) { // get input array info auto info = np_array . request (); /* struct buffer_info { void *ptr; py::ssize_t itemsize; std::string format; py::ssize_t ndim; std::vector shape; std::vector strides; }; */ std :: cout << \"buffer info: \\n \" << \" \\t info.ptr: \" << info . ptr << std :: endl << \"writeable: \" << np_array . writeable () << std :: endl << \"owns data: \" << np_array . owndata () << std :: endl << \" \\t info.itemsize: \" << info . itemsize << std :: endl << \" \\t info.format: \" << info . format << std :: endl << \" \\t info.ndim: \" << info . ndim << std :: endl ; std :: cout << \"shape ([z][y]x): \" ; for ( auto & n : info . shape ) { std :: cout << n << \" \" ; } std :: cout << \" \\n strides ([z][y]x): \" ; for ( auto & n : info . strides ) { std :: cout << n << \" \" ; } std :: cout << \" \\n size : \" ; std :: cout << np_array . size (); std :: cout << std :: endl ; } void verifyOrderAndPacking ( const py :: array & np_array ) { auto info = np_array . request (); // verify it's C order, not Fortran order auto c_order = pybind11 :: detail :: array_proxy ( np_array . ptr ()) -> flags & pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; if ( ! c_order ) { throw std :: invalid_argument ( \"array must be C_CONTIGUOUS; use numpy.transpose() to reorder\" ); } // verify data is densely packed by checking strides is same as shape std :: vector < py :: ssize_t > strides ( info . ndim , info . itemsize ); for ( int i = 0 ; i < info . ndim -1 ; i ++ ) { for ( int j = i + 1 ; j < info . ndim ; j ++ ) { strides [ i ] *= info . shape [ j ]; } } for ( int i = 0 ; i < info . ndim ; i ++ ) { if ( info . strides [ i ] != strides [ i ]) { throw std :: invalid_argument ( std :: string ( \"array not densely packed in \" ) + std :: to_string ( i ) + std :: string ( \"th dimension: expected \" ) + std :: to_string ( strides [ i ]) + std :: string ( \" strides, not \" ) + std :: to_string ( info . strides [ i ])); } } } void setOwnership ( py :: array & array , bool owns ) { std :: bitset < 32 > own_data_flag ( pybind11 :: detail :: npy_api :: NPY_ARRAY_OWNDATA_ ); if ( ! owns ) { int disown_data_flag = static_cast < int > ( ~ own_data_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags &= disown_data_flag ; } else { pybind11 :: detail :: array_proxy ( array . ptr ()) -> flags |= static_cast < int > ( own_data_flag . to_ulong ()); } if ( array . owndata () != owns ) { throw std :: runtime_error ( \"error modifying python array ownership\" ); } } Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) { //printNumpyArrayInfo(np_array); // get input array info auto info = np_array . request (); // verify it's 3d if ( info . ndim != 3 ) { throw std :: invalid_argument ( std :: string ( \"array must be 3d, but ndim = \" ) + std :: to_string ( info . ndim )); } // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // array must be dtype.float32 and own its data to transfer it to Image if ( info . format != py :: format_descriptor < Image :: PixelType >:: format ()) { // inform the user how to create correct type array rather than copy throw std :: invalid_argument ( \"array must be same dtype as Image; convert using `np.array(arr, dtype=np.float32)`\" ); } if ( ! np_array . owndata ()) { throw std :: invalid_argument ( \"error: numpy array does not own data (see `arr.flags()`) to be transferred to Image\" ); } // Pass ownership of the array to Image to prevent Python from // deallocating (the shapeworks Image will dealloate when it's time). setOwnership ( np_array , false ); // import data, passing ownership of memory to ensure there will be no leak using ImportType = itk :: ImportImageFilter < Image :: PixelType , 3 > ; auto importer = ImportType :: New (); ImportType :: SizeType size ; // i.e., Dims (remember numpy orders zyx) size [ 0 ] = np_array . shape ()[ 2 ]; size [ 1 ] = np_array . shape ()[ 1 ]; size [ 2 ] = np_array . shape ()[ 0 ]; assert ( size [ 0 ] * size [ 1 ] * size [ 2 ] == np_array . size ()); importer -> SetImportPointer ( static_cast < Image :: PixelType *> ( info . ptr ), size [ 0 ] * size [ 1 ] * size [ 2 ], true /*importer take_ownership*/ ); ImportType :: IndexType start ({ 0 , 0 , 0 }); // i.e., Coord ImportType :: RegionType region ; region . SetIndex ( start ); region . SetSize ( size ); importer -> SetRegion ( region ); importer -> Update (); return importer -> GetOutput (); } Array pyToArr ( py :: array & np_array , bool take_ownership = true ) { //printNumpyArrayInfo(np_array); // // Verify the data is of appropriate size, shape, type, and ownership. // // get input array info auto info = np_array . request (); // verify py::array (throws on error) verifyOrderAndPacking ( np_array ); // verify format if ( ! ( info . format == py :: format_descriptor < float >:: format () || info . format == py :: format_descriptor < double >:: format ())) { throw std :: invalid_argument ( std :: string ( \"numpy dtype \" ) + std :: string ( info . format ) + std :: string ( \" not yet accepted (currently only float32 and float64) (i.e., \" + py :: format_descriptor < float >:: format ()) + \" and \" + py :: format_descriptor < double >:: format () + \")\" ); } // verify dims (ex: 2d is an array of vectors, 1d is an array of scalars) if ( info . ndim < 1 || info . ndim > 2 ) { throw std :: invalid_argument ( std :: string ( \"array must be either 1d or 2d, but ndim = \" ) + std :: to_string ( info . ndim )); } // array must own its data to transfer it to Image // NOTE: it could be shared, but this avoids a potential dangling pointer if ( take_ownership && ! np_array . owndata ()) { throw std :: invalid_argument ( \"numpy array must own the data to be transferred to Mesh (maybe pass `arr.copy()`)\" ); } // // Create the vtkDataArray and pass the numpy data in. // // determine nvalues, ncomponents auto nvalues = info . shape [ 0 ]; auto ncomponents = info . ndim > 1 ? info . shape [ 1 ] : 1 ; // create vtkDataArray pointer, set number of components, allocate and pass data auto vtkarr = Array (); if ( info . format == py :: format_descriptor < float >:: format ()) { auto arr = vtkFloatArray :: New (); arr -> SetArray ( static_cast < float *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else if ( info . format == py :: format_descriptor < double >:: format ()) { auto arr = vtkDoubleArray :: New (); arr -> SetArray ( static_cast < double *> ( info . ptr ), nvalues * ncomponents , ! take_ownership /*0 passes ownership*/ ); vtkarr = arr ; } else { throw std :: invalid_argument ( \"numpy dtype not yet accepted (currently only float32 and float64)\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } vtkarr -> SetNumberOfComponents ( ncomponents ); // prevent Python from deallocating since vtk will do that when it's time if ( take_ownership ) { setOwnership ( np_array , false ); } return vtkarr ; } enum ArrayTransferOptions { COPY_ARRAY , // copies and (by definition) grants ownership SHARE_ARRAY , // does not copy or grant ownership MOVE_ARRAY // does not copy, grants ownership if possible }; py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) { const size_t elemsize = array -> GetElementComponentSize (); auto shape = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfTuples ()) }; if ( array -> GetNumberOfComponents () > 1 ) { shape . push_back ( static_cast < size_t > ( array -> GetNumberOfComponents ())); } auto strides = std :: vector < size_t > (); if ( array -> GetNumberOfComponents () > 1 ) { strides = std :: vector < size_t > { static_cast < size_t > ( array -> GetNumberOfComponents () * elemsize ), elemsize }; } else { strides = std :: vector < size_t > { elemsize }; } py :: dtype py_type ; if ( vtkDoubleArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < double > (); } else if ( vtkFloatArray :: SafeDownCast ( array )) { py_type = py :: dtype :: of < float > (); } else { throw std :: invalid_argument ( \"arrToPy passed currently unhandled array type\" ); // Other options: vtkUnsignedShortArray, vtkUnsignedLongLongArray, vtkUnsignedLongArray, vtkUnsignedIntArray, vtkUnsignedCharArray, vtkSignedCharArray, vtkShortArray, vtkLongLongArray, vtkLongArray, vtkIntArray, vtkIdTypeArray, vtkFloatArray, vtkDoubleArray, vtkCharArray, and vtkBitArray. } #if 0 std::cout << \"type of array: \" << typeid(array).name() << std::endl << \"X (num_components): \" << array->GetNumberOfComponents() << std::endl << \"Y (num_tuples): \" << array->GetNumberOfTuples() << std::endl << \"sizeof(element): \" << array->GetElementComponentSize() << std::endl << \"py_type: \" << py_type.kind() << std::endl << \"size: \" << py_type.itemsize() << std::endl; #endif py :: str dummyDataOwner ; py :: array img { py_type , shape , strides , array -> GetVoidPointer ( 0 ), ( xfer == COPY_ARRAY ? pybind11 :: handle () : dummyDataOwner ) }; if ( xfer == MOVE_ARRAY ) { if ( array -> GetReferenceCount () == 1 ) { array -> SetReferenceCount ( 2 ); // NOTE: tricks vtk into never deleting this array setOwnership ( img , true ); } else { // If array has other references, it will only be shared with Python. std :: cerr << \"NOTE: sharing array (unable to transfer ownership from C++)\" << std :: endl ; } } // set c-contiguous and not f-contiguous, not both (i.e., \"NPY_ARRAY_FORCECAST_\") std :: bitset < 32 > f_order_flag = pybind11 :: detail :: npy_api :: NPY_ARRAY_F_CONTIGUOUS_ ; f_order_flag = ~ f_order_flag ; int f_order_flag_int = static_cast < int > ( f_order_flag . to_ulong ()); pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags &= f_order_flag_int ; pybind11 :: detail :: array_proxy ( img . ptr ()) -> flags |= pybind11 :: detail :: npy_api :: NPY_ARRAY_C_CONTIGUOUS_ ; return img ; } } Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/resource_8h.html","text":"Studio/Resources/resource.h Defines Name IDI_ICON1 Macros Documentation define IDI_ICON1 #define IDI_ICON1 101 Source code //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#studioresourcesresourceh","text":"","title":"Studio/Resources/resource.h"},{"location":"api/Files/resource_8h.html#defines","text":"Name IDI_ICON1","title":"Defines"},{"location":"api/Files/resource_8h.html#macros-documentation","text":"","title":"Macros Documentation"},{"location":"api/Files/resource_8h.html#define-idi_icon1","text":"#define IDI_ICON1 101","title":"define IDI_ICON1"},{"location":"api/Files/resource_8h.html#source-code","text":"//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShapeWorksStudio.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/stdafx_8h.html","text":"Libs/Mesh/PreviewMeshQC/stdafx.h Source code // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#libsmeshpreviewmeshqcstdafxh","text":"","title":"Libs/Mesh/PreviewMeshQC/stdafx.h"},{"location":"api/Files/stdafx_8h.html#source-code","text":"// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include // TODO: reference additional headers your program requires here Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Files/vtkPolyDataToImageData_8h.html","text":"Libs/Analyze/vtkPolyDataToImageData.h Classes Name class vtkPolyDataToImageData Source code // This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#libsanalyzevtkpolydatatoimagedatah","text":"","title":"Libs/Analyze/vtkPolyDataToImageData.h"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#classes","text":"Name class vtkPolyDataToImageData","title":"Classes"},{"location":"api/Files/vtkPolyDataToImageData_8h.html#source-code","text":"// This filter takes a vtkPolyData input and produces a vtkImageData output. // It is intended to take a closed surface mesh and produce a binary rasterization. // // Options are: // // Border: optional border around object (useful for isosurfacing) // // Spacing: output image spacing // // SampleDistance: sample distance for point sampling along surface // if you get a blank/full image, try reducing this value // // InitialBallSize: dilate/erode ball size for morphological closing // if you get a blank/full image, try increasing this value // // FinalBallSize: dilate/erode ball size step at the end #ifndef __vtkPolyDataToImageData_h #define __vtkPolyDataToImageData_h #include \"vtkImageAlgorithm.h\" class vtkPolyDataToImageData : public vtkImageAlgorithm { public : vtkTypeMacro ( vtkPolyDataToImageData , vtkImageAlgorithm ); void PrintSelf ( ostream & os , vtkIndent indent ); static vtkPolyDataToImageData * New (); // Set the number of voxels bordering the object vtkSetMacro ( Border , unsigned int ); vtkGetMacro ( Border , unsigned int ); // Set the spacing of the produced image vtkSetMacro ( Spacing , double ); vtkGetMacro ( Spacing , double ); // Set the sample distance of the point sampler vtkSetMacro ( SampleDistance , double ); vtkGetMacro ( SampleDistance , double ); // Set the initial dilate/erode ball size for morphological closing vtkSetMacro ( InitialBallSize , unsigned int ); vtkGetMacro ( InitialBallSize , unsigned int ); // Set the final dilate/erode ball size for morphological closing vtkSetMacro ( FinalBallSize , unsigned int ); vtkGetMacro ( FinalBallSize , unsigned int ); virtual int FillInputPortInformation ( int port , vtkInformation * info ); protected : vtkPolyDataToImageData (); ~ vtkPolyDataToImageData () {} virtual int RequestInformation ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestData ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); virtual int RequestUpdateExtent ( vtkInformation * request , vtkInformationVector ** inputVector , vtkInformationVector * outputVector ); private : vtkPolyDataToImageData ( const vtkPolyDataToImageData & ); // Not implemented. void operator = ( const vtkPolyDataToImageData & ); // Not implemented. void GetOutputInfo ( vtkInformationVector ** inputVector , int dim [ 3 ], double origin [ 3 ], double spacing [ 3 ] ); unsigned int Border ; double Spacing ; double SampleDistance ; unsigned int InitialBallSize ; unsigned int FinalBallSize ; }; #endif // ifndef __vtkPolyDataToImageData_h Updated on 2023-10-25 at 15:40:28 +0000","title":"Source code"},{"location":"api/Modules/group__Group-Common.html","text":"Common Classes Classes Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-25 at 15:40:28 +0000","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#common-classes","text":"","title":"Common Classes"},{"location":"api/Modules/group__Group-Common.html#classes","text":"Name class shapeworks::Logging ShapeWorks Logging Library. Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Constraint.html","text":"Constraint Classes Updated on 2023-10-25 at 15:40:28 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Constraint.html#constraint-classes","text":"Updated on 2023-10-25 at 15:40:28 +0000","title":"Constraint Classes"},{"location":"api/Modules/group__Group-Image.html","text":"Image Classes Classes Name class shapeworks::Image Updated on 2023-10-25 at 15:40:28 +0000","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#image-classes","text":"","title":"Image Classes"},{"location":"api/Modules/group__Group-Image.html#classes","text":"Name class shapeworks::Image Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Modules/group__Group-Mesh.html","text":"Mesh Classes Classes Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-25 at 15:40:28 +0000","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#mesh-classes","text":"","title":"Mesh Classes"},{"location":"api/Modules/group__Group-Mesh.html#classes","text":"Name class shapeworks::Mesh class shapeworks::MeshUtils class shapeworks::MeshWarper Updated on 2023-10-25 at 15:40:28 +0000","title":"Classes"},{"location":"api/Modules/index_groups.html","text":"Modules group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-25 at 15:40:28 +0000","title":"Groups"},{"location":"api/Modules/index_groups.html#modules","text":"group Common Classes group Constraint Classes group Image Classes group Mesh Classes Updated on 2023-10-25 at 15:40:28 +0000","title":"Modules"},{"location":"api/Namespaces/index_namespaces.html","text":"Namespaces namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Namespaces"},{"location":"api/Namespaces/index_namespaces.html#namespaces","text":"namespace Ui namespace fmt namespace itk namespace Functor namespace shapeworks User usage reporting (telemetry) namespace mesh namespace particles namespace project namespace prefixes namespace types namespace std namespace utils Updated on 2023-10-25 at 15:40:28 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceUi.html","text":"Ui Updated on 2023-10-25 at 15:40:27 +0000","title":"Ui"},{"location":"api/Namespaces/namespaceUi.html#ui","text":"Updated on 2023-10-25 at 15:40:27 +0000","title":"Ui"},{"location":"api/Namespaces/namespacefmt.html","text":"fmt Classes Name struct fmt::formatter< QString > Updated on 2023-10-25 at 15:40:26 +0000","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#fmt","text":"","title":"fmt"},{"location":"api/Namespaces/namespacefmt.html#classes","text":"Name struct fmt::formatter< QString > Updated on 2023-10-25 at 15:40:26 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html","text":"itk Namespaces Name itk::Functor Classes Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter Functions Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc) Attributes Name int nbh6Table int nbh26Table Functions Documentation function fillLocal6Neighbours static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination. function label6Neighbours static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel. function label26Neighbours static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel. function connectedComponents static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc ) Attributes Documentation variable nbh6Table static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } }; variable nbh26Table static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-25 at 15:40:26 +0000","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#itk","text":"","title":"itk"},{"location":"api/Namespaces/namespaceitk.html#namespaces","text":"Name itk::Functor","title":"Namespaces"},{"location":"api/Namespaces/namespaceitk.html#classes","text":"Name class itk::AdvancedTransform Transform maps points, vectors and covariant vectors from an input space to an output space. class itk::BSplineInterpolateImageFunctionWithDoubleCoefficents class itk::CompactlySupportedRBFSparseKernelTransform class itk::KernelTransform2 class itk::MultiplyByConstantImageFilter Multiply input pixels by a constant. class itk::SparseKernelTransform class itk::ThinPlateSplineKernelTransform2 class itk::TPGACLevelSetImageFilter","title":"Classes"},{"location":"api/Namespaces/namespaceitk.html#functions","text":"Name void fillLocal6Neighbours (int * srcNbh, int * dstNbh, int centre, int i0, int i1, int i2, int i3) void label6Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) void label26Neighbours (int * nbh, int * nbhlabels, int * nbhv, int curlabel, int idx) int connectedComponents (int * nbh, int * nbhLabels, void( )(int , int , int , int, int) labelNeighboursFunc)","title":"Functions"},{"location":"api/Namespaces/namespaceitk.html#attributes","text":"Name int nbh6Table int nbh26Table","title":"Attributes"},{"location":"api/Namespaces/namespaceitk.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceitk.html#function-filllocal6neighbours","text":"static inline void fillLocal6Neighbours ( int * srcNbh , int * dstNbh , int centre , int i0 , int i1 , int i2 , int i3 ) Checks if the centre'th element of srcNbh is on. If it is, activate that element in dstNbh and also i0 to i3 if they are active in srcNbh. This is used during the recursive 6 connectivity determination.","title":"function fillLocal6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label6neighbours","text":"static void label6Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 6-neighbours and gives them label curlabel.","title":"function label6Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-label26neighbours","text":"static void label26Neighbours ( int * nbh , int * nbhlabels , int * nbhv , int curlabel , int idx ) The idx'th voxel in nbh is ALREADY labeled. This checks for existing 26-neighbours and gives them label curlabel.","title":"function label26Neighbours"},{"location":"api/Namespaces/namespaceitk.html#function-connectedcomponents","text":"static inline int connectedComponents ( int * nbh , int * nbhLabels , void ( * )( int * , int * , int * , int , int ) labelNeighboursFunc )","title":"function connectedComponents"},{"location":"api/Namespaces/namespaceitk.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh6table","text":"static int nbh6Table = { { 1 , 3 , 9 , -1 , -1 , -1 }, { 0 , 2 , 4 , 10 , -1 , -1 }, { 1 , 5 , 11 , -1 , -1 , -1 }, { 0 , 4 , 6 , 12 , -1 , -1 }, { 1 , 3 , 5 , 7 , 13 , -1 }, { 2 , 4 , 8 , 14 , -1 , -1 }, { 3 , 7 , 15 , -1 , -1 , -1 }, { 4 , 6 , 8 , 16 , -1 , -1 }, { 5 , 7 , 17 , -1 , -1 , -1 }, { 0 , 10 , 12 , 18 , -1 , -1 }, { 1 , 9 , 11 , 13 , 19 , -1 }, { 2 , 10 , 14 , 20 , -1 , -1 }, { 3 , 9 , 13 , 15 , 21 , -1 }, { 4 , 10 , 12 , 14 , 16 , 22 }, { 5 , 11 , 13 , 17 , 23 , -1 }, { 6 , 12 , 16 , 24 , -1 , -1 }, { 7 , 13 , 15 , 17 , 25 , -1 }, { 8 , 14 , 16 , 26 , -1 , -1 }, { 9 , 19 , 21 , -1 , -1 , -1 }, { 10 , 18 , 20 , 22 , -1 , -1 }, { 11 , 19 , 23 , -1 , -1 , -1 }, { 12 , 18 , 22 , 24 , -1 , -1 }, { 13 , 19 , 21 , 23 , 25 , -1 }, { 14 , 20 , 22 , 26 , -1 , -1 }, { 15 , 21 , 25 , -1 , -1 , -1 }, { 16 , 22 , 24 , 26 , -1 , -1 }, { 17 , 23 , 25 , -1 , -1 , -1 } };","title":"variable nbh6Table"},{"location":"api/Namespaces/namespaceitk.html#variable-nbh26table","text":"static int nbh26Table = { { 1 , 3 , 4 , 9 , 10 , 12 , 13 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 2 , 3 , 4 , 5 , 9 , 10 , 11 , 12 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 4 , 5 , 10 , 11 , 13 , 14 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 4 , 6 , 7 , 9 , 10 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 7 , 12 , 13 , 15 , 16 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 8 , 12 , 13 , 14 , 15 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 13 , 14 , 16 , 17 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 10 , 12 , 13 , 18 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 9 , 11 , 12 , 13 , 14 , 18 , 19 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 1 , 2 , 4 , 5 , 10 , 13 , 14 , 19 , 20 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 3 , 4 , 6 , 7 , 9 , 10 , 13 , 15 , 16 , 18 , 19 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 }, { 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 13 , 16 , 17 , 19 , 20 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 6 , 7 , 12 , 13 , 16 , 21 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 3 , 4 , 5 , 6 , 7 , 8 , 12 , 13 , 14 , 15 , 17 , 21 , 22 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 4 , 5 , 7 , 8 , 13 , 14 , 16 , 22 , 23 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 19 , 21 , 22 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 18 , 20 , 21 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 19 , 22 , 23 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 12 , 13 , 15 , 16 , 18 , 19 , 22 , 24 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 23 , 24 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 25 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 15 , 16 , 21 , 22 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 12 , 13 , 14 , 15 , 16 , 17 , 21 , 22 , 23 , 24 , 26 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, { 13 , 14 , 16 , 17 , 22 , 23 , 25 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 } }; Updated on 2023-10-25 at 15:40:26 +0000","title":"variable nbh26Table"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html","text":"itk::Functor Classes Name class itk::Functor::MultiplyByConstant Updated on 2023-10-25 at 15:40:26 +0000","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#itkfunctor","text":"","title":"itk::Functor"},{"location":"api/Namespaces/namespaceitk_1_1Functor.html#classes","text":"Name class itk::Functor::MultiplyByConstant Updated on 2023-10-25 at 15:40:26 +0000","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html","text":"shapeworks User usage reporting (telemetry) More... Namespaces Name shapeworks::mesh shapeworks::particles shapeworks::project Classes Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker Types Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle Functions Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data) Attributes Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines Detailed Description User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes Types Documentation enum DisplayMode Enumerator Value Description Original 0 Groomed 1 Reconstructed 2 enum Axis Enumerator Value Description invalid -1 X Y Z handy way to specify an axis enum ConstraintType Enumerator Value Description CuttingPlane 'C' FreeForm 'F' enum CorrespondenceMode Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8 enum DomainType Enumerator Value Description Image 'I' Mesh 'M' Contour 'C' enum ArrayTransferOptions Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E enum LandmarkVisibility Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E enum MessageType Enumerator Value Description normal warning error debug using CacheMap using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ; using CacheList using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ; using ShapeHandle using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ; using ShapeList using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ; using MeshHandle using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ; using MeshList using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ; using Coord using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework. using Dims using shapeworks :: Dims = typedef itk :: Size < 3 > ; using Point3 using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ; using Vector3 using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ; using Matrix44 using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ; using Matrix33 using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ; using IPoint3 using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ; using FPoint3 using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ; using Covariant using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ; using Vector using shapeworks :: Vector = typedef Vector3 ; using Point using shapeworks :: Point = typedef Point3 ; using Matrix using shapeworks :: Matrix = typedef Matrix33 ; using Plane using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ; using Array using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ; using Field using shapeworks :: Field = typedef Array ; using PointArray using shapeworks :: PointArray = typedef std :: vector < Point3 > ; using GenericTransform using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer. using IdentityTransform using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ; using TransformPtr using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ; using AffineTransform using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands. using AffineTransformPtr using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ; using MeshTransform using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms. using ThinPlateSplineTransform using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface . using RBFSSparseTransform using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ; using ProjectHandle using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ; using VnlMatrix template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ; typedef SessionHandle typedef QSharedPointer < Session > shapeworks :: SessionHandle ; using TransformType using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this. typedef LightboxHandle typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ; typedef ViewerHandle typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ; typedef ViewerList typedef QVector < ViewerHandle > shapeworks :: ViewerList ; typedef VisualizerHandle typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ; Functions Documentation function COMMAND_DECLARE COMMAND_DECLARE ( ReadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageInfo , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Antialias , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResampleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ResizeImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RecenterImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( PadImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Rotate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ExtractLabel , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CloseHoles , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Binarize , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeDT , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CurvatureFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GradientFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SigmoidFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( IntensityFilter , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Blur , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageBounds , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CropImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ICPRigid , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetOrigin , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetSpacing , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( NegateImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( AddImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SubtractImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MultiplyImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( DivideImage , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ImageToMesh , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetRegion , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Isolate , ImageCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Compactness , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Generalization , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Specificity , ParticleSystemCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReadMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WriteMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshInfo , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Coverage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Smooth , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SmoothSinc , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Remesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( RemeshPercent , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( InvertNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ReflectMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TransformMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FillHoles , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ProbeVolume , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( TranslateMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ScaleMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshBounds , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Distance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetField , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( SetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GetFieldValue , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldRange , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldMean , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldStd , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FieldNames , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( FixElement , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClipClosedSurface , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ClosestPoint , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistance , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeanNormals , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Curvature , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToImage , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( MeshToDT , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( CompareMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( WarpMesh , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( ComputeThickness , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( Seed , ShapeworksCommand ) function COMMAND_DECLARE COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( GroomCommand , GroomCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup ) function COMMAND_DECLARE COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup ) function display_mode_to_string std :: string display_mode_to_string ( DisplayMode display_mode ) function string_to_display_mode DisplayMode string_to_display_mode ( std :: string str ) function operator<< std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region ) function operator<< std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region ) function makeVector Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) function makePointArray PointArray makePointArray ( int size , Point3 value ) function createTransform TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) ) function makePlane Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane. function makePlane Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 ) function getOrigin Point getOrigin ( const Plane plane ) Get origin and normal of plane. function getNormal Vector3 getNormal ( const Plane plane ) function createMeshTransform MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat ) function toPoint Point toPoint ( const Dims & d ) For deliberate conversions between types. function toPoint Point toPoint ( const Coord & c ) function toVector Vector toVector ( const Dims & d ) function toVector Vector toVector ( const Point & p ) function toVector Vector toVector ( const itk :: CovariantVector < double , 3 > & v ) function toPoint Point toPoint ( const Vector & v ) function toCoord Coord toCoord ( const Dims & d ) function toDims Dims toDims ( const Coord & c ) function toDims Dims toDims ( const Point & p ) function toCoord Coord toCoord ( const Point & p ) function negate template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) function negate Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector) function invertValue template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector. function invertValue Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector) function dotProduct Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products. function crossProduct Vector3 crossProduct ( const Vector3 & a , const Vector3 & b ) function length double length ( const Vector3 & v ) function toAxis Axis toAxis ( const std :: string & str ) function axisToString std :: string axisToString ( Axis axis ) function axis_is_valid bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid. function axis_is_valid bool axis_is_valid ( const Axis & axis ) function degToRad double degToRad ( const double deg ) convert degrees to radians function mean double mean ( const Field field ) incrementally compute (single-component) mean of field function stddev double stddev ( const Field field ) compute (single-component) standard deviation of field function range std :: vector < double > range ( const Field field ) compute (single-component) range of field function operator+ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q ) function operator- template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q ) function operator+= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q ) function operator-= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q ) function operator* template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x ) function operator/ template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x ) function operator*= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x ) function operator/= template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x ) function epsEqual template < typename T > bool epsEqual ( T a , T b , T epsilon ) function epsEqual template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps ) function epsEqual bool epsEqual ( double a , double b , double eps ) function clamp template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17. function operator<< std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image function operator* Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h] function operator/ Image operator / ( const Image & img , const double x ) function operator*= Image & operator *= ( Image & img , const double x ) function operator/= Image & operator /= ( Image & img , const double x ) function operator<< std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh function itkEventMacro itkEventMacro ( ParticleDomainAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionSetEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionAddEvent , ParticleEvent ) function itkEventMacro itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent ) function SaveReconstructions void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo ) function variant_to_string template < typename T > std :: string variant_to_string ( T begin , T end ) function printNumpyArrayInfo void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc) function verifyOrderAndPacking void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not function setOwnership void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns function wrapNumpyArr Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign function pyToArr Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data function arrToPy py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer function itkTransformToEigen Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform ) function eigen44ToItkTransform TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat ) function vtkTransformToEigen Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform ) function eigen44ToVtkTransform MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat ) function itkToEigen template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix. function eigenToItk template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. function vnlToEigen template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix. function wrapDataWithEigen template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location. function wrapDataWithEigen template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix. function wrapDataWithItk template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data. Attributes Documentation variable Pi const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-25 at 15:40:26 +0000","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#shapeworks","text":"User usage reporting (telemetry) More...","title":"shapeworks"},{"location":"api/Namespaces/namespaceshapeworks.html#namespaces","text":"Name shapeworks::mesh shapeworks::particles shapeworks::project","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks.html#classes","text":"Name class shapeworks::AnalysisTool class shapeworks::AnalysisUtils class shapeworks::Analyze High level analyze API. class shapeworks::AnalyzeCommandGroup class shapeworks::ColorMap class shapeworks::ColorMaps class shapeworks::Command class shapeworks::CompareSettings class shapeworks::CompareWidget class shapeworks::Constraint class shapeworks::Constraints class shapeworks::ContourDomain class shapeworks::CorrespondenceFunction Correspondence term. class shapeworks::CurvatureSamplingFunction Please note: This is the sampling function currently being used. class shapeworks::DataTool class shapeworks::DeepSSMJob Qt Wrapper for DeepSSM. class shapeworks::DeepSSMParameters class shapeworks::DeepSSMTool class shapeworks::DisentangledCorrespondenceFunction class shapeworks::DualVectorFunction class shapeworks::EigenUtils class shapeworks::ExcelProjectReader Excel file format reader for Project . class shapeworks::ExcelProjectWriter Excel file format writer for Project . class shapeworks::Executable class shapeworks::ExportImageDialog class shapeworks::ExportUtils Export utilities for Studio. class shapeworks::FreeFormConstraint class shapeworks::GenericContainer This class seems to be only a wrapper around std::vector implementing ITK DataObject (for smart pointer?) class shapeworks::GenericContainerArray This class appears to be an array of GenericContainers (e.g. std::vector) that implements the Observer interface. The array size tracks the number of domains in the system. E.g. one per domain. class shapeworks::GradientDescentOptimizer class shapeworks::Groom High level groom API. class shapeworks::GroomCommandGroup class shapeworks::GroomParameters class shapeworks::GroomTool class shapeworks::GroupPvalueJob class shapeworks::Image class shapeworks::ImageCommand class shapeworks::ImageDomain class shapeworks::ImageDomainWithCurvature class shapeworks::ImageDomainWithGradients class shapeworks::ImageDomainWithGradN class shapeworks::ImageLabel An extention of QLabel especially for scaled images. class shapeworks::ImageUtils Helper functions for image. class shapeworks::ImplicitSurfaceDomain class shapeworks::IndexRegion Indices into a 3d region of memory (can be negative, e.g., for the purpose of padding an image) class shapeworks::Job class shapeworks::JsonProjectReader JSON file format reader for Project . class shapeworks::JsonProjectWriter JSON file format writer for Project . class shapeworks::KeyboardShortcuts class shapeworks::LandmarkDefinition Landmark class containing properties of each landmark. class shapeworks::LandmarkItemDelegate class shapeworks::LandmarkTableModel class shapeworks::LandmarkWidget LandmarkWidget . class shapeworks::LegacyCorrespondenceFunction class shapeworks::LegacyShapeMatrix class shapeworks::Lightbox Display multiple Viewers in a tiled display. class shapeworks::LinearRegressionShapeMatrix class shapeworks::Logging ShapeWorks Logging Library. class shapeworks::LogWindow Log Window. class shapeworks::MatrixContainer class shapeworks::MeanCurvatureContainer class shapeworks::Mesh class shapeworks::MeshCache Thread safe cache for meshes index by shape. class shapeworks::MeshCommand class shapeworks::MeshDomain class shapeworks::MeshGenerator struct shapeworks::MeshGeoEntry class shapeworks::MeshGroup Representation of a group of meshes. class shapeworks::MeshManager Class to manage meshes. class shapeworks::MeshReader reads mesh (used only by one of the Mesh constructors) class shapeworks::MeshReconstructors class shapeworks::MeshSlice MeshSlice . class shapeworks::MeshUtils class shapeworks::MeshWarper class shapeworks::MeshWorker class shapeworks::MeshWorkItem Provides concurrent access to a list of shapes to work needing reconstruction. class shapeworks::MeshWorkQueue class shapeworks::MeshWrapper class shapeworks::MixedEffectsShapeMatrix struct shapeworks::MultiVariateNormalRandom class shapeworks::NetworkAnalysisJob class shapeworks::Observer This class is an observer interface for classes to monitor for changes to the optimizer (observer pattern) class shapeworks::OptimizationVisualizer class shapeworks::Optimize class shapeworks::OptimizeCommandGroup class shapeworks::OptimizeParameterFile class shapeworks::OptimizeParameters class shapeworks::OptimizeTool class shapeworks::PaintWidget class shapeworks::Parameters Parameter settings. class shapeworks::ParticleArea class shapeworks::ParticleAreaJob class shapeworks::ParticleAreaPanel class shapeworks::ParticleColors Supplies particle colors. class shapeworks::ParticleDomain class shapeworks::ParticleEvent class shapeworks::ParticleGaussianModeWriter class shapeworks::ParticleGoodBadAssessment Performs good/bad points assessment and reports the bad positions of the particle system. class shapeworks::ParticleNeighborhood class shapeworks::ParticleNormalEvaluation class shapeworks::ParticleNormalEvaluationJob struct shapeworks::ParticlePointIndexPair class shapeworks::ParticleRegionDomain class shapeworks::ParticleRegionNeighborhood class shapeworks::Particles Representation of correspondence points for a shape including multiple domains. class shapeworks::ParticleShapeStatistics class shapeworks::ParticleSurfaceNeighborhood class shapeworks::ParticleSystem A facade class managing interactions with a particle system. class shapeworks::ParticleSystemCommand class shapeworks::ParticleSystemEvaluation class shapeworks::PhysicalRegion physical bounds of a 3d region of space class shapeworks::PickResult class shapeworks::PlaneConstraint class shapeworks::PlaneWidget PlaneWidget . class shapeworks::PowerOfTwoPointTree class shapeworks::PowerOfTwoPointTreeNode struct shapeworks::powstruct struct shapeworks::powstruct< a, 0 > class shapeworks::PreferencesWindow Qt UI dialog to control preferences. class shapeworks::ProcrustesRegistration class shapeworks::Project Representation of a project. class shapeworks::ProjectCommandGroup class shapeworks::ProjectReader Base class for Project readers. class shapeworks::ProjectUtils class shapeworks::PythonWorker class shapeworks::QMeshWarper Wraps MeshWarper as a QObject. class shapeworks::QOptimize Wraps Optimize as a QObject. struct shapeworks::Reconstruction class shapeworks::ReconstructSurface class shapeworks::Sampler class shapeworks::SamplingFunction This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. class shapeworks::Session Representation of a session. class shapeworks::Shape Representation of a single shape/patient/subject. class shapeworks::ShapeEvaluation class shapeworks::ShapeEvaluationJob class shapeworks::ShapeGradientMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::ShapeMatrix Each column describes a shape. A shape may be composed of m_DomainsPerShape domains (default 1). ALL DOMAINS ARE NOT ASSUMED TO HAVE THE SAME NUMBER OF PARTICLES! class shapeworks::shapeworks_exception class shapeworks::ShapeworksCommand class shapeworks::ShapeWorksStudioApp Main ShapeWorksStudio window. class shapeworks::ShapeworksUtils class shapeworks::ShapeworksWorker struct shapeworks::SharedCommandData class shapeworks::SliceView SliceView . class shapeworks::SplashScreen class shapeworks::StatsGroupLDAJob class shapeworks::StatusBarWidget StatusBarWidget . class shapeworks::StringUtils String utility functions. class shapeworks::StudioHandleWidget class shapeworks::StudioInteractorStyle class shapeworks::StudioMesh Representation of a single mesh. class shapeworks::StudioSliceInteractorStyle class shapeworks::StudioUtils Utilities for Studio. class shapeworks::StudioVtkOutputWindow Implementation of vtkOutputWindow to capture and display VTK error messages. class shapeworks::Style class shapeworks::Subject Representation of a single subject. class shapeworks::Telemetry class shapeworks::UpdateChecker Update Checker. class shapeworks::Variant Variant class to represent multiple types. class shapeworks::VectorFunction class shapeworks::VectorImage Gradient (vector) image. class shapeworks::Viewer 3D Viewer class shapeworks::Visualizer Controls display of objects in viewers. class shapeworks::VtkMeshWrapper class shapeworks::WheelEventForwarder class shapeworks::Worker","title":"Classes"},{"location":"api/Namespaces/namespaceshapeworks.html#types","text":"Name enum DisplayMode enum Axis { invalid = -1, X, Y, Z} handy way to specify an axis enum class char ConstraintType enum class int CorrespondenceMode enum class char DomainType enum ArrayTransferOptions { COPY_ARRAY, SHARE_ARRAY, MOVE_ARRAY} ways of tranferring Arrays to Python, copy being the least efficient but most conservative enum LandmarkColumns enum LandmarkVisibility enum class MessageType using std::map< MeshWorkItem , MeshHandle > CacheMap using std::list< MeshWorkItem > CacheList using std::shared_ptr< Shape > ShapeHandle using std::vector< ShapeHandle > ShapeList using std::shared_ptr< StudioMesh > MeshHandle using std::vector< MeshHandle > MeshList using itk::Index< 3 > Coord Simple names for common types used in the framework. using itk::Size< 3 > Dims using itk::Point< double, 3 > Point3 using itk::Vector< double, 3 > Vector3 using itk::Matrix< double, 4, 4 > Matrix44 using itk::Matrix< double, 3, 3 > Matrix33 using itk::Point< int, 3 > IPoint3 using itk::Point< float, 3 > FPoint3 using itk::CovariantVector< float, 3 > Covariant using Vector3 Vector using Point3 Point using Matrix33 Matrix using vtkSmartPointer< vtkPlane > Plane using vtkSmartPointer< vtkDataArray > Array using Array Field using std::vector< Point3 > PointArray using itk::Transform< double, 3 > GenericTransform All transforms can be accessed using a generic transform pointer. using itk::IdentityTransform< double, 3 > IdentityTransform using GenericTransform::Pointer TransformPtr using itk::AffineTransform< double, 3 > AffineTransform Affine transforms are used for many Image manipulation commands. using AffineTransform::Pointer AffineTransformPtr using vtkSmartPointer< vtkTransform > MeshTransform Mesh transforms. using itk::ThinPlateSplineKernelTransform2 < double, 3 > ThinPlateSplineTransform Transforms that can be used for ReconstructSurface . using itk::CompactlySupportedRBFSparseKernelTransform < double, 3 > RBFSSparseTransform using std::shared_ptr< Project > ProjectHandle template using Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > VnlMatrix typedef QSharedPointer< Session > SessionHandle using vtkSmartPointer< vtkTransform > TransformType TODO: replace this. typedef QSharedPointer< Lightbox > LightboxHandle typedef QSharedPointer< Viewer > ViewerHandle typedef QVector< ViewerHandle > ViewerList typedef QSharedPointer< Visualizer > VisualizerHandle","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks.html#functions","text":"Name COMMAND_DECLARE (ReadImage , ImageCommand ) COMMAND_DECLARE (WriteImage , ImageCommand ) COMMAND_DECLARE (ImageInfo , ImageCommand ) COMMAND_DECLARE (Antialias , ImageCommand ) COMMAND_DECLARE (ResampleImage , ImageCommand ) COMMAND_DECLARE (ResizeImage , ImageCommand ) COMMAND_DECLARE (RecenterImage , ImageCommand ) COMMAND_DECLARE (PadImage , ImageCommand ) COMMAND_DECLARE (TranslateImage , ImageCommand ) COMMAND_DECLARE (ScaleImage , ImageCommand ) COMMAND_DECLARE (Rotate , ImageCommand ) COMMAND_DECLARE (ExtractLabel , ImageCommand ) COMMAND_DECLARE (CloseHoles , ImageCommand ) COMMAND_DECLARE (Binarize , ImageCommand ) COMMAND_DECLARE (ComputeDT , ImageCommand ) COMMAND_DECLARE (CurvatureFilter , ImageCommand ) COMMAND_DECLARE (GradientFilter , ImageCommand ) COMMAND_DECLARE (SigmoidFilter , ImageCommand ) COMMAND_DECLARE (TPLevelSetFilter , ImageCommand ) COMMAND_DECLARE (TopologyPreservingFilter , ImageCommand ) COMMAND_DECLARE (IntensityFilter , ImageCommand ) COMMAND_DECLARE (Blur , ImageCommand ) COMMAND_DECLARE (BoundingBoxImage , ImageCommand ) COMMAND_DECLARE (ImageBounds , ImageCommand ) COMMAND_DECLARE (CropImage , ImageCommand ) COMMAND_DECLARE (ICPRigid , ImageCommand ) COMMAND_DECLARE (ClipImage , ImageCommand ) COMMAND_DECLARE (ReflectImage , ImageCommand ) COMMAND_DECLARE (SetOrigin , ImageCommand ) COMMAND_DECLARE (SetSpacing , ImageCommand ) COMMAND_DECLARE (WarpImage , ImageCommand ) COMMAND_DECLARE (CompareImage , ImageCommand ) COMMAND_DECLARE (NegateImage , ImageCommand ) COMMAND_DECLARE (AddImage , ImageCommand ) COMMAND_DECLARE (SubtractImage , ImageCommand ) COMMAND_DECLARE (MultiplyImage , ImageCommand ) COMMAND_DECLARE (DivideImage , ImageCommand ) COMMAND_DECLARE (ImageToMesh , ImageCommand ) COMMAND_DECLARE (SetRegion , ImageCommand ) COMMAND_DECLARE (Isolate , ImageCommand ) COMMAND_DECLARE (ReadParticleSystem , ParticleSystemCommand ) COMMAND_DECLARE (Compactness , ParticleSystemCommand ) COMMAND_DECLARE (Generalization , ParticleSystemCommand ) COMMAND_DECLARE (Specificity , ParticleSystemCommand ) COMMAND_DECLARE (ReadMesh , MeshCommand ) COMMAND_DECLARE (WriteMesh , MeshCommand ) COMMAND_DECLARE (MeshInfo , MeshCommand ) COMMAND_DECLARE (Coverage , MeshCommand ) COMMAND_DECLARE (Smooth , MeshCommand ) COMMAND_DECLARE (SmoothSinc , MeshCommand ) COMMAND_DECLARE (Remesh , MeshCommand ) COMMAND_DECLARE (RemeshPercent , MeshCommand ) COMMAND_DECLARE (InvertNormals , MeshCommand ) COMMAND_DECLARE (ReflectMesh , MeshCommand ) COMMAND_DECLARE (TransformMesh , MeshCommand ) COMMAND_DECLARE (FillHoles , MeshCommand ) COMMAND_DECLARE (ProbeVolume , MeshCommand ) COMMAND_DECLARE (ClipMesh , MeshCommand ) COMMAND_DECLARE (TranslateMesh , MeshCommand ) COMMAND_DECLARE (ScaleMesh , MeshCommand ) COMMAND_DECLARE (BoundingBoxMesh , MeshCommand ) COMMAND_DECLARE (MeshBounds , MeshCommand ) COMMAND_DECLARE (Distance , MeshCommand ) COMMAND_DECLARE (ComputeNormals , MeshCommand ) COMMAND_DECLARE (SetField , MeshCommand ) COMMAND_DECLARE (GetField , MeshCommand ) COMMAND_DECLARE (SetFieldValue , MeshCommand ) COMMAND_DECLARE (GetFieldValue , MeshCommand ) COMMAND_DECLARE (FieldRange , MeshCommand ) COMMAND_DECLARE (FieldMean , MeshCommand ) COMMAND_DECLARE (FieldStd , MeshCommand ) COMMAND_DECLARE (FieldNames , MeshCommand ) COMMAND_DECLARE (FixElement , MeshCommand ) COMMAND_DECLARE (ClipClosedSurface , MeshCommand ) COMMAND_DECLARE (ClosestPoint , MeshCommand ) COMMAND_DECLARE (GeodesicDistance , MeshCommand ) COMMAND_DECLARE (GeodesicDistanceToLandmark , MeshCommand ) COMMAND_DECLARE (MeanNormals , MeshCommand ) COMMAND_DECLARE (Curvature , MeshCommand ) COMMAND_DECLARE (MeshToImage , MeshCommand ) COMMAND_DECLARE (MeshToDT , MeshCommand ) COMMAND_DECLARE (CompareMesh , MeshCommand ) COMMAND_DECLARE (WarpMesh , MeshCommand ) COMMAND_DECLARE (ComputeThickness , MeshCommand ) COMMAND_DECLARE (LandmarkGeodesics , MeshCommand ) COMMAND_DECLARE (Seed , ShapeworksCommand ) COMMAND_DECLARE (OptimizeCommand , OptimizeCommandGroup ) COMMAND_DECLARE (GroomCommand , GroomCommandGroup ) COMMAND_DECLARE (AnalyzeCommand , AnalyzeCommandGroup ) COMMAND_DECLARE (ConvertProjectCommand , ProjectCommandGroup ) std::string display_mode_to_string (DisplayMode display_mode) DisplayMode string_to_display_mode (std::string str) std::ostream & operator<< (std::ostream & os, const IndexRegion & region) std::ostream & operator<< (std::ostream & os, const PhysicalRegion & region) Vector3 makeVector (std::array< double, 3 > && arr) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version) PointArray makePointArray (int size, Point3 value) TransformPtr createTransform (const Matrix33 & mat, const Vector3 & translate = makeVector ({0, 0, 0})) Plane makePlane (const Point & p, const Vector3 & n) Make a plane. Plane makePlane (const Point & p0, const Point & p1, const Point & p2) Point getOrigin (const Plane plane) Get origin and normal of plane. Vector3 getNormal (const Plane plane) MeshTransform createMeshTransform (const vtkSmartPointer< vtkMatrix4x4 > & mat) Point toPoint (const Dims & d) For deliberate conversions between types. Point toPoint (const Coord & c) Vector toVector (const Dims & d) Vector toVector (const Point & p) Vector toVector (const itk::CovariantVector< double, 3 > & v) Point toPoint (const Vector & v) Coord toCoord (const Dims & d) Dims toDims (const Coord & c) Dims toDims (const Point & p) Coord toCoord (const Point & p) template P negate (const P & p) Negation operator (ITK only has it for Vectors, but sometimes useful for Points) Vector3 negate (const Vector3 & v) Negate function for Vector (requires makeVector) template P invertValue (const P & p) Inversion function for all but Vector. Vector3 invertValue (const Vector3 & v) Inversion function for Vector (requires makeVector) Vector3 dotProduct (const Vector3 & a, const Vector3 & b) Vector dot and cross products. Vector3 crossProduct (const Vector3 & a, const Vector3 & b) double length (const Vector3 & v) Axis toAxis (const std::string & str) std::string axisToString ( Axis axis) bool axis_is_valid (const Vector3 & axis) Ensure an axis is valid. bool axis_is_valid (const Axis & axis) double degToRad (const double deg) convert degrees to radians double mean (const Field field) incrementally compute (single-component) mean of field double stddev (const Field field) compute (single-component) standard deviation of field std::vector< double > range (const Field field) compute (single-component) range of field template bool epsEqual (T a, T b, T epsilon) template T clamp (T value, T min, T max) Simple clamp operation until C++17. std::ostream & operator<< (std::ostream & os, const Image & img) stream insertion operators for Image Image operator* (const Image & img, const double x) override templates defined in [Shapeworks.h] Image operator/ (const Image & img, const double x) Image & operator*= ( Image & img, const double x) Image & operator/= ( Image & img, const double x) std::ostream & operator<< (std::ostream & os, const Mesh & mesh) stream insertion operators for Mesh itkEventMacro (ParticleDomainAddEvent , ParticleEvent ) itkEventMacro (ParticleTransformSetEvent , ParticleEvent ) itkEventMacro (ParticlePrefixTransformSetEvent , ParticleEvent ) itkEventMacro (ParticleNeighborhoodSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionSetEvent , ParticleEvent ) itkEventMacro (ParticlePositionAddEvent , ParticleEvent ) itkEventMacro (ParticlePositionRemoveEvent , ParticleEvent ) void SaveReconstructions (std::vector< Reconstruction > & reconstructions, const std::vector< std::string > & srcPaths, const std::string & saveTo) template std::string variant_to_string (T begin, T end) void printNumpyArrayInfo (const py::array & np_array) print buffer info for the given array (dims, format, strides, etc) void verifyOrderAndPacking (const py::array & np_array) verify py::array has expected order and is densely packed, throw if not void setOwnership (py::array & array, bool owns) sets the OWNDATA flag of the given array to owns Image::ImageType::Pointer wrapNumpyArr (py::array & np_array) helper function for Image.init and Image.assign Array pyToArr (py::array & np_array, bool take_ownership =true) converts py::array to vtkDataArray, optionally taking ownership of data py::array arrToPy (Array & array, ArrayTransferOptions xfer =COPY_ARRAY) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer Eigen::MatrixXd itkTransformToEigen (TransformPtr itk_xform) TransformPtr eigen44ToItkTransform (const Eigen::Matrix< double, 4, 4 > & eigen_mat) Eigen::Matrix< double, 4, 4, Eigen::RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform) MeshTransform eigen44ToVtkTransform (const Eigen::Matrix< double, 4, 4, Eigen::RowMajor > & eigen_mat) template Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > itkToEigen (const itk::Matrix< T, NRows, NCols > & itk_mat) Conversion (by copy) of itk matrix to Eigen::Matrix. template itk::Matrix< T, NRows, NCols > eigenToItk (const Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > & eigen_mat) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix. template Eigen::Map< VnlMatrix< T > > vnlToEigen (const vnl_matrix< T > & vnl_mat) Wrap vnl matrix data to Eigen Matrix. template Eigen::Map< Eigen::Matrix< T, NRows, NCols, Eigen::RowMajor > > wrapDataWithEigen (T * data) template Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > wrapDataWithEigen (T * data, size_t nrows, size_t ncols) Wrap a data pointer of the specified size with Eigen::Matrix. template itk::Matrix< T, NRows, NCols > wrapDataWithItk (T * data)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes","text":"Name const auto Pi pi that doesn't depend on deprecated or non-std lib defines","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks.html#detailed-description","text":"User usage reporting (telemetry) This class posts anonymous usage reporting statistics for usage tracking and software improvement purposes","title":"Detailed Description"},{"location":"api/Namespaces/namespaceshapeworks.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-displaymode","text":"Enumerator Value Description Original 0 Groomed 1 Reconstructed 2","title":"enum DisplayMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-axis","text":"Enumerator Value Description invalid -1 X Y Z handy way to specify an axis","title":"enum Axis"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-constrainttype","text":"Enumerator Value Description CuttingPlane 'C' FreeForm 'F'","title":"enum ConstraintType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-correspondencemode","text":"Enumerator Value Description MeanEnergy 0 EnsembleEntropy 1 EnsembleRegressionEntropy 3 EnsembleMixedEffectsEntropy 4 MeshBasedGeneralEntropy 5 MeshBasedGeneralMeanEnergy 6 DisentagledEnsembleEntropy 7 DisentangledEnsembleMeanEnergy 8","title":"enum CorrespondenceMode"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-domaintype","text":"Enumerator Value Description Image 'I' Mesh 'M' Contour 'C'","title":"enum DomainType"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-arraytransferoptions","text":"Enumerator Value Description COPY_ARRAY SHARE_ARRAY MOVE_ARRAY ways of tranferring Arrays to Python, copy being the least efficient but most conservative","title":"enum ArrayTransferOptions"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkcolumns","text":"Enumerator Value Description VISIBLE_E COLOR_E NAME_E POSITION_E SET_BUTTON_E COMMENT_E END_E","title":"enum LandmarkColumns"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-landmarkvisibility","text":"Enumerator Value Description ALL_VISIBLE_E NONE_VISIBLE_E SOME_VISIBLE_E","title":"enum LandmarkVisibility"},{"location":"api/Namespaces/namespaceshapeworks.html#enum-messagetype","text":"Enumerator Value Description normal warning error debug","title":"enum MessageType"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachemap","text":"using shapeworks :: CacheMap = typedef std :: map < MeshWorkItem , MeshHandle > ;","title":"using CacheMap"},{"location":"api/Namespaces/namespaceshapeworks.html#using-cachelist","text":"using shapeworks :: CacheList = typedef std :: list < MeshWorkItem > ;","title":"using CacheList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapehandle","text":"using shapeworks :: ShapeHandle = typedef std :: shared_ptr < Shape > ;","title":"using ShapeHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-shapelist","text":"using shapeworks :: ShapeList = typedef std :: vector < ShapeHandle > ;","title":"using ShapeList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshhandle","text":"using shapeworks :: MeshHandle = typedef std :: shared_ptr < StudioMesh > ;","title":"using MeshHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshlist","text":"using shapeworks :: MeshList = typedef std :: vector < MeshHandle > ;","title":"using MeshList"},{"location":"api/Namespaces/namespaceshapeworks.html#using-coord","text":"using shapeworks :: Coord = typedef itk :: Index < 3 > ; Simple names for common types used in the framework.","title":"using Coord"},{"location":"api/Namespaces/namespaceshapeworks.html#using-dims","text":"using shapeworks :: Dims = typedef itk :: Size < 3 > ;","title":"using Dims"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point3","text":"using shapeworks :: Point3 = typedef itk :: Point < double , 3 > ;","title":"using Point3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector3","text":"using shapeworks :: Vector3 = typedef itk :: Vector < double , 3 > ;","title":"using Vector3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix44","text":"using shapeworks :: Matrix44 = typedef itk :: Matrix < double , 4 , 4 > ;","title":"using Matrix44"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix33","text":"using shapeworks :: Matrix33 = typedef itk :: Matrix < double , 3 , 3 > ;","title":"using Matrix33"},{"location":"api/Namespaces/namespaceshapeworks.html#using-ipoint3","text":"using shapeworks :: IPoint3 = typedef itk :: Point < int , 3 > ;","title":"using IPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-fpoint3","text":"using shapeworks :: FPoint3 = typedef itk :: Point < float , 3 > ;","title":"using FPoint3"},{"location":"api/Namespaces/namespaceshapeworks.html#using-covariant","text":"using shapeworks :: Covariant = typedef itk :: CovariantVector < float , 3 > ;","title":"using Covariant"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vector","text":"using shapeworks :: Vector = typedef Vector3 ;","title":"using Vector"},{"location":"api/Namespaces/namespaceshapeworks.html#using-point","text":"using shapeworks :: Point = typedef Point3 ;","title":"using Point"},{"location":"api/Namespaces/namespaceshapeworks.html#using-matrix","text":"using shapeworks :: Matrix = typedef Matrix33 ;","title":"using Matrix"},{"location":"api/Namespaces/namespaceshapeworks.html#using-plane","text":"using shapeworks :: Plane = typedef vtkSmartPointer < vtkPlane > ;","title":"using Plane"},{"location":"api/Namespaces/namespaceshapeworks.html#using-array","text":"using shapeworks :: Array = typedef vtkSmartPointer < vtkDataArray > ;","title":"using Array"},{"location":"api/Namespaces/namespaceshapeworks.html#using-field","text":"using shapeworks :: Field = typedef Array ;","title":"using Field"},{"location":"api/Namespaces/namespaceshapeworks.html#using-pointarray","text":"using shapeworks :: PointArray = typedef std :: vector < Point3 > ;","title":"using PointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#using-generictransform","text":"using shapeworks :: GenericTransform = typedef itk :: Transform < double , 3 > ; All transforms can be accessed using a generic transform pointer.","title":"using GenericTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-identitytransform","text":"using shapeworks :: IdentityTransform = typedef itk :: IdentityTransform < double , 3 > ;","title":"using IdentityTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformptr","text":"using shapeworks :: TransformPtr = typedef GenericTransform :: Pointer ;","title":"using TransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransform","text":"using shapeworks :: AffineTransform = typedef itk :: AffineTransform < double , 3 > ; Affine transforms are used for many Image manipulation commands.","title":"using AffineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-affinetransformptr","text":"using shapeworks :: AffineTransformPtr = typedef AffineTransform :: Pointer ;","title":"using AffineTransformPtr"},{"location":"api/Namespaces/namespaceshapeworks.html#using-meshtransform","text":"using shapeworks :: MeshTransform = typedef vtkSmartPointer < vtkTransform > ; Mesh transforms.","title":"using MeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-thinplatesplinetransform","text":"using shapeworks :: ThinPlateSplineTransform = typedef itk :: ThinPlateSplineKernelTransform2 < double , 3 > ; Transforms that can be used for ReconstructSurface .","title":"using ThinPlateSplineTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-rbfssparsetransform","text":"using shapeworks :: RBFSSparseTransform = typedef itk :: CompactlySupportedRBFSparseKernelTransform < double , 3 > ;","title":"using RBFSSparseTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#using-projecthandle","text":"using shapeworks :: ProjectHandle = typedef std :: shared_ptr < Project > ;","title":"using ProjectHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-vnlmatrix","text":"template < typename T > using shapeworks :: VnlMatrix = typedef Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > ;","title":"using VnlMatrix"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-sessionhandle","text":"typedef QSharedPointer < Session > shapeworks :: SessionHandle ;","title":"typedef SessionHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#using-transformtype","text":"using shapeworks :: TransformType = typedef vtkSmartPointer < vtkTransform > ; TODO: replace this.","title":"using TransformType"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-lightboxhandle","text":"typedef QSharedPointer < Lightbox > shapeworks :: LightboxHandle ;","title":"typedef LightboxHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerhandle","text":"typedef QSharedPointer < Viewer > shapeworks :: ViewerHandle ;","title":"typedef ViewerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-viewerlist","text":"typedef QVector < ViewerHandle > shapeworks :: ViewerList ;","title":"typedef ViewerList"},{"location":"api/Namespaces/namespaceshapeworks.html#typedef-visualizerhandle","text":"typedef QSharedPointer < Visualizer > shapeworks :: VisualizerHandle ;","title":"typedef VisualizerHandle"},{"location":"api/Namespaces/namespaceshapeworks.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare","text":"COMMAND_DECLARE ( ReadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_1","text":"COMMAND_DECLARE ( WriteImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_2","text":"COMMAND_DECLARE ( ImageInfo , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_3","text":"COMMAND_DECLARE ( Antialias , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_4","text":"COMMAND_DECLARE ( ResampleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_5","text":"COMMAND_DECLARE ( ResizeImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_6","text":"COMMAND_DECLARE ( RecenterImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_7","text":"COMMAND_DECLARE ( PadImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_8","text":"COMMAND_DECLARE ( TranslateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_9","text":"COMMAND_DECLARE ( ScaleImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_10","text":"COMMAND_DECLARE ( Rotate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_11","text":"COMMAND_DECLARE ( ExtractLabel , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_12","text":"COMMAND_DECLARE ( CloseHoles , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_13","text":"COMMAND_DECLARE ( Binarize , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_14","text":"COMMAND_DECLARE ( ComputeDT , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_15","text":"COMMAND_DECLARE ( CurvatureFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_16","text":"COMMAND_DECLARE ( GradientFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_17","text":"COMMAND_DECLARE ( SigmoidFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_18","text":"COMMAND_DECLARE ( TPLevelSetFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_19","text":"COMMAND_DECLARE ( TopologyPreservingFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_20","text":"COMMAND_DECLARE ( IntensityFilter , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_21","text":"COMMAND_DECLARE ( Blur , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_22","text":"COMMAND_DECLARE ( BoundingBoxImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_23","text":"COMMAND_DECLARE ( ImageBounds , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_24","text":"COMMAND_DECLARE ( CropImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_25","text":"COMMAND_DECLARE ( ICPRigid , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_26","text":"COMMAND_DECLARE ( ClipImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_27","text":"COMMAND_DECLARE ( ReflectImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_28","text":"COMMAND_DECLARE ( SetOrigin , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_29","text":"COMMAND_DECLARE ( SetSpacing , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_30","text":"COMMAND_DECLARE ( WarpImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_31","text":"COMMAND_DECLARE ( CompareImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_32","text":"COMMAND_DECLARE ( NegateImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_33","text":"COMMAND_DECLARE ( AddImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_34","text":"COMMAND_DECLARE ( SubtractImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_35","text":"COMMAND_DECLARE ( MultiplyImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_36","text":"COMMAND_DECLARE ( DivideImage , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_37","text":"COMMAND_DECLARE ( ImageToMesh , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_38","text":"COMMAND_DECLARE ( SetRegion , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_39","text":"COMMAND_DECLARE ( Isolate , ImageCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_40","text":"COMMAND_DECLARE ( ReadParticleSystem , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_41","text":"COMMAND_DECLARE ( Compactness , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_42","text":"COMMAND_DECLARE ( Generalization , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_43","text":"COMMAND_DECLARE ( Specificity , ParticleSystemCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_44","text":"COMMAND_DECLARE ( ReadMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_45","text":"COMMAND_DECLARE ( WriteMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_46","text":"COMMAND_DECLARE ( MeshInfo , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_47","text":"COMMAND_DECLARE ( Coverage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_48","text":"COMMAND_DECLARE ( Smooth , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_49","text":"COMMAND_DECLARE ( SmoothSinc , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_50","text":"COMMAND_DECLARE ( Remesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_51","text":"COMMAND_DECLARE ( RemeshPercent , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_52","text":"COMMAND_DECLARE ( InvertNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_53","text":"COMMAND_DECLARE ( ReflectMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_54","text":"COMMAND_DECLARE ( TransformMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_55","text":"COMMAND_DECLARE ( FillHoles , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_56","text":"COMMAND_DECLARE ( ProbeVolume , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_57","text":"COMMAND_DECLARE ( ClipMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_58","text":"COMMAND_DECLARE ( TranslateMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_59","text":"COMMAND_DECLARE ( ScaleMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_60","text":"COMMAND_DECLARE ( BoundingBoxMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_61","text":"COMMAND_DECLARE ( MeshBounds , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_62","text":"COMMAND_DECLARE ( Distance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_63","text":"COMMAND_DECLARE ( ComputeNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_64","text":"COMMAND_DECLARE ( SetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_65","text":"COMMAND_DECLARE ( GetField , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_66","text":"COMMAND_DECLARE ( SetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_67","text":"COMMAND_DECLARE ( GetFieldValue , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_68","text":"COMMAND_DECLARE ( FieldRange , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_69","text":"COMMAND_DECLARE ( FieldMean , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_70","text":"COMMAND_DECLARE ( FieldStd , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_71","text":"COMMAND_DECLARE ( FieldNames , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_72","text":"COMMAND_DECLARE ( FixElement , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_73","text":"COMMAND_DECLARE ( ClipClosedSurface , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_74","text":"COMMAND_DECLARE ( ClosestPoint , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_75","text":"COMMAND_DECLARE ( GeodesicDistance , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_76","text":"COMMAND_DECLARE ( GeodesicDistanceToLandmark , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_77","text":"COMMAND_DECLARE ( MeanNormals , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_78","text":"COMMAND_DECLARE ( Curvature , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_79","text":"COMMAND_DECLARE ( MeshToImage , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_80","text":"COMMAND_DECLARE ( MeshToDT , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_81","text":"COMMAND_DECLARE ( CompareMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_82","text":"COMMAND_DECLARE ( WarpMesh , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_83","text":"COMMAND_DECLARE ( ComputeThickness , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_84","text":"COMMAND_DECLARE ( LandmarkGeodesics , MeshCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_85","text":"COMMAND_DECLARE ( Seed , ShapeworksCommand )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_86","text":"COMMAND_DECLARE ( OptimizeCommand , OptimizeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_87","text":"COMMAND_DECLARE ( GroomCommand , GroomCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_88","text":"COMMAND_DECLARE ( AnalyzeCommand , AnalyzeCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-command_declare_89","text":"COMMAND_DECLARE ( ConvertProjectCommand , ProjectCommandGroup )","title":"function COMMAND_DECLARE"},{"location":"api/Namespaces/namespaceshapeworks.html#function-display_mode_to_string","text":"std :: string display_mode_to_string ( DisplayMode display_mode )","title":"function display_mode_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-string_to_display_mode","text":"DisplayMode string_to_display_mode ( std :: string str )","title":"function string_to_display_mode"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator","text":"std :: ostream & operator << ( std :: ostream & os , const IndexRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_1","text":"std :: ostream & operator << ( std :: ostream & os , const PhysicalRegion & region )","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makevector","text":"Vector3 makeVector ( std :: array < double , 3 > && arr ) Enables makeVector({1,2,3}); , construction using an initializer list (likely an accidental omission in current ITK version)","title":"function makeVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makepointarray","text":"PointArray makePointArray ( int size , Point3 value )","title":"function makePointArray"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createtransform","text":"TransformPtr createTransform ( const Matrix33 & mat , const Vector3 & translate = makeVector ({ 0 , 0 , 0 }) )","title":"function createTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane","text":"Plane makePlane ( const Point & p , const Vector3 & n ) Make a plane.","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-makeplane_1","text":"Plane makePlane ( const Point & p0 , const Point & p1 , const Point & p2 )","title":"function makePlane"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getorigin","text":"Point getOrigin ( const Plane plane ) Get origin and normal of plane.","title":"function getOrigin"},{"location":"api/Namespaces/namespaceshapeworks.html#function-getnormal","text":"Vector3 getNormal ( const Plane plane )","title":"function getNormal"},{"location":"api/Namespaces/namespaceshapeworks.html#function-createmeshtransform","text":"MeshTransform createMeshTransform ( const vtkSmartPointer < vtkMatrix4x4 > & mat )","title":"function createMeshTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint","text":"Point toPoint ( const Dims & d ) For deliberate conversions between types.","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_1","text":"Point toPoint ( const Coord & c )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector","text":"Vector toVector ( const Dims & d )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_1","text":"Vector toVector ( const Point & p )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tovector_2","text":"Vector toVector ( const itk :: CovariantVector < double , 3 > & v )","title":"function toVector"},{"location":"api/Namespaces/namespaceshapeworks.html#function-topoint_2","text":"Point toPoint ( const Vector & v )","title":"function toPoint"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord","text":"Coord toCoord ( const Dims & d )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims","text":"Dims toDims ( const Coord & c )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-todims_1","text":"Dims toDims ( const Point & p )","title":"function toDims"},{"location":"api/Namespaces/namespaceshapeworks.html#function-tocoord_1","text":"Coord toCoord ( const Point & p )","title":"function toCoord"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate","text":"template < typename P > P negate ( const P & p ) Negation operator (ITK only has it for Vectors, but sometimes useful for Points)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-negate_1","text":"Vector3 negate ( const Vector3 & v ) Negate function for Vector (requires makeVector)","title":"function negate"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue","text":"template < typename P > P invertValue ( const P & p ) Inversion function for all but Vector.","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-invertvalue_1","text":"Vector3 invertValue ( const Vector3 & v ) Inversion function for Vector (requires makeVector)","title":"function invertValue"},{"location":"api/Namespaces/namespaceshapeworks.html#function-dotproduct","text":"Vector3 dotProduct ( const Vector3 & a , const Vector3 & b ) Vector dot and cross products.","title":"function dotProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-crossproduct","text":"Vector3 crossProduct ( const Vector3 & a , const Vector3 & b )","title":"function crossProduct"},{"location":"api/Namespaces/namespaceshapeworks.html#function-length","text":"double length ( const Vector3 & v )","title":"function length"},{"location":"api/Namespaces/namespaceshapeworks.html#function-toaxis","text":"Axis toAxis ( const std :: string & str )","title":"function toAxis"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axistostring","text":"std :: string axisToString ( Axis axis )","title":"function axisToString"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid","text":"bool axis_is_valid ( const Vector3 & axis ) Ensure an axis is valid.","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-axis_is_valid_1","text":"bool axis_is_valid ( const Axis & axis )","title":"function axis_is_valid"},{"location":"api/Namespaces/namespaceshapeworks.html#function-degtorad","text":"double degToRad ( const double deg ) convert degrees to radians","title":"function degToRad"},{"location":"api/Namespaces/namespaceshapeworks.html#function-mean","text":"double mean ( const Field field ) incrementally compute (single-component) mean of field","title":"function mean"},{"location":"api/Namespaces/namespaceshapeworks.html#function-stddev","text":"double stddev ( const Field field ) compute (single-component) standard deviation of field","title":"function stddev"},{"location":"api/Namespaces/namespaceshapeworks.html#function-range","text":"std :: vector < double > range ( const Field field ) compute (single-component) range of field","title":"function range"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_2","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator + ( const P & p , const P & q )","title":"function operator+"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator - ( const P & p , const P & q )","title":"function operator-"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_3","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const P & q )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_4","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const P & q )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_5","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator += ( P & p , const P & q )","title":"function operator+="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator-_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator -= ( P & p , const P & q )","title":"function operator-="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_6","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator * ( const P & p , const double x )","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_7","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P operator / ( const P & p , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_8","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator *= ( P & p , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_9","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> P & operator /= ( P & p , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal","text":"template < typename T > bool epsEqual ( T a , T b , T epsilon )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_1","text":"template < typename P , typename = std :: enable_if_t < std :: is_same < Image , P >:: value || std :: is_same < Coord , P >:: value || std :: is_same < Dims , P >:: value || std :: is_same < Vector , P >:: value || std :: is_same < Point , P >:: value || std :: is_same < IPoint3 , P >:: value || std :: is_same < FPoint3 , P >:: value >> bool epsEqual ( const P & a , const P & b , const typename P :: ValueType & eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-epsequal_2","text":"bool epsEqual ( double a , double b , double eps )","title":"function epsEqual"},{"location":"api/Namespaces/namespaceshapeworks.html#function-clamp","text":"template < typename T > T clamp ( T value , T min , T max ) Simple clamp operation until C++17.","title":"function clamp"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_10","text":"std :: ostream & operator << ( std :: ostream & os , const Image & img ) stream insertion operators for Image","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_11","text":"Image operator * ( const Image & img , const double x ) override templates defined in [Shapeworks.h]","title":"function operator*"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_12","text":"Image operator / ( const Image & img , const double x )","title":"function operator/"},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_13","text":"Image & operator *= ( Image & img , const double x )","title":"function operator*="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_14","text":"Image & operator /= ( Image & img , const double x )","title":"function operator/="},{"location":"api/Namespaces/namespaceshapeworks.html#function-operator_15","text":"std :: ostream & operator << ( std :: ostream & os , const Mesh & mesh ) stream insertion operators for Mesh","title":"function operator<<"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro","text":"itkEventMacro ( ParticleDomainAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_1","text":"itkEventMacro ( ParticleTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_2","text":"itkEventMacro ( ParticlePrefixTransformSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_3","text":"itkEventMacro ( ParticleNeighborhoodSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_4","text":"itkEventMacro ( ParticlePositionSetEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_5","text":"itkEventMacro ( ParticlePositionAddEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itkeventmacro_6","text":"itkEventMacro ( ParticlePositionRemoveEvent , ParticleEvent )","title":"function itkEventMacro"},{"location":"api/Namespaces/namespaceshapeworks.html#function-savereconstructions","text":"void SaveReconstructions ( std :: vector < Reconstruction > & reconstructions , const std :: vector < std :: string > & srcPaths , const std :: string & saveTo )","title":"function SaveReconstructions"},{"location":"api/Namespaces/namespaceshapeworks.html#function-variant_to_string","text":"template < typename T > std :: string variant_to_string ( T begin , T end )","title":"function variant_to_string"},{"location":"api/Namespaces/namespaceshapeworks.html#function-printnumpyarrayinfo","text":"void printNumpyArrayInfo ( const py :: array & np_array ) print buffer info for the given array (dims, format, strides, etc)","title":"function printNumpyArrayInfo"},{"location":"api/Namespaces/namespaceshapeworks.html#function-verifyorderandpacking","text":"void verifyOrderAndPacking ( const py :: array & np_array ) verify py::array has expected order and is densely packed, throw if not","title":"function verifyOrderAndPacking"},{"location":"api/Namespaces/namespaceshapeworks.html#function-setownership","text":"void setOwnership ( py :: array & array , bool owns ) sets the OWNDATA flag of the given array to owns","title":"function setOwnership"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapnumpyarr","text":"Image :: ImageType :: Pointer wrapNumpyArr ( py :: array & np_array ) helper function for Image.init and Image.assign","title":"function wrapNumpyArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-pytoarr","text":"Array pyToArr ( py :: array & np_array , bool take_ownership = true ) converts py::array to vtkDataArray, optionally taking ownership of data","title":"function pyToArr"},{"location":"api/Namespaces/namespaceshapeworks.html#function-arrtopy","text":"py :: array arrToPy ( Array & array , ArrayTransferOptions xfer = COPY_ARRAY ) convert a vtkDataArray (AOS assumed) to a py::array using specified means of transfer","title":"function arrToPy"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktransformtoeigen","text":"Eigen :: MatrixXd itkTransformToEigen ( TransformPtr itk_xform )","title":"function itkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44toitktransform","text":"TransformPtr eigen44ToItkTransform ( const Eigen :: Matrix < double , 4 , 4 > & eigen_mat )","title":"function eigen44ToItkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vtktransformtoeigen","text":"Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > vtkTransformToEigen ( MeshTransform vtk_xform )","title":"function vtkTransformToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigen44tovtktransform","text":"MeshTransform eigen44ToVtkTransform ( const Eigen :: Matrix < double , 4 , 4 , Eigen :: RowMajor > & eigen_mat )","title":"function eigen44ToVtkTransform"},{"location":"api/Namespaces/namespaceshapeworks.html#function-itktoeigen","text":"template < typename T , unsigned NRows , unsigned NCols > Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > itkToEigen ( const itk :: Matrix < T , NRows , NCols > & itk_mat ) Conversion (by copy) of itk matrix to Eigen::Matrix.","title":"function itkToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-eigentoitk","text":"template < typename T , int NRows , int NCols > itk :: Matrix < T , NRows , NCols > eigenToItk ( const Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > & eigen_mat ) Conversion (by copy) of Eigen::Matrix to itk (i.e., vnl) matrix.","title":"function eigenToItk"},{"location":"api/Namespaces/namespaceshapeworks.html#function-vnltoeigen","text":"template < typename T > Eigen :: Map < VnlMatrix < T > > vnlToEigen ( const vnl_matrix < T > & vnl_mat ) Wrap vnl matrix data to Eigen Matrix.","title":"function vnlToEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen","text":"template < int NRows , int NCols , typename T > Eigen :: Map < Eigen :: Matrix < T , NRows , NCols , Eigen :: RowMajor > > wrapDataWithEigen ( T * data ) Wrap data pointer with Eigen::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: if data goes out of scope (e.g., numpy array size changes), matrix will point to invalid location.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawitheigen_1","text":"template < typename T > Eigen :: Map < Eigen :: Matrix < T , Eigen :: Dynamic , Eigen :: Dynamic , Eigen :: RowMajor > > wrapDataWithEigen ( T * data , size_t nrows , size_t ncols ) Wrap a data pointer of the specified size with Eigen::Matrix.","title":"function wrapDataWithEigen"},{"location":"api/Namespaces/namespaceshapeworks.html#function-wrapdatawithitk","text":"template < unsigned NRows , unsigned NCols , typename T > itk :: Matrix < T , NRows , NCols > wrapDataWithItk ( T * data ) Wrap data pointer with itk::Matrix. Handy for efficiently going back and forth between Python numpy arrays. WARNING: This function actually just copies data.","title":"function wrapDataWithItk"},{"location":"api/Namespaces/namespaceshapeworks.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks.html#variable-pi","text":"const auto Pi = std :: atan ( 1.0 ) * 4.0 ; pi that doesn't depend on deprecated or non-std lib defines Updated on 2023-10-25 at 15:40:26 +0000","title":"variable Pi"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html","text":"shapeworks::mesh Functions Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT) Functions Documentation function compute_thickness void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#shapeworksmesh","text":"","title":"shapeworks::mesh"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions","text":"Name void compute_thickness ( Mesh & mesh, Image & image, Image * dt, double max_dist, double median_radius, std::string distance_mesh) Compute the cortical thickness of a mesh and image (e.g. CT)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1mesh.html#function-compute_thickness","text":"void compute_thickness ( Mesh & mesh , Image & image , Image * dt , double max_dist , double median_radius , std :: string distance_mesh ) Compute the cortical thickness of a mesh and image (e.g. CT) Updated on 2023-10-25 at 15:40:27 +0000","title":"function compute_thickness"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html","text":"shapeworks::particles Functions Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points) Functions Documentation function read_particles Eigen :: VectorXd read_particles ( std :: string filename ) function read_particles_as_vector std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename ) function write_particles void write_particles ( std :: string filename , const Eigen :: VectorXd & points ) function write_particles_from_vector void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#shapeworksparticles","text":"","title":"shapeworks::particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions","text":"Name Eigen::VectorXd read_particles (std::string filename) std::vector< itk::Point< double, 3 > > read_particles_as_vector (std::string filename) void write_particles (std::string filename, const Eigen::VectorXd & points) void write_particles_from_vector (std::string filename, std::vector< itk::Point< double, 3 > > points)","title":"Functions"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#functions-documentation","text":"","title":"Functions Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles","text":"Eigen :: VectorXd read_particles ( std :: string filename )","title":"function read_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-read_particles_as_vector","text":"std :: vector < itk :: Point < double , 3 > > read_particles_as_vector ( std :: string filename )","title":"function read_particles_as_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles","text":"void write_particles ( std :: string filename , const Eigen :: VectorXd & points )","title":"function write_particles"},{"location":"api/Namespaces/namespaceshapeworks_1_1particles.html#function-write_particles_from_vector","text":"void write_particles_from_vector ( std :: string filename , std :: vector < itk :: Point < double , 3 > > points ) Updated on 2023-10-25 at 15:40:27 +0000","title":"function write_particles_from_vector"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html","text":"shapeworks::project Namespaces Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#shapeworksproject","text":"","title":"shapeworks::project"},{"location":"api/Namespaces/namespaceshapeworks_1_1project.html#namespaces","text":"Name shapeworks::project::prefixes shapeworks::project::types Updated on 2023-10-25 at 15:40:27 +0000","title":"Namespaces"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html","text":"shapeworks::project::prefixes Attributes Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX Attributes Documentation variable SEGMENTATION_PREFIX static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ; variable LANDMARKS_FILE_PREFIX static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ; variable SHAPE_PREFIX static constexpr const char * SHAPE_PREFIX = \"shape_\" ; variable MESH_PREFIX static constexpr const char * MESH_PREFIX = \"mesh_\" ; variable CONTOUR_PREFIX static constexpr const char * CONTOUR_PREFIX = \"contour_\" ; variable GROOMED_PREFIX static constexpr const char * GROOMED_PREFIX = \"groomed_\" ; variable GROOMED_CONTOUR_PREFIX static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ; variable CONSTRAINTS_PREFIX static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ; variable GROOMED_TRANSFORMS_PREFIX static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ; variable PROCRUSTES_TRANSFORMS_PREFIX static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ; variable IMAGE_PREFIX static constexpr const char * IMAGE_PREFIX = \"image_\" ; variable FEATURE_PREFIX static constexpr const char * FEATURE_PREFIX = \"feature_\" ; variable GROUP_PREFIX static constexpr const char * GROUP_PREFIX = \"group_\" ; variable LOCAL_PARTICLES static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ; variable WORLD_PARTICLES static constexpr const char * WORLD_PARTICLES = \"world_particles\" ; variable LOCAL_PARTICLES_PREFIX static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ; variable WORLD_PARTICLES_PREFIX static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#shapeworksprojectprefixes","text":"","title":"shapeworks::project::prefixes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes","text":"Name constexpr const char * SEGMENTATION_PREFIX constexpr const char * LANDMARKS_FILE_PREFIX constexpr const char * SHAPE_PREFIX constexpr const char * MESH_PREFIX constexpr const char * CONTOUR_PREFIX constexpr const char * GROOMED_PREFIX constexpr const char * GROOMED_CONTOUR_PREFIX constexpr const char * CONSTRAINTS_PREFIX constexpr const char * GROOMED_TRANSFORMS_PREFIX constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX constexpr const char * IMAGE_PREFIX constexpr const char * FEATURE_PREFIX constexpr const char * GROUP_PREFIX constexpr const char * LOCAL_PARTICLES constexpr const char * WORLD_PARTICLES constexpr const char * LOCAL_PARTICLES_PREFIX constexpr const char * WORLD_PARTICLES_PREFIX","title":"Attributes"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#attributes-documentation","text":"","title":"Attributes Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-segmentation_prefix","text":"static constexpr const char * SEGMENTATION_PREFIX = \"segmentation_\" ;","title":"variable SEGMENTATION_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-landmarks_file_prefix","text":"static constexpr const char * LANDMARKS_FILE_PREFIX = \"landmarks_file_\" ;","title":"variable LANDMARKS_FILE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-shape_prefix","text":"static constexpr const char * SHAPE_PREFIX = \"shape_\" ;","title":"variable SHAPE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-mesh_prefix","text":"static constexpr const char * MESH_PREFIX = \"mesh_\" ;","title":"variable MESH_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-contour_prefix","text":"static constexpr const char * CONTOUR_PREFIX = \"contour_\" ;","title":"variable CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_prefix","text":"static constexpr const char * GROOMED_PREFIX = \"groomed_\" ;","title":"variable GROOMED_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_contour_prefix","text":"static constexpr const char * GROOMED_CONTOUR_PREFIX = \"groomed_contour_\" ;","title":"variable GROOMED_CONTOUR_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-constraints_prefix","text":"static constexpr const char * CONSTRAINTS_PREFIX = \"constraints_\" ;","title":"variable CONSTRAINTS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-groomed_transforms_prefix","text":"static constexpr const char * GROOMED_TRANSFORMS_PREFIX = \"alignment_\" ;","title":"variable GROOMED_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-procrustes_transforms_prefix","text":"static constexpr const char * PROCRUSTES_TRANSFORMS_PREFIX = \"procrustes_\" ;","title":"variable PROCRUSTES_TRANSFORMS_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-image_prefix","text":"static constexpr const char * IMAGE_PREFIX = \"image_\" ;","title":"variable IMAGE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-feature_prefix","text":"static constexpr const char * FEATURE_PREFIX = \"feature_\" ;","title":"variable FEATURE_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-group_prefix","text":"static constexpr const char * GROUP_PREFIX = \"group_\" ;","title":"variable GROUP_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles","text":"static constexpr const char * LOCAL_PARTICLES = \"local_particles\" ;","title":"variable LOCAL_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles","text":"static constexpr const char * WORLD_PARTICLES = \"world_particles\" ;","title":"variable WORLD_PARTICLES"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-local_particles_prefix","text":"static constexpr const char * LOCAL_PARTICLES_PREFIX = \"local_particles_\" ;","title":"variable LOCAL_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html#variable-world_particles_prefix","text":"static constexpr const char * WORLD_PARTICLES_PREFIX = \"world_particles_\" ; Updated on 2023-10-25 at 15:40:27 +0000","title":"variable WORLD_PARTICLES_PREFIX"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html","text":"shapeworks::project::types Types Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap Types Documentation using StringMap using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ; using StringList using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ; using StringMapList using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ; using StringMultiMap using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-25 at 15:40:27 +0000","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#shapeworksprojecttypes","text":"","title":"shapeworks::project::types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types","text":"Name using tsl::ordered_map< std::string, std::string > StringMap using std::vector< std::string > StringList using std::vector< StringMap > StringMapList using std::map< std::string, StringMap > StringMultiMap","title":"Types"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#types-documentation","text":"","title":"Types Documentation"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmap","text":"using shapeworks :: project :: types :: StringMap = typedef tsl :: ordered_map < std :: string , std :: string > ;","title":"using StringMap"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringlist","text":"using shapeworks :: project :: types :: StringList = typedef std :: vector < std :: string > ;","title":"using StringList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmaplist","text":"using shapeworks :: project :: types :: StringMapList = typedef std :: vector < StringMap > ;","title":"using StringMapList"},{"location":"api/Namespaces/namespaceshapeworks_1_1project_1_1types.html#using-stringmultimap","text":"using shapeworks :: project :: types :: StringMultiMap = typedef std :: map < std :: string , StringMap > ; Updated on 2023-10-25 at 15:40:27 +0000","title":"using StringMultiMap"},{"location":"api/Namespaces/namespacestd.html","text":"std Updated on 2023-10-25 at 15:40:27 +0000","title":"std"},{"location":"api/Namespaces/namespacestd.html#std","text":"Updated on 2023-10-25 at 15:40:27 +0000","title":"std"},{"location":"api/Namespaces/namespaceutils.html","text":"utils Updated on 2023-10-25 at 15:40:27 +0000","title":"utils"},{"location":"api/Namespaces/namespaceutils.html#utils","text":"Updated on 2023-10-25 at 15:40:27 +0000","title":"utils"},{"location":"backlog/ShapeworksCmdTools.html","text":"ShapeWorks Tools The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below. [Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities] Image Tools Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing Read This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read. Write This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write. AntiAliasing This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims]. PadVolumeWithConstant This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels. ResampleVolumesToBeIsotropic This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image]. Binarize This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0]. Recenter This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image ReflectVolumes A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored. ClipVolume Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44 CloseHoles TODO Cropping Images This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction ExtractGivenLabelImage A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image. FastMarching A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background. FindLargestBoundingBox A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides ThresholdImages A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold TopologyPreservingSmoothing A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0]. WriteImageInfoToText A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing. Mesh Tools Mesh manipulation is used to blah blah blah... ClipClosedSurface ComputeCurvatureAndCoordFiles ComputeGeodesicDistanceToCurve ComputeGeodesicDistanceToLandmark ComputeGeodesicDistanceFromVerticesToPoints ComputeMeshGeodesics ComputeRasterizationVolumeOriginAndSize ExtractVertexFeatureFromMesh FillMeshHoles FixCuttingPlanes GenerateBinaryAndDTImagesFromMeshes GenerateFeatureGradientFiles GenerateFidsFiles GenerateFidsFilesFromMeshes GetFeatureVolume ParticleBasedSurfaceReconstruction PreviewCmd ProbeFeatureVolumesAtMeshVertices ProbeNormals ProjectPointsOntoMesh ComputeMeanNormals GenerateNormalFeaFiles Reflect Meshes RemoveFidsDTLeakage SmoothMesh ClipClosedSurface Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region ComputeCurvatureAndCoordFiles Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files ComputeGeodesicDistanceToCurve Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceToLandmark Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices. ComputeGeodesicDistanceFromVerticesToPoints Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName ComputeMeshGeodesics Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance ComputeRasterizationVolumeOriginAndSize Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information ExtractVertexFeatureFromMesh Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files FillMeshHoles Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced FixCuttingPlanes Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file GenerateBinaryAndDTImagesFromMeshes Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform GenerateFeatureGradientFiles Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\" GenerateFidsFiles Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GenerateFidsFilesFromMeshes Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned GetFeatureVolume Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values. PreviewCmd This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5) ProbeFeatureVolumesAtMeshVertices Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced ProbeNormals Usage: ProbeNormals DTfilename pointsFilename outFileName ComputeMeanNormals Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt) GenerateNormalFeaFiles Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed Reflect Meshes A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply) RemoveFidsDTLeakage This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames SmoothMesh Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration Alignment Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape] ICPRigid3DImageRegistration A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image. ICPRigid3DMeshRegistration Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment ReflectMeshes Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis TranslateShapeToImageOrigin A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters Resize_origin_resampleShape TODO Analysis Analysis is used to blah blah blah... Optimization Optimization is used to blah blah blah... File Utilities The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT] GENERIC MESH FORMAT CONVERSION Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile fea2vtk Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. stl2ply Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply) stl2vtk Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk) vtk2ply Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply) VTKUnstructuredGridToPolyData Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles MeshFromDT TODO FeaFromVTK TODO","title":"ShapeworksCmdTools"},{"location":"backlog/ShapeworksCmdTools.html#_1","text":"","title":""},{"location":"backlog/ShapeworksCmdTools.html#shapeworks-tools","text":"","title":"ShapeWorks Tools"},{"location":"backlog/ShapeworksCmdTools.html#_2","text":"The shapeworks executable has a variety of tools for data alignment, processing of images and meshes, reading and converting various file formats, optimization, and analysis. These tasks are described below.","title":""},{"location":"backlog/ShapeworksCmdTools.html#_3","text":"[Image Tools] [Mesh Tools] Alignment [Optimization] [File Utilities]","title":""},{"location":"backlog/ShapeworksCmdTools.html#image-tools","text":"Image manipulation is used to blah blah blah... [AntiAliasing] (#anti-aliasing) ClipVolume Cropping Images FastMarching PadVolumeWithConstant ResampleVolumesToBeIsotropic TopologyPreservingSmoothing","title":"Image Tools"},{"location":"backlog/ShapeworksCmdTools.html#read","text":"This tool reads an image. Command Line Name: read-image It uses the following input arguments: --name = Name of file to read.","title":"Read"},{"location":"backlog/ShapeworksCmdTools.html#write","text":"This tool writes an image. Command Line Name: write-image It uses the following input arguments: --name = Name of file to write.","title":"Write"},{"location":"backlog/ShapeworksCmdTools.html#antialiasing","text":"This tool antialiases binary volumes. Command Line Name: antialias It uses the following input arguments: --maxrmserror = The maximum RMS error determines how fast the solver converges. (Range [0.0, 1.0]) [default 0.01]. --numiterations = Number of iterations [default 50]. --numlayers = Number of layers around a 3d pixel to use for this computation [default image dims].","title":" AntiAliasing"},{"location":"backlog/ShapeworksCmdTools.html#padvolumewithconstant","text":"This tool pads a contant value in the x-, y-, and z- directions of a given volume. Command Line Name: pad It uses the following input arguments: --padding = Number of voxels to be padded in each direction. --value = Value to be used to fill padded voxels.","title":"PadVolumeWithConstant"},{"location":"backlog/ShapeworksCmdTools.html#resamplevolumestobeisotropic","text":"This tool resamples given mri/binary volumes to have isotropic voxel spacing. Command Line Name: isoresample It uses the following input arguments: --isospacing = The isotropic spacing in all dimensions. --sizez = Image size in x-direction [ize is autmatically estimated from input image]. --sizey = Image size in y-direction [size is autmatically estimated from input image]. --sizez = Image size in z-direction [size is autmatically estimated from input image].","title":"ResampleVolumesToBeIsotropic"},{"location":"backlog/ShapeworksCmdTools.html#binarize","text":"This tool binarizes an image at some given threshold. Command Line Name: binarize It uses the following input arguments: --threshold = Resulting image has two values for pixels: > threshold set to inside value, <= threshold set to outside value [default epsilon]. --inside = Value of pixels > threshold [default 1.0]. --outside = Value of pixels <= threshold [default 0.0].","title":"Binarize"},{"location":"backlog/ShapeworksCmdTools.html#recenter","text":"This tool recenters an image by changing its origin in image header to the physical coordinates of the center of the image. Command Line Name: recenter-image","title":"Recenter"},{"location":"backlog/ShapeworksCmdTools.html#reflectvolumes","text":"A command line tool that reflect 3d volume images with respect to image center and specific axis. It uses the following input arguments: -inFilename - Image file name which needs to be reflected. - outFilename - Output file name for the reflected image - paddingSize - Axis along which it needs to be reflected - centerFilename - The filename where the image center information will be stored.","title":"ReflectVolumes"},{"location":"backlog/ShapeworksCmdTools.html#clipvolume","text":"Slice 3D Volume Using Cutting Planes Takes set of .nrrd volumes and corresponding cutting planes, and chops the volume accordingly It uses a parameter file with the following tags - num_shapes: number of volumes to be processed (put this correctly) - inputs: paths to input files - outputs: paths to output files - cutting_planes : Set of cutting planes, expressed as 3 3D points separated by spaces example : 1 2 -3 0 34 102 -23.4 2 0.44","title":"ClipVolume"},{"location":"backlog/ShapeworksCmdTools.html#closeholes","text":"TODO","title":"CloseHoles"},{"location":"backlog/ShapeworksCmdTools.html#cropping-images","text":"This tool is to crop the images given the starting index and bounding box size Provide the smallest index and bounding box values from the above tool to this tool as inputs. Inputs: -inFilename - Input image file name -outFilename - Output image file name -MRIinFilename - MRI image file name -MRIoutFilename - MRI output image file name -bbX - bounding box value in X direction -bbY - bounding box value in Y direction -bbZ - bounding box value in Z direction -startingIndexX - starting index in X direction -startingIndexY - starting index in Y direction -startingIndexZ - starting index in Z direction","title":"Cropping Images"},{"location":"backlog/ShapeworksCmdTools.html#extractgivenlabelimage","text":"A command line tool that extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image. It uses the following input arguments: -inFilename The filename of the input image from which label has to be extracted. -labelVal The label value which has to be extracted. -outFilename The filename of the output image.","title":"ExtractGivenLabelImage"},{"location":"backlog/ShapeworksCmdTools.html#fastmarching","text":"A command line tool that computes distance transform volume from a binary (antialiased) image ... --inFilename = The filename of the input image to be processed. --outFilename = The filename of the output distance transform image. --isoValue = The level set value that defines the interface between foreground and background.","title":"FastMarching"},{"location":"backlog/ShapeworksCmdTools.html#findlargestboundingbox","text":"A command line tool that o compute largest bounding box size given a set of images. It uses the following input arguments: -inFilename - A text file with the file names for which the largest size has to be computed. - outPrefix - output prefix to be used to save the parameters for the estimated bounding box - paddingSize - number of extra voxels in each direction to pad the largest bounding box, checks agains min image size is performed to make sure that this padding won't get out of bounds for the smallest image in the file names provides","title":"FindLargestBoundingBox"},{"location":"backlog/ShapeworksCmdTools.html#thresholdimages","text":"A command line tool that threholds a given image into a binary label based on upper and lower intensity bounds given by the user..... --inFilename = Input image file path. --outFilename = The filename of the output threshold image. --lowerThresholdLevel = The lower threshold level (optional, default = FLT_MIN) --upperThresholdLevel = The upper threshold level (optional, default = FLT_MAX) --insideValue = The inside pixel value after threshold --outsideValue = The outside pixel value after threshold","title":"ThresholdImages"},{"location":"backlog/ShapeworksCmdTools.html#topologypreservingsmoothing","text":"A parameter file based tool that smoothes distance transforms while preserving shape's topology. Here is an example of an input xml file that can be used. parameter file tags are as follows: -inputs The filenames of the input distance transforms to be smoothed. -dtFiles The filenames of the output smoothed distance transforms. -outputs The filenames of the output smoothed isosurface images. -verbose Show each intermediate step [default 0]. -isoValue Isovalue to be used to define the surface in the input distance transform [default 0.0]. -smoothing_iterations Number of iterations to perform smoothing [default 10]. -alpha Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.5]. -beta Smoothing parameter in I' = (max-min). \\frac{1}{1+exp(-\\frac{1-\\beta}{\\alpha)} + min [default 10.0]. -propagationScale The PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE) versus propagating inwards (NEGATIVE). [default 20.0].","title":"TopologyPreservingSmoothing"},{"location":"backlog/ShapeworksCmdTools.html#writeimageinfototext","text":"A command line tool that extracts header information from a nrrd file and write it to a text file It uses the following input arguments: -inFilename The filename of the input image to extract its header information (origin, size, spacing). -outPrefix The output prefix to be used to save header info to _ .txt where info is origin, size, and spacing.","title":"WriteImageInfoToText"},{"location":"backlog/ShapeworksCmdTools.html#mesh-tools","text":"Mesh manipulation is used to blah blah blah...","title":"Mesh Tools"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface","text":"","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles","text":"","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve","text":"","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark","text":"","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints","text":"","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics","text":"","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize","text":"","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh","text":"","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes","text":"","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes","text":"","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes","text":"","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles","text":"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles","text":"","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes","text":"","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume","text":"","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#particlebasedsurfacereconstruction","text":"","title":"ParticleBasedSurfaceReconstruction"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd","text":"","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices","text":"","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals","text":"","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#projectpointsontomesh","text":"","title":"ProjectPointsOntoMesh"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals","text":"","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles","text":"","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes","text":"","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage","text":"","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh","text":"","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#clipclosedsurface_1","text":"Given a set of meshes (vtk) and corresponding cutting planes, this tool clip each mesh with its cutting plane and result in a closed surface. A buffer distance can be used to move the cutting plane in the opposite direction of its normal to leave a buffer region below the cutting plane It uses a parameter file with the following tags: - input_meshes: a list of vtk file names for meshes to be processed - output_meshes: the vtk filenames of the output to be produced - cutting_planes: a list of cutting planes in three-point form ( x1 y1 z1 x2 y2 z2 x3 y3 z3 ) - buffer_distance: phyical distance of the buffer region","title":"ClipClosedSurface"},{"location":"backlog/ShapeworksCmdTools.html#computecurvatureandcoordfiles_1","text":"Compute curvature and x,y,z on vertices on given triangular meshes (ply format) It uses a parameter file with the following tags - mesh: a list of ply file names for meshes to be processed - outPath: path to save feature files","title":"ComputeCurvatureAndCoordFiles"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetocurve_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given curves It uses a parameter file with the following tags - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file, this will also be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToCurve"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancetolandmark_1","text":"Compute geodesic distances on given triangular meshes (ply format) to a set of given landmarks It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead (filenames will be affected), if true, we need to provide the spacing, size and origin of their distance transforms that generated those fids files - origin_x, origin_t, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - landmark_files: a list of text files containing the 3d point locations of the landmarks associated with each mesh (a single file for each mesh with each row a different landmark xyz) - landmark_labels: the name of each landmark specified in landmark files, this will be used in the naming of the output feature files (fea) This tool uses fids to project a given landmark onto the closest VERTEX on the mesh then use this vertex as a seed for geodesics computation. It will be more accurate to project the point onto a triangle and use its vertices as seeds to initiate geodesics to the rest of the mesh then use geodesic approximation scheme to obtain the geodesic from the projected point to all the mesh vertices.","title":"ComputeGeodesicDistanceToLandmark"},{"location":"backlog/ShapeworksCmdTools.html#computegeodesicdistancefromverticestopoints_1","text":"Generate a text file containing geodesic distance to vertices of given triangular mesh (ply) for given set of points with their triangle information (x y z triangleId alpha beta gamma) Usage: ComputeGeodesicDistanceFromVerticesToPoints meshFile(.ply) pointsFile outFileName","title":"ComputeGeodesicDistanceFromVerticesToPoints"},{"location":"backlog/ShapeworksCmdTools.html#computemeshgeodesics_1","text":"Compute pairwise vertices geodesic distances on given triangular meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - geo: a list of geo file names for meshes to be saved - stopping_distance_factor: percentage of the great circle circumference where vertices will be assigned an very large geodesic distance","title":"ComputeMeshGeodesics"},{"location":"backlog/ShapeworksCmdTools.html#computerasterizationvolumeoriginandsize_1","text":"Given a set of meshes (vtk), compute the origin and size of a volume that would contain the rasterization of each mesh so that all meshes will be embedded within the same volume characteristics It uses a parameter file with the following tags\" - mesh: a list of vtk file names for meshes to be processed - centering: a flag to indicate whether build the to-be built rasterization is centered on the shape's center - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - pad_pixels: number of pixels to be padded in each dimension - out_origin_filename: the filename to save the origin information - out_size_filename: the filename to save the size information","title":"ComputeRasterizationVolumeOriginAndSize"},{"location":"backlog/ShapeworksCmdTools.html#extractvertexfeaturefrommesh_1","text":"Extract scalar values associated to mesh vertices to txt file It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - out_path: a directory (otional) to save output files, it not indicated, out files will be saved in the same directory as the mesh files - vtk_feature_name: feature name in the vtk file - out_feature_name: feature name to be used in the output file names, if not indicated, mesh filenames will be used as is - read_as_ply: to read ply rather than vtk files","title":"ExtractVertexFeatureFromMesh"},{"location":"backlog/ShapeworksCmdTools.html#fillmeshholes_1","text":"Given a set of meshes (vtk), this tool finds holes in a mesh and closes them. It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced","title":"FillMeshHoles"},{"location":"backlog/ShapeworksCmdTools.html#fixcuttingplanes_1","text":"Given bunch of curves/landmarks for each shape, fix the orientation of the provided cutting plane to point to the side where the curves/landmarks exist It uses a parameter file with the following tags - mesh: a list of vtk/ply file names for meshes to be processed - input_planes: a list of txt file names for the planes to be processed - output_planes: a list of txt file names for the fixed planes to be saved - curves_prefix: where we can find the point files of the curves, this should be the common part of the filename for all given mesh files - curves_suffix: string (optional) that will suffix all curve files - curves_ext: the extension of the curve files - curve_labels: the name of each curve according to the suffix given for each curve pts file","title":"FixCuttingPlanes"},{"location":"backlog/ShapeworksCmdTools.html#generatebinaryanddtimagesfrommeshes_1","text":"Compute binary images (i.e. segmentation) and their distance transforms of a given set of meshes (ply format) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform","title":"GenerateBinaryAndDTImagesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#generatefeaturegradientfiles_1","text":"Probe gradient at vertices and generate feature gradient files It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed \".ply\" - fea_vol: feature volume(s) \".nrrd\" - fea_per_mesh: number of features \"int\"","title":"GenerateFeatureGradientFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfiles_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - dist: a list of approximate distance transforms - mesh: a list of ply file names for meshes to be processed - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFiles"},{"location":"backlog/ShapeworksCmdTools.html#generatefidsfilesfrommeshes_1","text":"Compute face index map of a given set of meshes (ply format) along with its signed distance transfrom using spatial hashing It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - origin_x, origin_y, origin_z: the origin in physical units of the resulting distance transform - spacing_x, spacing_y, spacing_z: voxel spacing of the resulting distance transform - size_x, size_y, size_z: the size (rows,cols,slices) of the resulting distance transform - number_of_subvoxels: : number of subvoxels to divid each voxel (higher improve subvoxel accuarcy esp for meshes with high curvature regions) - number_of_voxels: number of voxels to construct a supervoxel - narrow_band: a narrow band defined in phyical units to limit the supvoxel-accuarate distance transform computation, distance values of voxels outside this band will be inferred using fids - ball_radius_factor: to reduce the radius(b) at each super-voxel. (At times b is too big and contains the whole mesh. Use < 1) - num_threads: number of thread to be spawned","title":"GenerateFidsFilesFromMeshes"},{"location":"backlog/ShapeworksCmdTools.html#getfeaturevolume_1","text":"Compute a volumetric representation of fea files by propagating feature values (from fea files) from mesh surface to a narrowband surrounding the mesh It uses a parameter file with the following tags\" - with_fids: a flag to indicate whether to use fids to generate the geodesics, if 0, kdtree will be used instead - mesh: a list of ply file names for meshes to be processed - fids: a list of corresponding fids files (in case with_fids = 1) - dist: a list of corresponding distance transforms to indicate where to fill the feature volume, i.e. the narrowband - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on. - narrow_band: distance in physical coordinates from the mesh its inside and outside where we propagate feature values.","title":"GetFeatureVolume"},{"location":"backlog/ShapeworksCmdTools.html#previewcmd_1","text":"This is a commandline tool that encapsulate preview-based triangular mesh processing tools including decimation, smoothing and fixing, it has the following inputs: --inFile: the input vtk filename of the mesh to be processed. --outFile: the output vtk filename. --fixWinding: do element winding fix (default: 1) --decimate: perform mesh decimation (default: 1) --doLaplacianSmoothingBeforeDecimation: perform laplacian smoothing before decimation (default: 1) --doLaplacianSmoothingAfterDecimation: perform laplacian smoothing after decimation (default: 1) --smoothingLambda: laplacian smoothing lambda (default: 0.5) --smoothingIterations: laplacian smoothing number of iterations (default: 1) --decimationPercentage: percentage of target number of clusters/vertices (default: 0.5)","title":"PreviewCmd"},{"location":"backlog/ShapeworksCmdTools.html#probefeaturevolumesatmeshvertices_1","text":"Given a set of meshes (vtk) and corresponding feature volumes where these meshes live, this tool probe the feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process (report the feature values from the feature volumes at the mesh vertices) It uses a parameter file with the following tags\" - input_meshes: a list of vtk file names for meshes to be processed - feature_volumes: a list of image files (3D) to be probed corresponding to the given set of meshes - output_meshes: the vtk filenames of the output to be produced","title":"ProbeFeatureVolumesAtMeshVertices"},{"location":"backlog/ShapeworksCmdTools.html#probenormals_1","text":"Usage: ProbeNormals DTfilename pointsFilename outFileName","title":"ProbeNormals"},{"location":"backlog/ShapeworksCmdTools.html#computemeannormals_1","text":"Compute mean normals using spherical coordinates for given normals for a set of shapes It uses a parameter file with the following tags - normals: a list of files containing normals at a set of points on each shape (output files from ProbeNormals) - pointsCount: number of points in every shape file - outFileName: full filename (with path) to save resulting file (default: mean.normals.txt)","title":"ComputeMeanNormals"},{"location":"backlog/ShapeworksCmdTools.html#generatenormalfeafiles_1","text":"Probe normals at vertices and save as fea files It uses a parameter file with the following tags - DT: a list of DT file names to be processed - mesh: a list of mesh file names to be processed","title":"GenerateNormalFeaFiles"},{"location":"backlog/ShapeworksCmdTools.html#reflect-meshes_1","text":"A command line tool that reflect meshes with respect to a specified center and specific axis. -inFilename - Mesh file to be reflected. -outFilename - The filename of the output reflection mesh. -reflectCenterFilename(Optional) - The filename for origin about which reflection occurs. (Default reflection happes about the center of the mesh bounding box) -inputDirection - Direction along which it needs to be reflected -meshFormat(Optional) - The IO mesh format (Default = vtk, another option is ply)","title":"Reflect Meshes"},{"location":"backlog/ShapeworksCmdTools.html#removefidsdtleakage_1","text":"This tool can be used a postprocessing for fids distance trasnform to fix voxels that are mis-signed as in or out of the isosurface in fids computation (mainly due to irregular triangulation It uses a parameter file with the following tags\" - fids_dist: a list of distance transforms computed via fids - approx_dist: the corresponding approximate distances (from rasterization then dt computation) - out_dist: output distance transform filenames","title":"RemoveFidsDTLeakage"},{"location":"backlog/ShapeworksCmdTools.html#smoothmesh_1","text":"Given a set of meshes (vtk), this tool laplacian smooth the mesh It uses a parameter file with the following tags: - inputs: a list of vtk file names for meshes to be processed - outputs: the vtk filenames of the output to be produced - iterations: number of smoothing iterations - relaxation_factor: amount of vertex displacement in each iteration","title":"SmoothMesh"},{"location":"backlog/ShapeworksCmdTools.html#alignment","text":"Alignment tools are used to blah blah blah... ICPRigid3DImageRegistration ReflectMeshes [Resize_origin_resampleShape]","title":"Alignment"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dimageregistration","text":"A command line tool that performs iterative closed point (ICP) 3D rigid registration on a pair of images. It uses the following input arguments: Input: -targetDistanceMap: the distance map of target image. -sourceDistanceMap: the distance map of source image. -sourceSegmentation: the segmentation of source image. -isoValue: as we need to get point set from surface for ICP, this iso value is required to get the isosurface. The default value is 0.0. -icpIterations: the number of iterations user want to run. Output: -solutionSegmentation: the filename of the aligned segmentation of source image.","title":"ICPRigid3DImageRegistration"},{"location":"backlog/ShapeworksCmdTools.html#icprigid3dmeshregistration","text":"Performs iterative closed point (ICP) rigid registration on a pair of vtk meshes. It uses a parameter file that would enable to specify the source mesh (moving) and the target mesh (fixed) to be used to estimated the rigid transformation matrix then apply the same transformation on other meshes defined in the source mesh domain to be mapped to the target domain parameter file tags are as follows: - source_mesh: vtk filename of the moving mesh - target_mesh: vtk filename of the fixed mesh - out_mesh : vtk filename of the aligned moving mesh to be save - out_transform : txt filename to save the estimated transformation - source_meshes: (optional) a list of vtk filenames for meshes defined in the source mesh domain to be mapped to the target domain using the same transformation matrix estimated. - out_meshes : a list vtk filenames to save source_meshes after applying the transformation matrix. - mode : Registration mode rigid, similarity, affine (default: similarity) - icp_iterations: number of iterations - debug: verbose debugging information - visualize: display the resulting alignment","title":"ICPRigid3DMeshRegistration"},{"location":"backlog/ShapeworksCmdTools.html#reflectmeshes","text":"Reflect meshes to make data in whole ensemble align in same direction. It uses a parameter file with the following tags\" - inputs: a list of vtk/ply file names for meshes to be relfected - output: a list of output filenames - is_unstructured_grid: : (a scalar 1/0 for each input file) indicated whether the input meshes are in vtk unstructured grid format (Default 0) - direction: which axis to reflect with respect to, 0 for x-axis, 1 fir y-axis, and 2 for z-axis","title":"ReflectMeshes"},{"location":"backlog/ShapeworksCmdTools.html#translateshapetoimageorigin","text":"A command line tool that performs translational alignment of a given shape image based on either its center of mass or a given 3d point. It uses the following input arguments: -inFilename The filename of the input shape to be transformed. -outFilename The filename of the output transformed shape. -MRIinFilename The assoicated image filename to be transformed. -MRIoutFilename The filename of the output transformed image. -useCenterOfMass A flag to transform image using center of mass. -centerX x-coordinate of a user-defined center point. -centerY y-coordinate of a user-defined center point. -centerZ z-coordinate of a user-defined center point. -parameterFilename The filename to store the transform parameters","title":"TranslateShapeToImageOrigin"},{"location":"backlog/ShapeworksCmdTools.html#resize_origin_resampleshape","text":"TODO","title":"Resize_origin_resampleShape"},{"location":"backlog/ShapeworksCmdTools.html#analysis","text":"Analysis is used to blah blah blah...","title":"Analysis"},{"location":"backlog/ShapeworksCmdTools.html#optimization","text":"Optimization is used to blah blah blah...","title":"Optimization"},{"location":"backlog/ShapeworksCmdTools.html#file-utilities","text":"The File Utilities are used to read and convert data stored in a variety of different formats. GENERIC MESH FORMAT CONVERSION stl2ply vtk2ply [MeshFromDT]","title":"File Utilities"},{"location":"backlog/ShapeworksCmdTools.html#generic-mesh-format-conversion","text":"Converts different mesh formats (vtk, ply, stl, obj) to other formats It uses a parameter file with the following tags - input_format: integer value specifying the input mesh file format (1) .vtk (2) .ply (3) .stl (4) .obj - output_format: integer value specifying the output mesh file format (1) .vtk (2) .ply (3) .stl - input_mesh: paths of the input meshes - output_mesh: paths of the output meshes Usage: ./GenericMeshConversion paramfile","title":"GENERIC MESH FORMAT CONVERSION"},{"location":"backlog/ShapeworksCmdTools.html#fea2vtk","text":"Read in feature files (.fea) and their corresponding triangular mesh (ply) and output a vtk file containing the feature values as scalar onto the mesh (colormap) It uses a parameter file with the following tags\" - mesh: a list of ply file names for meshes to be processed - fea_per_mesh: number of fea files to be processed per mesh - fea: a list of fea files to be processed such that the first fea_per_mesh fea files correspond to the first mesh and so on.","title":"fea2vtk"},{"location":"backlog/ShapeworksCmdTools.html#stl2ply","text":"Commandline tool to convert stl file format to ply file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.ply)","title":"stl2ply"},{"location":"backlog/ShapeworksCmdTools.html#stl2vtk","text":"Commandline tool to convert stl file format to vtk file format ... \"Usage: stl2vtk inFilename(.stl) outFilename(.vtk)","title":"stl2vtk"},{"location":"backlog/ShapeworksCmdTools.html#vtk2ply","text":"Commandline tool to convert vtk file format to ply file format ... \"Usage: vtk2ply inFilename(.vtk) outFilename(.ply)","title":"vtk2ply"},{"location":"backlog/ShapeworksCmdTools.html#vtkunstructuredgridtopolydata","text":"Convert vtk unstructered grid data to vtk polydata. It uses a paramfile of the following tags: - inputs: list of input vtk files containing unstructured grid data - outputs: list of output vtk files which will be saved containing the vtk polydata version of the corresponding input vtkfiles","title":"VTKUnstructuredGridToPolyData"},{"location":"backlog/ShapeworksCmdTools.html#meshfromdt","text":"TODO","title":"MeshFromDT"},{"location":"backlog/ShapeworksCmdTools.html#feafromvtk","text":"TODO","title":"FeaFromVTK"},{"location":"backlog/fim_v4.html","text":"FIM_V4 Library Overview TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) -- License fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Building To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables. Library Export This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#fim_v4-library","text":"","title":"FIM_V4 Library"},{"location":"backlog/fim_v4.html#overview","text":"TODO THIS WORK IS BASED ON FIM LIBRARY FROM FIDS AND GEODESICS REPOS JANUARY 2016 (fim_v4_10_17_2014) --","title":"Overview"},{"location":"backlog/fim_v4.html#license","text":"fim: Fast Eikonal Solver for Triangular Meshes Zhisong Fu zhisong@cs.utah.edu The MIT License Copyright (c) 2009 Scientific Computing and Imaging Institute, University of Utah. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"License"},{"location":"backlog/fim_v4.html#building","text":"To build and link with ShapeWorks: Configure with CMake Make sure to specify the CMAKE_INSTALL_PREFIX variable if you don't want it to install in a standard system location. Run \"make install\" Select \"BUILD_Mesh_Support\" when configuring ShapeWorks in CMake If you have installed fim in a reasonable location, then the ShapeWorks config will automatically find it. Otherwise, you'll need to specify the FIM_LIB and FIM_INCLUDE_PATH variables.","title":"Building"},{"location":"backlog/fim_v4.html#library-export","text":"This library is deployed as part of ShapeWorks, but at some point in the future it may be desirable to make it completely independent by moving it to a separate repository. This can be achieved, maintaining the git commit history, by using the following steps from a clone of the ShapeWorks code. git filter-branch --tag-name-filter --index-filter 'git rm -r --cached --ignore-unmatch ' --prune-empty -f -- --all git gc --aggressive Some resources if you want to better understand the above commands include: add folder from one repo to another detach part of a git repository follow renames when splitting git subtree","title":"Library Export"},{"location":"cloud/cloud-analyze-module.html","text":"ShapeWorks Cloud Analyze Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer . View PCA The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Group Difference The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing. Charts The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view Shape Viewer While in the analyze tab, the Shape Viewer displays the mean (average) shape generated. Show Difference From Mean This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Analyze Module"},{"location":"cloud/cloud-analyze-module.html#shapeworks-cloud-analyze-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The analyze module can be viewed after a successful optimization job. There are three panels in the analyze module, View PCA , Charts , Shape Viewer .","title":"ShapeWorks Cloud Analyze Module"},{"location":"cloud/cloud-analyze-module.html#view-pca","text":"The View PCA panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider and/or the animate option. The animate option allows for an automatic adjustment of the Standard Deviation slider within a mode of variation. Upon selecting the animate option, the comparison vectors and colormap for each shape in the mode will be calculated. This will only occur the first time that the option is selected for a given mode. Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"View PCA"},{"location":"cloud/cloud-analyze-module.html#group-difference","text":"The Group Difference mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. The animate option allows for an automatic adjustment of the slider to display real-time changes between the group pairing selected. Upon selecting the animate option, the comparison vectors and colormap for each shape in the group comparison will be calculated. This will only occur the first time that the option is selected for a given group value pairing.","title":"Group Difference"},{"location":"cloud/cloud-analyze-module.html#charts","text":"The analysis charts provide visualizations of the shape evaulation data. For more information about shape evaluation, see Shape Model Evaluation . You can zoom into a chart with the mouse scroll wheel and click and drag to pan. Chart Options Tool Description Save as Image Save the chart as an SVG View Data View the chart data in table format View Data: Download Download the chart data as a .csv file View Data: Copy to Clipboard Copy the chart data in CSV format Zoom Zoom into an area by mouse rectangle selection Zoom Reset Reset the zoom level to zero Restore Restore the chart to default view","title":"Charts"},{"location":"cloud/cloud-analyze-module.html#shape-viewer","text":"While in the analyze tab, the Shape Viewer displays the mean (average) shape generated.","title":"Shape Viewer"},{"location":"cloud/cloud-analyze-module.html#show-difference-from-mean","text":"This checkbox allows for visualization from any surface to the mean. The arrows are placed on each particle. The direction and color of the vector/surface indicate the difference from the mean shape.","title":"Show Difference From Mean"},{"location":"cloud/cloud-data-module.html","text":"ShapeWorks Cloud Data Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data. Anatomies Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here . Subjects Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . Landmarks Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Data Module"},{"location":"cloud/cloud-data-module.html#shapeworks-cloud-data-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud data module contains the project's anatomies and subjects , including the associated data.","title":"ShapeWorks Cloud Data Module"},{"location":"cloud/cloud-data-module.html#anatomies","text":"Anatomies can be selected or deselected to allow you to choose what is viewed in the Shape Viewer . For more information on how multiple anatomies are implemented in ShapeWorks Studio, navigate here .","title":"Anatomies"},{"location":"cloud/cloud-data-module.html#subjects","text":"Subjects contain each individual mesh in the dataset. Each subject can be selected or deselected to allow you to choose what is viewed in the Shape Viewer .","title":"Subjects"},{"location":"cloud/cloud-data-module.html#landmarks","text":"Landmarks can be displayed in ShapeWorks Cloud to mark anatomical features. Landmarks can be viewed and/or modified in the \"Info\" tab while in a project with landmarks.","title":"Landmarks"},{"location":"cloud/cloud-dataset.html","text":"ShapeWorks Cloud Dataset Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations . Create Subset The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset. Thumbnail The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view. Upload Dataset Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Datasets"},{"location":"cloud/cloud-dataset.html#shapeworks-cloud-dataset","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The dataset list displays the uploaded datasets. Each dataset contains projects , which are where you interact with the data. A dataset can contain meshes and segmentations .","title":"ShapeWorks Cloud Dataset"},{"location":"cloud/cloud-dataset.html#create-subset","text":"The \"Create Subset\" option allows you to create a new subset dataset from the selected dataset. Here, you are able to provide a name, description, and keywords. You are also able to select which anatomies and subjects you wish you include in the subset.","title":"Create Subset"},{"location":"cloud/cloud-dataset.html#thumbnail","text":"The thumbnail for a dataset can be generated in the Shape Viewer . The thumbnail will appear as a preview on the dataset view.","title":"Thumbnail"},{"location":"cloud/cloud-dataset.html#upload-dataset","text":"Uploading a dataset to Shapeworks Cloud can only be done from SWCC, the ShapeWorks Cloud Client. Go to ShapeWorks Cloud Client for more information.","title":"Upload Dataset"},{"location":"cloud/cloud-groom-module.html","text":"ShapeWorks Cloud Groom Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"cloud/cloud-groom-module.html#shapeworks-cloud-groom-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The groom module provides option for mesh grooming and alighnment. The groomed object is able to be viewed in the Shape Viewer . You also have the option of skipping grooming if your data is already prepped. For more information on how to groom your data, navigate here . To groom the data, click the \"Groom\" option. If you wish to re-groom data, simply click \"Regroom\". To restore the groom parameters to the default values, click \"Restore Defaults\". Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing Smoothing Iterations Number of iterations of selected smoothing. More iterations provides more smoothing Laplacian Relaxation Controls the amount of smoothing in each iteration Windowed Sinc Pass Band Alters how much smoothing each iteration performs Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Cloud Groom Module"},{"location":"cloud/cloud-optimize-module.html","text":"ShapeWorks Cloud Optimize Module Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"cloud/cloud-optimize-module.html#shapeworks-cloud-optimize-module","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . To optimize the data, click the \"Optimize\" option. If you wish to re-optimize data, simply click \"Reoptimize\". To restore the optimization parameters to the default values, click \"Restore Defaults\". Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Relative Weighting The relative weight of the correspondence term in the optimization steps. Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Landmarks Enable the use of landmarks as starting particles Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Cloud Optimize Module"},{"location":"cloud/cloud-project.html","text":"ShapeWorks Cloud Project Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data. Create a Project To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client . Edit a Project To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Projects"},{"location":"cloud/cloud-project.html#shapeworks-cloud-project","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. Within the project list, you can select or delete a project as well as create a new project. Each project contains a separate copy of the data.","title":"ShapeWorks Cloud Project"},{"location":"cloud/cloud-project.html#create-a-project","text":"To create a project, select a dataset and click \"Create Project\". Here, you will be able to add a name, description, and keywords for the project, as well as designate the new project as private . A project can also be created via the ShapeWorks Cloud Client .","title":"Create a Project"},{"location":"cloud/cloud-project.html#edit-a-project","text":"To edit a project, select \"EDIT\" on any project you have permissions to edit. You are able to modify the name, description, or keywords.","title":"Edit a Project"},{"location":"cloud/cloud-shape-viewer.html","text":"ShapeWorks Cloud Shape Viewer Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. Shape Viewer Options Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle Layers The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features Set Thumbnail Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shapeworks-cloud-shape-viewer","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean.","title":"ShapeWorks Cloud Shape Viewer"},{"location":"cloud/cloud-shape-viewer.html#shape-viewer-options","text":"Option Description Layers Set the layer(s) to display Axis System Choose which axis system to use. Options: XYZ, Medical Set Thumbnail Set the dataset thumbnail Show Difference From Mean Shows the difference from the mean shape (analyze module only) Reset View Reset the view back to the default zoom and angle","title":"Shape Viewer Options"},{"location":"cloud/cloud-shape-viewer.html#layers","text":"The layer choice option is NOT available in the analyze module . Layer Description Original The original mesh data Groomed The groomed mesh (colored green) Reconstructed The reconstructed mesh (colored red) Particles Optimization particles for the shape Landmarks Landmarks which mark anatomical features","title":"Layers"},{"location":"cloud/cloud-shape-viewer.html#set-thumbnail","text":"Set the thumbnail for the dataset. The current shape orientation will be saved and then be visible in the dataset list for that dataset.","title":"Set Thumbnail"},{"location":"cloud/getting-started-with-cloud.html","text":"Getting Stared with ShapeWorks Cloud Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data. Login Screen To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ . Dataset List The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information. Project List The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information. Data Module The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information. Groom Module The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information. Optimize Module The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information. Analyze Module The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information. Shape Viewer The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Getting Started"},{"location":"cloud/getting-started-with-cloud.html#getting-stared-with-shapeworks-cloud","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. ShapeWorks Cloud provides an All-in-one browser interface to the ShapeWorks toolkit. In ShapeWorks Cloud, you can access datasets, create projects, as well view and interact with, groom, optimize, and analyze your data.","title":"Getting Stared with ShapeWorks Cloud"},{"location":"cloud/getting-started-with-cloud.html#login-screen","text":"To access and use ShapeWorks Cloud, you must first create an account. To login to ShapeWorks Cloud, navigate to www.shapeworks-cloud.org/ .","title":"Login Screen"},{"location":"cloud/getting-started-with-cloud.html#dataset-list","text":"The dataset list shows uploaded datasets. In this page you can preview a dataset via the thumbnail, select a dataset and create a subset. By selecting a dataset, you access the project list for the selected dataset. See ShapeWorks Cloud Dataset for more information.","title":"Dataset List"},{"location":"cloud/getting-started-with-cloud.html#project-list","text":"The project list for a selected dataset displays the current projects for that dataset. Each project can be selected to interact with the data and run ShapeWorks operations. The project list also allows the creation of more projects within the dataset. See ShapeWorks Cloud Project for more information.","title":"Project List"},{"location":"cloud/getting-started-with-cloud.html#data-module","text":"The data module contains the project's anatomies/domains and subjects and their associated data. See ShapeWorks Cloud Data Module for more information.","title":"Data Module"},{"location":"cloud/getting-started-with-cloud.html#groom-module","text":"The groom module provides options for mesh grooming and alignment. The groomed object is able to be viewed in the Shape Viewer . If the data is already groomed, you do not need to run a groom step in ShapeWorks Cloud. See ShapeWorks Cloud Groom Module for more information.","title":"Groom Module"},{"location":"cloud/getting-started-with-cloud.html#optimize-module","text":"The optimize module provides options for particle-based optimization. The optimization particles can be viewed on the shapes in the Shape Viewer . See ShapeWorks Cloud Optimize Module for more information.","title":"Optimize Module"},{"location":"cloud/getting-started-with-cloud.html#analyze-module","text":"The analyze module can be viewed after a successful optimization job. The analyze module contains PCA data and analysis charts. See ShapeWorks Cloud Analyze Module for more information.","title":"Analyze Module"},{"location":"cloud/getting-started-with-cloud.html#shape-viewer","text":"The Shape Viewer displays the subjects selected in the data module . The Shape Viewer contains options to select layers, select an axis system, set the dataset thumbnail, reset view, and if the analyze module is active, the difference from mean. See ShapeWorks Cloud Shape Viewer for more information.","title":"Shape Viewer"},{"location":"cloud/swcc.html","text":"ShapeWorks Cloud Client (SWCC) Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users. Authentication & Sessions This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out Datasets and Projects The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you. Datasets The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d ) Projects The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects The Project File The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run. Other Classes and Methods As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database Examples def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"ShapeWorks Cloud Client"},{"location":"cloud/swcc.html#shapeworks-cloud-client-swcc","text":"Note : This documentation version could be outdated. Click here to get the most up-to-date version. The ShapeWorks Cloud Client (SWCC) is a Python module that acts as an interface for sending requests to an active ShapeWorks Cloud server. The average use cases for this module include downloading data for custom analysis, uploading new datasets, and creating new projects. Currently, this python module is the only way to upload datasets to ShapeWorks Cloud, since this action should only be performed by trusted and informed users.","title":"ShapeWorks Cloud Client (SWCC)"},{"location":"cloud/swcc.html#authentication-sessions","text":"This library includes a session class called SwccSession which handles authentication to a live ShapeWorks Cloud server. This class is context-managed, so you can open a session in a python with block, and it will be closed for you after the block is complete. Within the live context, you can provide your credentials to the login method and receive a token. You do not need to do anything with the token, but it is available to you. After the login statement, you may begin sending requests to the server with various other methods (see following sections). Below is an example: from swcc.api import swcc_session with swcc_session () as session : token = session . login ( username , password ) # begin sending requests # automatically logged out","title":"Authentication & Sessions"},{"location":"cloud/swcc.html#datasets-and-projects","text":"The primary use cases for the python client include uploading and downloading Datasets and Projects. It is not likely that you will need to manipulate other classes directly, since Datasets and Projects manage subsequent classes for you.","title":"Datasets and Projects"},{"location":"cloud/swcc.html#datasets","text":"The Dataset class has the following attributes, for which you can provide values either in the constructor or by setting them directly: name, file, license, description, acknowledgement, keywords, contributors, publications . It also has properties which may be read from the object: subjects, projects, segmentations, meshes, contours, images, landmarks, constraints . The Dataset class has the following methods: download(output_path) : Download all files related to subsequent objects including Segmentations, Meshes, Images, etc. create() : Save the state of the python object as a database object on the server force_create() : Save the object to the database, overwriting it if it already exists from_name(name) : Returns an iterator of all Dataset objects in the server database that match the provided name string add_project(file, keywords, description) : A shortcut for creating a Project object associated with this Dataset, without using the Project constructor directly add_subject(subject_name) : A shortcut for creating a Subject object associated with this Dataset, without using the Subject constructor directly Below is an example. my_dataset = Dataset ( name = \u201d My Dataset \u201d , description = \u201d This is my first dataset object \u201d ) my_dataset . license = license_file . read () my_dataset . acknowledgement = acknowledgement_file . read () my_dataset . add_subject ( \u201c Subject One \u201d ) my_dataset . add_project ( project_file , \u201c Keywords \u201d , \u201c First Project for My Dataset \u201d ) my_dataset . create () my_dataset . force_create () # has no effect print ( my_dataset . id ) # after saving, the object has an id print ( my_dataset . meshes ) other_dataset = Dataset . from_name ( \u201c Other \u201d ) other_dataset . download ( \u201c / tmp \u201d )","title":"Datasets"},{"location":"cloud/swcc.html#projects","text":"The Project class has the following attributes, for which you can provide values either in the constructor or by setting them directly: file, keywords, description, dataset, last_cached_analysis . It also has properties which may be read from the object: groomed_segmentations, groomed_meshes, particles . The Project class has the following methods: download(output_path) : Download all files related to subsequent objects including Subjects, Segmentations, Meshes, Images, Groomed Segmentations, Groomed Meshes, Particles, etc. create() : Save the state of the python object as a database object on the server and interpret the contents of the file saved to the \u201cfile\u201d attribute as subsequent objects","title":"Projects"},{"location":"cloud/swcc.html#the-project-file","text":"The file saved to a Project encodes the project\u2019s relationship to all subsequent objects, and it should be formatted properly so that the create method can correctly interpret the contents. The Project file is a JSON-type file with the extension \u201c.swproj\u201d. The contents of the file should reference the paths of relevant files via absolute or relative paths. Be sure that these files are accessible to the script you run.","title":"The Project File"},{"location":"cloud/swcc.html#other-classes-and-methods","text":"As mentioned above, the most common use cases of the SWCC API involve using the Dataset and Project classes, which will handle their subsequent objects. In a rarer use case, one might need to manipulate one of the subsequent objects directly. The Project and Dataset classes inherit from a class called APIModel . The following other classes exist and also inherit from this model: Segmentation Mesh Contour Image GroomedSegmentation GroomedMesh OptimizedParticles Landmarks Constraints CachedAnalysisGroup CachedAnalysisModePCA CachedAnalysisMode CachedAnalysis Each of these classes has the following methods: from_id(id) : Class method. Fetch an existing object of this type from the server that matches the provided id list() : Class method. Return a list of all existing objects of this type from the server delete() : Delete an object from the database create() : Save an object to the database","title":"Other Classes and Methods"},{"location":"cloud/swcc.html#examples","text":"def upload_dataset ( dataset_name , description , project_file , private = True ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Uploading { dataset_name } dataset and project (overwrite=True)' ) dataset = Dataset ( name = dataset_name , private = private , description = description , license = 'No license' , acknowledgement = 'No acknowledgement' , ) . force_create () project_file = Path ( upload_dir , project_file ) project = Project ( file = project_file , description = 'Project created via SWCC' , dataset = dataset , # last_cached_analysis=\"project_demo_analysis.json\", ) . create () print ( project ) print ( 'Done. \\n ' ) def download_project ( dataset_name , folder_name ): username = input ( \"Username: \" ) password = getpass ( \"Password: \" ) with swcc_session ( base_url = \"[shapeworks server url]/api/v1\" ) as session : token = session . login ( username , password ) session = swcc_session ( token = token ) . __enter__ () print ( f 'Downloading { dataset_name } dataset and project.' ) dataset = Dataset . from_name ( dataset_name ) for project in dataset . projects : project . download ( Path ( download_dir , folder_name )) print ( 'Done. \\n ' )","title":"Examples"},{"location":"deep-learning/data-augmentation.html","text":"Data Augmentation for Deep Learning ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations. Using the Data Augmentation Package The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils Running Data Augmentation To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . Visualizing Data Augmentation This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. Data Augmentation Steps 0. Collect Real Data As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM). 1. Embed Real Data First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA). 2. Fit a Parametric Distribution Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace. 3. Sample from the Distribution Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved. 4. Project Samples The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples. 5. Complete Sample Generation The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample. Sampling Distributions The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate). Multivariate Gaussian Distribution To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space. Mixture of Multivariate Gaussians Distribution A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space. Kernel Density Estimate Distribution Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#data-augmentation-for-deep-learning","text":"ShapeWorks includes a Python package, DataAugmentationUtils , that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). The DataAugmentationUtils particularly has tools to generate thousands of image-shape pairs based on the available real data. Fabricated (i.e., augmented) examples are generated to preserve the population shape statistics and exhibit realistic intensity variations.","title":"Data Augmentation for Deep Learning"},{"location":"deep-learning/data-augmentation.html#using-the-data-augmentation-package","text":"The ShapeWorks data augmentation package, DataAugmentationUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DataAugmentationUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code. import DataAugmentationUtils","title":"Using the Data Augmentation Package"},{"location":"deep-learning/data-augmentation.html#running-data-augmentation","text":"To run the complete data augmentation process as detailed in Data Augmentation Steps , add the following to your Python code. DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method . world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list .","title":"Running Data Augmentation"},{"location":"deep-learning/data-augmentation.html#visualizing-data-augmentation","text":"This function creates a visualization for augmented data. It creates a matrix of scatterplots that opens automatically in the default web browser. The scatterplots show the PCA values of the real and augmented data so that they can be compared pairwise across the PCA dimensions. DataAugmentationUtils . visualizeAugmentation ( data_csv , viz_type ) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed.","title":"Visualizing Data Augmentation"},{"location":"deep-learning/data-augmentation.html#data-augmentation-steps","text":"","title":"Data Augmentation Steps"},{"location":"deep-learning/data-augmentation.html#0-collect-real-data","text":"As a preliminary step, the data on which augmentation will be based on is needed. This includes the shape model .particles files and their corresponding images. This can be acquired using ShapeWorks or any other method of generating point distribution models (PDM).","title":"0. Collect Real Data"},{"location":"deep-learning/data-augmentation.html#1-embed-real-data","text":"First, the real shape data (i.e., PDM) is embedded into a lower-dimensional subspace. This is done by creating a matrix that contains all of the real examples, then reducing the dimension via Principal Component Analysis (PCA).","title":"1. Embed Real Data"},{"location":"deep-learning/data-augmentation.html#2-fit-a-parametric-distribution","text":"Next, a parametric distribution that can be sampled from is fit to the shape examples embedded in the low-dimension subspace.","title":"2. Fit a Parametric Distribution"},{"location":"deep-learning/data-augmentation.html#3-sample-from-the-distribution","text":"Shape samples are randomly drawn from this distribution, and the closest real shape example to each sample is saved.","title":"3. Sample from the Distribution"},{"location":"deep-learning/data-augmentation.html#4-project-samples","text":"The embedded shape samples are then projected back to shape space, providing new generated shape/correspondence examples.","title":"4. Project Samples"},{"location":"deep-learning/data-augmentation.html#5-complete-sample-generation","text":"The closest real shape example to each generated shape sample is then used to generate the image corresponding to the fabricated shape sample, giving the full pair of generated samples. This is done by finding the warp between the closest real correspondence points and the generated correspondence points, then applying that warp to the corresponding image of the closest real example. This provides us with an image with the intensity profile of the real example but the shape of the generated sample.","title":"5. Complete Sample Generation"},{"location":"deep-learning/data-augmentation.html#sampling-distributions","text":"The sampler_type parameter determines which type of distribution to fit to the embedded data. The options are Gaussian (a single multivariate Gaussian distribution), mixture (a mixture of Gaussian distributions) or KDE (kernel density estimate).","title":"Sampling Distributions"},{"location":"deep-learning/data-augmentation.html#multivariate-gaussian-distribution","text":"To fit a multivariate Gaussian distribution (which can be seen in Step 2 of Data Augmentation Steps ), the probability density function is parameterized by the mean and the covariance matrix of the embedded data matrix. New samples are then randomly sampled for this normal distribution. The closest real example to each sampled point is found by calculating the Mahalanobis distance within the embedded space.","title":"Multivariate Gaussian Distribution"},{"location":"deep-learning/data-augmentation.html#mixture-of-multivariate-gaussians-distribution","text":"A Gaussian mixture model can provide a more appropriate probability density function when the embedded data distribution is mutli-modal. To fit a mixture model, first we cluster the embedded samples and select the optimal number of clusters by minimizing Akaike information criterion (AIC) and Bayesian information criterion (BIC). This number determines how many Gaussian distributions (or components) should be used. Next, the expectation-maximization (EM) algorithm is used to fit a mixture-of-Gaussian model with this number of components. This distribution can then be randomly sampled from, and the closest real example is chosen using Mahalanobis distance within the embedded space.","title":"Mixture of Multivariate Gaussians Distribution"},{"location":"deep-learning/data-augmentation.html#kernel-density-estimate-distribution","text":"Kernel density estimate (KDE) is a non-parametric way of estimating the probability density function of the embedded data. It is fit by defining a Gaussian ball around each real data point in the embedded space, the combination of which provides the distribution. The kernel bandwidth or variance of the Gaussian balls is computed as the average distance to the nearest neighbor computed using the Mahalanobis distance within the embedded space. To sample from the KDE distribution, a real example is randomly selected, then a point is randomly sampled from its kernel. The selected real example is also returned to use its corresponding image to generate the augmented image-shape pair. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"Kernel Density Estimate Distribution"},{"location":"deep-learning/deep-ssm.html","text":"SSMs Directly from Images DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018. What is DeepSSM? The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning. Why DeepSSM? The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently. DeepSSM Steps 1. Data Augmentation The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction. 2. Creation of Data Loaders The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user. 3. Training PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder. 4. Testing The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image. 5. Evaluation To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate. Using the DeepSSM Python Package The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils Get train and validation torch loaders This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None . Get test torch loader This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None . Train DeepSSM This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters. Config File Parameter Descriptions model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing. Test DeepSSM This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict. Analyze Results This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset. Visualizing Error The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#ssms-directly-from-images","text":"DeepSSM is a deep learning framework that estimates statistical representations of shape directly from unsegmented images once trained. DeepSSM includes a data augmentation process and a convolutional neural network (CNN) model. This documentation provides an overview of the DeepSSM process; see relevant papers for a full explanation. Relevant papers Jadie Adams, Riddhish Bhalodia, Shireen Elhabian. Uncertain-DeepSSM: From Images to Probabilistic Shape Models. In MICCAI-ShapeMI, Springer, Cham, 2020. Riddhish Bhalodia, Shireen Elhabian, Ladislav Kavan, and Ross Whitaker. DeepSSM: a deep learning framework for statistical shape modeling from raw images. In MICCAI-ShapeMI, pp. 244-257. Springer, Cham, 2018. Riddhish Bhalodia, Anupama Goparaju, Tim Sodergren, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Joshua Cates, Ross Whitaker, Shireen Elhabian. Deep Learning for End-to-End Atrial Fibrillation Recurrence Estimation. Computing in Cardiology (CinC), 2018.","title":"SSMs Directly from Images"},{"location":"deep-learning/deep-ssm.html#what-is-deepssm","text":"The input to the DeepSSM network is unsegmented 3D images of the anatomy of interest, and the output is the point distribution model (PDM). DeepSSM requires training examples of image/PDM pairs that are generated via the traditional Shapeworks grooming and optimization pipeline or other particle distribution models. Once the network has been trained on these examples, it can predict the PDM of unseen examples given only images of the same anatomy/object class, bypassing the need for labor-intensive segmentation, grooming, and optimization parameter tuning.","title":"What is DeepSSM?"},{"location":"deep-learning/deep-ssm.html#why-deepssm","text":"The benefits of the DeepSSM pipeline include: Less Labor : DeepSSM does not require segmentation, only a bounding box about where the anatomy of interest lies in the image. End-to-end : Does not require separate grooming and optimization steps; it is an end-to-end process. This also reduces memory requirement as images do not need to be saved after intermediate grooming steps. Faster Results : Once a DeepSSM network has been trained, it can be used to predict the shape model on a new image in seconds on a GPU. The DeepSSM network is implemented in PyTorch and requires a GPU to run efficiently.","title":"Why DeepSSM?"},{"location":"deep-learning/deep-ssm.html#deepssm-steps","text":"","title":"DeepSSM Steps"},{"location":"deep-learning/deep-ssm.html#1-data-augmentation","text":"The first step to creating a DeepSSM model is generating training data. Deep networks require thousands of training instances and since medical imaging data is typically limited, data augmentation is necessary. The data augmentation process is described here: Data Augmentation for Deep Learning . The data augmentation process involves reducing the PDM's to a low-dimensional space via Principal Component Analysis (PCA), preserving a chosen percentage of the variation. The PCA scores are saved and used as the target output for DeepSSM prediction. The PCA scores are deterministically mapped back to the PDM (i.e., shape space) using the eigenvalues and vectors once the DeepSSM model makes a prediction.","title":"1. Data Augmentation"},{"location":"deep-learning/deep-ssm.html#2-creation-of-data-loaders","text":"The next step is to reformat the data (original and augmented) into PyTorch tensors. 80% of the data is randomly selected to be training data, and the remaining 20% of the data is used as a validation set. The input images are whitened and turned into tensors. They can also be optionally downsampled to a smaller size to allow for faster training. The corresponding PCA scores are also normalized or whitened to avoid DeepSSM learning to favor the primary modes of variation and are then turned to tensors. PyTorch data loaders are then created with a batch size specified by the user.","title":"2. Creation of Data Loaders"},{"location":"deep-learning/deep-ssm.html#3-training","text":"PyTorch is used in constructing and training DeepSSM. We have implemented two different network architectures: Base-DeepSSM: The network architecture is defined to have five convolution layers followed by two fully connected layers, as illustrated in the figure below. Parametric ReLU activation is used, and the weights are initialized using Xavier initialization. The network is trained for the specified number of epochs using Adam optimization to minimize the L2 loss function with a learning rate of 0.0001. The average training and validation error are printed and logged each epoch to determine convergence. TL-DeepSSM: In TL-DeepSSM, the input is an image and correspondence pair. The network architecture of the TL-DeepSSM consists of two parts: (i) the autoencoder that learns the latent dimension for each correspondence, and (ii) the network that learns the latent dimension from the image (this is called the T-flank and it is similar to the Base-DeepSSM architecture). The training routine is broken into three parts. First, the correspondence autoencoder is trained. Next, the T-flank is trained while the correspondence autoencoder weights are kept frozen. Finally, the entire model is trained jointly. For inference using a testing sample, one can directly obtain the correspondences from an image via the T-flank and decoder.","title":"3. Training"},{"location":"deep-learning/deep-ssm.html#4-testing","text":"The trained model is then used to predict the PCA score from the images in the test set. These PCA scores are then un-whitened and mapped back to the particle coordinates using the eigenvalues and eigenvectors from PCA. Thus a PDM is acquired for each test image.","title":"4. Testing"},{"location":"deep-learning/deep-ssm.html#5-evaluation","text":"To evaluate the accuracy of DeepSSM output, we compare a mesh created from the ground truth segmentation to a mesh created from the predicted PDM. To obtain the original mesh, we use the ShapeWorks MeshFromDistanceTransforms command to the isosurface mesh from the distance transform created from the true segmentation. To obtain the predicted mesh, we use the ShapeWorks ReconstructSurface command with the mean and predicted particles to reconstruct a surface. We then compare the original mesh to the predicted mesh via surface-to-surface distance. To find the distance from the original to the predicted, we consider each vertex in the original and find the shortest distance to the predicted mesh's surface. This process is not symmetric as it depends on the vertices of one mesh, so the distance from the predicted to the original will be slightly different. We compute the Hausdorff distance that takes the max of these vertex-wise distances to return a single value as a measure of accuracy. We also consider the vertex-wise distances as a scalar field on the mesh vertices and visualize them as a heat map on the surface. This provides us with a way of seeing where the predicted PDM was more or less accurate.","title":"5. Evaluation"},{"location":"deep-learning/deep-ssm.html#using-the-deepssm-python-package","text":"The ShapeWorks DeepSSM package, DeepSSMUtils , is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . Activate shapeworks environment Each time you use ShapeWorks and/or its Python packages, you must first activate its environment using the conda activate shapeworks command on the terminal. To use the DeepSSMUtils package, make sure you have the shapeworks conda environment is activated and add the following import to your Python code: import DeepSSMUtils","title":"Using the DeepSSM Python Package"},{"location":"deep-learning/deep-ssm.html#get-train-and-validation-torch-loaders","text":"This function turns the original and augmented data into training and validation torch loaders. The data provided is randomly split so that 80% is used in the training set and 20% is used in the validation set. DeepSSMUtils . getTrainValLoaders ( out_dir , data_aug_csv , batch_size = 1 , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loaders. data_aug_csv : The path to the csv containing original and augmented data, which is the output when running data augmentation as detailed in Data Augmentation for Deep Learning . batch_size : The batch size for training data. The default value is 1. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. The default value is 1. down_dir The directory to which downsampled images should be written. The default value is None .","title":"Get train and validation torch loaders"},{"location":"deep-learning/deep-ssm.html#get-test-torch-loader","text":"This function turns the provided data into a test torch loader. DeepSSMUtils . getTestLoader ( out_dir , test_img_list , down_factor = 1 , down_dir = None ) Input arguments: out_dir : Path to the directory to store the torch loader. test_img_list : A list of paths to the images that are in the test set. down_factor Determines if the images should be downsampled for faster training. For example a value of 1 indicates the images should not be downsampled, while a value of 0.5 indicates the images should be downsampled to half of their original size. This should match what is done for the training and validation loaders. The default value is 1. down_dir The directory to which downsampled image should be written. The default value is None .","title":"Get test torch loader"},{"location":"deep-learning/deep-ssm.html#train-deepssm","text":"This function defines a DeepSSM model and trains it on the data provided. After training the \"final\" and \"best\" model are saved. The final model is saved after all training epochs have run. The best model is saved after the epoch which had the lowest prediction error on the validation set. The best model makes use of early stopping to prevent overfitting. DeepSSMUtils . trainDeepSSM ( config_file ) Config file: Training requires a JSON config file which defines all model architecture and training parameters.","title":"Train DeepSSM"},{"location":"deep-learning/deep-ssm.html#config-file-parameter-descriptions","text":"model_name : The name of the model, typically this matches the name of the JSON conflict file. The model and predictions will be saved in the directory: out_dir/model_name/ num_latent_dim : The size of the latent dimension. paths : A dictionary with all the needded paths. out_dir : The directory to which output should be written. loader_dir : The directory that has the training, validation, and test torch data loaders. aug_dir : The directory that has the augmented data. encoder : A dictionary with information about the encoder. deterministic : If true indicates the encoder should be deterministic. If false indicates the encoder should be stochastic. decoder : A dictionary with information about the decoder. deterministic : If true indicates the decoder should be deterministic. If false indicates the decoder should be stochastic. linear : If true indicates the decoder should be linear. If false indicates the decoder should be non-linear. loss : A dictionary with info about the loss. function : The loss function to be used in training. Options: MSE or Focal . Default: MSE . supervised_latent : If true then the latent space is supervised during training. For example, the PCA scores in the original DeepSSM model. If false then the latent space is unsupervised. trainer : A dictionary with info about training. epochs : The number of training epochs. learning_rate : The learning rate to use in training. decay_lr : A dictionary with the information about the learning rate decay during training. enabled : If true the learning rate should decay during training. type : The type of learning rate scheduler to be used. Options: CosineAnnealing or Step . Default: CosineAnnealing . parameters : A dictionary with the information about the learning rate scheduler. val_freq : How often to evaluate the error on the validation set in training (i.e., one means every epoch, two means every other, etc.) fine_tune : A dictionary with the information about fine tuning. enabled : If true the model should be fine tuned after general training. If false fine tuning should not be done and the following fine tuning parameters need not be set. loss : The loss function to be used in fine tuning. epochs : The number of fine tuning epochs. learning_rate : The learning rate to use in fine tuning. decay_lr : If true the learning rate should decay during fine tuning. val_freq : How often to evaluate the error on the validation set in fine tuning (i.e., one means every epoch, two means every other, etc.) tl_net : A dictionary with the information about the TL-DeepSSM model. enabled : If true the model will be trained using TL-DeepSSM model. If false the Base DeepSSM will be used. ae_epochs : The number of epochs to train the autoencoder. tf_epochs : The number of epochs to train the T-flank. joint_epochs : The number of epochs to train the whole model. alpha : The weight applied to the T-flank with respect to the autoencoder loss when training the whole model. a_ae : Focal loss parameter when calculating the autoencoder loss. c_ae : Focal loss parameter when calculating the autoencoder loss. a_lat : Focal loss parameter when calculating the T-flank loss. c_lat : Focal loss parameter when calculating the T-flank loss. use_best_model : If true the model from the epoch which achieved the best validation accuracy is used in testing (essentially the early stopping model). If false then the final model after all training epochs is used in testing.","title":"Config File Parameter Descriptions"},{"location":"deep-learning/deep-ssm.html#test-deepssm","text":"This function gets predicted shape models based on the images provided using a trained DeepSSM model. DeepSSMUtils . testDeepSSM ( config_file ) The testing function takes the same config paremeters file as the training function above. Input arguments: out_dir : Path to directory where predictions are saved. model_path : Path to train DeepSSM model. loader_dir : Path to the directory containing test torch loader. PCA_scores_path : Path to eigenvalues and eigenvectors from data augmentation that are used to map predicted PCA scores to particles. num_PCA : The number of PCA scores the DeepSSM model is trained to predict.","title":"Test DeepSSM"},{"location":"deep-learning/deep-ssm.html#analyze-results","text":"This function analyzes the shape models predicted by DeepSSM by comparing them to the true segmentation. DeepSSMUtils . analyzeResults ( out_dir , DT_dir , prediction_dir , mean_prefix ) Input arguments: out_dir : Path to the directory where meshes and analysis should be saved. DT_dir : Path to the directory containing distance transforms based on the true segmentations of the test images. prediction_dir : Path to the directory containing predicted particle files from testing DeepSSM. mean_prefix : Path to the mean particle and mesh files for the dataset.","title":"Analyze Results"},{"location":"deep-learning/deep-ssm.html#visualizing-error","text":"The error meshes that are output from the analiyze step can be visualized in Studio. These meshes have a distance scalar field on them which captures the distance between the true and predicted mesh. To view in Studio, run the following from the command line: ShapeWorksStudio path/to/error/mesh.vtk","title":"Visualizing Error"},{"location":"deep-learning/pytorch-gpu.html","text":"PyTorch GPU Support for ShapeWorks ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch. Checking if PyTorch installation has GPU support To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment. Reinstalling the Correct PyTorch Version If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#pytorch-gpu-support-for-shapeworks","text":"ShapeWorks deep learning tools, such as the DeepSSMUtils package, requires PyTorch with GPU support. This is installed with the rest of the ShapeWorks Anaconda environment using install_shapeworks . It selects the most recent stable release of PyTorch which can be found at pytorch.org . When the Anaconda enironment is created using install_shapeworks , PyTorch with GPU support is installed if the system's current CUDA driver version is supported. Otherwise it selects the CPU version of PyTorch.","title":"PyTorch GPU Support for ShapeWorks"},{"location":"deep-learning/pytorch-gpu.html#checking-if-pytorch-installation-has-gpu-support","text":"To check if your shapeworks environment has PyTorch with GPU support, run the following: conda activate shapeworks python >>> import torch >>> print(torch.cuda.is_available()) >>> exit() If torch.cuda.is_available() is True then PyTorch has GPU support, otherwise the CPU version was installed. If torch cannot be imported than PyTorch was not installed to the shapeworks environment.","title":"Checking if PyTorch installation has GPU support"},{"location":"deep-learning/pytorch-gpu.html#reinstalling-the-correct-pytorch-version","text":"If you find that your system requires an older version of PyTorch or install_shapeworks did not correcty find your CUDA version, the following steps explain how to install a different PyTorch version in the shapeworks conda environment. Detailed instructions about the different ways to install PyTorch can be found here: PyTorch Getting Started CUDA compatibility can be checked here: CUDA-Compatibility If the CPU version of PyTorch was installed, that first needs to be uninstalled. To uninstall run: conda activate shapeworks pip uninstall torch torchvision torchaudio Check which CUDA version is installed on your system using one of the methods explained here: How to check CUDA version Install the correct PyTorch to shapeworks environment using: pip install torch===1.7.1+cu torchvision===0.8.2+cu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html Where VERSION is your CUDA version with no dot (such as 92 for 9.2 or 110 for 11.0). Restart your system and check if shapeworks now has PyTorch with GPU support using the instructions above.","title":"Reinstalling the Correct PyTorch Version"},{"location":"dev/build.html","text":"How to Build ShapeWorks from Source? If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything. Minimum Requirements Linux CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0 Mac CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0 Windows CMake 3.11 (provided by conda below if not already installed) MSVC 2019 Clone source To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands. Install dependencies Linux and Mac Anaconda We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. VXL, VTK, ITK, Eigen and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Windows CMake Download and install [CMake] Download and install [Visual Studio 2019] Anaconda Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK . Configure and Build Linux & Mac Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake . Options If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables. Building Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there. Before running Examples/Python scripts and Examples/Python/notebooks Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory] Examples OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj Windows Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it. Examples An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON .. Options Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#how-to-build-shapeworks-from-source","text":"If you encounter problems, have questions, or need help, please contact . After you finish building... While user installations have everything you need in the PATH, developer builds like these need those additions. Please See Adding Environment Variables for Development for instructions on the simple devenv script that takes care of everything.","title":"How to Build ShapeWorks from Source?"},{"location":"dev/build.html#minimum-requirements","text":"","title":"Minimum Requirements"},{"location":"dev/build.html#linux","text":"CMake 3.11 (provided by conda below if not already installed) GCC 9.0.0","title":"Linux"},{"location":"dev/build.html#mac","text":"CMake 3.11 (provided by conda below if not already installed) Clang 10.0.0","title":"Mac"},{"location":"dev/build.html#windows","text":"CMake 3.11 (provided by conda below if not already installed) MSVC 2019","title":"Windows"},{"location":"dev/build.html#clone-source","text":"To clone the ShapeWorks source: $ git clone https://github.com/SCIInstitute/ShapeWorks See How to Contribute? for more details on git commands.","title":"Clone source"},{"location":"dev/build.html#install-dependencies","text":"","title":"Install dependencies"},{"location":"dev/build.html#linux-and-mac","text":"","title":"Linux and Mac"},{"location":"dev/build.html#anaconda","text":"We use Anaconda (conda) to install many dependencies required for both building and running ShapeWorks. Conda [sub]environments do not affect a machine's global setup in any way, do not require sudo to install, and are only available at the user level when activated. To install conda and the dependencies it provides (currently requires either bash or zsh shell), run: $ source install_shapeworks.sh [environment name]` Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments. ShapeWorks uses git-lfs to store image data for testing. If git-lfs was not already installed before cloning ShapeWorks, please use the following commands to get this data: $ git lfs fetch $ git lfs install $ git lfs checkout Activate shapeworks environment Each time you build or use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"Anaconda"},{"location":"dev/build.html#vxl-vtk-itk-eigen-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use $ ./build_dependencies.sh --help for more details on the available options. Note If you get an error that looks like this: which: no qmake in (...) For GUI applications, please make sure at least version $QT_MIN_VER of Qt5 is installed and that its qmake is in the path. Download Qt5 from: https://download.qt.io/archive/qt/ Make sure you added Qt to your path as explained in the Qt5 installation step. Note OpenSUSE Users: If you get an error that looks like this: Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) Make sure the following are installed: Mesa-devel, freeglut-devel, libX11-devel Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VXL, VTK, ITK, Eigen and OpenVDB"},{"location":"dev/build.html#windows_1","text":"","title":"Windows"},{"location":"dev/build.html#cmake","text":"Download and install [CMake] Download and install [Visual Studio 2019]","title":"CMake"},{"location":"dev/build.html#anaconda_1","text":"Download and install [Anaconda] . Important It is recommended not to add Anaconda to your PATH and not to register Anaconda as your default Python. Using an MSYS2 Prompt (e.g. git-bash), run source install_shapeworks.sh [environment name] Note: By default this creates an environment named shapeworks , but you can specify a different name and it's okay to have multiple environments.","title":"Anaconda"},{"location":"dev/build.html#vtk-itk-eigen-xlnt-jkqtplotter-libigl-geometry-central-acvd-and-openvdb","text":"These dependencies can be installed using the build_dependencies.sh script. Use an msys2 shell (e.g., git bash) to do this on Windows. Use $ ./build_dependencies.sh --help for more details on the available build_dependencies options. Important If you get an error that says: which: no qmake in (...) Make sure you added Qt to your path as explained in the Qt5 installation step. Important If you decide to build ITK yourself and you would like to use the ShapeWorks GUI applications, ITK must be built with VTK .","title":"VTK, ITK, Eigen, XLNT, jkqtplotter, libIGL, geometry central, ACVD, and OpenVDB"},{"location":"dev/build.html#configure-and-build","text":"","title":"Configure and Build"},{"location":"dev/build.html#linux-mac","text":"Make a build directory and use cmake to configure your build: mkdir build cd build cmake .. There is a CMake GUI to see and change any of the options: - On OSX/Linux, you can use the GUI by running ccmake instead of cmake .","title":"Linux & Mac"},{"location":"dev/build.html#options","text":"If you used the build_dependencies.sh script above, the prefix for all dependencies is the same. Otherwise, the specific paths to all the dependencies are all required. Required (if you used build_dependencies.sh): -DCMAKE_PREFIX_PATH= Required (otherwise): -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -G default: Unix Makefiles (ex: -GXCode or -G\"Visual Studio 16 2019\" -Ax64) -DBuild_Studio=[OFF|ON] default: OFF -DCMAKE_INSTALL_PREFIX= default: ./install -DCMAKE_BUILD_TYPE=[Debug|Release] default: Release (only required is default generator is used) See Examples below for common values of the variables.","title":"Options"},{"location":"dev/build.html#building","text":"Makefiles: make -j where num_procs is the number of parallel processes, say 8. You might need to build using cmake --build . -j 16 to pass parallel flags to dependent projects (e.g., vtk) XCode project: open ShapeWorks.xcodeproj and build from there.","title":"Building"},{"location":"dev/build.html#before-running-examplespython-scripts-and-examplespythonnotebooks","text":"Developer environment should be set by using the devenv.sh script by running this: $ source devenv.sh [build_directory]","title":"Before running Examples/Python scripts and Examples/Python/notebooks"},{"location":"dev/build.html#examples","text":"OSX example that builds dependencies separately, then generates an XCode project for ShapeWorks: $ ./build_dependencies.sh mkdir build cd build cmake -DCMAKE_PREFIX_PATH=\"${PWD}/../dependencies/install\" -DBuild_Studio:BOOL=ON -Wno-dev -Wno-deprecated -GXcode .. open ShapeWorks.xcodeproj","title":"Examples"},{"location":"dev/build.html#windows_2","text":"Use the cmake from the Anaconda Prompt with shapeworks env activated to configure and generate project files for your preferred build system (e.g., Visual Studio 16 2019). Like with all the other platforms, after running build_dependencies.sh a suggested cmake command is printed. Create a build directory and use it.","title":"Windows"},{"location":"dev/build.html#examples_1","text":"An example that builds dependencies separately then generates a Visual Studio project for ShapeWorks (note that by default a Visual Studio project will be created): > conda activate shapeworks > ./build_dependencies.sh --build-dir=../dependencies --install-dir=../dependencies > mkdir build > cd build > cmake -G\"Visual Studio 16 2019\" -Ax64 -DVXL_DIR=../dependencies/vxl/build -DCMAKE_PREFIX_PATH=../dependencies -DBuild_Studio:BOOL=ON ..","title":"Examples"},{"location":"dev/build.html#options_1","text":"Required: -DCMAKE_PREFIX_PATH= (This is different from qmake path in the Install Qt5 step -DVTK_DIR= (contains VTKConfig.cmake) -DITK_DIR= (contains ITKConfig.cmake) -DEigen3_DIR= (contains Eigen3Config.cmake) -DOpenVDB_DIR= (contains FindOpenVDB.cmake) ... and so on for each dependency ... Optional: -D BUILD_TESTS=[OFF|ON] default: ON -D CMAKE_INSTALL_PREFIX= default: ./install -D CMAKE_BUILD_TYPE=[Debug|Release] After cmake the Visual Studio solution can be opened with start ShapeWorks.sln from the build directory. RelWithDebInfo only Currently it's only possible to build RelWithDebInfo on Windows.","title":"Options"},{"location":"dev/commands.html","text":"How to Add ShapeWorks Commands? To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/commands.html#how-to-add-shapeworks-commands","text":"To add ShapeWorks Commands, the following steps need to be followed: Declare command in Applications/shapeworks/Commands.h COMMAND_DECLARE(CommandName, CommandType); CommandName is the name of the command. CommandType is the type of command. ShapeWorks supports ImageCommand, MeshCommand, ParticleSystemCommand, OptimizeCommandGroup and GroomCommandGroup Define command in Applications/shapeworks/ImageCommands.cpp if CommandType is ImageCommand Applications/shapeworks/MeshCommands.cpp if CommandType is MeshCommand Applications/shapeworks/ParticleSystemCommands.cpp if CommandType is ParticleSystemCommand Applications/shapeworks/Commands.cpp for other types of commands /////////////////////////////////////////////////////////////////////////////// // CommandName /////////////////////////////////////////////////////////////////////////////// void CommandName::buildParser() { const std::string prog = \"commandname\"; // supports command-name as well const std::string desc = \"brief description of command\"; parser.prog(prog).description(desc); parser.add_option(\"--optionname\").action(\"store\").type(\"double\").set_default(0.01).help(\"Description of optionname.\"); // additional options/arguments... Command::buildParser(); } bool CommandName::execute(const optparse::Values &options, SharedCommandData &sharedData) { if (!sharedData.validImage()) { std::cerr << \"No image to operate on\\n\"; return false; } double optionName = static_cast(options.get(\"optionname\")); // read additional options/arguments... sharedData.image.example(optionName, ...); // call related function return true; } Add command to Applications/shapeworks/shapeworks.cpp shapeworks.addCommand(CommandName::getCommand());","title":"How to Add ShapeWorks Commands?"},{"location":"dev/contribute.html","text":"How to Contribute to ShapeWorks? ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account . Source and Branches To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run] Commits Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch. Logs and diffs View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only Tags Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github. Advanced There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#how-to-contribute-to-shapeworks","text":"ShapeWorks uses git for managing source code so changes can be integrated from multiple people. Here are some of the basics to check out the repository, make and share modifications, and keep track of all your changes along the way. The ShapeWorks repositories are stored on GitHub . Imporant If you want to contribute, first make sure you have a developer account .","title":"How to Contribute to ShapeWorks?"},{"location":"dev/contribute.html#source-and-branches","text":"To clone the ShapeWorks source, use one of the following commands: $ git clone https://github.com/SCIInstitute/ShapeWorks To avoid having to type your password every time you refresh your source code, you can copy your public ssh key (found in ~/.ssh/id_rsa.pub) and add it to your GitHub account . Now you can use this version to clone the code: $ git clone git@github.com:sciinstitute/ShapeWorks If you've already cloned your code, simply change the [remote \"origin\"] in .git/config to url = git@github.com:SCIInstitute/ShapeWorks . All git commands remain the same. Now that you've cloned the source you can build ShapeWorks from source if you want. View current state (branch and modifications, both staged and unstaged): $ git status View all branches: $ git branch -a Checkout an exising branch (or a tag or a specific commit): $ git checkout Create a new branch $ git checkout -b Fetch changes for a specific branch from GitHub: $ git fetch origin Fetch changes for all branches from GitHub: $ git fetch --all Merge the fetched changes to your current branch: $ git merge origin/ For example, use this command to merge the latest master to your current branch. After that, you can test as necessary, then push your branch and make a pull request when it's ready: git merge origin/master Shortcut to both fetch and merge upstream changes to the current branch: $ git pull Push a branch to GitHub: $ git push origin Delete a branch (e.g., after a pull request has been completed and merged ): $ git branch -d Force delete a branch whether or not it's been merged: $ git branch -D Prune old branches that have been removed from GitHub (--dry-run will show you what will be pruned): $ git remote prune origin [--dry-run]","title":"Source and Branches"},{"location":"dev/contribute.html#commits","text":"Check the current status of your changes scheduled to be committed using: $ git status To commit your current changes to current local branch (first, use git diff to ensure they are correct): $ git diff $ git commit -m \"description of changes\" This commits only the files specifically scheduled to be committed. If you want all changes to be committed, use the -a switch: $ git commit -am \"description of changes\" If you only want to commit scheduled files and a file has been changed after being scheduled, add it again to be updated: $ git add To push your local changes for a given branch to GitHub, first use git diff to ensure they are correct, then push to origin: $ git diff origin/ $ git push origin Never push directly to master After pushing, submit a pull request (click the \"New pull request\" button on the main GitHub page) for your changes to be checked and merged to the master branch.","title":"Commits"},{"location":"dev/contribute.html#logs-and-diffs","text":"View the diff of the most recent commit: $ git diff HEAD~1 View the log of a particular file (including moves/renames): $ git log --follow -- View the commit history for a file showing the detailed diffs for each commit: $ git log -p View the commit history of a file/dir when its name is the same as a branch: $ git log -- View the diff between one commit and its predecessor: $ git diff ~1.. View only the files that changes for a given range of commits: $ git diff --name-only ","title":"Logs and diffs"},{"location":"dev/contribute.html#tags","text":"Specific versions and releases can be identified using tags. List current tags: $ git tag --list Show details for a specific tag ( --quiet hides the diffs): $ git show --quiet By default, checking out a tag puts your repo into a 'detached head' state. Use the following command the first time you check out a tag or a specific commit to create a local branch with that name (this happens automatically when checking out branches): $ git checkout origin/ -b Create a new tag using the following: $ git tag Tags must be explicitly pushed to GitHub. Push your new tag using: $ git push origin Delete a tag using: $ git tag delete $ git push origin --delete The second command is only necessary if the tag has been pushed to Github.","title":"Tags"},{"location":"dev/contribute.html#advanced","text":"There are many other things that can be done, such as mashing together commits, temporarily \"stashing\" and retrieving stashed changes, etc. Please add anything here that seems useful. Stash your current changes (temporarily set them aside without committing): $ git stash -m \"what is being stashed\" Retrieve the stashed changes: $ git stash pop Modify the description of the most recent commit: Imporant Only use this if the commit has not yet been pushed to GitHub. $ git commit --amend For further study please find various Git tutorials online, for example: githowto","title":"Advanced"},{"location":"dev/datasets.html","text":"How to Add New Datasets? ShapeWorks Data Portal Dataset Requirements Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory. images/ contents: 3D images of the data file types: itk supported image formats segmentations/ contents: 3D segmentations of the data file types: itk supported image formats meshes/ contents: meshes file types: ply, vtk, stl landmarks/ contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label distance_transforms/ contents: 3D distance transform volumes file types: itk supported image formats shape_models/ contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles Uploading a Dataset Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Datasets API DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure DatasetUtils.uploadNewDataset(datasetName, datasetPath) Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure DatasetUtils.getDatasetList() Returns: a list of all existing datasets on the data portal DatasetUtils.getFileList(datasetName) Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#how-to-add-new-datasets","text":"ShapeWorks Data Portal","title":"How to Add New Datasets?"},{"location":"dev/datasets.html#dataset-requirements","text":"Each dataset must have a License.txt , which describes the terms of use and citation requirements for the data. You can see an example in the Left Atrium dataset License . Data should be organized into appropriately named directories: images , segmentations , meshes , landmarks , distance_transforms , shape_models . Note that each dataset will likely only have a subset of these directories. For example, the ellipsoid dataset only has a segmentations directory.","title":"Dataset Requirements"},{"location":"dev/datasets.html#images","text":"contents: 3D images of the data file types: itk supported image formats","title":"images/"},{"location":"dev/datasets.html#segmentations","text":"contents: 3D segmentations of the data file types: itk supported image formats","title":"segmentations/"},{"location":"dev/datasets.html#meshes","text":"contents: meshes file types: ply, vtk, stl","title":"meshes/"},{"location":"dev/datasets.html#landmarks","text":"contents: sample specific files containing anatomical landmarks noted by the user file types: csv with 4 columns: x , y , z , label","title":"landmarks/"},{"location":"dev/datasets.html#distance_transforms","text":"contents: 3D distance transform volumes file types: itk supported image formats","title":"distance_transforms/"},{"location":"dev/datasets.html#shape_models","text":"contents: example shape models and parameters used to generate them file types: xml One subfolder per model stores all of the particles files For example: - shape_models/ - example_64.xml - example_64/ - *.particles","title":"shape_models/"},{"location":"dev/datasets.html#uploading-a-dataset","text":"Important Uploaded datasets are only restricted to ShapeWorks developers. Create an account on the ShapeWorks Data Portal Ask Alan to add you to the list of developers. (amorris@sci.utah.edu) Prepare dataset directory with License.txt Use DatasetUtils.uploadNewDataset(datasetName, datasetPath) to upload. Name the dataset all lowercase with underscores separating words. For example: 'ellipsoid', 'ellipsoid_fd', 'left_atrium', 'femur' Example file structure: - TestFolder/ - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/ Example python upload usage: import DatasetUtils DatasetUtils.uploadNewDataset('dataset_name', 'TestFolder/dataset_name/') When calling DatasetUtils.downloadDataset('dataset_name') , you will get a zip file with the following structure: - dataset_name.zip - dataset_name/ - License.txt - images/ - segmentations/ - meshes/ - landmarks/ - distance_transforms/ - shape_models/","title":"Uploading a Dataset"},{"location":"dev/datasets.html#datasets-api","text":"","title":"Datasets API"},{"location":"dev/datasets.html#datasetutilsdownloaddatasetdatasetname-destinationpath-aszip-true-filelist-none","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() destinationPath is where the zip file or folder will go once it is downloaded asZip toggles whether to download as zip or download individual files. (providing a fileList disables this functionality) fileList is a list of files to download. Example for femur: ['images/m03_1x_hip.nrrd', 'distance_transforms/m03_L_femur.ply'] Returns: True on success and False on failure","title":"DatasetUtils.downloadDataset(datasetName, destinationPath='.', asZip = True, fileList = None)"},{"location":"dev/datasets.html#datasetutilsuploadnewdatasetdatasetname-datasetpath","text":"Parameters: datasetName is the name the dataset will have on the data portal datasetPath is the path to the root folder of the dataset on the local file system Returns: True on success and False on failure","title":"DatasetUtils.uploadNewDataset(datasetName, datasetPath)"},{"location":"dev/datasets.html#datasetutilsgetdatasetlist","text":"Returns: a list of all existing datasets on the data portal","title":"DatasetUtils.getDatasetList()"},{"location":"dev/datasets.html#datasetutilsgetfilelistdatasetname","text":"Parameters: datasetName is one of the names returned by DatasetUtils.getDatasetList() Returns: a list of all files in the specified dataset on the data portal","title":"DatasetUtils.getFileList(datasetName)"},{"location":"dev/docs.html","text":"Getting Started with Documentation Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files Naming and Organization Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder. Adding Call-outs We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title. Locally Building Documentation To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt. Deploying on GitHub Pages As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed. Contributing to Documentation Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List . Inserting Videos in Documentation Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ . Auto-generating ShapeWorks Commands Documentation The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated Auto-generating C++ Doxygen API Documentation To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml See Also MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"Getting Started with Documentation"},{"location":"dev/docs.html#getting-started-with-documentation","text":"Which branch to use? Please use the mkdocs branch to add/edit your documentation according to the guidelines detailed in this page. Once you are done with your edits, please submit a Pull Request (PR) to get your changes reviewed and merged to the master branch. For PRs that include documentation changes At the beginning of the PR, please add instructions on how one could compile the documentation and what pages should be reviewed. For example, these instructions could include the following: Checkout the mkdocs branch Run mkdocs serve from the root directory (containing mkdocs.yml) Open and review path/to/edited-or-added-md-files","title":"Getting Started with Documentation"},{"location":"dev/docs.html#naming-and-organization","text":"Where are the documentation files? ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. All documentation markdown files are located in the docs/ folder. Documentation settings are configured by using the mkdocs.yml configuration file in the ShapeWorks directory. Naming convention To maintain consistency, please use lower-case letters and dashes for your markdown files, e.g., fixed-domain-ellipsoid.md . Docs organization ShapeWorks documentation is organized into main sections (e.g., \"Getting Started\", \"Use Cases\", ... etc), which map to subfolders in the docs/ folder (e.g., \"getting-started\", \"use-cases\", ... etc) and images used in their markdown files are located in the corresponding subfolders in the docs/img folder.","title":"Naming and Organization"},{"location":"dev/docs.html#adding-call-outs","text":"We are now using the Admonition extension to include side content that is minimally disruptive to the document flow. It is also very useful to a reader's draw attention. Below are some examples. To add a note block with a title, use the following markdown syntax. !!! note \"Title of the note\" Here is a note to keep in mind. It will render as follows. Title of the note Here is a note to keep in mind. You can also add a note without a title. !!! note This is a note without a title. This also applies to other call-outs. It will render as follows. Note This is a note without a title To make a note (or any call-out collapsable, use ??? as follows. ??? note This is a collapsable note without a title. This also applies to other call-outs. It will render as follows. Note This is a collapsable note without a title. This also applies to other call-outs. To add a danger block with a title, use the following markdown syntax. !!! danger \"Don't try this at home\" Seriously don't try this; this is a dangerous step to take. It will render as follows. Don't try this at home Seriously don't try this; this is a dangerous step to take. To add an important block without a title, use the following markdown syntax. !!! important This is an admonition box without a title. It will render as follows. Important This is an admonition box without a title.","title":"Adding Call-outs"},{"location":"dev/docs.html#locally-building-documentation","text":"To see local changes to documentation in realtime, cd to where source documentation (i.e., mkdocs.yml ) is maintained and run the following command: mkdocs serve This command builds markdown files into HTML and starts a development server to browse the documentation. Open up http://127.0.0.1:8000/ in your favorite browser to see the documentation. Changes you make to the markdown files are automatically rebuilt.","title":"Locally Building Documentation"},{"location":"dev/docs.html#deploying-on-github-pages","text":"As ShapeWorks is hosted on GitHub , we use GitHub Pages to host the documentation for ShapeWorks. We use Project Pages sites for documentation deployment. The site files are deployed to the gh-pages branch within the ShapeWorks repository. Deployment is taken care of automatically by GitHub Actions using the script Support/deploy_docs.sh Do not edit gh-pages Never manually edit files on the gh-pages branch because you will lose your work the next time the docs are deployed.","title":"Deploying on GitHub Pages"},{"location":"dev/docs.html#contributing-to-documentation","text":"Important If you added a new markdown file to docs/ , please make sure to include it in it relevant section in mkdocs.yml to make it accessible. We use GitHub to keep track of issues pertaining to ShapeWorks documentation. For an internal list of todos, which will be turned to issues, visit Documentation ToDo List .","title":"Contributing to Documentation"},{"location":"dev/docs.html#inserting-videos-in-documentation","text":"Request on GitHub for your video to be uploaded to the SCI ShapeWorks server. Insert it in the markdown file using

    . Where are the videos stored? On SCI servers, at /usr/sci/www/shapeworks/doc-resources/mp4s/ .","title":"Inserting Videos in Documentation"},{"location":"dev/docs.html#auto-generating-shapeworks-commands-documentation","text":"The DocumentationUtils package in Python has APIs for auto-documenting command-line tools and to-come-soon python APIs. We use the docs folder to save the generated documentation. To generate documentation for the shapeworks commands, first be sure to run install_shapeworks.sh as described in How to Build ShapeWorks from Source? to install DocumentationUtils . Then, make sure that the shapeworks command is in your path ( set PATH=/path/to/shapeworks:$PATH ), then use Python to run the following command: $ python Python/RunShapeWorksAutoDoc.py --md_filename docs/tools/ShapeWorksCommands.md Parameters : md_filename is the markdown file name for the documentation file to be generated","title":"Auto-generating ShapeWorks Commands Documentation"},{"location":"dev/docs.html#auto-generating-c-doxygen-api-documentation","text":"To generate C++ Doxygen API output into mkdocs, configure ShapeWorks with BUILD_DOCUMENTATION=ON. After building, run (from the root source directory): $ ./Support/build_docs.sh ${ BUILD_DIR } /Documentation/Doxygen/xml","title":"Auto-generating C++ Doxygen API Documentation"},{"location":"dev/docs.html#see-also","text":"MkDocs documentation Getting started with MkDocs Setting up MkDocs Projects documentation MkDocs recipes","title":"See Also"},{"location":"dev/gh-actions.html","text":"Getting Started with GitHub Actions ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/gh-actions.html#getting-started-with-github-actions","text":"ShapeWorks uses GitHub Actions for automated CI/CD (Continuous Integration / Continuous Deployment). GitHub Actions will automatically build ShapeWorks pull requests, run automated tests, and build deployable packages (artifacts). Documentation for GitHub Actions is found here The YAML files for ShapeWorks are found in the source code repository in the .github/workflows folder. build-linux.yml - GitHub Actions recipe for Linux build-windows.yml - GitHub Actions recipe for Windows build-mac.yml - GitHub Actions recipe for MacOS","title":"Getting Started with GitHub Actions"},{"location":"dev/markdown.html","text":"Getting Started with Markdown ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline. Grip To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing! Markdown Basics ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com See Also GitHub Markdown Markdown Guide Markdown Editors","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#getting-started-with-markdown","text":"ShapeWorks documentation is written using Markdown , a text layout language that enables simple formatting for section headers, code samples, weblinks, and images, yet is still readable as plain text. Note If you are viewing this document in GitHub, you can click on the pencil icon in the top-right corner to see its source. On GitHub, it can be used for issues and wiki documentation and edited inline.","title":"Getting Started with Markdown"},{"location":"dev/markdown.html#grip","text":"To edit your Markdown, it helps to have a convenient viewer. The grip instant preview application is beneficial, and is installed by the install_shapeworks script (see How to Build ShapeWorks from Source? . From the ShapeWorks directory, just run grip (be sure to conda activate shapeworks beforehand), and then navigate to http://localhost:6419 in your favorite browser. It will load and display markdown files just like GitHub, showing README.md by default. You can also specify relative paths to any markdown file below the directory from which it was run. Happy editing!","title":"Grip"},{"location":"dev/markdown.html#markdown-basics","text":"ShapeWorks uses Markdown for much of its documentation. Here are the basics of using Markdown. The plain text is readable, and there are many editors available, such as Dillinger . One method is to use a plain text editor along with an automatic rendering tool such as grip to view the formatted results in a browser as the files are edited. Use hash symbols to create section headers. Use more hashes for subsequent subsections. # Main section ## Subsection ### Sub-subsection #### And ##### so ###### on... Links are created by enclosing the text shown for the link in brackets and the link directly adjacent to parenthesis. Links to other '#'-indicated sections of the document are formed using a '#' followed by the lowercase text of the section name separated with dashes. For icons, add some additional brackets and a '!'. external site link text [external site](http://google.com) [link text](#local-section-name) [![thumbs up](https://66.media.tumblr.com/1f45d6ab69e02479f85ac1c9f1eb4301/tumblr_inline_pkaqpvkvHH1syktzs_540.png)](http://google.com) HTML comments can be utilized within a Markdown document if you don't want something shown in the rendered output: Finally, code can be shown using triple back-ticks (the backward apostrophe: '`' ), even highlighted for a particular language by following the first set of back-ticks with the language name. ```python print(\"Hello Markdown!\") ``` print ( \"Hello Markdown!\" ) Use just a single tick to keep monospaced text inline with the rest of the text . You can also add tables, quoted text like you'd see in an email, bulleted items, images and more. Here are several Markdown quick references . To quickly turn a URL or email address into a link, enclose it in angle brackets. renders as https://www.markdownguide.org fake@example.com","title":"Markdown Basics"},{"location":"dev/markdown.html#see-also","text":"GitHub Markdown Markdown Guide Markdown Editors","title":"See Also"},{"location":"dev/modify-datasets.html","text":"When Modifying Existing Datasets When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/modify-datasets.html#when-modifying-existing-datasets","text":"When modifying use case datasets, you must adhere to the use dataset control system to prevent everyone's use cases from breaking. If you want to change the dataset in a way that breaks the use case script, you must upload a new version of the dataset using a suffix -vN , where N is the dataset version. Example: If I want to change the groomed folder in the ellipsoid use case to groomed_stuff . The current python script looks for a groomed folder so this change will break the script. Because of this, I upload a new version of the ellipsoid dataset with my change, leaving the old version untouched. Then I can proceed to change the script as needed.","title":"When Modifying Existing Datasets"},{"location":"dev/new-notebook.html","text":"How to Add a New Notebook? Adding a new use case entails the following. Creating a notebook Notebook documentation Creating a notebook To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output . Notebook documentation Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook. Adding a video to a notebook Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"How to Add New Notebooks?"},{"location":"dev/new-notebook.html#how-to-add-a-new-notebook","text":"Adding a new use case entails the following. Creating a notebook Notebook documentation","title":"How to Add a New Notebook?"},{"location":"dev/new-notebook.html#creating-a-notebook","text":"To add a new notebook to the codebase: Add .ipynb to Examples/Python/tutorials/notebooks/ , where the is a descriptive name for what is demonstrated in the notebook. Include links to other notebooks explaining how to import shapeworks and define visualization functions. Before checking in a notebook in clear all output by clicking Kernel -> Restart & Clear Output .","title":"Creating a notebook"},{"location":"dev/new-notebook.html#notebook-documentation","text":"Screenshots and videos of all notebook output should be added so that a user can view notebook output without running the notebook.","title":"Notebook documentation"},{"location":"dev/new-notebook.html#adding-a-video-to-a-notebook","text":"Capture a screen recording in the format '.gif' or '.mp4'. To screen record on Mac: Use Shift + cmd + 5 to begin recording. This will generate a '.mov' video which can be converted to '.mp4' using the command line tool FFmpeg . To screen record on Linux: The open source software 'XVidCap Screen Capture' can be downloaded and used to record screen videos. The video can then be saved in any format. To screen record on Windows: Use Windows key + Alt + R to begin recording. The video format can be converted using the command line tool FFmpeg . Copy the image or video to /usr/sci/www/shapeworks/doc-resources/ . This requires access to the 'shapeworks' group which SCI support can grant. Add a markdown cell to the notebook that includes the video source. For example:

    Once all output is included as an image or video in the notebook, add a copy of the notebook to /ShapeWorks/docs/notebooks/ . Then update /ShapeWorks/mkdocs.yml to include the new notebook.","title":"Adding a video to a notebook"},{"location":"dev/new-use-case.html","text":"How to Add New Use Cases? Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation Python-scripted workflow To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster. Use case dataset To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset . Use case documentation To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#how-to-add-new-use-cases","text":"Adding a new use case entails the following. Python-scripted workflow Use case dataset Use case documentation","title":"How to Add New Use Cases?"},{"location":"dev/new-use-case.html#python-scripted-workflow","text":"To add a new use case to the codebase: Add .py python script to Examples/Python/ , where the is a descriptive name for the use case, typically associated with the class of shapes to be modeled (e.g., anatomy name) Update Examples/Python/RunUseCase.py to add the new use case to the list of cases. Look for the line parser.add_argument(\"--use_case\" ...) . Make sure to use the to the use case list. Each use case needs to include the option to run a tiny test, which typically runs on only the first three shapes. Each use case needs to have the option to run on a representative subsample of the dataset of any size. This subsample is selected via clustering on the shapes and selecting one shape from each cluster.","title":"Python-scripted workflow"},{"location":"dev/new-use-case.html#use-case-dataset","text":"To add the dataset associated with the new use case: Organize the dataset to adhere to the Dataset Requirements . Upload the datset to the ShapeWorks Data Portal . Visit Uploading a Dataset .","title":"Use case dataset"},{"location":"dev/new-use-case.html#use-case-documentation","text":"To add the documentation of the new dataset, add a markdown file .md in docs/use-cases with the following structure. Please use the Naming and Organization conventions currently deployed for ShapeWorks documentation. Then, add a corresponding entry in mkdocs.yml . Important If you use the documentation of an existing use case as a starting point, PLEASE make sure to adapt the documentation to your new use case. Important PLEASE, use a spell and grammar checker (e.g., grammarly ). What is the Use Case? : The goal of this use case, i.e., what does this use case demonstrate about ShapeWorks? Details about the dataset, e.g., number of samples, class of shapes, shape representation (meshes, segmentation, or contours), dataset source ... etc. Grooming Steps : Details about the data preprocessing pipeline for this use case that highlights specific considerations for this use case. Snapshots of intermediate and final groom outputs for illustration. Supported Tags : List of tags that can be used with the use case. Optimization Parameters : Default optimization parameters used for this use case, including a discussion of intuitions/insights on how these parameters were chosen. Analyzing Shape Model : Videos and snapshots of the optimized shape model(s), including the mean shape, scree plot, modes of variations, and individual samples. When applicable, also include videos and snapshots of results that are specific to the use case (e.g., group differences, linear discriminant analysis ... etc.).","title":"Use case documentation"},{"location":"dev/onboarding.html","text":"ShapeWorks Developer Onboarding Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks. Git A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To . GitHub The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples. Coding Style Guide We adopt the Google Style Guide for C++ coding style. C++ Core Guidelines A highly recommended resource for C++ are the C++ Core Guidelines . Building ShapeWorks Please see: How to Build ShapeWorks from Source? Continuous Integration / Continuous Delivery Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Onboarding"},{"location":"dev/onboarding.html#shapeworks-developer-onboarding","text":"Welcome to ShapeWorks Development! This page contains pointers to help get you started building and developing with ShapeWorks.","title":"ShapeWorks Developer Onboarding"},{"location":"dev/onboarding.html#git","text":"A brief introduction to how Git is used with ShapeWorks can be found in the section, How to Contribute to ShapeWorks? Also highly recommended is the Git How To .","title":"Git"},{"location":"dev/onboarding.html#github","text":"The ShapeWorks Git repository is hosted on GitHub: https://github.com/SCIInstitute/ShapeWorks As described in the section about Git, the ShapeWorks team uses Pull Requests (PR) with peer review to integrate changes. Pull Requests with new features should include automated tests using the Google Test framework . Please look at existing tests for examples.","title":"GitHub"},{"location":"dev/onboarding.html#coding-style-guide","text":"We adopt the Google Style Guide for C++ coding style.","title":"Coding Style Guide"},{"location":"dev/onboarding.html#c-core-guidelines","text":"A highly recommended resource for C++ are the C++ Core Guidelines .","title":"C++ Core Guidelines"},{"location":"dev/onboarding.html#building-shapeworks","text":"Please see: How to Build ShapeWorks from Source?","title":"Building ShapeWorks"},{"location":"dev/onboarding.html#continuous-integration-continuous-delivery","text":"Each pull request triggers builds on Windows, Mac, and Linux runners using GitHub Actions. More about GitHub Actions with ShapeWorks can be found here . Build artifacts are created for each build and kept automatically for a period of time. These are full binary installers suitable for end-user install.","title":"Continuous Integration / Continuous Delivery"},{"location":"dev/paths.html","text":"Adding Environment Variables for Development This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms. Using devenv script to configure developer environment The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug Manually adding paths While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths. OSX/Linux $ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH Windows $ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Adding to PATH Environment Variable"},{"location":"dev/paths.html#adding-environment-variables-for-development","text":"This is unnecessary for users! Users only need to activate their conda environments ( conda activate shapeworks ). In the past, setting PATH was necessary. Now it will only cause problems. The simplest way for developers A script called devenv is provided to setup developer environments on all platforms.","title":"Adding Environment Variables for Development"},{"location":"dev/paths.html#using-devenv-script-to-configure-developer-environment","text":"The devenv script, short for dev eloper env ironment, only requires one parameter: the path to the build binaries. It infers the source path from its own location. It configures the environment of the terminal from which it is sourced such that: PATH and PYTHONPATH point to $BUILD_BIN directory PYTHONPATH points to each module in $SOURCE/Python This is very useful for development, since after sourcing this, processes in the environment will use executables from the given build and import modules from the developer's source--this includes the compiled portion of the Python bindings! It dramatically reduces the probability of using the wrong paths for testing, and eliminates the need to pip install any of the Python modules during development. As an example of using it with a make-based build directory inside source on Linux or OSX: (shapeworks) ~/code/ShapeWorks$ source ./devenv.sh ./build/bin On Windows, to point to the RelWithDebInfo binaries in a build directory inside source: (shapeworks) ~/code/ShapeWorks> devenv .\\build\\bin\\RelWithDebInfo Using git-bash on Windows Windows may also have a git-bash command line available. This also works with devenv : just source ./devenv.sh like you would on linux/osx. There is one important issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . Any path can be passed as the parameter for this script and it can be called from any location. Another example: (shapeworks) ~/code/ShapeWorks/build_xcode/bin/Debug$ source ../../devenv.sh Debug","title":"Using devenv script to configure developer environment"},{"location":"dev/paths.html#manually-adding-paths","text":"While unnecessary for the use of ShapeWorks, these are the steps to manually add items to your paths.","title":"Manually adding paths"},{"location":"dev/paths.html#osxlinux","text":"$ export PATH=path/to/add:$PATH Verify the results with the command: $ echo $PATH","title":"OSX/Linux"},{"location":"dev/paths.html#windows","text":"$ set PATH=path/to/add;%PATH% This only modifies the path for the current command prompt. To permanently add to the path (or so you can remove what has previously been added): Go to Settings/Edit the system environment variables/Environment Variables Choose the Path variable and press Edit... Add your path entry to the list Verify the results with the command: $ echo %PATH%","title":"Windows"},{"location":"dev/python-apis.html","text":"How to Add Python APIs? Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/python-apis.html#how-to-add-python-apis","text":"Python APIs in ShapeWorks are pybind wrappers of C++ functions and additions/modifications can be made in Python/shapeworks/ShapeworksPython.cpp Header file must be included. To add a new class, py:class_ objectName(m, \"pythonClassName); To add a new function, objectName.def(\"pythonFunctionName\", &c++ClassName::c++FunctionName, \"description/help\", \"argument1\"_a, \"argument2\"_a=defaultValue) For more information on how to add pybind bindings, check out pybind documentation.","title":"How to Add Python APIs?"},{"location":"dev/shapeworks-library.html","text":"Using ShapeWorks as a library ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=
    /lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH=
    Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"ShapeWorks as a Library"},{"location":"dev/shapeworks-library.html#using-shapeworks-as-a-library","text":"ShapeWorks can be used as a library, for example as part of an ITK based application. To do so, when building ShapeWorks, specify CMAKE_INSTALL_PREFIX and use make install : $ ccmake -DCMAKE_INSTALL_PREFIX=
    $ make install An example using ShapeWorks as a library in an ITK application is given in Examples/C++ CMakeLists.txt: cmake_minimum_required(VERSION 3.10.2) project(HelloShapeWorksItk) set(CMAKE_CXX_STANDARD 17) # Find ShapeWorks find_package(ShapeWorks REQUIRED) SET(CMAKE_EXE_LINKER_FLAGS \"-Wl,--disable-new-dtags\") # Find ITK #find_package(ITK REQUIRED) #include(${ITK_USE_FILE}) add_executable(HelloShapeWorksItk HelloShapeWorksItk.cpp) target_link_libraries(HelloShapeWorksItk ${ITK_LIBRARIES} shapeworks::Optimize shapeworks::Groom shapeworks::Analyze pybind11::embed ) HelloShapeWorksItk.cpp: #include // itk includes #include \"itkImage.h\" #include \"itkMesh.h\" #include \"itkRegularSphereMeshSource.h\" #include \"itkMeshFileWriter.h\" #include \"itkMeshIOFactory.h\" #include \"itkVTKPolyDataMeshIOFactory.h\" // shapeworks includes #include #include #include #include #include constexpr unsigned int Dimension = 3; using TCoordinate = float; using TMesh = itk::Mesh; using TSphere = itk::RegularSphereMeshSource; using TMeshWriter = itk::MeshFileWriter; void create_sphere(double radius, std::string name) { // Create the sphere source. auto sphere = TSphere::New(); TSphere::VectorType scale; scale.Fill( radius ); sphere->SetScale( scale ); sphere->SetResolution( 5 ); sphere->Update(); // We now assign it to a mesh pointer. TMesh::Pointer mesh = sphere->GetOutput(); // It is necessary to disconnect the mesh from the pipeline; // otherwise, the point and cell data will be deallocated // when we call \"Update()\" on the writer later in the program. mesh->DisconnectPipeline(); auto mesh_writer = TMeshWriter::New(); mesh_writer->SetFileName(name); mesh_writer->SetInput(mesh); mesh_writer->Update(); } int main() { itk::VTKPolyDataMeshIOFactory::RegisterOneFactory(); // auto registeredIOs = itk::ObjectFactoryBase::CreateAllInstance( \"itkMeshIOBase\" ); typedef itk::Image< unsigned short, 3 > ImageType; ImageType::Pointer image = ImageType::New(); std::cout << \"Hello ShapeWorks ITK World!\" << std::endl; // create a ShapeWorks Project auto project = std::make_shared(); std::cout << \"Step 1: Use ITK to generate input data\\n\"; for (int i=5;i<9;i++) { auto filename = \"mesh\" + std::to_string(i) + \".vtk\"; std::cout << \"Creating input file: \" << filename << \"\\n\"; create_sphere(i, filename); auto subject = std::make_shared(); subject->set_original_filenames({filename}); project->get_subjects().push_back(subject); } // groom the inputs std::cout << \"Step 2: Groom Inputs\\n\"; shapeworks::Groom groom{project}; groom.run(); // create a ShapeWorks Optimizer std::cout << \"Step 3: Creating Shape Model\\n\"; shapeworks::Optimize optimize; shapeworks::OptimizeParameters params(project); params.set_up_optimize(&optimize); optimize.SetProject(project); // run the optimizer bool success = optimize.Run(); project->save(\"HelloShapeWorksItk.swproj\"); // perform analysis std::cout << \"Step 4: Analyze\\n\"; shapeworks::Analyze analyze{project}; analyze.run_offline_analysis(\"analysis.json\"); return 0; } Configure using -DShapeWorks_DIR and the prefix module path used for building ShapeWorks. For example: cd /path/to/shapeworks/Examples/C++ mkdir build cd build cmake .. -DShapeWorks_DIR=/lib/cmake/ShapeWorks -DCMAKE_PREFIX_PATH= Build: make Run: ./HelloShapeWorksItk Output: Hello ShapeWorks ITK World! Step 1: Use ITK to generate input data Creating input file: mesh5.vtk Creating input file: mesh6.vtk Creating input file: mesh7.vtk Creating input file: mesh8.vtk Step 2: Groom Inputs Step 3: Creating Shape Model ShapeWorks: TBB using 16 threads Verbosity 0: This will be the only output on your screen, unless there are any errors. Increase the verbosity if needed. Step 4: Analyze [2022-10-02 23:31:39.663] [info] ShapeWorks Offline Analysis [2022-10-02 23:31:39.663] [info] number of subjects: 4 [2022-10-02 23:31:39.665] [info] Computing stats... [2022-10-02 23:31:39.665] [info] Computed stats successfully [2022-10-02 23:31:39.665] [info] number of modes: 3 [2022-10-02 23:31:39.676] [info] eigen value [0]: 213.72417259473602 [2022-10-02 23:31:39.676] [info] explained_variance [0]: 99.12 [2022-10-02 23:31:39.676] [info] cumulative_explained_variance [0]: 99.12 [2022-10-02 23:31:39.793] [info] eigen value [1]: 1.8944878261819007 [2022-10-02 23:31:39.793] [info] explained_variance [1]: 0.88 [2022-10-02 23:31:39.793] [info] cumulative_explained_variance [1]: 100.00 [2022-10-02 23:31:39.902] [info] eigen value [2]: 0.0016418139547566765 [2022-10-02 23:31:39.902] [info] explained_variance [2]: 0.00 [2022-10-02 23:31:39.902] [info] cumulative_explained_variance [2]: 100.00","title":"Using ShapeWorks as a library"},{"location":"dev/tests.html","text":"How to Add and Run Unit Tests? Running ShapeWorks Automated Tests To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example Adding New ShapeWorks Automated Tests Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#how-to-add-and-run-unit-tests","text":"","title":"How to Add and Run Unit Tests?"},{"location":"dev/tests.html#running-shapeworks-automated-tests","text":"To run the automated tests, after building, run: $ ctest or $ make test If using Unix Makefile, for example","title":"Running ShapeWorks Automated Tests"},{"location":"dev/tests.html#adding-new-shapeworks-automated-tests","text":"Depending on the type of operation to be tested, they should be defined in the associated Tests.cpp Testing from C++ interface: For project related functions, use Testing/GroomTests/GroomTests.cpp For image related functions, use Testing/ImageTests/ImageTests.cpp For mesh related functions, use Testing/MeshTests/MeshTests.cpp For optimize related functions, use Testing/OptimizeTests/OptimizeTests.cpp For particles related functions, use Testing/ParticlesTests/ParticlesTests.cpp TEST(typeofoperationTests, nameoftestTest) { // define test ASSERT_TRUE(); // compare result } For testing from Python interface, use Testing/PythonTests/PythonTests.cpp Python scripts should be added to Testing/PythonTests TEST(pythonTests, nameoftestTest) { run_use_case(\"script.py\"); } For testing from Command Line interface, use Testing/shapeworksTests/shapeworksTests.cpp Shell scripts should be added to Testing/shapeworksTests TEST(shapeworksTests, nameoftestTest) { run_use_case(\"script.sh\"); } Testing data should be placed in Testing/data.","title":"Adding New ShapeWorks Automated Tests"},{"location":"getting-started/examples.html","text":"Examples Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features. Segmentation Based Use Cases This use case set demonstrates the Shape Modeling Workflow on segmentation images. Ellipsoid: Basic Example This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process. Left Atrium: Shape Model from Segmentations This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models. Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Shape Model for Multiple Domains from Segmentations This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets. Mesh-Based Use Cases This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming. Ellipsoid Mesh: Basic Example This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms. Lumps: Shape Model directly from Mesh This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Thin Cavity Bean: Shape Model with Geodesic Distances This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation. Shape Model for Multiple Domains directly from Mesh This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms. Contour Based Use Cases Supershapes:Shape Model for Contour Domains This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop. Constraints Based Use Cases Ellipsoid: Shape Model with Cutting Planes This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data. Femur: Shape Model from Meshes with Cutting Planes This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples. Multi-Step Optimization Use Cases Fixed Domains Ellipsoid: Shape Model on New Shapes This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model. Incremental Supershapes: Building a Shape Model Incrementally This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions. Statistics Based Use Cases Femur: Group Difference Statistics in Python This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case. Ellipsoid: Shape Statistics in Python This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case. Ellipsoid: Shape Evaluation in Python This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation. Deep Learning Based Use Cases Femur Shape Model Directly from Images This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . Shared Boundary Use Cases Peanut: Shape Model of Multiple Domains with Shared Boundaries This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions. Your Use Case You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Examples"},{"location":"getting-started/examples.html#examples","text":"Visit Getting Started with Use Cases for information about downloading a use case dataset and running use cases. Here we list the available use cases grouped according to different categories based on their unique features.","title":"Examples"},{"location":"getting-started/examples.html#segmentation-based-use-cases","text":"This use case set demonstrates the Shape Modeling Workflow on segmentation images.","title":"Segmentation Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-basic-example","text":"This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. This use case represents the standard ShapeWorks workflow on a synthetically generated ellipsoid dataset, including the entire grooming process.","title":"Ellipsoid: Basic Example"},{"location":"getting-started/examples.html#left-atrium-shape-model-from-segmentations","text":"This use case demonstrates using the ShapeWorks functionality to groom real segmentations and corresponding imaging data (e.g., MRI) of a real-world left atrium dataset. This use case also showcases a single-scale and multi-scale optimization for correspondence models.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-from-segmentations","text":"This use case demonstrates using ShapeWorks to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domain correlations and interactions on segmentation images. This use case uses a synthetically generated ellipsoid joint dataset. This use case exhibits how local alignment can be performed for multiple domain datasets.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"getting-started/examples.html#mesh-based-use-cases","text":"This use case demonstrates the Shape Modeling Workflow directly on meshes. Currently, mesh-based use cases run on pre-groomed meshes. They will be updated soon to demonstrate mesh grooming.","title":"Mesh-Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-mesh-basic-example","text":"This use case uses the same dataset as the Ellipsoid: Basic Example use case, but optimization is done on meshes rather than distance transforms.","title":"Ellipsoid Mesh: Basic Example"},{"location":"getting-started/examples.html#lumps-shape-model-directly-from-mesh","text":"This use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"Lumps: Shape Model directly from Mesh"},{"location":"getting-started/examples.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"This use case demonstrates using ShapeWorks tools to perform Geodesic distance-based repulsion for mesh domains. The dataset comprises ellipsoids or beans with a thin cavity where the shapes vary only in the location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodesic distance can correctly capture this single mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"getting-started/examples.html#shape-model-for-multiple-domains-directly-from-mesh","text":"This use case uses the same dataset as the Shape Model for Multiple Domains from Segmentations ; use case optimization is done on meshes rather than distance transforms.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"getting-started/examples.html#contour-based-use-cases","text":"","title":"Contour Based Use Cases"},{"location":"getting-started/examples.html#supershapesshape-model-for-contour-domains","text":"This use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines that may be a closed loop.","title":"Supershapes:Shape Model for Contour Domains"},{"location":"getting-started/examples.html#constraints-based-use-cases","text":"","title":"Constraints Based Use Cases"},{"location":"getting-started/examples.html#ellipsoid-shape-model-with-cutting-planes","text":"This use case demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids that are already aligned. Cutting planes can be used in modeling scenarios where statistical modeling/analysis is needed for a region of interest in the anatomy/object class without affecting the input data.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"getting-started/examples.html#femur-shape-model-from-meshes-with-cutting-planes","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on a real-world femur dataset. It involves performing grooming on femur meshes and corresponding imaging data (CT scans) of the hip. The femur meshes in this dataset have been segmented with various shaft lengths, so cutting planes are used in optimization to remove this variability, preventing it from being captured in the shape model. Cutting planes can limit the statistical analysis to the standard anatomical regions across all samples.","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"getting-started/examples.html#multi-step-optimization-use-cases","text":"","title":"Multi-Step Optimization Use Cases"},{"location":"getting-started/examples.html#fixed-domains-ellipsoid-shape-model-on-new-shapes_1","text":"This use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains are used for the cases where we need to place correspondences on new shapes using a pre-existing shape model.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"getting-started/examples.html#incremental-supershapes-building-a-shape-model-incrementally","text":"This use case demonstrates how a shape model can be built incrementally. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"getting-started/examples.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio","text":"This use case demonstrates using shape modeling workflow using ShapeWorks on real-world femur dataset. This tutorial use-case teaches you how to use constraints in Studio to limit the statistical analysis to certain anatomical regions.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"getting-started/examples.html#statistics-based-use-cases","text":"","title":"Statistics Based Use Cases"},{"location":"getting-started/examples.html#femur-group-difference-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. It also shows the use of Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients. This use case explores the femur shape model obtained from running the Femur: Shape Model on Distance Transforms from Meshes use case.","title":"Femur: Group Difference Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-statistics-in-python","text":"This use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the Ellipsoid: Basic Example use case.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"getting-started/examples.html#ellipsoid-shape-evaluation-in-python","text":"This use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These APIs include the calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explanation of the evaluation metrics, refer to Shape Model Evaluation.","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"getting-started/examples.html#deep-learning-based-use-cases","text":"","title":"Deep Learning Based Use Cases"},{"location":"getting-started/examples.html#femur-shape-model-directly-from-images","text":"This use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation and building, training, and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images .","title":"Femur Shape Model Directly from Images"},{"location":"getting-started/examples.html#shared-boundary-use-cases","text":"","title":"Shared Boundary Use Cases"},{"location":"getting-started/examples.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"This use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domain correlations and interactions.","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"getting-started/examples.html#your-use-case","text":"You can use any of these use cases as a starting point and customize it to your dataset. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through during different shape modeling phases, starting from processing or grooming your data to analyze your optimized shape model. See ShapeWorks in Python for more details. ShapeWorks with Python support. ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . Please contact ShapeWorks team if you need further questions and guidance. Software maintenance and support are provided within the funding period.","title":"Your Use Case"},{"location":"getting-started/how-tos.html","text":"How-Tos Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/how-tos.html#how-tos","text":"Important When using up-to-date development builds from the master branch, please understand that these are in-progress development builds, not official releases. How to install ShapeWorks on Windows , Mac , or Linux . How to get the latest ShapeWorks binary release or up-to-date development builds from the master branch for Windows , Mac , or Linux . How to run and see ShapeWorks in action on exemplar use cases . How to preprocess or groom your dataset. How to optimize your shape model. How to visualize and analyze your optimized shape model. How to get started with ShapeWorks in Python . How to contact ShapeWorks team to help you customize a use case to your own dataset. How to build ShapeWorks from source (for developers). How to auto-generate documentation for ShapeWorks interfaces and code (for developers).","title":"How-Tos"},{"location":"getting-started/interfaces.html","text":"ShapeWorks Interfaces ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds . ShapeWorks Command ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal. ShapeWorks in Python We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility. ShapeWorks Studio ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here ShapeWorks in the Cloud Work in progress ... Stay tuned!","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-interfaces","text":"ShapeWorks tools are designed to support different usage scenarios, including execution on a local computing platform through the terminal ( command line ) and the user-friendly Studio application, APIs including Python , and remote systems such as private or public clouds .","title":"ShapeWorks Interfaces"},{"location":"getting-started/interfaces.html#shapeworks-command","text":"ShapeWorks consists of a set of independent command line tools for preprocessing binary segmentations and surface meshes ( Groom ) and computing landmark-based shape models ( Optimize ). It also includes an interactive user interface called ShapeWorks Studio to analyze and visualize the optimized shape models ( Analyze ). We are consolidating these tools into a single, reusable API that is shared across different computational libraries in ShapeWorks, and a standalone shapeworks command. Visit ShapeWorks Command for an illustrative example. The shapeworks executable is highly flexible, modular, and loosely coupled, with standardized subcommands and interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Please see shapeworks commands documentation for the list of available commands. Activate shapeworks environment Each time you use ShapeWorks from the command line , you must first activate its environment using the conda activate shapeworks command on the terminal.","title":"ShapeWorks Command"},{"location":"getting-started/interfaces.html#shapeworks-in-python","text":"We are developing Python bindings to enable users to script their customized shape modeling workflows. See ShapeWorks in Python for more details and pointers to step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . About use cases Exemplar use cases will be updated to use these Python APIs to showcase their use and flexibility.","title":"ShapeWorks in Python"},{"location":"getting-started/interfaces.html#shapeworks-studio","text":"ShapeWorks Studio is a cross-platform graphical user interface (GUI) to support the standard shape analysis workflow needed by most ShapeWorks users, enabling a wide variety of research scenarios. It is currently supporting image-based grooming and is actively under development to support surface meshes, more sophisticated grooming operations (including user annotations), and offline processing. ShapeWorks Studio enables real-time parameter tuning and visualization of the optimization process and statistical analyses. For more information about ShapeWorks Studio, see here","title":"ShapeWorks Studio"},{"location":"getting-started/interfaces.html#shapeworks-in-the-cloud","text":"Work in progress ... Stay tuned!","title":"ShapeWorks in the Cloud"},{"location":"getting-started/shapes.html","text":"Shapes, What & From Where? What is Shape? The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class. Where Shapes Come From? In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer What surfaces are \u201dgood\u201d for shape modeling? The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow . What is Shape Modeling? Shape Parameters Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population. Discovering Shape Parameters via Optimization ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#shapes-what-from-where","text":"","title":"Shapes, What & From Where?"},{"location":"getting-started/shapes.html#what-is-shape","text":"The shape is the characteristic that remains after removing all global geometrical information from an object. To study shape, we would like to study the differences among these characteristics in populations of objects belonging to the same class.","title":"What is Shape?"},{"location":"getting-started/shapes.html#where-shapes-come-from","text":"In medical imaging, shapes can be obtained from images of anatomies (e.g., CTs and MRIs), where anatomies of interest can be manually or semi-automatically segmented/delineated. Other applications could entail modeling geometries using computer-aided design systems, or acquiring real-world objects through sampling (2D via image acquisition devices, 3D via laser scanners). Here are some examples of free software packages that include enable both manual and semi-automated anatomy segmentation: Seg3D ITK-SNAP 3DSlicer","title":"Where Shapes Come From?"},{"location":"getting-started/shapes.html#what-surfaces-are-good-for-shape-modeling","text":"The results from the segmentation process are often not directly usable for shape modeling tools. Let\u2019s go over some examples of good and bad segmentation results for shape modeling. Here is an example of a poor segmentation for the calcaneus on the right of the below figure. Segmentation methods, especially those that rely on intensity thresholding, can easily result in bone islands. Segmented anatomies can have rough surfaces and aliasing artifacts due to intensity noise and limitations on voxel spacing. Planar striations and non-physiological bone holes can result due to imaging artifacts. All these types of artifacts are not anatomically relevant and should not be captured when we study the statistics of shapes. This is in comparison to a smoothed and decimated segmentation on the left of the below figure where we can see relevant morphological features to be studied. Below on the right is an example of a scapula segmentation where limitations in voxel spacing, noisy image intensities, and patient positioning in the scanner can result in stair-step features, irrelevant bone protrusions, and non-anatomical holes in thin structures. These types of artifacts negatively affect the integrity of the underlying geometry, however, they can be fixed by some data preprocessing steps before feeding the surfaces to shape modeling. On the left is the same scapula after hole filing and surface smoothing. Below are another examples of bad surfaces for shape modeling where the surface meshing step can produce some connectivity artifacts such as non-watertight meshes. A surface mesh could also have evident transverse slices due to voxel spacing and patient positioning resulting in some ringing artifacts on the surface. A smooth surface mesh like that one on the left is the best fit for shape modeling and analysis. Data preparation and quality control is the first step! For shape modeling purposes, it is recommended that we quality control segmentation results before feeding them to the shape modeling process. Most of these surface integrity issues can be resolved by some data preprocessing step, which is the groom stage in a typical shape modeling workflow .","title":"What surfaces are \u201dgood\u201d for shape modeling?"},{"location":"getting-started/shapes.html#what-is-shape-modeling","text":"","title":"What is Shape Modeling?"},{"location":"getting-started/shapes.html#shape-parameters","text":"Let\u2019s first consider parameterized geometric shapes. For example, disregarding location, orientiation, and global scale, an ellipse can be fully described by its major and minor radii. A torus can be parameterized by its inner and outer radii. Here is a more complex example of parameterized shapes called supershapes , which be used to describe many complex shapes and curves that are found in nature. On the left, you can see sliders that control shape parameters describing a supershape. Every time we change any of these parameters, we get a different shape that belongs to the supershapes family. Hence, these parameters fully describe a shape in this family or population. This video was captured using Andrew Marsh's app website for supershapes generation. But, how about anatomies that one would want to study? Most real-world objects have a characteristic shape relative to other objects, and anatomy is no exception. Across a population, instances vary in shape, while retaining the \u201ckey features\u201d of the shape, so shape varies statistically. So how can we quantitatively describe a subject\u2019s anatomy within a population? and capture such statistical variations? Or in other words: - How can we define these sliders or knobs for a given anatomical population? What does each knob represent? - How many knobs or shape parameters are significant to describe an anatomy of interest? - How can we rank these shape parameters based on their significance? Answering the above questions for the anatomical population at hand is the crux of shape modeling. Shape modeling is about learning population-specific parameterization Shape modeling is the process of discovering significant shape parameters directly from medical data that can fully describe an anatomy in the context of a population.","title":"Shape Parameters"},{"location":"getting-started/shapes.html#discovering-shape-parameters-via-optimization","text":"ShapeWorks allows for discovering the modes of variation in shape cohorts for which the parameters are unknown. This is done by first optimizing particles that are in correspondence across the population (see Shape Model Optimization ). Next statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. These modes of shape variation can be visualized and used in downstream medical tasks. Below is an example of a shape model from parameterized ellipsoids that differ along the x and y radius. The mean shape is shown and we can see that 99.9% of the shape variability is explained by just two PCA modes as expected. By animating how the shape changes along the first PCA mode, we can conclude that this represents the variation in the radius along the y-axis. And animating along the second PCA mode, we can conclude this represents the variation in the radius along the x-axis. This example demonstrates that correspondence points defined via ShapeWorks optimization can correctly capture the parameters of a class of shapes.","title":"Discovering Shape Parameters via Optimization"},{"location":"getting-started/sw-stories.html","text":"ShapeWorks Success Stories (selected) Hip Joint FAI Pathology Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015. Pose and Shape of the Dysplastic Hip Joint Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021. Scapular Morphology in Hill-Sachs Patients Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017. Shape Changes in Atrial Fibrillation Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018. Benchmarking ShapeWorks in Clinical Applications A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878. Next Story Can be Yours!","title":"ShapeWorks Success Stories"},{"location":"getting-started/sw-stories.html#shapeworks-success-stories-selected","text":"","title":"ShapeWorks Success Stories (selected)"},{"location":"getting-started/sw-stories.html#hip-joint-fai-pathology","text":"Cam-type femoroacetabular impingement (FAI) is a morphologic deformity of the femur that may reduce the femoral neck and acetabulum's clearance, resulting in high shear forces to the cartilage. By analyzing the femur cortical bone thickness between asymptomatic controls and cam-FAI patients, collaborators have used ShapeWorks to show that impingement likely induces bone hypertrophy. Information provided by ShapeWorks has resulted in resection guidelines that can be easily executed in the operating room. Moreover, the limitations of radiographic measurements of plain film radiographs were established, which are often used in the clinical diagnosis of cam-FAI. With a shape score that depends on group-specific mean shapes, the optimized correspondence model from ShapeWorks was used to place subject-specific anatomy on a disease spectrum that is statistically derived from the shape population, providing an objective metric to assess severity. ShapeWorks has further helped develop cost-effective patient-specific meshes (which otherwise require hundreds of man-hours) of the cartilage and labrum to develop computational models and simulations to model contact mechanics and the pathogenesis of hip osteoarthritis. Relevant Papers P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, M. Harris, J. Weiss, R. Whitaker, and A. Anderson. Proximal femoral cortical bone thickness in patients with femoroacetabular impingement and normal hips analyzed using statistical shape modeling. In Summer Biomechanics, Bioengineering and Biotransport Conference, 2015. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement. Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. P. R. Atkins, S. K. Aoki, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Does removal of subchondral cortical bone provide sufficient resection depth for treatment of cam femoroacetabular impingement? Clinical Orthopaedics and Related ResearchR , 475(8):1977\u20131986, 2017. P. R. Atkins, S. K. Aoki, S. Y. Elhabian, P. Agrawal, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. Evaluation of the Sclerotic Subchondral Bone Boundary as a Surgical Resection Guide in the Treatment of Cam-type Femoroacetabular Impingement. In Annual Meeting of Orthopaedic Research Society, 2017. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Can the sclerotic subchondral bone of the proximal femur cam lesion be used as a surgical resection guide? An objective analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, S. Elhabian, P. Agrawal, R. Whitaker, J. Weiss, C. Peters, S. Aoki, and A. Anderson. Which radiographic measurements best identify anatomical variation in femoral head anatomy? Analysis using 3D computed tomography and statistical shape modeling. In International Society of Hip Arthroscopy Annual Scientific Meeting, 2016. P. Atkins, Y. Shin, P. Agrawal, S. Elhabian, R. Whitaker, J. Weiss, S. Aoki, C. Peters, and A. Anderson. Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur? Clinical Orthopaedics and Related ResearchR, 477(1):242\u2013253, 2019. P. Atkins, P. Mukherjee, S. Elhabian, S. Singla, R. Whitaker, J. Weiss, and A. Anderson. Warping of template meshes for efficient subject-specific FE mesh generation. In International Symposium of Computer Methods in Biomechanics and Biomedical Engineering, 2015.","title":"Hip Joint FAI Pathology"},{"location":"getting-started/sw-stories.html#pose-and-shape-of-the-dysplastic-hip-joint","text":"Developmental dysplasia of the hip (DDH) describes an undercoverage of the femoral head by the acetabulum and is most often described using angular measurements from radiographs used to estimate joint coverage. Since 3D analyses of the hip joint would be advantageous to defining the true morphology of DDH, an articulated, multiple-domain SSM was developed in ShapeWorks to isolate the morphological variation of the disease. The first four modes of variation largely represented variation in scale and pose, while all six modes included some subtle variations in bone morphology. While radiographic measurements provide some insight to joint morphology, there may be additional morphological features that better explain joint coverage and hip degeneration in these patients. By evaluating the modes of variation from our joint model against 3D measurements of coverage, we isolated the morphology associated with increased and decreased coverage within this population. Relevant Papers P. Agrawal, J.D. Mozingo, S.Y. Elhabian, A.E. Anderson, R.T. Whitaker. Combined Estimation of Shape and Pose for Statistical Analysis of Articulating Joints. Proceedings of Shape in Medical Imaging: International Workshop, ShapeMI 2020, pp. 111-121, 2020. J.D. Mozingo, P.R. Atkins, P. Agrawal, K. Uemura, S.Y. Elhabian, R.T. Whitaker, A.E. Anderson. Morphology of Hip Dysplasia in Japanese Females: A Statistical Shape Modeling Study. Abstract for poster presentation at the 45th Meeting of the American Society of Biomechanics, 2021. P.R. Atkins, P. Agrawal, J.D. Mozingo, K. Uemura, A.E. Anderson. Application of an Articulated Statistical Shape Model of the Hip to Predict Clinical Measures of Coverage. Abstract for podium presentation for the International Symposium on Computer Methods in Biomechanics and Biomedical Engineering, 2021.","title":"Pose and Shape of the Dysplastic Hip Joint"},{"location":"getting-started/sw-stories.html#scapular-morphology-in-hill-sachs-patients","text":"Surgical procedures for anterior shoulder instability reconstruct the glenoid and its soft tissue by creating an anterior buttress or overcome glenoid bone loss with an additional dynamic stabilizer (e.g., Latarjet procedure). However, the native anatomy must be sacrificed to obtain a stable shoulder. Recent findings suggest that there might be a place for more subtle changes of the periarticular structures, using, for example, a directional osteotomy of the coracoid, so that more normative anatomy is obtained. To this end, ShapeWorks has been used to define a data-driven linear discriminant between the Hill-Sachs lesions and control shapes in the shape space that demonstrates the spectrum of normal and pathologic scapulae (PDF - probability density function). Modes of variations discovered by ShapeWorks were found to relate to clinically relevant shape variations. Mode 1 (33.0% of variation) represented scaling differences. Mode 2 (32.0% of variation) demonstrated large differences around the acromion. In Mode 3 (11.8% of variation), the glenoid inclination and concavity of the glenoid surface were the most substantial. Mode 4 (9.0% of variation) captured primarily differences in orientation of the coracoid pillar, coracoid process size, and bony prominence. Variation in deviation of the coracoid process and the resulting coracoacromial relationship were captured in Mode 5 (3.1% of variation). Relevant Papers Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Andreas Mueller, Robert Tashjian, Heath Henninger. Thinking outside the glenohumeral box: Hierarchical shape variation of the periarticular anatomy of the scapula using statistical shape modeling. Journal of Orthopaedic Research, in press, 2020. Matthijs Jacxsens, Shireen Y. Elhabian, Sarah Brady, Peter Chalmers, Robert Tashjian, Heath Henninger. Coracoacromial Morphology: A Contributor to Recurrent Traumatic Anterior Glenohumeral Instability?. Journal of Shoulder and Elbow Surgery, 28(7), pp. 1316-1325, 2019. Matthijs Jacxsens, Shireen Y. Elhabian, Robert Z. Tashjian1, Heath B. Henninger. Scapular Morphology In Patients With Hill-Sachs Lesions Using Statistical Shape Modeling. Abstract for podium presentation for the 27th Congress of the European Society for Surgery of the Shoulder and the Elbow (SECEC-ESSSE) conference, 2017.","title":"Scapular Morphology in Hill-Sachs Patients"},{"location":"getting-started/sw-stories.html#shape-changes-in-atrial-fibrillation","text":"Shape changes of the left atrium (LA) and LA appendage (LAA) in AF are hypothesized to be linked to AF pathology and may play a role in thrombogenesis. Thrombus in the LA or LAA, due to stagnant blood flow in these chambers, is thought to be a significant cause of cardioembolic stroke in AF patients. However, many aspects of shape variation in the heart are poorly understood. ShapeWorks models have been used to develop predictive indices of spontaneous echocardiographic contrast (SEC) and thrombus using LAA/LA shape (an indicator for the risk of stroke). Results showed distinct patterns of shape that are statistically more likely to be observed in patients with SEC. Shape-based AF severity has indicated significant differences (p-value < 0.001) in the LA among normal controls, paroxysmal AF, and persistent AF populations. In a recent study, ShapeWorks was used to discover that LA shape was shown to be an independent predictor of AF recurrence after ablation. Hence, ShapeWorks may become a useful tool to improve patient selection for ablation. Relevant Papers J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. Computational shape models characterize shape change of the left atrium in atrial fibrillation. Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. Left atrial shape predicts recurrence after atrial fibrillation catheter ablation. Journal of Cardiovascular Electrophysiology, 2018.","title":"Shape Changes in Atrial Fibrillation"},{"location":"getting-started/sw-stories.html#benchmarking-shapeworks-in-clinical-applications","text":"A recent benchmarking study has evaluated and validated ShapeWorks, Deformetrica, and SPHARM-PDM in clinical applications that rely on morphometric quantifications, particularly anatomical landmark/measurement inference and lesion screening. Results demonstrate that SSM tools display different levels of consistency. ShapeWorks and Deformetrica models are more consistent than models from SPHARM-PDM due to the groupwise approach of estimating surface correspondences. Furthermore, ShapeWorks and Deformetrica shape models are found to capture clinically relevant population-level variability compared to SPHARM-PDM models. Relevant Papers Anupama Goparaju, Ibolya Csecs, Alan Morris, Evgueni Kholmovski, Nassir Marrouche, Ross T. Whitaker, and Shireen Y. Elhabian. On the Evaluation and Validation of Off-the-shelf Statistical Shape Modeling Tools: A Clinical Application. ShapeMI-MICCAI 2018: Workshop on Shape in Medical Imaging, 2018. Anupama Goparaju, Alexandre Bone, Nan Hu, Heath Henninger, Andrew Anderson, Stanely Durrleman, MatthijsJacxsens, Alan Morris, Ibolya Csecs, Nassir Marrouche, Shireen Elhabian, 2020. Benchmarking off-the-shelf statistical shape modeling tools in clinical applications. arXiv preprint arXiv:2009.02878.","title":"Benchmarking ShapeWorks in Clinical Applications"},{"location":"getting-started/sw-stories.html#next-story-can-be-yours","text":"","title":"Next Story Can be Yours!"},{"location":"getting-started/workflow.html","text":"Shape Modeling Workflow ShapeWorks supports the typical three-stage workflow for shape modeling. Groom Stage The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping. Optimize Stage The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split. Analyze Stage The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#shape-modeling-workflow","text":"ShapeWorks supports the typical three-stage workflow for shape modeling.","title":"Shape Modeling Workflow"},{"location":"getting-started/workflow.html#groom-stage","text":"The groom stage entails data inspection and preprocessing, including conversion of the input segmentations and surface meshes into the appropriate data types that are optimization friendly so that landmarks can be optimized in a numerically stable way. It also includes visualization for preprocessed/groomed data for quality control, and we are planning to include annotations for user-defined modeling preferences such as landmarks and constraints. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. Imaging data (e.g., CT, MRI) becomes out of alignment and cannot be tied to the resulting shape models. We have developed segmentation-based and mesh-based grooming tools and associated python scripts (i.e., use cases) to carry volumetric data through each grooming step with the shapes (meshes or segmentations) such that they can be used for subsequent analysis and visualization. These tools include image reflection (for paired anatomies), isotropic voxel resampling, image padding, applying shape-based alignment to images (center of mass and rigid alignment), and image cropping.","title":"Groom Stage"},{"location":"getting-started/workflow.html#optimize-stage","text":"The optimize stage is an iterative cycle of correspondences (landmarks/particles) optimization, visualization/quality control of resulting correspondence model and parameter tuning. The model initialization proceeds simultaneously with the optimization in a multi-scale fashion using an iterative particle splitting strategy to generate progressively detailed correspondence models with each split.","title":"Optimize Stage"},{"location":"getting-started/workflow.html#analyze-stage","text":"The analyze stage is the model analysis phase that supports the computation and visualization of the principal components of shape variation, average shapes, and group differences.","title":"Analyze Stage"},{"location":"new/ellipsoid-joint-generation.html","text":"Ellipsoid Joint Generation About ShapeCohortGenerator ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families. What is new? We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts. Getting Started with Shape Cohort Generator Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#ellipsoid-joint-generation","text":"","title":"Ellipsoid Joint Generation"},{"location":"new/ellipsoid-joint-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with ground truth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"new/ellipsoid-joint-generation.html#what-is-new","text":"We have added a new family of shapes in the ShapeCohortGenerator package. You can now generate ellipsoid joints (two anatomies per shape) which can be used for troubleshooting multiple domain shape modeling workflows. Similar to the ellipsoid and supershapes generator, the joint generator has three functions: - generate() for mesh generation (function specific to generator type) - generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) - generate_images() for image generation based on segmentations (general function shared by all generator types) Please refer to this notebook for all the options for generating the cohorts.","title":"What is new?"},{"location":"new/ellipsoid-joint-generation.html#getting-started-with-shape-cohort-generator","text":"Arguments specific to ellipsoid joint generation are: mode_size : uses size as the mode of variation mode_rotation : uses rotation as the mode of variation separation : distance between the two anatomies of the joint The notebook will soon be updated with examples of ellipsoid joint generation","title":"Getting Started with Shape Cohort Generator"},{"location":"new/free-form-constraints.html","text":"Free-Form Constraints The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/free-form-constraints.html#free-form-constraints","text":"The free-form constraint (FFC) functionality allows the definition of arbitrary areas of interest on domains. These areas are defined using a member point and any number of boundaries loops that define exclusion areas. The area where the member point lives is where particles are allowed to live, and will not step into exclusion areads deliniated by the boundary loops. For example, for a use case with d domains, one would add an xml parameter with d numbers denoting how many FFCs there will be per input. Then each of these will be defined as filenames under the tag . Each file will have the following format: query [member_point] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn] boundary_pts [boundary_pt1] [boundary_pt2] ... [boundary_ptn]","title":"Free-Form Constraints"},{"location":"new/new-studio.html","text":"New in ShapeWorks Studio 6.2 DeepSSM in Studio New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information. Multiple Domain Alignments New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information. Shape Evaluation Charts New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information. Usability Features Group p-value Display New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences. Scalar range controls New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values. Surface opacity controls Shape surface opacity can now be controlled on a per domain basis. Added narrow band optimization parameter The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification. New message history window A new button in the lower corner has been added that brings up the message history from the status bar. New suppressible error dialog The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages Multiple domain export options (combined + separate) When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain. Allow initial landmark points Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization. Mesh warping improvements Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved. New in ShapeWorks Studio 6.1 Multiple Domains As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information. Mesh Grooming As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information. Mesh Support As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction Improved Studio Interface As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast Surface Reconstruction ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction Dynamic Loading ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading Live Particles Movement ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters). Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"New in ShapeWorks Studio"},{"location":"new/new-studio.html#new-in-shapeworks-studio-62","text":"","title":"New in ShapeWorks Studio 6.2"},{"location":"new/new-studio.html#deepssm-in-studio","text":"New in ShapeWorks 6.2, we have added the ability to run DeepSSM tools in ShapeWorks Studio. See DeepSSM in Studio for more information.","title":"DeepSSM in Studio"},{"location":"new/new-studio.html#multiple-domain-alignments","text":"New in ShapeWorks 6.2, we have added support for multiple alignment strategies in ShapeWorks Studio. This allows analysis with and without articulation with a choice of reference domain, or global alignment. See Multiple Domain Alignments for more information.","title":"Multiple Domain Alignments"},{"location":"new/new-studio.html#shape-evaluation-charts","text":"New in ShapeWorks 6.2, we have added new shape evaluation charts. Charts for Compactness, Specificity and Generalizaion are provided. See Studio Metrics Panel for more information.","title":"Shape Evaluation Charts"},{"location":"new/new-studio.html#usability-features","text":"","title":"Usability Features"},{"location":"new/new-studio.html#group-p-value-display","text":"New in ShapeWorks 6.2, Studio has the ability to view group-wise p-values for surface differences.","title":"Group p-value Display"},{"location":"new/new-studio.html#scalar-range-controls","text":"New in ShapeWorks 6.2, Studio feature maps, p-value displays, deepssm surface error displays allow for manual control over scalar colormap values.","title":"Scalar range controls"},{"location":"new/new-studio.html#surface-opacity-controls","text":"Shape surface opacity can now be controlled on a per domain basis.","title":"Surface opacity controls"},{"location":"new/new-studio.html#added-narrow-band-optimization-parameter","text":"The narrow band optimization parameter has been added to Studio's Optimize parameter dialog. This allows the user to modifiy the narrow band from the default of 4 in the rare event that it needs modification.","title":"Added narrow band optimization parameter"},{"location":"new/new-studio.html#new-message-history-window","text":"A new button in the lower corner has been added that brings up the message history from the status bar.","title":"New message history window"},{"location":"new/new-studio.html#new-suppressible-error-dialog","text":"The error dialog has been replaced with a new dialog containing a checkbox to suppress further messages","title":"New suppressible error dialog"},{"location":"new/new-studio.html#multiple-domain-export-options-combined-separate","text":"When exporting data in the presences of multiple anatomies/domains, you may now export a combined file, or one for each domain.","title":"Multiple domain export options (combined + separate)"},{"location":"new/new-studio.html#allow-initial-landmark-points","text":"Initial particle positions can be specified in a Project Spreadsheet using the column prefix landmarks_file_ where is the name of each shape domain. For example: These landmarks will be used as the initial positions of particles during optimization. They are not yet visualized within Studio before optimization.","title":"Allow initial landmark points"},{"location":"new/new-studio.html#mesh-warping-improvements","text":"Multiple sources of crashes during mesh warping have been fixed and the overall speed has been dramatically improved.","title":"Mesh warping improvements"},{"location":"new/new-studio.html#new-in-shapeworks-studio-61","text":"","title":"New in ShapeWorks Studio 6.1"},{"location":"new/new-studio.html#multiple-domains","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for modeling multiple domains (e.g. anatomies) in joint correspondance model. See Multiple Domains for more information.","title":"Multiple Domains"},{"location":"new/new-studio.html#mesh-grooming","text":"As of ShapeWorks 6.1, we added support in ShapeWorks Studio for mesh grooming, including smoothing, hole filling, and iterative closest point pre-alignment. See Groom Module for more information.","title":"Mesh Grooming"},{"location":"new/new-studio.html#mesh-support","text":"As of ShapeWorks 6.0, we added mesh support to ShapeWorks Studio including loading meshes, optimizing shape models directly on meshes, and visualizing meshes with scalar feature values. Meshes can store values at vertices such as \"cortical thickness\", or \"fibrosis\u201d and ShapeWorks Studio uses them in a similar manner as feature maps/volumes. Open meshes in Studio Visualizing features on surface mesh We also added a new surface reconstruction method with support for both mesh or image inputs. This method is much faster and is the new default. New and faster surface reconstruction","title":"Mesh Support"},{"location":"new/new-studio.html#improved-studio-interface","text":"As of ShapeWorks 6.0, we added support for automatic glyph sizing, draging/dropping of images and meshes. Scalar bar color is now opposite of background color (e.g., when background is white, text should be dark) (user request). Samples names color is opposite of the background color for a better contrast","title":"Improved Studio Interface"},{"location":"new/new-studio.html#surface-reconstruction","text":"ShapeWorks Studio provides a particle-based surface reconstruction that can reconstruct high quality surface meshes with fewer number of particles. See How to Analyze Your Shape Model? for details about the method. With particle-based surface reconstruction, there is not need to optimize denser particle systems (i.e., with more particles) to reconstruct surface meshes with subvoxel accuracy (old) VTK-based surface reconstruction (new) particle-based surface reconstruction","title":"Surface Reconstruction"},{"location":"new/new-studio.html#dynamic-loading","text":"ShapeWorks Studio support load-on-demand, which makes it more scalable by supporting loading in order of 100s of samples. For instance, an old small project that took 10+ seconds to load now starts instantly in Studio. (old) without dynamic loading (new) with dynamic loading","title":"Dynamic Loading"},{"location":"new/new-studio.html#live-particles-movement","text":"ShapeWorks Studio allows for live introspection of the correpsondence placement optimization process and the ability to abort the optimization at any time (e.g., changing algorithmic parameters).","title":"Live Particles Movement"},{"location":"new/new-studio.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"new/openvdb.html","text":"ShapeWorks Takes ~85% Less Memory ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/openvdb.html#shapeworks-takes-85-less-memory","text":"ShapeWorks uses signed distance transforms to represent shape samples. This, and other quantities computed from the distance transforms consumed a lot of memory. Instead, we now store only a subset of these values that lie within a narrow band off the surface (inside and outside the surface). A default narrow band of 4 units is used. This works well for the tested use cases and is configurable using the parameter, see: How to Optimize Your Shape Model . We make use of OpenVDB , a more memory-efficient data structure, for signed distance transforms. OpenVDB uses a tree-based data structure to store data in only the relevant voxels. We verified that same distance transform values are obtained and made sure optimizer loudly crashes if we sample outside the narrow band. Lower memory footprint and faster optimization Along with other refactoring and code optimizations, ShapeWorks now uses 85% less memory (from 57.09GB to 9.67GB in one use case). Additionally, the particle optimizer is now 2X faster . ShapeWorks now uses 85% less memory. The particles optimizer is now 2X faster. These benchmarks are reported on a Pelvis datasets of 40 NRRD files and a femur dataset of 57 NRRD files.","title":"ShapeWorks Takes ~85% Less Memory"},{"location":"new/shapeworks-command.html","text":"ShapeWorks Command ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use Example: ResampleVolumesToBeIsotropic Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool Resampling images Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > ); Resampling segmentations Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#shapeworks-command","text":"ShapeWorks was a conglomeration of independent executables for grooming and optimization with a GUI (ShapeWorks Studio) for analysis and visualization. This design is highly inflexible, task specific, and poorly documented, and Studio duplicated a significant portion of their functionality. We have made significant efforts in organizing the codebase based on functionalities, implementing them as libraries rather than executables to provide a common backbone to command-line and GUI-based tools, and syncing ShapeWorks Studio to use the same underlying libraries. To retain command line usage, we have created a single shapeworks command with subcommands exposing this functionality along with greater flexibility and interactive --help for each subcommand. This consolidation makes the framework more powerful and flexible. It also enables ShapeWorks functionality to be used as libraries linked to new applications. All the executables used for the segmentation-driven grooming have been consolidated, documented, tested against the original command line tools, and functionally debugged Comprehensive unit testing is implemented and executed as part of automatic validation run with each addition to the code. This also serves as independent examples of its use","title":"ShapeWorks Command"},{"location":"new/shapeworks-command.html#example-resamplevolumestobeisotropic","text":"Old command-line: ResampleVolumesToBeIsotropic ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing [--isBinaryImage] [--isCenterImageOn] Disadvantages of the old command-line tool: Cannot be used by other classes or other APIs or other functions Not adaptable (need to edit script files to customize it) Each command needs to be given input and output paths Creates IO bottlenecks Fixed parameters cannot be changed (e.g., num iterations for binarization) All logic is buried behind a single command line tool","title":"Example: ResampleVolumesToBeIsotropic"},{"location":"new/shapeworks-command.html#resampling-images","text":"Old command-line: ResampleVolumesToBeIsotropic (for images) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isCenterImageOn New command-line: isoresample (for images) shapeworks readimage --name recenter isoresample --isospacing writeimage --name C++ (without chaining): isoresample (for images) Image img ( < input - file > ); img . recenter (); img . isoresample ( < voxel - spacing > ); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). isoresample ( < voxel - spacing > ). write ( < output - file > );","title":"Resampling images"},{"location":"new/shapeworks-command.html#resampling-segmentations","text":"Old command-line: ResampleVolumesToBeIsotropic (for segmentations) ./ResampleVolumesToBeIsotropic --inFilename --outFilename --isoSpacing --isBinaryImage --isCenterImageOn The old executable\u2019s functionalities are broken down further to make it more modular: Antialias using shapeworks antialias Recenter using shapeworks recenter Binarize using shapeworks binarize Advantages for the new shapeworks API: Promotes user\u2019s understanding of the underlying functionality (more transparency and equivalent simplicity) Allows the user to choose the set of commands to be run User can know what parameters are considered to perform each command User can modify parameter values each step of the way User can save/visualize intermediate outputs for troubleshooting New command-line: isoresample (for segmentations) shapeworks readimage --name recenter antialias --iterations isoresample --isospacing binarize writeimage --name C++ (without chaining): isoresample (for segmentations) Image img ( < input - file > ); img . recenter (); img . antialias ( < num - iter > ); img . isoresample ( < voxel - spacing > ); img . binarize (); img . write ( < output - file > ); C++ (with chaining): isoresample (for images) Image img ( < input - file > ). recenter (). antialias ( < num - iter > ). isoresample ( < voxel - spacing > ). binarize (). write ( < output - file > );","title":"Resampling segmentations"},{"location":"new/shapeworks-python.html","text":"ShapeWorks in Python ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! . Why ShapeWorks in Python? One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model. Diving into ShapeWorks' \"Clear\" Box A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server. Getting Started with Juypter Notebooks Getting Started with Segmentations Getting Started with Meshes Getting Started with Segmentations Getting Started with Exploring Segmentations Getting Started with Shape Cohort Generation Getting Started with Data Augmentation","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#shapeworks-in-python","text":"ShapeWorks with Python support ShapeWorks Python library is currently under active development and is part of our major releases as of ShapeWorks 6 . There is no one-size-fits-all when it comes to grooming your data for shape modeling. Instead, there are general guidelines that one could consider when deciding on his/her own workflow. NO one-size-fits-all workflow Looking at your data as it goes through different processing steps is a must-do ! To support your workflow discovery process, we have been making significant strides in developing ShapeWorks tools to be more modular, generic, and transparent. Our efforts entail consolidating the underlying computational libraries, providing a flexible and unified shapeworks command line tool , and now the ShapeWorks Python library! .","title":"ShapeWorks in Python"},{"location":"new/shapeworks-python.html#why-shapeworks-in-python","text":"One primary goal of the ShapeWorks Python library is to open and reveal what is in the ShapeWorks black box and lay down all steps involved in preprocessing your data, optimizing and analyzing your statistical shape models in a way that supports interactive workflow discovery and makes you as a user takes the full control of your own study and analysis. In Examples/notebooks/tutorials , we provide step-by-step, hands-on tutorials on different aspects of the shape modeling workflow in a transparent, reproducible, and sharable manner. For this purpose, we have chosen Juypter Notebooks as the front-end tools for these demonstrations. These hands-on tutorials are designed to reflect the thought process that a non-expert user could go through at different shape modeling phases, starting from processing or grooming your data to analyzing your optimized shape model.","title":"Why ShapeWorks in Python?"},{"location":"new/shapeworks-python.html#diving-into-shapeworks-clear-box","text":"A growing list of fully-documented and self-contained notebooks demonstrate various ShapeWorks tools and shape modeling workflows. To actually try the following notebooks out, open a terminal, conda activate shapeworks , change to the Examples\\Python\\notebooks\\tutorials directory and run jupyter notebook to start the notebook server.","title":"Diving into ShapeWorks' \"Clear\" Box"},{"location":"new/shapeworks-python.html#getting-started-with-juypter-notebooks","text":"","title":"Getting Started with Juypter Notebooks"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"new/shapeworks-python.html#getting-started-with-segmentations_1","text":"","title":"Getting Started with Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"new/shapeworks-python.html#getting-started-with-shape-cohort-generation","text":"","title":"Getting Started with Shape Cohort Generation"},{"location":"new/shapeworks-python.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"new/ssm-eval.html","text":"Shape Model Evaluation ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact). ShapeWorks Commands shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1 ShapeWorks Python tools # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference Model Evaluation in Studio Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shape-model-evaluation","text":"ShapeWorks support quantitative evaluation of shape models, which can be used for algorithmic parameter tuning. Quantitative metrics are generalizability, specificity, and compactness. In Examples/Python/ , run python RunUseCase.py ellipsoid_evaluate to see an example of how to compute these metrics. Compactness For fixed training data, a compact model pdf should describe the data's distribution using the smallest possible number of parameters. Poor Model (compactness = 0.3) Compact Model (compactness = 0.99) Generalization The model should be able to generalize from the examples given in the training set, hence describing any valid instance of the class of object, not just those seen in the training set. Specificity This is the requirement that the model can only represent valid instances of the class(es) of objects presented in the training set. Hence, the model is specific for this training set. What is a good shape model? A good shape model should balance the trade-off between three requirements, namely specificity, generalization, and compactness. In particular, a shape model needs to generate samples that are plausible (i.e., respect the population statistics). It also needs to generate samples beyond the training data (i.e., generalizable) while describing the population with few parameters (i.e., compact).","title":"Shape Model Evaluation"},{"location":"new/ssm-eval.html#shapeworks-commands","text":"shapeworks readparticlesystem --name *.particles -- compactness --nmodes 1 shapeworks readparticlesystem --name *.particles -- generalization --nmodes 1 shapeworks readparticlesystem --name *.particles -- specificity --nmodes 1","title":"ShapeWorks Commands"},{"location":"new/ssm-eval.html#shapeworks-python-tools","text":"# Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) #evaluation tools shapeworks . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , nModes = 1 , saveTo = \"scree.txt\" ) shapeworks . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) shapeworks . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 1 , saveTo = save_dir ) Details about the evaluation functions can be found in the API Reference","title":"ShapeWorks Python tools"},{"location":"new/ssm-eval.html#model-evaluation-in-studio","text":"Model evaluation is performed in Studio automatically under the metrics panel. See Studio - Metrics Panel for more information.","title":"Model Evaluation in Studio"},{"location":"new/sw-meshes.html","text":"ShapeWorks Directly on Meshes Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"new/sw-meshes.html#shapeworks-directly-on-meshes","text":"Surface meshes are capable of representing complex surfaces with thin structures while using at most several megabytes of data. By allowing ShapeWorks to optimize shape models directly on meshes, we are reducing the hardware requirements and memory load of the software, allowing it to run faster on weaker systems, including personal computers. Note Femur dataset segmentation data: 9.2GB vs. mesh data: 53.1MB Particle updates using geodesic walks so particles never leave the surface Optimizing particles on spheres with lumps of different sizes Optimizing particles on open meshes As of ShapeWorks 6, we enabled using surface normals as correspondence features. Surface normals enable better modeling of thin structures Better surface sampling and correspondences with surface normals","title":"ShapeWorks Directly on Meshes"},{"location":"notebooks/array-passing-without-copying.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); In [ ]: Copied! import shapeworks as sw import shapeworks as sw In [ ]: Copied! import numpy as np import numpy as np shapeworks Image from numpy array \u00b6 In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean() While the numpy can still look at the memory, it no longer has ownership: \u00b6 In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean() ...so the safest thing to do now is let the array go out of scope: \u00b6 having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr Only dtype.float32 arrays can be used to initialize an image: \u00b6 In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg No unnecessary copies and no memory leaks! \u00b6 The numpy array still owns its data since a copy was passed to create the Image. \u00b6 Ownership of the copy's memory was taken by the image before it went out of scope. \u00b6 In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() Now for the other way around. \u00b6 numpy array from shapeworks Image \u00b6 In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims() The numpy array references the memory of the current Image and can change it: \u00b6 In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean() ...but it still doesn't have ownership. \u00b6 Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above. \u00b6 In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr If a copy is needed, pass copy=True to toArray() \u00b6 In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA'] This can be useful when the array is created from a temporary Image: \u00b6 In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True)) viewing the image using pyvista \u00b6 One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument: \u00b6 In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show() Finally, we can assign a numpy array to an existing Image \u00b6 This retains the Image's origin, scale, and coordsys. \u00b6 In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved) Let's use a scipy operation on the image: \u00b6 In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0) The return from this filter is the right size and type, but it's a copy: \u00b6 In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA'] Let's assign it back to Image so we can retain Image's origin, scale, and coordsys: \u00b6 In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA'] Now we can look at it again in the plotter: \u00b6 In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Array passing without copying"},{"location":"notebooks/array-passing-without-copying.html#shapeworks-image-from-numpy-array","text":"In [ ]: Copied! dims = ( 1 , 3 , 2 ) # NOTE: numpy dims are specified in z, y, x order farr = np . ndarray ( dims , dtype = np . float32 ) ival = 10 ; jval = 50 ; kval = 1.75 for i in range ( 0 , farr . shape [ 2 ]): for j in range ( 0 , farr . shape [ 1 ]): for k in range ( 0 , farr . shape [ 0 ]): farr [ k ][ j ][ i ] = ival * ( i / farr . shape [ 2 ]) + jval * ( j / farr . shape [ 1 ]) + kval / farr . shape [ 0 ] dims = (1,3,2) # NOTE: numpy dims are specified in z, y, x order farr = np.ndarray(dims, dtype=np.float32) ival = 10; jval = 50; kval = 1.75 for i in range(0, farr.shape[2]): for j in range(0, farr.shape[1]): for k in range(0, farr.shape[0]): farr[k][j][i] = ival*(i/farr.shape[2]) + jval*(j/farr.shape[1]) + kval/farr.shape[0] In [ ]: Copied! farr . mean () farr.mean() In [ ]: Copied! farr . dtype farr.dtype In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg = sw . Image ( farr ) farrimg # NOTE: sw.Image dims are specified in x, y, z order farrimg = sw.Image(farr) farrimg # NOTE: sw.Image dims are specified in x, y, z order In [ ]: Copied! farrimg . mean () farrimg.mean()","title":"shapeworks Image from numpy array"},{"location":"notebooks/array-passing-without-copying.html#while-the-numpy-can-still-look-at-the-memory-it-no-longer-has-ownership","text":"In [ ]: Copied! farr . flags [ 'OWNDATA' ] farr.flags['OWNDATA'] In [ ]: Copied! farrimg += 100 farrimg += 100 In [ ]: Copied! farrimg . mean () farrimg.mean() In [ ]: Copied! farr . mean () farr.mean()","title":"While the numpy can still look at the memory, it no longer has ownership:"},{"location":"notebooks/array-passing-without-copying.html#so-the-safest-thing-to-do-now-is-let-the-array-go-out-of-scope","text":"having used a temporary during Image construction: img = sw.Image(np.array(arr)) variable replacement after Image construction: arr = np.zeros(1) explicit deletion after Image construction: del arr In [ ]: Copied! del farr del farr","title":"...so the safest thing to do now is let the array go out of scope:"},{"location":"notebooks/array-passing-without-copying.html#only-dtypefloat32-arrays-can-be-used-to-initialize-an-image","text":"In [ ]: Copied! dims = ( 12 , 3 , 21 ) darr = np . ndarray ( dims , dtype = np . float64 ) ival = 10 ; jval = 50 ; kval = 1.75 for k in range ( 0 , dims [ 0 ]): for j in range ( 0 , dims [ 1 ]): for i in range ( 0 , dims [ 2 ]): darr [ k ][ j ][ i ] = ival * ( i / darr . shape [ 2 ]) + jval * ( j / darr . shape [ 1 ]) + kval / darr . shape [ 0 ] dims = (12,3,21) darr = np.ndarray(dims, dtype=np.float64) ival = 10; jval = 50; kval = 1.75 for k in range(0, dims[0]): for j in range(0, dims[1]): for i in range(0, dims[2]): darr[k][j][i] = ival*(i/darr.shape[2]) + jval*(j/darr.shape[1]) + kval/darr.shape[0] In [ ]: Copied! darr . dtype darr.dtype In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! # note: this try/catch is only used so the notebook runs to completion; not typically necessary try : darrimg = sw . Image ( darr ) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex : print ( ex ) # note: this try/catch is only used so the notebook runs to completion; not typically necessary try: darrimg = sw.Image(darr) # Throws an exception because dtype must be same as Image's pixel type except Exception as ex: print(ex) In [ ]: Copied! darrimg = sw . Image ( np . array ( darr , dtype = np . float32 )) # Makes a copy of the array when passsed darrimg darrimg = sw.Image(np.array(darr, dtype=np.float32)) # Makes a copy of the array when passsed darrimg","title":"Only dtype.float32 arrays can be used to initialize an image:"},{"location":"notebooks/array-passing-without-copying.html#no-unnecessary-copies-and-no-memory-leaks","text":"","title":"No unnecessary copies and no memory leaks!"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-still-owns-its-data-since-a-copy-was-passed-to-create-the-image","text":"","title":"The numpy array still owns its data since a copy was passed to create the Image."},{"location":"notebooks/array-passing-without-copying.html#ownership-of-the-copys-memory-was-taken-by-the-image-before-it-went-out-of-scope","text":"In [ ]: Copied! darr . flags [ 'OWNDATA' ] darr.flags['OWNDATA'] In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darrimg += 50 darrimg += 50 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean() In [ ]: Copied! darr *= 10 darr *= 10 In [ ]: Copied! darrimg . mean () darrimg.mean() In [ ]: Copied! darr . mean () darr.mean()","title":"Ownership of the copy's memory was taken by the image before it went out of scope."},{"location":"notebooks/array-passing-without-copying.html#now-for-the-other-way-around","text":"","title":"Now for the other way around."},{"location":"notebooks/array-passing-without-copying.html#numpy-array-from-shapeworks-image","text":"In [ ]: Copied! ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" ellipsoid_path = \"../../../Testing/data/1x2x2.nrrd\" femur_path = \"../../../Testing/data/femur.nrrd\" In [ ]: Copied! img = sw . Image ( ellipsoid_path ) img img = sw.Image(ellipsoid_path) img In [ ]: Copied! arr = img . toArray () arr . dtype arr = img.toArray() arr.dtype In [ ]: Copied! arr . mean () arr.mean() In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . shape # remember, numpy dims are zyx and Image dims are xyz arr.shape # remember, numpy dims are zyx and Image dims are xyz In [ ]: Copied! img . dims () img.dims()","title":"numpy array from shapeworks Image"},{"location":"notebooks/array-passing-without-copying.html#the-numpy-array-references-the-memory-of-the-current-image-and-can-change-it","text":"In [ ]: Copied! arr += 100 arr += 100 In [ ]: Copied! img . mean () img.mean() In [ ]: Copied! arr . mean () arr.mean()","title":"The numpy array references the memory of the current Image and can change it:"},{"location":"notebooks/array-passing-without-copying.html#but-it-still-doesnt-have-ownership","text":"","title":"...but it still doesn't have ownership."},{"location":"notebooks/array-passing-without-copying.html#since-many-image-operations-reallocate-internally-its-still-safest-to-let-it-go-out-of-scope-as-shown-above","text":"In [ ]: Copied! arr . flags [ 'OWNDATA' ] arr.flags['OWNDATA'] In [ ]: Copied! del arr del arr","title":"Since many Image operations reallocate internally, it's still safest to let it go out of scope as shown above."},{"location":"notebooks/array-passing-without-copying.html#if-a-copy-is-needed-pass-copytrue-to-toarray","text":"In [ ]: Copied! arr = img . toArray ( copy = True ) arr . flags [ 'OWNDATA' ] arr = img.toArray(copy=True) arr.flags['OWNDATA']","title":"If a copy is needed, pass copy=True to toArray()"},{"location":"notebooks/array-passing-without-copying.html#this-can-be-useful-when-the-array-is-created-from-a-temporary-image","text":"In [ ]: Copied! arr = sw . Image ( ellipsoid_path ) . toArray ( copy = True ) arr . mean () arr = sw.Image(ellipsoid_path).toArray(copy=True) arr.mean() In [ ]: Copied! def use_arr ( arr ): return arr . mean () def use_arr(arr): return arr.mean() In [ ]: Copied! use_arr ( sw . Image ( ellipsoid_path ) . toArray ( copy = True )) use_arr(sw.Image(ellipsoid_path).toArray(copy=True))","title":"This can be useful when the array is created from a temporary Image:"},{"location":"notebooks/array-passing-without-copying.html#viewing-the-image-using-pyvista","text":"","title":"viewing the image using pyvista"},{"location":"notebooks/array-passing-without-copying.html#one-common-reason-to-get-the-images-array-is-for-viewing-using-pyvista-using-the-for_viewing-argument","text":"In [ ]: Copied! import pyvista as pv import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( backend = \"ipyvtklink\" ) pv.set_jupyter_backend(backend=\"ipyvtklink\") In [ ]: Copied! #help(pv.Plotter) #help(pv.Plotter) In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter . add_bounding_box () #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() plotter.add_bounding_box() #plotter.show_bounds() # for some reason extremely slow on osx #plotter.show_grid() # for some reason extremely slow on osx In [ ]: Copied! # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img . toArray ( for_viewing = True ) # 'F' is `for_viewing` arr . flags # NOTE: pyvisya-wrapped vtk images require 'F' ordering to prevent copying arr = img.toArray(for_viewing = True) # 'F' is `for_viewing` arr.flags In [ ]: Copied! arr . flags arr.flags In [ ]: Copied! # sw2vtkImage takes care of this for us vtkimg = sw . sw2vtkImage ( img , verbose = True ) # sw2vtkImage takes care of this for us vtkimg = sw.sw2vtkImage(img, verbose=True) In [ ]: Copied! vol = plotter . add_volume ( vtkimg , shade = True , show_scalar_bar = True ) vol = plotter.add_volume(vtkimg, shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"One common reason to get the Image's array is for viewing using pyvista using the for_viewing argument:"},{"location":"notebooks/array-passing-without-copying.html#finally-we-can-assign-a-numpy-array-to-an-existing-image","text":"","title":"Finally, we can assign a numpy array to an existing Image"},{"location":"notebooks/array-passing-without-copying.html#this-retains-the-images-origin-scale-and-coordsys","text":"In [ ]: Copied! plotter = pv . Plotter ( shape = ( 1 , 1 ), notebook = True , border = True ) plotter . add_axes () plotter = pv.Plotter(shape = (1, 1), notebook = True, border = True) plotter.add_axes() In [ ]: Copied! img1 = sw . Image ( femur_path ) img1 = sw.Image(femur_path) In [ ]: Copied! img1 . setSpacing (( 1.5 , 0.75 , 1 )) # set spacing to show that it's preserved on both copy and assign img1.setSpacing((1.5, 0.75, 1)) # set spacing to show that it's preserved on both copy and assign In [ ]: Copied! img2 = sw . Image ( img1 ) # make a copy to be processed by a scipy Python filter (spacing preserved) img2 = sw.Image(img1) # make a copy to be processed by a scipy Python filter (spacing preserved)","title":"This retains the Image's origin, scale, and coordsys."},{"location":"notebooks/array-passing-without-copying.html#lets-use-a-scipy-operation-on-the-image","text":"In [ ]: Copied! from scipy import ndimage from scipy import ndimage In [ ]: Copied! ck = ndimage . gaussian_filter ( img2 . toArray (), 12.0 ) ck = ndimage.gaussian_filter(img2.toArray(), 12.0)","title":"Let's use a scipy operation on the image:"},{"location":"notebooks/array-passing-without-copying.html#the-return-from-this-filter-is-the-right-size-and-type-but-its-a-copy","text":"In [ ]: Copied! ck . shape ck.shape In [ ]: Copied! ck . dtype ck.dtype In [ ]: Copied! ck . flags [ 'OWNDATA' ] ck.flags['OWNDATA']","title":"The return from this filter is the right size and type, but it's a copy:"},{"location":"notebooks/array-passing-without-copying.html#lets-assign-it-back-to-image-so-we-can-retain-images-origin-scale-and-coordsys","text":"In [ ]: Copied! img2 . assign ( ck ) img2.assign(ck) In [ ]: Copied! # notice numpy array ownership has been transferred to Image ck . flags [ 'OWNDATA' ] # notice numpy array ownership has been transferred to Image ck.flags['OWNDATA']","title":"Let's assign it back to Image so we can retain Image's origin, scale, and coordsys:"},{"location":"notebooks/array-passing-without-copying.html#now-we-can-look-at-it-again-in-the-plotter","text":"In [ ]: Copied! plotter . add_volume ( sw . sw2vtkImage ( img2 ), shade = True , show_scalar_bar = True ) plotter . add_volume ( sw . sw2vtkImage ( img1 ), shade = True , show_scalar_bar = True ) plotter.add_volume(sw.sw2vtkImage(img2), shade=True, show_scalar_bar=True) plotter.add_volume(sw.sw2vtkImage(img1), shade=True, show_scalar_bar=True) In [ ]: Copied! plotter . show () plotter.show()","title":"Now we can look at it again in the plotter:"},{"location":"notebooks/create-and-apply-image-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can be used to center image data or to align two images \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\" Center of mass transforms \u00b6 Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() create and apply transform, noting that center of mass is now roughly in the center of the image \u00b6 In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass()) visualization of different resampling methods \u00b6 In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! Rigid registration transforms \u00b6 Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" compute distance transforms to be used to compute alignment of the segmentations \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied! create distance transforms to be used to compute the images' alignment \u00b6 In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0) create image alignment transforms \u00b6 In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1) apply the transforms to the original images \u00b6 In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1) visualize the results \u00b6 Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#transforms-can-be-used-to-center-image-data-or-to-align-two-images","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import shapeworks as sw import numpy as np import pyvista as pv In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../ShapeWorks/Examples/Python/Data\" DATA = \"../ShapeWorks/Examples/Python/Data\"","title":"Transforms can be used to center image data or to align two images"},{"location":"notebooks/create-and-apply-image-transforms.html#center-of-mass-transforms","text":"Centers the contents of a given image using the specified resampling method In [ ]: Copied! filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" filename = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_14.nrrd\" In [ ]: Copied! img = sw . Image ( filename ) print ( \"center: \" , img . center ()) print ( \"center of mass: \" , img . centerOfMass ()) img = sw.Image(filename) print(\"center: \", img.center()) print(\"center of mass: \", img.centerOfMass()) In [ ]: Copied! slices = sw . sw2vtkImage ( img ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) slices = sw.sw2vtkImage(img).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 1 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"before centering\" , position = 'lower_left' ) p . add_mesh ( slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(1,3), border=False) p.subplot(0,0) p.add_text(\"before centering\", position='lower_left') p.add_mesh(slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show()","title":"Center of mass transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#create-and-apply-transform-noting-that-center-of-mass-is-now-roughly-in-the-center-of-the-image","text":"In [ ]: Copied! xform = img . createCenterOfMassTransform () xform = img.createCenterOfMassTransform() In [ ]: Copied! # now center of mass is roughly at the center img . applyTransform ( xform ) print ( \"center of mass: \" , img . centerOfMass ()) # now center of mass is roughly at the center img.applyTransform(xform) print(\"center of mass: \", img.centerOfMass())","title":"create and apply transform, noting that center of mass is now roughly in the center of the image"},{"location":"notebooks/create-and-apply-image-transforms.html#visualization-of-different-resampling-methods","text":"In [ ]: Copied! # linear interpolation img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . Linear ) lin = sw . sw2vtkImage ( img ) # linear interpolation img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.Linear) lin = sw.sw2vtkImage(img) In [ ]: Copied! # closest point resampling img = sw . Image ( filename ) img . applyTransform ( xform , sw . InterpolationType . NearestNeighbor ) nn = sw . sw2vtkImage ( img ) # closest point resampling img = sw.Image(filename) img.applyTransform(xform, sw.InterpolationType.NearestNeighbor) nn = sw.sw2vtkImage(img) In [ ]: Copied! lin_slices = lin . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) nn_slices = nn . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) lin_slices = lin.slice_orthogonal(x=25,y=25,z=25) nn_slices = nn.slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"linear\" ) p . add_mesh ( lin_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( lin_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( lin_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"nearest neighbor\" ) p . add_mesh ( nn_slices [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( nn_slices [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( nn_slices [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"linear\") p.add_mesh(lin_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(lin_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(lin_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"nearest neighbor\") p.add_mesh(nn_slices[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(nn_slices[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(nn_slices[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualization of different resampling methods"},{"location":"notebooks/create-and-apply-image-transforms.html#rigid-registration-transforms","text":"Aligns two images using their distance transforms by converting these to meshes, computing the alignment using iterative closest point (ICP), then resampling to move the center of mass of one to be aligned with the other NOTE: images used to compute the transform must be distance transforms In [ ]: Copied! filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\" filename1 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_17.nrrd\" filename2 = DATA + \"/ellipsoid/Ellipsoids_UnPrepped/seg.ellipsoid_19.nrrd\"","title":"Rigid registration transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#compute-distance-transforms-to-be-used-to-compute-alignment-of-the-segmentations","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1_slices_orig = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices_orig = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices_orig = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices_orig = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 2 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"Image 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"Image 2\" ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(2,3), border=False) p.subplot(0,0) p.add_text(\"Image 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"Image 2\") p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"compute distance transforms to be used to compute alignment of the segmentations"},{"location":"notebooks/create-and-apply-image-transforms.html#create-distance-transforms-to-be-used-to-compute-the-images-alignment","text":"In [ ]: Copied! dt1 = img1 . computeDT ( 1.0 ) dt2 = img2 . computeDT ( 1.0 ) dt1 = img1.computeDT(1.0) dt2 = img2.computeDT(1.0)","title":"create distance transforms to be used to compute the images' alignment"},{"location":"notebooks/create-and-apply-image-transforms.html#create-image-alignment-transforms","text":"In [ ]: Copied! xform_1_to_2 = dt1 . createRigidRegistrationTransform ( dt2 ) xform_2_to_1 = dt2 . createRigidRegistrationTransform ( dt1 ) xform_1_to_2 = dt1.createRigidRegistrationTransform(dt2) xform_2_to_1 = dt2.createRigidRegistrationTransform(dt1)","title":"create image alignment transforms"},{"location":"notebooks/create-and-apply-image-transforms.html#apply-the-transforms-to-the-original-images","text":"In [ ]: Copied! img1 = sw . Image ( filename1 ) img2 = sw . Image ( filename2 ) img1 = sw.Image(filename1) img2 = sw.Image(filename2) In [ ]: Copied! img1 . applyTransform ( xform_1_to_2 ) img2 . applyTransform ( xform_2_to_1 ) img1.applyTransform(xform_1_to_2) img2.applyTransform(xform_2_to_1)","title":"apply the transforms to the original images"},{"location":"notebooks/create-and-apply-image-transforms.html#visualize-the-results","text":"Notice how it even rotates the images into each others' centers of mass In [ ]: Copied! img1_slices = sw . sw2vtkImage ( img1 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img2_slices = sw . sw2vtkImage ( img2 ) . slice_orthogonal ( x = 25 , y = 25 , z = 25 ) img1_slices = sw.sw2vtkImage(img1).slice_orthogonal(x=25,y=25,z=25) img2_slices = sw.sw2vtkImage(img2).slice_orthogonal(x=25,y=25,z=25) In [ ]: Copied! p = pv . Plotter ( shape = ( 3 , 3 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"1 -> 2\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 0 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . add_mesh ( img2_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 1 , 0 ) p . add_text ( \"2 -> 1\" ) p . add_mesh ( img1_slices_orig [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 1 , 1 ) p . add_mesh ( img1_slices_orig [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 1 , 2 ) p . add_mesh ( img1_slices_orig [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.25 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.75 ) p . show_grid () p . camera_position = 'zx' p . subplot ( 2 , 0 ) p . add_text ( \"both\" ) p . add_mesh ( img1_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 2 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'xy' p . subplot ( 2 , 1 ) p . add_mesh ( img1_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 0 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'yz' p . subplot ( 2 , 2 ) p . add_mesh ( img1_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . add_mesh ( img2_slices [ 1 ], style = 'points' , show_scalar_bar = False , opacity = 0.5 ) p . show_grid () p . camera_position = 'zx' p . show () p = pv.Plotter(shape=(3,3), border=False) p.subplot(0,0) p.add_text(\"1 -> 2\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'xy' p.subplot(0,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'yz' p.subplot(0,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.add_mesh(img2_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.show_grid() p.camera_position = 'zx' p.subplot(1,0) p.add_text(\"2 -> 1\") p.add_mesh(img1_slices_orig[2], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'xy' p.subplot(1,1) p.add_mesh(img1_slices_orig[0], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'yz' p.subplot(1,2) p.add_mesh(img1_slices_orig[1], style='points', show_scalar_bar=False, opacity=0.25) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.75) p.show_grid() p.camera_position = 'zx' p.subplot(2,0) p.add_text(\"both\") p.add_mesh(img1_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[2], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'xy' p.subplot(2,1) p.add_mesh(img1_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[0], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'yz' p.subplot(2,2) p.add_mesh(img1_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.add_mesh(img2_slices[1], style='points', show_scalar_bar=False, opacity=0.5) p.show_grid() p.camera_position = 'zx' p.show() In [ ]: Copied!","title":"visualize the results"},{"location":"notebooks/create-and-apply-mesh-transforms.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Transforms can also be used to align two meshes \u00b6 In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\" Mesh alignment \u00b6 A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" Load meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) Visualize original meshes \u00b6 In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Rigid transformation \u00b6 create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Similarity transformation \u00b6 This type of transformation is very similar to rigid transformations above. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied! Affine transformation \u00b6 This type of transformation warps the points of one mesh into the other as well as translating its position. Reload meshes \u00b6 In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2) create transforms \u00b6 In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine) apply transforms \u00b6 In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1) visualize results \u00b6 Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2) Mesh 1 -> Mesh 2 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() Mesh 2 -> Mesh 1 \u00b6 In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#transforms-can-also-be-used-to-align-two-meshes","text":"In [ ]: Copied! import shapeworks as sw import numpy as np import pyvista as pv import matplotlib import shapeworks as sw import numpy as np import pyvista as pv import matplotlib In [ ]: Copied! pv . set_jupyter_backend ( 'static' ) pv.set_jupyter_backend('static') In [ ]: Copied! DATA = \"../Data\" DATA = \"../Data\"","title":"Transforms can also be used to align two meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-alignment","text":"A mesh transformation can be computed rigidly, using similarity, or as an affine matrix. The alignment is computed using the iterative closest point (ICP) method for the specified number of iterations (default: a similarity transform with 10 iterations). In [ ]: Copied! filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\" filename1 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_05.vtk\" filename2 = DATA + \"/ellipsoid_1mode/meshes/ellipsoid_07.vtk\"","title":"Mesh alignment"},{"location":"notebooks/create-and-apply-mesh-transforms.html#load-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Load meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-original-meshes","text":"In [ ]: Copied! pv_mesh1_orig = sw . sw2vtkMesh ( mesh1 ) pv_mesh2_orig = sw . sw2vtkMesh ( mesh2 ) pv_mesh1_orig = sw.sw2vtkMesh(mesh1) pv_mesh2_orig = sw.sw2vtkMesh(mesh2) In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = 'zx' p . add_text ( \"Original Meshes\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , opacity = 1.0 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = 'zx' p.add_text(\"Original Meshes\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', opacity=1.0) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Visualize original meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#rigid-transformation","text":"","title":"Rigid transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Rigid ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Rigid ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Rigid) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Rigid)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape. This is very different from affine transformations below. In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Rigid Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Rigid Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#similarity-transformation","text":"This type of transformation is very similar to rigid transformations above.","title":"Similarity transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Similarity ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Similarity ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Similarity) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Similarity)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Similarity Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Similarity Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/create-and-apply-mesh-transforms.html#affine-transformation","text":"This type of transformation warps the points of one mesh into the other as well as translating its position.","title":"Affine transformation"},{"location":"notebooks/create-and-apply-mesh-transforms.html#reload-meshes","text":"In [ ]: Copied! mesh1 = sw . Mesh ( filename1 ) mesh2 = sw . Mesh ( filename2 ) mesh1 = sw.Mesh(filename1) mesh2 = sw.Mesh(filename2)","title":"Reload meshes"},{"location":"notebooks/create-and-apply-mesh-transforms.html#create-transforms","text":"In [ ]: Copied! xform_1_to_2 = mesh1 . createTransform ( mesh2 , sw . Mesh . AlignmentType . Affine ) xform_2_to_1 = mesh2 . createTransform ( mesh1 , sw . Mesh . AlignmentType . Affine ) xform_1_to_2 = mesh1.createTransform(mesh2, sw.Mesh.AlignmentType.Affine) xform_2_to_1 = mesh2.createTransform(mesh1, sw.Mesh.AlignmentType.Affine)","title":"create transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#apply-transforms","text":"In [ ]: Copied! mesh1 . applyTransform ( xform_1_to_2 ) mesh2 . applyTransform ( xform_2_to_1 ) mesh1.applyTransform(xform_1_to_2) mesh2.applyTransform(xform_2_to_1)","title":"apply transforms"},{"location":"notebooks/create-and-apply-mesh-transforms.html#visualize-results","text":"Notice how the original meshes do not change shape (or orientation wrt the origin? How are these different from affine?) In [ ]: Copied! pv_mesh1 = sw . sw2vtkMesh ( mesh1 ) pv_mesh2 = sw . sw2vtkMesh ( mesh2 ) pv_mesh1 = sw.sw2vtkMesh(mesh1) pv_mesh2 = sw.sw2vtkMesh(mesh2)","title":"visualize results"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-1-mesh-2","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh1 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh2_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh1, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh2_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show()","title":"Mesh 1 -> Mesh 2"},{"location":"notebooks/create-and-apply-mesh-transforms.html#mesh-2-mesh-1","text":"In [ ]: Copied! # used to maintain bounds even when meshes' positions change a = pv . UniformGrid () a . dimensions = np . array ([ 9 , 8 , 8 ]) a . origin = ( - 15 , - 5 , - 15 ) a . spacing = ( 10 , 10 , 10 ) outline = a . outline () p = pv . Plotter ( shape = ( 2 , 2 ), border = False ) p . subplot ( 0 , 0 ) p . add_text ( \"xy\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'xy' p . subplot ( 0 , 1 ) p . add_text ( \"yz\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'yz' p . subplot ( 1 , 0 ) p . add_text ( \"zx\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.5 ) p . camera_position = 'zx' p . add_text ( \"Affine Transforms\" , position = 'lower_edge' ) p . subplot ( 1 , 1 ) p . add_text ( \"persp\" ) p . add_mesh ( outline ) p . add_mesh ( pv_mesh2 , show_scalar_bar = False , color = '#4fb080' , opacity = 1.0 ) p . add_mesh ( pv_mesh1_orig , show_scalar_bar = False , color = '#ced175' , style = 'wireframe' , opacity = 0.75 ) p . camera_position = [ 100 , 35 , 70 ] p . set_viewup ([ 0 , 1 , 0 ]) p . show_bounds ( grid = 'front' , location = 'outer' , all_edges = False , ) p . show () # used to maintain bounds even when meshes' positions change a = pv.UniformGrid() a.dimensions = np.array([9,8,8]) a.origin = (-15,-5,-15) a.spacing = (10, 10, 10) outline = a.outline() p = pv.Plotter(shape=(2,2), border=False) p.subplot(0,0) p.add_text(\"xy\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'xy' p.subplot(0,1) p.add_text(\"yz\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'yz' p.subplot(1,0) p.add_text(\"zx\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.5) p.camera_position = 'zx' p.add_text(\"Affine Transforms\", position='lower_edge') p.subplot(1,1) p.add_text(\"persp\") p.add_mesh(outline) p.add_mesh(pv_mesh2, show_scalar_bar=False, color='#4fb080', opacity=1.0) p.add_mesh(pv_mesh1_orig, show_scalar_bar=False, color='#ced175', style='wireframe', opacity=0.75) p.camera_position = [100,35,70] p.set_viewup([0,1,0]) p.show_bounds(grid='front', location='outer', all_edges=False, ) p.show() In [ ]: Copied!","title":"Mesh 2 -> Mesh 1"},{"location":"notebooks/getting-started-with-data-augmentation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Data Augmentation \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data. Data Augmentation Overview \u00b6 ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning . Import shapeworks and relevant libraries \u00b6 In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks Import Data Augmentation Package \u00b6 In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils 1. Defining the original dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir) Get file lists \u00b6 Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list))) Run data augmentation using a Gaussian Distribution \u00b6 Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using a Mixture of Gaussian Distribution \u00b6 In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output: Run data augmentation using Kernel Density Estimation \u00b6 In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\" Visualize distribution of real and augmented data \u00b6 In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#getting-started-with-data-augmentation","text":"","title":"Getting Started with Data Augmentation"},{"location":"notebooks/getting-started-with-data-augmentation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-data-augmentation.html#in-this-notebook-you-will-learn","text":"How to generate realistic synthetic data from an existing dataset using different parametric distributions. How to visualize the statistical distribution of the generated data compared to the original data.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-data-augmentation.html#data-augmentation-overview","text":"ShapeWorks includes a Python package, DataAugmentationUtils, that supports model-based data augmentation. This package is useful to increase the training sample size to train deep networks such as DeepSSM (see SSMs Directly from Images ). A preliminary requirement for data augmentation is a set of images and shape models from real data on which to base augmentation. Once that is acquired, the process includes: Embedding the real data into a low-dimensional space using principle component analysis (PCA). Fitting a parametric distribution to the subspace for sampling. Sampling from the distribution to create new instances. Projecting the samples back into the high-dimensional space of the original data Completing the sample generation by creating a corresponding synthetic image. This notebook shows how the distribution of the original data can be visually compared to the distribution of the synthetic data to motivate the choice of parametric distribution in step 2. For a full explanation of the data augmentation process and package please see: Data Augmentation for Deep Learning .","title":"Data Augmentation Overview"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-shapeworks-and-relevant-libraries","text":"In [ ]: Copied! import os import sys import shapeworks import os import sys import shapeworks","title":"Import shapeworks and relevant libraries"},{"location":"notebooks/getting-started-with-data-augmentation.html#import-data-augmentation-package","text":"In [ ]: Copied! import DataAugmentationUtils import DataAugmentationUtils","title":"Import Data Augmentation Package"},{"location":"notebooks/getting-started-with-data-augmentation.html#1-defining-the-original-dataset","text":"","title":"1. Defining the original dataset"},{"location":"notebooks/getting-started-with-data-augmentation.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded femur-v0 and you have placed the unzipped folder femur-v0 in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print ( 'Dataset Name: ' + datasetName ) print ( 'Directory: ' + data_dir ) # dataset name is the folder name for your dataset datasetName = 'femur-v0' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations data_dir = '../../Data/' + datasetName + '/' print('Dataset Name: ' + datasetName) print('Directory: ' + data_dir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-data-augmentation.html#get-file-lists","text":"Now we need the .particle files and corresponding raw images for the original dataset. In [ ]: Copied! # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os . listdir ( img_dir ): img_list . append ( img_dir + file ) img_list = sorted ( img_list ) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os . listdir ( model_dir ): if \"local\" in file : local_particle_list . append ( model_dir + file ) local_particle_list = sorted ( local_particle_list ) print ( \"Total shapes in original dataset: \" + str ( len ( img_list ))) # Get image path list img_dir = data_dir + \"groomed/images/\" img_list = [] for file in os.listdir(img_dir): img_list.append(img_dir + file) img_list = sorted(img_list) # Get particles path list model_dir = data_dir + \"shape_models/femur/1024/\" local_particle_list = [] for file in os.listdir(model_dir): if \"local\" in file: local_particle_list.append(model_dir + file) local_particle_list = sorted(local_particle_list) print(\"Total shapes in original dataset: \"+ str(len(img_list)))","title":"Get file lists"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-gaussian-distribution","text":"Below is the command for running the complete data augmentation process: DataAugmentationUtils . runDataAugmentation ( out_dir , img_list , local_point_list , num_samples , num_dim , percent_variability , sampler_type , mixture_num , world_point_list ) Input arguments: out_dir : Path to the directory where augmented data will be stored img_list : List of paths to images of the original dataset. local_point_list : List of paths to local .particles files of the original dataset. Note, this list should be ordered in correspondence with the img_list . num_dim : The number of dimensions to reduce to in PCA embedding. If zero or not specified, the percent_variability option is used to select the numnber of dimensions. percent_variability : The proportion of variability in the data to be preserved in embedding. Used if num_dim is zero or not specified. Default value is 0.95 which preserves 95% of the varibaility in the data. sampler_type : The type of parametric distribution to fit and sample from. Options: gaussian , mixture , or kde . Default: kde . mixture_num : Only necessary if sampler_type is mixture . The number of clusters (i.e., mixture components) to be used in fitting a mixture model. If zero or not specified, the optimal number of clusters will be automatically determined using the elbow method ). world_point_list : List of paths to world .particles files of the original dataset. This is optional and should be provided in cases where procrustes was used for the original optimization, resulting in a difference between world and local particle files. Note, this list should be ordered in correspondence with the img_list and local_point_list . In this notebook we will keep most arguments the same and explore the effect of changing the sampler_type . First, we will try a Gaussian distribution. For further explanation about each distribution, see Data Augmentation for Deep Learning . In [ ]: Copied! # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 # Augmentation variables to keep constant num_samples = 50 num_dim = 0 percent_variability = 0.95 In [ ]: Copied! output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/GaussianAugmentation/' sampler_type = \"gaussian\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"Below is the command for visualizing the original and augmented data: DataAugmentationUtils.visualizeAugmentation(data_csv, viz_type) Input arguments: data_csv : The path to the CSV file created by running the data augmentation process. viz_type : The type of visulazation to display. Options splom or violin (default: splom ). If set to splom , a scatterplot matrix of pairwise PCA comparisions will open in the default browser. If set to violin a violin plot or rotated kernel density plot will be displayed. We will use a violin plot to visualize the difference in the real and augmented distributions. In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-a-mixture-of-gaussian-distribution","text":"In [ ]: Copied! output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/MixtureAugmentation/' sampler_type = \"mixture\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using a Mixture of Gaussian Distribution"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-data-augmentation.html#run-data-augmentation-using-kernel-density-estimation","text":"In [ ]: Copied! output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils . runDataAugmentation ( output_directory , img_list , local_particle_list , num_samples , num_dim , percent_variability , sampler_type ) aug_data_csv = output_directory + \"/TotalData.csv\" output_directory = '../Output/KDEAugmentation/' sampler_type = \"kde\" embedded_dim = DataAugmentationUtils.runDataAugmentation(output_directory, img_list, local_particle_list, num_samples, num_dim, percent_variability, sampler_type) aug_data_csv = output_directory + \"/TotalData.csv\"","title":"Run data augmentation using Kernel Density Estimation"},{"location":"notebooks/getting-started-with-data-augmentation.html#visualize-distribution-of-real-and-augmented-data","text":"In [ ]: Copied! DataAugmentationUtils . visualizeAugmentation ( aug_data_csv , 'violin' ) DataAugmentationUtils.visualizeAugmentation(aug_data_csv, 'violin') Example output:","title":"Visualize distribution of real and augmented data"},{"location":"notebooks/getting-started-with-exploring-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Exploring Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Exploring your dataset \u00b6 We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling. Loading your dataset \u00b6 First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...') Visualizing your dataset \u00b6 Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views ) 3. Deciding the grooming pipeline needed for your dataset \u00b6 Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe? Voxel spacing \u00b6 Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk) Segmentations and image boundaries \u00b6 Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size. Shape alignment \u00b6 One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True ) Too much background \u00b6 Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) Binary segmentations \u00b6 In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform. Tentative grooming \u00b6 Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#getting-started-with-exploring-segmentations","text":"","title":"Getting Started with Exploring Segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to explore your dataset How to decide the grooming pipeline needed for your dataset In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) #import relevant libraries import os import pyvista as pv import numpy as np # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#2-exploring-your-dataset","text":"We would like to better understand the given dataset to decide the appropriate grooming (preprocessing) pipeline/step to prepare it for shape modeling.","title":"2. Exploring your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#loading-your-dataset","text":"First step is to load the dataset. Note: If your dataset is large (large volumes and/or large number of segmentations), you could select a subset for this exploration step. In [ ]: Copied! # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames : print ( 'Loading: ' + shapeFilename ) # current shape name segFilename = shapeFilename . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] shapeNames . append ( shapeName ) # load segmentation shapeSeg = sw . Image ( shapeFilename ) # append to the shape list shapeSegList . append ( shapeSeg ) num_samples = len ( shapeSegList ) print ( ' \\n ' + str ( num_samples ) + ' segmentations are loaded for the ' + datasetName + ' dataset ...' ) # list of shape segmentations shapeSegList = [] # list of shape names (shape files prefixes) to be used # for saving outputs and visualizations shapeNames = [] # loop over all shape files and load individual segmentations for shapeFilename in shapeFilenames: print('Loading: ' + shapeFilename) # current shape name segFilename = shapeFilename.split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] shapeNames.append(shapeName) # load segmentation shapeSeg = sw.Image(shapeFilename) # append to the shape list shapeSegList.append(shapeSeg) num_samples = len(shapeSegList) print('\\n' + str(num_samples) + ' segmentations are loaded for the ' + datasetName + ' dataset ...')","title":"Loading your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#visualizing-your-dataset","text":"Now let's visualize all samples in a grid using pyvista . You may need to call pv.close_all() every once in a while to clean up the unclosed plotters. We will use sw.plot_volumes function from the Shapeworks python module. This function will take in a list of shapeworks images as input and initiate a pyvista plotter to render multiple windows, each with a single segmentation, add segmentations to the plotter, and start rendering. In [ ]: Copied! # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , use_same_window = use_same_window , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , color_map = color_map , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = link_views ) # define parameters that controls the plotter use_same_window = False # plot using multiple rendering windows if false notebook = False # True will enable the plots to lie inline show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"viridis\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # plot all segmentations in the shape list sw.plot_volumes(shapeSegList, volumeNames = shapeNames, use_same_window = use_same_window, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, color_map = color_map, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = link_views )","title":"Visualizing your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#3-deciding-the-grooming-pipeline-needed-for-your-dataset","text":"Does this dataset need grooming? What are grooming steps needed? Let's inspect the segmentations. What do we observe?","title":"3. Deciding the grooming pipeline needed for your dataset"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#voxel-spacing","text":"Voxel spacing are not isotropic, i.e., voxel size in each of the three dimensions are not equal.This can be identified if you zoom-in in the visualization below and observe the step size in the x,y,z direction. Anisotropic spacing could adversely impact particles optimization since shapeworks assumes equal voxel spacing. Some datasets might also have different voxel spacings for each segmentation. Hence, it is necessary to bring all segmentations to the same voxel spacing that is equal in all dimensions. Another observation is voxel spacing is relatively large. This can be observed by the pixelated volume rendering and the jagged isosurface. We can improve the segmentation resolution by decreasing voxel spacing. In [ ]: Copied! import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = True ) sw . plot_volumes ( shapeSeg_vtk ) import pyvista as pv # to better appreciate the pixelated nature of these segmentations, we need to only visualize # the binary segmentation, notice the thick slices shapeIdx = 10 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = True) sw.plot_volumes(shapeSeg_vtk)","title":"Voxel spacing"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#segmentations-and-image-boundaries","text":"Some segmentations are very close to the image boundary, not leaving enough room for particles (correspondences) to move and spread over these surface regions. In particular, particles could overshoot outside the image boundary during optimization. Furthermore, if a segmentation touches the image boundary, this will result in an artificially (i.e., not real) open surface. Hence, these segmentations needs to be padded with background voxels (zero-valued) to create more room along each dimension. In [ ]: Copied! # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) # let's inspect a segmentation that touches the image boundaries shapeIdx = 13 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk) This segmentation touches the image boundary and hence will result in an artificially open surface. To inspect this behavior, we need extract a surface mesh (isosurface) from each segmentation. An isosurface is a three-dimensional surface that represents points of a constant value (aka isovalue) within the given volume of space. In [ ]: Copied! # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help ( shapeSeg . toMesh ) # let's see if there's a function that extracts an isosurface from an image # use dot-tap to get a list of functions/apis available for shapeSeg # found it - toMesh, let's see its help help(shapeSeg.toMesh) The toMesh function needs an isovalue, which is the constant value the represents the surface of interest. Since a shape segmentation is a binary image, the foreground is expected to have the value of 1 (white) and the background should have a zero value (black), so an appropriate isovalue to extract the foregound-background interface a value in between, e.g., 0.5 In [ ]: Copied! import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg . toArray () # make sure that it is a binary segmentation voxelValues = np . unique ( shapeSeg_array ) print ( ' \\n Voxel values:' + str ( voxelValues )) if len ( voxelValues ) > 2 : print ( 'WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values' ) print ( 'PLEASE make sure to use binary segmentations' ) else : print ( 'Shape ' + shapeName + ' is a binary segmentation' ) import numpy as np # let's make sure that our assumptions about the voxel values are correct # is the given volume a binary segmentation? # first convert to numpy array shapeSeg_array = shapeSeg.toArray() # make sure that it is a binary segmentation voxelValues = np.unique(shapeSeg_array) print('\\nVoxel values:' + str(voxelValues)) if len(voxelValues) > 2: print('WARNING: ' + shapeName + ' is not a bindary segmentation. Voxels have more than two distinct values') print('PLEASE make sure to use binary segmentations') else: print('Shape ' + shapeName + ' is a binary segmentation') In [ ]: Copied! # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array . min () maxVal = shapeSeg_array . max () print ( ' \\n Minimum voxel value: ' + str ( minVal )) print ( 'Maximum voxel value: ' + str ( maxVal )) isoValue = ( maxVal - minVal ) / 2.0 print ( ' \\n isoValue = ' + str ( isoValue )) # now define the isovalue, in case a binary segmentation has a foreground label that is not 1 # we need to obtain a value inbetween # get min and max values minVal = shapeSeg_array.min() maxVal = shapeSeg_array.max() print('\\nMinimum voxel value: ' + str(minVal)) print('Maximum voxel value: ' + str(maxVal)) isoValue = (maxVal - minVal)/2.0 print('\\nisoValue = ' + str(isoValue)) In [ ]: Copied! # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg . toMesh ( isovalue = isoValue ) # sw to vtk shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) sw . plot_meshes ([ shapeMesh_vtk ]) # let's extract the segmentation isosurface and visualize it # extract isosurface shapeMesh = shapeSeg.toMesh(isovalue = isoValue) # sw to vtk shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) sw.plot_meshes([shapeMesh_vtk]) So, we have been able to extract a segmentation's isosurface and visualize it as a surface mesh. It is worth noting that the jagged surface is due to the anisotropic voxel space (with spacing in z-dimension is double that of x- and y-dimensions) and large voxel size.","title":"Segmentations and image boundaries"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#shape-alignment","text":"One can observe from the segmentation visualization that they are not roughly aligned, i.e., they do not share the same coordinate frame where each individual shape is located differently compared to other shapes. Aligning shapes is a critical preprocessing step to avoid the shape model to encode variabilities pertaining to global transformations such as rotation and translation. In [ ]: Copied! # let's inspect some segmentations where we can observe misalignment shapeIdxs = [ 8 , 9 , 10 ] shapeSegSubset = [ shapeSegList [ shapeIdx ] for shapeIdx in shapeIdxs ] shapeNamesSubset = [ shapeNames [ shapeIdx ] for shapeIdx in shapeIdxs ] # let's inspect some segmentations where we can observe misalignment shapeIdxs = [8,9,10] shapeSegSubset = [shapeSegList[shapeIdx] for shapeIdx in shapeIdxs ] shapeNamesSubset = [shapeNames[shapeIdx] for shapeIdx in shapeIdxs ] To inspect how mutliple segmentation are spatially aligned with respect to each other, we will visualize their surfaces in the same rendering window. In [ ]: Copied! shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset : # extract isosurface shapeIsosurface = shapeSeg . toMesh ( isovalue = isoValue ) shapeSegIsosurfaces . append ( shapeIsosurface ) # sw to vtk shapeSegIsosurfaces_vtk . append ( sw . sw2vtkMesh ( shapeIsosurface , verbose = False )) shapeSegIsosurfaces = [] shapeSegIsosurfaces_vtk = [] for shapeSeg in shapeSegSubset: # extract isosurface shapeIsosurface = shapeSeg.toMesh(isovalue = isoValue) shapeSegIsosurfaces.append(shapeIsosurface) # sw to vtk shapeSegIsosurfaces_vtk.append(sw.sw2vtkMesh(shapeIsosurface, verbose = False)) In [ ]: Copied! sw . plot_meshes ( shapeSegIsosurfaces , use_same_window = True , notebook = False , show_borders = True , meshes_color = [ 'tan' , 'blue' , 'red' ], mesh_style = \"surface\" , show_mesh_edges = False , show_axes = True , show_bounds = True , show_all_edges = True , font_size = 10 , link_views = True ) sw.plot_meshes(shapeSegIsosurfaces, use_same_window = True, notebook = False, show_borders = True, meshes_color = ['tan', 'blue','red'], mesh_style = \"surface\", show_mesh_edges = False, show_axes = True, show_bounds = True, show_all_edges = True, font_size = 10, link_views = True )","title":"Shape alignment"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#too-much-background","text":"Image boundaries are not tight around shapes, leaving irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can crop segmentations to remove unnecessary background. In [ ]: Copied! shapeIdx = 12 shapeSeg = shapeSegList [ shapeIdx ] shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg , verbose = False ) sw . plot_volumes ( shapeSeg_vtk ) shapeIdx = 12 shapeSeg = shapeSegList[shapeIdx] shapeSeg_vtk = sw.sw2vtkImage(shapeSeg, verbose = False) sw.plot_volumes(shapeSeg_vtk)","title":"Too much background"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#binary-segmentations","text":"In general, this binary representation is not useful for finite numerical calculation of surface geometry and features that are required in shape modeling, which assumes the image is a sampling of a smooth function. Hence, ShapeWorks makes use of the signed distance transform of the binary segmentation that does satisfy this criterion. For the correspondence optimization step, shapes can be represented as the zero level set of a smooth signed distance transform.","title":"Binary segmentations"},{"location":"notebooks/getting-started-with-exploring-segmentations.html#tentative-grooming","text":"Hence, a tentative grooming pipeline entails the following steps: Resampling segmentations to have smaller and isotropic voxel spacing Rigidly aligning shapes Cropping and padding segmentations Converting segmentations to smooth signed distance transforms Let the fun begins!!! Please visit Getting Started with Grooming Segmentations to learn how to groom your dataset.","title":"Tentative grooming"},{"location":"notebooks/getting-started-with-meshes.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Meshes \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single mesh \u00b6 We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh) 3. Convert to a VTK mesh \u00b6 To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh) 4. Visualizing surface mesh using pyvista \u00b6 pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook) 5. Visualizing multiple meshes \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second mesh and convert it to vtk mesh \u00b6 First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#getting-started-with-meshes","text":"","title":"Getting Started with Meshes"},{"location":"notebooks/getting-started-with-meshes.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Setting Up ShapeWorks Environment to learn how to set up your environment to start using shapeworks library. Please note, the prerequisite steps will use the same code to setup the environment for this notebook and import shapeworks library. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-meshes.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single mesh How to convert shapeworks mesh to vtk mesh for visualization How to visualize a surface mesh using pyvista","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-meshes.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-meshes.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-meshes.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # for paths and mkdir # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as surface meshes shapeDir = '../../Data/' + datasetName + '/meshes/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-meshes.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For surface meshes, all vtk-supported mesh formats can be used (e.g., vtk, ply, and stl). In [ ]: Copied! import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob # for paths and file-directory search from pathlib import Path # for generating robust paths irrespective of the platform:Win/Linux/Mac # file extension for the shape data shapeExtention = '.vtk' # let's get a list of files for available meshes in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-meshes.html#2-loading-a-single-mesh","text":"We will select one mesh to explore for now. We will then use shapeworks Mesh class to load this surface mesh and print out its header information that includes . In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename ) shapeMesh = sw . Mesh ( shapeFilename ) # let's print out header information of this mesh - TODO: #828 print ( 'Header information: ' ) print ( shapeMesh ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 0 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename) shapeMesh = sw.Mesh(shapeFilename) # let's print out header information of this mesh - TODO: #828 print('Header information: ') print(shapeMesh)","title":"2. Loading a single mesh"},{"location":"notebooks/getting-started-with-meshes.html#3-convert-to-a-vtk-mesh","text":"To visualize a shapeworks mesh with pyvista , we need first to convert it to a vtk mesh. In [ ]: Copied! # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw . sw2vtkMesh ( shapeMesh ) # convert shapeworks mesh to a vtk mesh shapeMesh_vtk = sw.sw2vtkMesh(shapeMesh)","title":"3. Convert to a VTK mesh"},{"location":"notebooks/getting-started-with-meshes.html#4-visualizing-surface-mesh-using-pyvista","text":"pyvista is a python library for 3D visualization and analysis. It is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk . plot ( notebook = notebook ) # to have an interactive visualization, # click r to reset the view after zooming # click w to show wireframe and s to return back to sur notebook = False # True sets the figure inline in the notebook. shapeMesh_vtk.plot(notebook = notebook)","title":"4. Visualizing surface mesh using pyvista"},{"location":"notebooks/getting-started-with-meshes.html#5-visualizing-multiple-meshes","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we visualize two meshes side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing multiple meshes"},{"location":"notebooks/getting-started-with-meshes.html#loading-the-second-mesh-and-convert-it-to-vtk-mesh","text":"First, let's select another mesh and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # use shapeworks Mesh class to load it print ( 'Loading: ' + shapeFilename2 ) shapeMesh2 = sw . Mesh ( shapeFilename2 ) # let's print out header information of this mesh print ( 'Header information: ' ) print ( shapeMesh2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 1 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # use shapeworks Mesh class to load it print('Loading: ' + shapeFilename2) shapeMesh2 = sw.Mesh(shapeFilename2) # let's print out header information of this mesh print('Header information: ') print(shapeMesh2) Now we can view the two meshes side by side using the ShapeWorks plot_meshes() function. To view the meshes in a side-by-side view, we set the use_same_window parameter to False. To view the meshes in the same window, we set the use_same_window parameter to True. In [ ]: Copied! meshList = [ shapeMesh , shapeMesh2 ] # View meshes side-by-side sw . plot_meshes ( meshList , use_same_window = False , notebook = notebook ) meshList = [shapeMesh, shapeMesh2] # View meshes side-by-side sw.plot_meshes(meshList, use_same_window=False, notebook=notebook) In [ ]: Copied! # View meshes in the same window sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) # View meshes in the same window sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Loading the second mesh and convert it to vtk mesh"},{"location":"notebooks/getting-started-with-notebooks.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Jupyter Notebooks \u00b6 In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks ShapeWorks Jupyter Notebook Tutorials \u00b6 What is Jupyter Notebook? \u00b6 The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded. Running a Jupyter notebook tutorial \u00b6 ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks. Importing ShapeWorks \u00b6 The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us. Notebook keyboard shortcuts \u00b6 Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name Jupyter Notebook Resources \u00b6 Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#getting-started-with-jupyter-notebooks","text":"In this notebook, you will find: Information about running ShapeWorks Jupyter notebook tutorials Basics shortcuts for Jupyter notebooks Resources to help you with notebooks","title":"Getting Started with Jupyter Notebooks"},{"location":"notebooks/getting-started-with-notebooks.html#shapeworks-jupyter-notebook-tutorials","text":"","title":"ShapeWorks Jupyter Notebook Tutorials"},{"location":"notebooks/getting-started-with-notebooks.html#what-is-jupyter-notebook","text":"The Jupyter Notebook is a powerful tool to interactively prototype and present ideas and workflows. The Jupyter Notebook is an open source web application that enables you to create documents that contain runnable code, text, equations, and visualizations. Jupyter supports IPython kernel to allow you to write/prototype programs in Python. You can also use other kernels (e.g., R and Julia .. etc) with Jupyter notebooks. The Jupyter Notebook combines three components: Notebook web app: An interactive web application to edit code in the browser, run code from the browser, see the results of running the code in the browser, create and use interactive widgets, and author narrative text and equations. Kernels: Processes launched by the notebook web app that runs code in a specific language and handles interactive widgets and tab completion. The default kernel runs Python code. Notebook documents: Documents that contain visible content in the notebook web app, including inputs and outputs of an interactive session, narrative text, equations, and images, and rich media representations of objects. Each notebook document has its own kernel. Notebook documents are files with a .ipynb extension Internally, notebook documents are json data with binary output encoded.","title":"What is Jupyter Notebook?"},{"location":"notebooks/getting-started-with-notebooks.html#running-a-jupyter-notebook-tutorial","text":"ShapeWorks installs Jupyter for you. The Jupyter Notebook is not included with Python. The install_shapeworks script the comes with ShapeWorks ( install_shapeworks.sh for Mac OS and Linux and install_shapeworks.bat for Window) installs Jupyter Notebook for you. ShapeWorks also installs and enables for you a spell checker extension for the text cells a table of content extension to easily navigate notebooks To get the server started, all you need to do is open up your terminal go to the folder where you would like to save your notebooks in activate shapeworks environment by running conda activate shapeworks launch the notebook server by running jupyter notebook Note : Notebooks for demonstrating ShapeWorks tools are located in Examples/Python/notebooks/tutorials . We recommend that you create a folder in Examples/Python/notebooks/ directory for your own notebooks.","title":"Running a Jupyter notebook tutorial"},{"location":"notebooks/getting-started-with-notebooks.html#importing-shapeworks","text":"The Jupyter notebook tutorials require ShapeWorks to be installed so that it can be imported at the beginning of every notebook. Try running the following code cell to make sure ShapeWorks can be imported: In [ ]: Copied! import shapeworks import shapeworks If the cell above gave an error make sure you have run install_shapeworks and have the shapeworks conda environment activated. See How to Install ShapeWorks? for more information. If you believe ShapeWorks is installed correctly but you are still unable to import it please contact us.","title":"Importing ShapeWorks"},{"location":"notebooks/getting-started-with-notebooks.html#notebook-keyboard-shortcuts","text":"Esc + H : displays a complete list of keyboard shortcuts Esc + A : insert new cell above the current cell Esc + B : insert new cell below the current cell Esc + D + D : delete current cell Esc + Z : undo Shift + enter : run current cell and move to next To show a function's argument list (i.e., signature), use ( then shift-tab Use shift-tab-tab to show more help for a function To show the help of a function, use help(function) or function? To show all functions supported by an object, use dot-tab after the variable name","title":"Notebook keyboard shortcuts"},{"location":"notebooks/getting-started-with-notebooks.html#jupyter-notebook-resources","text":"Documentation provided by Jupyter Notebook -Here you find all a comprehensive user documentation provided by the developers Jupyter notebooks are widely used by the python community and you can find many videos and blogs for new users.If you are facing any specific errors while starting and running the notebooks, please check out the following resources : (a) Stack Overflow (b) Discourse (c) Stack Exchange In [ ]: Copied!","title":"Jupyter Notebook Resources"},{"location":"notebooks/getting-started-with-segmentations.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Segmentations \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw 1. Defining and exploring your dataset \u00b6 Defining dataset location \u00b6 You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir) What is available in the dataset? \u00b6 First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename) 2. Loading a single segmentation \u00b6 We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg) 3. Converting shapeworks image to vtk image for visualization \u00b6 We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk) 4. Visualizing segmentation using pyvista \u00b6 pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading 5. Visualizing two segmentations side-by-side using pyvista \u00b6 When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view. Loading the second segmentation and convert it to vtk image \u00b6 First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2) Defining pyvista plotter \u00b6 Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) 6. Visualizing two segmentations in the same rendering window \u00b6 This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#getting-started-with-segmentations","text":"","title":"Getting Started with Segmentations"},{"location":"notebooks/getting-started-with-segmentations.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-segmentations.html#in-this-notebook-you-will-learn","text":"How to define your dataset location and explore what is available in it How to load a single segmentation How to convert shapeworks image to vtk image for visualization How to visualize a single segmentation and multiple segmentations using pyvista In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-segmentations.html#1-defining-and-exploring-your-dataset","text":"","title":"1. Defining and exploring your dataset"},{"location":"notebooks/getting-started-with-segmentations.html#defining-dataset-location","text":"You can download exemplar datasets from ShapeWorks data portal after you login. For new users, you can register an account for free. Please do not use an important password. After you login, click Collections on the left panel and then use-case-data-v2 . Select the dataset you would like to download by clicking on the checkbox on the left of the dataset name. See the video below. After you download the dataset zip file, make sure you unzip/extract the contents in the appropriate location. This notebook assumes that you have downloaded ellipsoid_1mode and you have placed the unzipped folder ellipsoid_1mode in Examples/Python/Data . Feel free to use your own dataset. In [ ]: Copied! import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print ( 'Dataset Name: ' + datasetName ) print ( 'Shape Directory: ' + shapeDir ) import os # dataset name is the folder name for your dataset datasetName = 'ellipsoid_1mode' # path to the dataset where we can find shape data # here we assume shape data are given as binary segmentations shapeDir = '../../Data/' + datasetName + '/segmentations/' print('Dataset Name: ' + datasetName) print('Shape Directory: ' + shapeDir)","title":"Defining dataset location"},{"location":"notebooks/getting-started-with-segmentations.html#what-is-available-in-the-dataset","text":"First let's see how many shapes we have in the dataset. File formats: For binary segmentations, all itk-supported image formats can be used. In [ ]: Copied! import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted ( glob . glob ( shapeDir + '*' + shapeExtention )) print ( 'Number of shapes: ' + str ( len ( shapeFilenames ))) print ( 'Shape files found:' ) for shapeFilename in shapeFilenames : shapeFilename = Path ( shapeFilename ) print ( shapeFilename ) import glob from pathlib import Path shapeExtention = '.nrrd' # let's get a list of files for available segmentations in this dataset # * here is a wild character used to retrieve all filenames # in the shape directory with the file extensnion shapeFilenames = sorted(glob.glob(shapeDir + '*' + shapeExtention)) print ('Number of shapes: ' + str(len(shapeFilenames))) print('Shape files found:') for shapeFilename in shapeFilenames: shapeFilename = Path(shapeFilename) print(shapeFilename)","title":"What is available in the dataset?"},{"location":"notebooks/getting-started-with-segmentations.html#2-loading-a-single-segmentation","text":"We will select one segmentation to explore for now. We will then use shapeworks Image class to load this segmentation and print out its header information that includes image dimensions (rows, columns and slices), physical origin, physical size, and voxel spacing (in physical units). In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames [ shapeIdx ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename ) shapeSeg = sw . Image ( shapeFilename ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg ) # select a shape by setting the shape index (in the filenames list) shapeIdx = 1 # the filename for the selected shape shapeFilename = shapeFilenames[shapeIdx] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename) shapeSeg = sw.Image(shapeFilename) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg)","title":"2. Loading a single segmentation"},{"location":"notebooks/getting-started-with-segmentations.html#3-converting-shapeworks-image-to-vtk-image-for-visualization","text":"We use python library pyvista for interactive 3D visualization. This library support, among others, vtk data structures for images and meshes. Hence, to visualize our shapeworks image, we need first to convert it to a vtk data structure. This conversion can be performed by first extracting a numpy array from the shapeworks image, then constructing a vtk image from this array. pyvista 's wrap function makes this easy. In the ShapeWorks python module, we have the sw2vtkImage function for this conversion to vtk image. In [ ]: Copied! #from the shapeworks python module use the conversion function shapeSeg_vtk = sw . sw2vtkImage ( shapeSeg ) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print ( 'shapeworks image header information: \\n ' ) print ( shapeSeg ) print ( ' \\n vtk image header information: \\n ' ) print ( shapeSeg_vtk ) #from the shapeworks python module use the conversion function shapeSeg_vtk = sw.sw2vtkImage(shapeSeg) # print header info of both images, please note that the wrap function # only wraps the numpy array, which is oblivous to image spacing and origin print('shapeworks image header information: \\n') print(shapeSeg) print('\\nvtk image header information: \\n') print(shapeSeg_vtk)","title":"3. Converting shapeworks image to vtk image for visualization"},{"location":"notebooks/getting-started-with-segmentations.html#4-visualizing-segmentation-using-pyvista","text":"pyvista python library is built on top of vtk and brings a paraview-like visualizations to notebooks. It also supports multiple rendering windows that can be linked. This feature is very useful when visualizing multiple samples from your dataset side-by-side and making them share the same camera view. In [ ]: Copied! import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk . plot ( volume = True , # volume render shade = True , notebook = notebook ) # enable shading import pyvista as pv notebook = False # True will bring the renderings inline # click r to reset the view after zooming shapeSeg_vtk.plot(volume = True, # volume render shade = True, notebook = notebook) # enable shading","title":"4. Visualizing segmentation using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#5-visualizing-two-segmentations-side-by-side-using-pyvista","text":"When exploring datasets and results of different grooming (data preprocessing) steps, it is important to simultaneously visualize multiple shape samples. Here, we will learn how to visualize two segmentations side-by-side and link their views using pyvista . This linking is useful to make all rendering windows share the same camera view.","title":"5. Visualizing two segmentations side-by-side using pyvista"},{"location":"notebooks/getting-started-with-segmentations.html#loading-the-second-segmentation-and-convert-it-to-vtk-image","text":"First, let's select another segmentation and load it. In [ ]: Copied! # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames [ shapeIdx2 ] # since segmentation is just an image data, we will use shapeworks Image class to load it print ( 'Loading: ' + shapeFilename2 ) shapeSeg2 = sw . Image ( shapeFilename2 ) # let's print out header information of this segmentation print ( 'Header information: ' ) print ( shapeSeg2 ) # select a shape by setting the shape index (in the filenames list) shapeIdx2 = 2 # the filename for the selected shape shapeFilename2 = shapeFilenames[shapeIdx2] # since segmentation is just an image data, we will use shapeworks Image class to load it print('Loading: ' + shapeFilename2) shapeSeg2 = sw.Image(shapeFilename2) # let's print out header information of this segmentation print('Header information: ') print(shapeSeg2) Then, let's convert this shapeworks image to a vtk image for visualization. In [ ]: Copied! # sw to vtk shapeSeg2_vtk = sw . sw2vtkImage ( shapeSeg2 ) # sw to vtk shapeSeg2_vtk = sw.sw2vtkImage(shapeSeg2)","title":"Loading the second segmentation and convert it to vtk image"},{"location":"notebooks/getting-started-with-segmentations.html#defining-pyvista-plotter","text":"Next, we will define a pyvista plotter to render multiple windows, each with a single segmentation. The multiple rendering windows will be visualized as a grid of plots. Since, we have only two segmentations, the grid size will be one row and two columns. The plotter also enable use to specify a color map. In [ ]: Copied! # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames [ shapeIdx ] . split ( '/' )[ - 1 ] shapeName = segFilename [: - len ( shapeExtention )] segFilename2 = shapeFilenames [ shapeIdx2 ] . split ( '/' )[ - 1 ] shapeName2 = segFilename2 [: - len ( shapeExtention )] shapeSegList = [ shapeSeg_vtk , shapeSeg2_vtk ] shapeNames = [ shapeName , shapeName2 ] # define parameters that controls the plotter notebook = False # True will bring the renderings inline in the notebook show_borders = True # show borders for each rendering window shade_volumes = True # use shading when performing volume rendering color_map = \"coolwarm\" # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' show_axes = True # show a vtk axes widget for each rendering window show_bounds = False # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries #extract the shape name for display segFilename = shapeFilenames[shapeIdx].split('/')[-1] shapeName = segFilename[:-len(shapeExtention)] segFilename2 = shapeFilenames[shapeIdx2].split('/')[-1] shapeName2 = segFilename2[:-len(shapeExtention)] shapeSegList = [shapeSeg_vtk,shapeSeg2_vtk] shapeNames = [shapeName,shapeName2] Let's use the plot_volumes function from Shapeworks python module for adding segmentations to the pyvista plotter In [ ]: Copied! sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True )","title":"Defining pyvista plotter"},{"location":"notebooks/getting-started-with-segmentations.html#6-visualizing-two-segmentations-in-the-same-rendering-window","text":"This type of visualization is useful when exploring differences between more than one segmentations, e.g., when inspecting the impact of a grooming/preprocessing step or the spatial relation of multiple samples. This is also useful if your shape data contains multiple domains (or compartments) such as anatomical joints. Note that, since we have a single rendering window (view), linking views is not necessary. But, if this multi-surface visualization is used in conjuction with multiple rendering windows, linking views should be considered. In [ ]: Copied! # define parameters that controls the plotter use_same_window = True # define parameters that controls the plotter use_same_window = True In [ ]: Copied! sw . plot_volumes ( shapeSegList , color_map = color_map , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , use_same_window = use_same_window , link_views = True ) sw.plot_volumes(shapeSegList, color_map=color_map, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, use_same_window = use_same_window, link_views = True ) In [ ]: Copied!","title":"6. Visualizing two segmentations in the same rendering window"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html","text":"(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ClipboardCopyElement = factory()); }(this, function () { 'use strict'; function createNode(text) { const node = document.createElement('pre'); node.style.width = '1px'; node.style.height = '1px'; node.style.position = 'fixed'; node.style.top = '5px'; node.textContent = text; return node; } function copyNode(node) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(node.textContent); } const selection = getSelection(); if (selection == null) { return Promise.reject(new Error()); } selection.removeAllRanges(); const range = document.createRange(); range.selectNodeContents(node); selection.addRange(range); document.execCommand('copy'); selection.removeAllRanges(); return Promise.resolve(); } function copyText(text) { if ('clipboard' in navigator) { // eslint-disable-next-line flowtype/no-flow-fix-me-comments // $FlowFixMe Clipboard is not defined in Flow yet. return navigator.clipboard.writeText(text); } const body = document.body; if (!body) { return Promise.reject(new Error()); } const node = createNode(text); body.appendChild(node); copyNode(node); body.removeChild(node); return Promise.resolve(); } function copy(button) { const id = button.getAttribute('for'); const text = button.getAttribute('value'); function trigger() { button.dispatchEvent(new CustomEvent('clipboard-copy', { bubbles: true })); } if (text) { copyText(text).then(trigger); } else if (id) { const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument; if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return; const node = root.getElementById(id); if (node) copyTarget(node).then(trigger); } } function copyTarget(content) { if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) { return copyText(content.value); } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) { return copyText(content.href); } else { return copyNode(content); } } function clicked(event) { const button = event.currentTarget; if (button instanceof HTMLElement) { copy(button); } } function keydown(event) { if (event.key === ' ' || event.key === 'Enter') { const button = event.currentTarget; if (button instanceof HTMLElement) { event.preventDefault(); copy(button); } } } function focused(event) { event.currentTarget.addEventListener('keydown', keydown); } function blurred(event) { event.currentTarget.removeEventListener('keydown', keydown); } class ClipboardCopyElement extends HTMLElement { constructor() { super(); this.addEventListener('click', clicked); this.addEventListener('focus', focused); this.addEventListener('blur', blurred); } connectedCallback() { if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', '0'); } if (!this.hasAttribute('role')) { this.setAttribute('role', 'button'); } } get value() { return this.getAttribute('value') || ''; } set value(text) { this.setAttribute('value', text); } } if (!window.customElements.get('clipboard-copy')) { window.ClipboardCopyElement = ClipboardCopyElement; window.customElements.define('clipboard-copy', ClipboardCopyElement); } return ClipboardCopyElement; })); document.addEventListener('clipboard-copy', function(event) { const notice = event.target.querySelector('.notice') notice.hidden = false setTimeout(function() { notice.hidden = true }, 1000) }) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) } .highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } .highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ .highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */ .highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ .highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ .highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ .highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ .highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ .highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ .highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ .highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ .highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ .highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ .highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ .highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ .highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ .highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ .highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ .highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ .highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ .highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ .highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ .highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ .highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ .highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ .highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ .highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ .highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ .highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ .highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ .highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ .highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ .highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ .highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ .highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ .highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ .highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ /* This file is taken from the built JupyterLab theme.css Found on share/nbconvert/templates/lab/static Some changes have been made and marked with CHANGE */ .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ --jp-shadow-base-lightness: 0; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-400); --jp-border-color1: var(--md-grey-400); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-200); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.87); --jp-ui-font-color2: rgba(0, 0, 0, 0.54); --jp-ui-font-color3: rgba(0, 0, 0, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(0, 0, 0, 1); --jp-content-font-color1: rgba(0, 0, 0, 0.87); --jp-content-font-color2: rgba(0, 0, 0, 0.54); --jp-content-font-color3: rgba(0, 0, 0, 0.38); --jp-content-link-color: var(--md-blue-700); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: #111111; --jp-inverse-layout-color1: var(--md-grey-900); --jp-inverse-layout-color2: var(--md-grey-800); --jp-inverse-layout-color3: var(--md-grey-700); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-900); --jp-brand-color1: var(--md-blue-700); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-900); --jp-accent-color1: var(--md-green-700); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-900); --jp-warn-color1: var(--md-orange-700); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-900); --jp-error-color1: var(--md-red-700); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-900); --jp-success-color1: var(--md-green-700); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-900); --jp-info-color1: var(--md-cyan-700); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--md-grey-100); --jp-cell-editor-border-color: var(--md-grey-300); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 0.5; --jp-cell-prompt-not-active-font-color: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: var(--md-blue-50); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: #fdd; --jp-rendermime-table-row-background: var(--md-grey-100); --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.25); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color1); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color1); --jp-input-hover-background: var(--jp-layout-color1); --jp-input-background: var(--md-grey-100); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: #d9d9d9; --jp-editor-selected-focused-background: #d7d4f0; --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: #008000; --jp-mirror-editor-atom-color: #88f; --jp-mirror-editor-number-color: #080; --jp-mirror-editor-def-color: #00f; --jp-mirror-editor-variable-color: var(--md-grey-900); --jp-mirror-editor-variable-2-color: #05a; --jp-mirror-editor-variable-3-color: #085; --jp-mirror-editor-punctuation-color: #05a; --jp-mirror-editor-property-color: #05a; --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ba2121; --jp-mirror-editor-string-2-color: #708; --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: #008000; --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: #170; --jp-mirror-editor-attribute-color: #00c; --jp-mirror-editor-header-color: blue; --jp-mirror-editor-quote-color: #090; --jp-mirror-editor-link-color: #00c; --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: white; /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.5; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(245, 200, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } [data-md-color-scheme=\"slate\"] .jupyter-wrapper { /* Elevation * * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: * * https://github.com/material-components/material-components-web * https://material-components-web.appspot.com/elevation.html */ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout * colors used in the theme as well. */ --jp-shadow-base-lightness: 32; --jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.2 ); --jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.14 ); --jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), 0.12 ); --jp-elevation-z0: none; --jp-elevation-z1: 0px 2px 1px -1px var(--jp-shadow-umbra-color), 0px 1px 1px 0px var(--jp-shadow-penumbra-color), 0px 1px 3px 0px var(--jp-shadow-ambient-color); --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), 0px 2px 2px 0px var(--jp-shadow-penumbra-color), 0px 1px 5px 0px var(--jp-shadow-ambient-color); --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), 0px 4px 5px 0px var(--jp-shadow-penumbra-color), 0px 1px 10px 0px var(--jp-shadow-ambient-color); --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), 0px 6px 10px 0px var(--jp-shadow-penumbra-color), 0px 1px 18px 0px var(--jp-shadow-ambient-color); --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), 0px 8px 10px 1px var(--jp-shadow-penumbra-color), 0px 3px 14px 2px var(--jp-shadow-ambient-color); --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), 0px 12px 17px 2px var(--jp-shadow-penumbra-color), 0px 5px 22px 4px var(--jp-shadow-ambient-color); --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), 0px 16px 24px 2px var(--jp-shadow-penumbra-color), 0px 6px 30px 5px var(--jp-shadow-ambient-color); --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), 0px 20px 31px 3px var(--jp-shadow-penumbra-color), 0px 8px 38px 7px var(--jp-shadow-ambient-color); --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), 0px 24px 38px 3px var(--jp-shadow-penumbra-color), 0px 9px 46px 8px var(--jp-shadow-ambient-color); /* Borders * * The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-700); --jp-border-color2: var(--md-grey-800); --jp-border-color3: var(--md-grey-900); --jp-border-radius: 2px; /* UI Fonts * * The UI font CSS variables are used for the typography all of the JupyterLab * user interface elements that are not directly user generated content. * * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: 0.83333em; --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: 1.2em; --jp-ui-font-size3: 1.44em; --jp-ui-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Use these font colors against the corresponding main layout colors. * In a light theme, these go from dark to light. */ /* Defaults use Material Design specification */ --jp-ui-font-color0: rgba(255, 255, 255, 1); --jp-ui-font-color1: rgba(255, 255, 255, 0.87); --jp-ui-font-color2: rgba(255, 255, 255, 0.54); --jp-ui-font-color3: rgba(255, 255, 255, 0.38); /* * Use these against the brand/accent/warn/error colors. * These will typically go from light to darker, in both a dark and light theme. */ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1); --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3); /* Content Fonts * * Content font variables are used for typography of user generated content. * * The font sizing here is done assuming that the body font size of --jp-content-font-size1 * is applied to a parent element. When children elements, such as headings, are sized * in em all things will be computed relative to that body size. */ --jp-content-line-height: 1.6; --jp-content-font-scale-factor: 1.2; --jp-content-font-size0: 0.83333em; --jp-content-font-size1: 14px; /* Base font size */ --jp-content-font-size2: 1.2em; --jp-content-font-size3: 1.44em; --jp-content-font-size4: 1.728em; --jp-content-font-size5: 2.0736em; /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-content-presentation-font-size1: 17px; --jp-content-heading-line-height: 1; --jp-content-heading-margin-top: 1.2em; --jp-content-heading-margin-bottom: 0.8em; --jp-content-heading-font-weight: 500; /* Defaults use Material Design specification */ --jp-content-font-color0: rgba(255, 255, 255, 1); --jp-content-font-color1: rgba(255, 255, 255, 1); --jp-content-font-color2: rgba(255, 255, 255, 0.7); --jp-content-font-color3: rgba(255, 255, 255, 0.5); --jp-content-link-color: var(--md-blue-300); --jp-content-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; /* * Code Fonts * * Code font variables are used for typography of code and other monospaces content. */ --jp-code-font-size: 13px; --jp-code-line-height: 1.3077; /* 17px for 13px base */ --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ --jp-code-font-family-default: Menlo, Consolas, \"DejaVu Sans Mono\", monospace; --jp-code-font-family: var(--jp-code-font-family-default); /* This gives a magnification of about 125% in presentation mode over normal. */ --jp-code-presentation-font-size: 16px; /* may need to tweak cursor width if you change font size */ --jp-code-cursor-width0: 1.4px; --jp-code-cursor-width1: 2px; --jp-code-cursor-width2: 4px; /* Layout * * The following are the main layout colors use in JupyterLab. In a light * theme these would go from light to dark. */ --jp-layout-color0: #111111; --jp-layout-color1: var(--md-grey-900); --jp-layout-color2: var(--md-grey-800); --jp-layout-color3: var(--md-grey-700); --jp-layout-color4: var(--md-grey-600); /* Inverse Layout * * The following are the inverse layout colors use in JupyterLab. In a light * theme these would go from dark to light. */ --jp-inverse-layout-color0: white; --jp-inverse-layout-color1: white; --jp-inverse-layout-color2: var(--md-grey-200); --jp-inverse-layout-color3: var(--md-grey-400); --jp-inverse-layout-color4: var(--md-grey-600); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-brand-color4: var(--md-blue-50); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-collapser-width: 8px; --jp-cell-collapser-min-height: 20px; --jp-cell-collapser-not-active-hover-opacity: 0.6; --jp-cell-editor-background: var(--jp-layout-color1); --jp-cell-editor-border-color: var(--md-grey-700); --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-cell-editor-active-background: var(--jp-layout-color0); --jp-cell-editor-active-border-color: var(--jp-brand-color1); --jp-cell-prompt-width: 64px; --jp-cell-prompt-font-family: var(--jp-code-font-family-default); --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-not-active-opacity: 1; --jp-cell-prompt-not-active-font-color: var(--md-grey-300); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-select-background: var(--jp-layout-color1); --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24); /* The scroll padding is calculated to fill enough space at the bottom of the notebook to show one single-line cell (with appropriate padding) at the top when the notebook is scrolled all the way to the bottom. We also subtract one pixel so that no scrollbar appears if we have just one single-line cell in the notebook. This padding is to enable a 'scroll past end' feature in a notebook. */ --jp-notebook-scroll-padding: calc( 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - var(--jp-code-padding) - var(--jp-cell-padding) - 1px ); /* Rendermime styles */ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28); --jp-rendermime-table-row-background: var(--md-grey-900); --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2); /* Dialog specific styles */ --jp-dialog-background: rgba(0, 0, 0, 0.6); /* Console specific styles */ --jp-console-padding: 10px; /* Toolbar specific styles */ --jp-toolbar-border-color: var(--jp-border-color2); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color1); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--jp-layout-color0); /* Statusbar specific styles */ --jp-statusbar-height: 24px; /* Input field styles */ --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); --jp-input-active-background: var(--jp-layout-color0); --jp-input-hover-background: var(--jp-layout-color2); --jp-input-background: var(--md-grey-800); --jp-input-border-color: var(--jp-border-color1); --jp-input-active-border-color: var(--jp-brand-color1); --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); /* General editor styles */ --jp-editor-selected-background: var(--jp-layout-color2); --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24); --jp-editor-cursor-color: var(--jp-ui-font-color0); /* Code mirror specific styles */ --jp-mirror-editor-keyword-color: var(--md-green-500); --jp-mirror-editor-atom-color: var(--md-blue-300); --jp-mirror-editor-number-color: var(--md-green-400); --jp-mirror-editor-def-color: var(--md-blue-600); --jp-mirror-editor-variable-color: var(--md-grey-300); --jp-mirror-editor-variable-2-color: var(--md-blue-400); --jp-mirror-editor-variable-3-color: var(--md-green-600); --jp-mirror-editor-punctuation-color: var(--md-blue-400); --jp-mirror-editor-property-color: var(--md-blue-400); --jp-mirror-editor-operator-color: #aa22ff; --jp-mirror-editor-comment-color: #408080; --jp-mirror-editor-string-color: #ff7070; --jp-mirror-editor-string-2-color: var(--md-purple-300); --jp-mirror-editor-meta-color: #aa22ff; --jp-mirror-editor-qualifier-color: #555; --jp-mirror-editor-builtin-color: var(--md-green-600); --jp-mirror-editor-bracket-color: #997; --jp-mirror-editor-tag-color: var(--md-green-700); --jp-mirror-editor-attribute-color: var(--md-blue-700); --jp-mirror-editor-header-color: var(--md-blue-500); --jp-mirror-editor-quote-color: var(--md-green-300); --jp-mirror-editor-link-color: var(--md-blue-700); --jp-mirror-editor-error-color: #f00; --jp-mirror-editor-hr-color: #999; /* Vega extension styles */ --jp-vega-background: var(--md-grey-400); /* Sidebar-related styles */ --jp-sidebar-min-width: 250px; /* Search-related styles */ --jp-search-toggle-off-opacity: 0.6; --jp-search-toggle-hover-opacity: 0.8; --jp-search-toggle-on-opacity: 1; --jp-search-selected-match-background-color: rgb(255, 225, 0); --jp-search-selected-match-color: black; --jp-search-unselected-match-background-color: var( --jp-inverse-layout-color0 ); --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); /* scrollbar related styles. Supports every browser except Edge. */ /* colors based on JetBrain's Darcula theme */ --jp-scrollbar-background-color: #3f4244; --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */ /* hacks for setting the thumb shape. These do nothing in Firefox */ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */ /* Icon colors that work well with light or dark backgrounds */ --jp-icon-contrast-color0: var(--md-purple-600); --jp-icon-contrast-color1: var(--md-green-600); --jp-icon-contrast-color2: var(--md-pink-600); --jp-icon-contrast-color3: var(--md-blue-600); } :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper{/*! Copyright 2015-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. *//*! Copyright 2017-present Palantir Technologies, Inc. All rights reserved. Licensed under the Apache License, Version 2.0. */}.jupyter-wrapper [data-jp-theme-scrollbars=true]{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color), 0.5) rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-corner{background:var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-thumb{background:rgb(var(--jp-scrollbar-thumb-color));border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-right:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] ::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color);border-bottom:var(--jp-scrollbar-endpad) solid var(--jp-scrollbar-background-color)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-corner,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-thumb,.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color), 0.5);border:var(--jp-scrollbar-thumb-margin) solid rgba(0,0,0,0);background-clip:content-box;border-radius:var(--jp-scrollbar-thumb-radius)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal{border-left:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-right:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper [data-jp-theme-scrollbars=true] .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical{border-top:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0);border-bottom:var(--jp-scrollbar-endpad) solid rgba(0,0,0,0)}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.jupyter-wrapper .lm-ScrollBar-button:hover{background-color:#dadada}.jupyter-wrapper .lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-track{background:#f0f0f0}.jupyter-wrapper .lm-ScrollBar-thumb{background:#cdcdcd}.jupyter-wrapper .lm-ScrollBar-thumb:hover{background:#bababa}.jupyter-wrapper .lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-left);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-right);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=decrement]{background-image:var(--jp-icon-caret-up);background-size:17px}.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical] .lm-ScrollBar-button[data-action=increment]{background-image:var(--jp-icon-caret-down);background-size:17px}.jupyter-wrapper .p-Widget,.jupyter-wrapper .lm-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.jupyter-wrapper .p-Widget.p-mod-hidden,.jupyter-wrapper .lm-Widget.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-CommandPalette,.jupyter-wrapper .lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-CommandPalette-search,.jupyter-wrapper .lm-CommandPalette-search{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-content,.jupyter-wrapper .lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.jupyter-wrapper .p-CommandPalette-header,.jupyter-wrapper .lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-CommandPalette-item,.jupyter-wrapper .lm-CommandPalette-item{display:flex;flex-direction:row}.jupyter-wrapper .p-CommandPalette-itemIcon,.jupyter-wrapper .lm-CommandPalette-itemIcon{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemContent,.jupyter-wrapper .lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.jupyter-wrapper .p-CommandPalette-itemShortcut,.jupyter-wrapper .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .p-CommandPalette-itemLabel,.jupyter-wrapper .lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .p-DockPanel,.jupyter-wrapper .lm-DockPanel{z-index:0}.jupyter-wrapper .p-DockPanel-widget,.jupyter-wrapper .lm-DockPanel-widget{z-index:0}.jupyter-wrapper .p-DockPanel-tabBar,.jupyter-wrapper .lm-DockPanel-tabBar{z-index:1}.jupyter-wrapper .p-DockPanel-handle,.jupyter-wrapper .lm-DockPanel-handle{z-index:2}.jupyter-wrapper .p-DockPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-DockPanel-handle:after,.jupyter-wrapper .lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical],.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.jupyter-wrapper .p-DockPanel-handle[data-orientation=horizontal]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-DockPanel-handle[data-orientation=vertical]:after,.jupyter-wrapper .lm-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-DockPanel-overlay,.jupyter-wrapper .lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.jupyter-wrapper .p-DockPanel-overlay.p-mod-hidden,.jupyter-wrapper .lm-DockPanel-overlay.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-Menu,.jupyter-wrapper .lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-Menu-content,.jupyter-wrapper .lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.jupyter-wrapper .p-Menu-item,.jupyter-wrapper .lm-Menu-item{display:table-row}.jupyter-wrapper .p-Menu-item.p-mod-hidden,.jupyter-wrapper .p-Menu-item.p-mod-collapsed,.jupyter-wrapper .lm-Menu-item.lm-mod-hidden,.jupyter-wrapper .lm-Menu-item.lm-mod-collapsed{display:none !important}.jupyter-wrapper .p-Menu-itemIcon,.jupyter-wrapper .p-Menu-itemSubmenuIcon,.jupyter-wrapper .lm-Menu-itemIcon,.jupyter-wrapper .lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.jupyter-wrapper .p-Menu-itemLabel,.jupyter-wrapper .lm-Menu-itemLabel{display:table-cell;text-align:left}.jupyter-wrapper .p-Menu-itemShortcut,.jupyter-wrapper .lm-Menu-itemShortcut{display:table-cell;text-align:right}.jupyter-wrapper .p-MenuBar,.jupyter-wrapper .lm-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-MenuBar-content,.jupyter-wrapper .lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.jupyter-wrapper .p--MenuBar-item,.jupyter-wrapper .lm-MenuBar-item{box-sizing:border-box}.jupyter-wrapper .p-MenuBar-itemIcon,.jupyter-wrapper .p-MenuBar-itemLabel,.jupyter-wrapper .lm-MenuBar-itemIcon,.jupyter-wrapper .lm-MenuBar-itemLabel{display:inline-block}.jupyter-wrapper .p-ScrollBar,.jupyter-wrapper .lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-ScrollBar[data-orientation=horizontal],.jupyter-wrapper .lm-ScrollBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-ScrollBar[data-orientation=vertical],.jupyter-wrapper .lm-ScrollBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-ScrollBar-button,.jupyter-wrapper .lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.jupyter-wrapper .p-ScrollBar-track,.jupyter-wrapper .lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.jupyter-wrapper .p-ScrollBar-thumb,.jupyter-wrapper .lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.jupyter-wrapper .p-SplitPanel-child,.jupyter-wrapper .lm-SplitPanel-child{z-index:0}.jupyter-wrapper .p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel-handle{z-index:1}.jupyter-wrapper .p-SplitPanel-handle.p-mod-hidden,.jupyter-wrapper .lm-SplitPanel-handle.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle{cursor:ew-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle{cursor:ns-resize}.jupyter-wrapper .p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.jupyter-wrapper .p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after,.jupyter-wrapper .lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.jupyter-wrapper .p-TabBar,.jupyter-wrapper .lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal],.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical],.jupyter-wrapper .lm-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-wrapper .p-TabBar-content,.jupyter-wrapper .lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-wrapper .p-TabBar[data-orientation=horizontal]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content{flex-direction:row}.jupyter-wrapper .p-TabBar[data-orientation=vertical]>.p-TabBar-content,.jupyter-wrapper .lm-TabBar[data-orientation=vertical]>.lm-TabBar-content{flex-direction:column}.jupyter-wrapper .p-TabBar-tab,.jupyter-wrapper .lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-wrapper .p-TabBar-tabIcon,.jupyter-wrapper .p-TabBar-tabCloseIcon,.jupyter-wrapper .lm-TabBar-tabIcon,.jupyter-wrapper .lm-TabBar-tabCloseIcon{flex:0 0 auto}.jupyter-wrapper .p-TabBar-tabLabel,.jupyter-wrapper .lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-wrapper .p-TabBar-tab.p-mod-hidden,.jupyter-wrapper .lm-TabBar-tab.lm-mod-hidden{display:none !important}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab{left:0;transition:left 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab,.jupyter-wrapper .lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab{top:0;transition:top 150ms ease}.jupyter-wrapper .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.jupyter-wrapper .p-TabPanel-tabBar,.jupyter-wrapper .lm-TabPanel-tabBar{z-index:1}.jupyter-wrapper .p-TabPanel-stackedPanel,.jupyter-wrapper .lm-TabPanel-stackedPanel{z-index:0}.jupyter-wrapper ::-moz-selection{background:rgba(125,188,255,.6)}.jupyter-wrapper ::selection{background:rgba(125,188,255,.6)}.jupyter-wrapper .bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-dark .bp3-heading{color:#f5f8fa}.jupyter-wrapper h1.bp3-heading,.jupyter-wrapper .bp3-running-text h1{line-height:40px;font-size:36px}.jupyter-wrapper h2.bp3-heading,.jupyter-wrapper .bp3-running-text h2{line-height:32px;font-size:28px}.jupyter-wrapper h3.bp3-heading,.jupyter-wrapper .bp3-running-text h3{line-height:25px;font-size:22px}.jupyter-wrapper h4.bp3-heading,.jupyter-wrapper .bp3-running-text h4{line-height:21px;font-size:18px}.jupyter-wrapper h5.bp3-heading,.jupyter-wrapper .bp3-running-text h5{line-height:19px;font-size:16px}.jupyter-wrapper h6.bp3-heading,.jupyter-wrapper .bp3-running-text h6{line-height:16px;font-size:14px}.jupyter-wrapper .bp3-ui-text{text-transform:none;line-height:1.28581;letter-spacing:0;font-size:14px;font-weight:400}.jupyter-wrapper .bp3-monospace-text{text-transform:none;font-family:monospace}.jupyter-wrapper .bp3-text-muted{color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-text-muted{color:#a7b6c2}.jupyter-wrapper .bp3-text-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.jupyter-wrapper .bp3-running-text{line-height:1.5;font-size:14px}.jupyter-wrapper .bp3-running-text h1{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h1{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h2{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h2{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h3{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h3{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h4{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h4{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h5{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h5{color:#f5f8fa}.jupyter-wrapper .bp3-running-text h6{color:#182026;font-weight:600;margin-top:40px;margin-bottom:20px}.jupyter-wrapper .bp3-dark .bp3-running-text h6{color:#f5f8fa}.jupyter-wrapper .bp3-running-text hr{margin:20px 0;border:none;border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text hr{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-running-text p{margin:0 0 10px;padding:0}.jupyter-wrapper .bp3-text-large{font-size:16px}.jupyter-wrapper .bp3-text-small{font-size:12px}.jupyter-wrapper a{text-decoration:none;color:#106ba3}.jupyter-wrapper a:hover{cursor:pointer;text-decoration:underline;color:#106ba3}.jupyter-wrapper a .bp3-icon,.jupyter-wrapper a .bp3-icon-standard,.jupyter-wrapper a .bp3-icon-large{color:inherit}.jupyter-wrapper a code,.jupyter-wrapper .bp3-dark a code{color:inherit}.jupyter-wrapper .bp3-dark a,.jupyter-wrapper .bp3-dark a:hover{color:#48aff0}.jupyter-wrapper .bp3-dark a .bp3-icon,.jupyter-wrapper .bp3-dark a .bp3-icon-standard,.jupyter-wrapper .bp3-dark a .bp3-icon-large,.jupyter-wrapper .bp3-dark a:hover .bp3-icon,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-standard,.jupyter-wrapper .bp3-dark a:hover .bp3-icon-large{color:inherit}.jupyter-wrapper .bp3-running-text code,.jupyter-wrapper .bp3-code{text-transform:none;font-family:monospace;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);background:rgba(255,255,255,.7);padding:2px 5px;color:#5c7080;font-size:smaller}.jupyter-wrapper .bp3-dark .bp3-running-text code,.jupyter-wrapper .bp3-running-text .bp3-dark code,.jupyter-wrapper .bp3-dark .bp3-code{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#a7b6c2}.jupyter-wrapper .bp3-running-text a>code,.jupyter-wrapper a>.bp3-code{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-running-text a>code,.jupyter-wrapper .bp3-running-text .bp3-dark a>code,.jupyter-wrapper .bp3-dark a>.bp3-code{color:inherit}.jupyter-wrapper .bp3-running-text pre,.jupyter-wrapper .bp3-code-block{text-transform:none;font-family:monospace;display:block;margin:10px 0;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);background:rgba(255,255,255,.7);padding:13px 15px 12px;line-height:1.4;color:#182026;font-size:13px;word-break:break-all;word-wrap:break-word}.jupyter-wrapper .bp3-dark .bp3-running-text pre,.jupyter-wrapper .bp3-running-text .bp3-dark pre,.jupyter-wrapper .bp3-dark .bp3-code-block{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-running-text pre>code,.jupyter-wrapper .bp3-code-block>code{-webkit-box-shadow:none;box-shadow:none;background:none;padding:0;color:inherit;font-size:inherit}.jupyter-wrapper .bp3-running-text kbd,.jupyter-wrapper .bp3-key{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background:#fff;min-width:24px;height:24px;padding:3px 6px;vertical-align:middle;line-height:24px;color:#5c7080;font-family:inherit;font-size:12px}.jupyter-wrapper .bp3-running-text kbd .bp3-icon,.jupyter-wrapper .bp3-key .bp3-icon,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-standard,.jupyter-wrapper .bp3-key .bp3-icon-standard,.jupyter-wrapper .bp3-running-text kbd .bp3-icon-large,.jupyter-wrapper .bp3-key .bp3-icon-large{margin-right:5px}.jupyter-wrapper .bp3-dark .bp3-running-text kbd,.jupyter-wrapper .bp3-running-text .bp3-dark kbd,.jupyter-wrapper .bp3-dark .bp3-key{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);background:#394b59;color:#a7b6c2}.jupyter-wrapper .bp3-running-text blockquote,.jupyter-wrapper .bp3-blockquote{margin:0 0 10px;border-left:solid 4px rgba(167,182,194,.5);padding:0 20px}.jupyter-wrapper .bp3-dark .bp3-running-text blockquote,.jupyter-wrapper .bp3-running-text .bp3-dark blockquote,.jupyter-wrapper .bp3-dark .bp3-blockquote{border-color:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-running-text ul,.jupyter-wrapper .bp3-running-text ol,.jupyter-wrapper .bp3-list{margin:10px 0;padding-left:30px}.jupyter-wrapper .bp3-running-text ul li:not(:last-child),.jupyter-wrapper .bp3-running-text ol li:not(:last-child),.jupyter-wrapper .bp3-list li:not(:last-child){margin-bottom:5px}.jupyter-wrapper .bp3-running-text ul ol,.jupyter-wrapper .bp3-running-text ol ol,.jupyter-wrapper .bp3-list ol,.jupyter-wrapper .bp3-running-text ul ul,.jupyter-wrapper .bp3-running-text ol ul,.jupyter-wrapper .bp3-list ul{margin-top:5px}.jupyter-wrapper .bp3-list-unstyled{margin:0;padding:0;list-style:none}.jupyter-wrapper .bp3-list-unstyled li{padding:0}.jupyter-wrapper .bp3-rtl{text-align:right}.jupyter-wrapper .bp3-dark{color:#f5f8fa}.jupyter-wrapper :focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-focus-disabled :focus{outline:none !important}.jupyter-wrapper .bp3-focus-disabled :focus~.bp3-control-indicator{outline:none !important}.jupyter-wrapper .bp3-alert{max-width:400px;padding:20px}.jupyter-wrapper .bp3-alert-body{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-alert-body .bp3-icon{margin-top:0;margin-right:20px;font-size:40px}.jupyter-wrapper .bp3-alert-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-top:10px}.jupyter-wrapper .bp3-alert-footer .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;cursor:default;height:30px;padding:0;list-style:none}.jupyter-wrapper .bp3-breadcrumbs>li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-breadcrumbs>li::after{display:block;margin:0 5px;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 0 0-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 0 0 1.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e\");width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs>li:last-of-type::after{display:none}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumb-current,.jupyter-wrapper .bp3-breadcrumbs-collapsed{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px}.jupyter-wrapper .bp3-breadcrumb,.jupyter-wrapper .bp3-breadcrumbs-collapsed{color:#5c7080}.jupyter-wrapper .bp3-breadcrumb:hover{text-decoration:none}.jupyter-wrapper .bp3-breadcrumb.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-breadcrumb .bp3-icon{margin-right:5px}.jupyter-wrapper .bp3-breadcrumb-current{color:inherit;font-weight:600}.jupyter-wrapper .bp3-breadcrumb-current .bp3-input{vertical-align:baseline;font-size:inherit;font-weight:inherit}.jupyter-wrapper .bp3-breadcrumbs-collapsed{margin-right:2px;border:none;border-radius:3px;background:#ced9e0;cursor:pointer;padding:1px 5px;vertical-align:text-bottom}.jupyter-wrapper .bp3-breadcrumbs-collapsed::before{display:block;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e\") center no-repeat;width:16px;height:16px;content:\"\"}.jupyter-wrapper .bp3-breadcrumbs-collapsed:hover{background:#bfccd6;text-decoration:none;color:#182026}.jupyter-wrapper .bp3-dark .bp3-breadcrumb,.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs>li::after{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.jupyter-wrapper .bp3-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;min-width:30px;min-height:30px}.jupyter-wrapper .bp3-button>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-button>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-button::before,.jupyter-wrapper .bp3-button>*{margin-right:7px}.jupyter-wrapper .bp3-button:empty::before,.jupyter-wrapper .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button:empty{padding:0 !important}.jupyter-wrapper .bp3-button:disabled,.jupyter-wrapper .bp3-button.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-button.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button.bp3-align-right,.jupyter-wrapper .bp3-align-right .bp3-button{text-align:right}.jupyter-wrapper .bp3-button.bp3-align-left,.jupyter-wrapper .bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-button.bp3-intent-primary{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-primary:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-intent-primary.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-success{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0f9960;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-success:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#0d8050}.jupyter-wrapper .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0a6640;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-intent-success.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(15,153,96,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-warning{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#d9822b;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-warning:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#bf7326}.jupyter-wrapper .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a66321;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-intent-warning.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(217,130,43,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button.bp3-intent-danger{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#db3737;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{color:#fff}.jupyter-wrapper .bp3-button.bp3-intent-danger:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#c23030}.jupyter-wrapper .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#a82a2a;background-image:none}.jupyter-wrapper .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-intent-danger.bp3-disabled{border-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;background-color:rgba(219,55,55,.5);background-image:none;color:rgba(255,255,255,.6)}.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.jupyter-wrapper .bp3-button.bp3-large,.jupyter-wrapper .bp3-large .bp3-button{min-width:40px;min-height:40px;padding:5px 15px;font-size:16px}.jupyter-wrapper .bp3-button.bp3-large::before,.jupyter-wrapper .bp3-button.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-button::before,.jupyter-wrapper .bp3-large .bp3-button>*{margin-right:10px}.jupyter-wrapper .bp3-button.bp3-large:empty::before,.jupyter-wrapper .bp3-button.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-button:empty::before,.jupyter-wrapper .bp3-large .bp3-button>:last-child{margin-right:0}.jupyter-wrapper .bp3-button.bp3-small,.jupyter-wrapper .bp3-small .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-button.bp3-loading{position:relative}.jupyter-wrapper .bp3-button.bp3-loading[class*=bp3-icon-]::before{visibility:hidden}.jupyter-wrapper .bp3-button.bp3-loading .bp3-button-spinner{position:absolute;margin:0}.jupyter-wrapper .bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.jupyter-wrapper .bp3-button[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon,.jupyter-wrapper .bp3-button .bp3-icon-standard,.jupyter-wrapper .bp3-button .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-button .bp3-icon.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-standard.bp3-align-right,.jupyter-wrapper .bp3-button .bp3-icon-large.bp3-align-right{margin-left:7px}.jupyter-wrapper .bp3-button .bp3-icon:first-child:last-child,.jupyter-wrapper .bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]){-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-image:none;color:rgba(255,255,255,.3)}.jupyter-wrapper .bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-button:disabled::before,.jupyter-wrapper .bp3-button:disabled .bp3-icon,.jupyter-wrapper .bp3-button:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button:disabled .bp3-icon-large,.jupyter-wrapper .bp3-button.bp3-disabled::before,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-standard,.jupyter-wrapper .bp3-button.bp3-disabled .bp3-icon-large,.jupyter-wrapper .bp3-button[class*=bp3-intent-]::before,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-standard,.jupyter-wrapper .bp3-button[class*=bp3-intent-] .bp3-icon-large{color:inherit !important}.jupyter-wrapper .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button.bp3-minimal:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper a.bp3-button{text-align:center;text-decoration:none;-webkit-transition:none;transition:none}.jupyter-wrapper a.bp3-button,.jupyter-wrapper a.bp3-button:hover,.jupyter-wrapper a.bp3-button:active{color:#182026}.jupyter-wrapper a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-text{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.jupyter-wrapper .bp3-button.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button.bp3-align-right .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button-text,.jupyter-wrapper .bp3-button-group.bp3-align-right .bp3-button-text{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.jupyter-wrapper .bp3-button-group .bp3-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;z-index:4}.jupyter-wrapper .bp3-button-group .bp3-button:focus{z-index:5}.jupyter-wrapper .bp3-button-group .bp3-button:hover{z-index:6}.jupyter-wrapper .bp3-button-group .bp3-button:active,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-active{z-index:7}.jupyter-wrapper .bp3-button-group .bp3-button:disabled,.jupyter-wrapper .bp3-button-group .bp3-button.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:active,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active{z-index:12}.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-]:disabled,.jupyter-wrapper .bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-button-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-button-group .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-button-group .bp3-button.bp3-fill,.jupyter-wrapper .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-button-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;vertical-align:top}.jupyter-wrapper .bp3-button-group.bp3-vertical.bp3-fill{width:unset;height:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical .bp3-button{margin-right:0 !important;width:100%}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child{border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-bottom:-1px}.jupyter-wrapper .bp3-button-group.bp3-align-left .bp3-button{text-align:left}.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child){margin-right:1px}.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button,.jupyter-wrapper .bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child){margin-bottom:1px}.jupyter-wrapper .bp3-callout{line-height:1.5;font-size:14px;position:relative;border-radius:3px;background-color:rgba(138,155,168,.15);width:100%;padding:10px 12px 9px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]{padding-left:40px}.jupyter-wrapper .bp3-callout[class*=bp3-icon-]::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout.bp3-callout-icon{padding-left:40px}.jupyter-wrapper .bp3-callout.bp3-callout-icon>.bp3-icon:first-child{position:absolute;top:10px;left:10px;color:#5c7080}.jupyter-wrapper .bp3-callout .bp3-heading{margin-top:0;margin-bottom:5px;line-height:20px}.jupyter-wrapper .bp3-callout .bp3-heading:last-child{margin-bottom:0}.jupyter-wrapper .bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.jupyter-wrapper .bp3-dark .bp3-callout[class*=bp3-icon-]::before{color:#a7b6c2}.jupyter-wrapper .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-primary .bp3-heading{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{color:#48aff0}.jupyter-wrapper .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-success .bp3-heading{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{color:#3dcc91}.jupyter-wrapper .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-warning .bp3-heading{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{color:#ffb366}.jupyter-wrapper .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.jupyter-wrapper .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-callout.bp3-intent-danger .bp3-heading{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]::before,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.jupyter-wrapper .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{color:#ff7373}.jupyter-wrapper .bp3-running-text .bp3-callout{margin:20px 0}.jupyter-wrapper .bp3-card{border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#fff;padding:20px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-card.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);background-color:#30404d}.jupyter-wrapper .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-0.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-0{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.jupyter-wrapper .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-1.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-1{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-2.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-2{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-3.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-3{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-elevation-4.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-elevation-4{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.jupyter-wrapper .bp3-card.bp3-interactive:hover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-card.bp3-interactive:active{opacity:.9;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);-webkit-transition-duration:0;transition-duration:0}.jupyter-wrapper .bp3-card.bp3-interactive:active.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-card.bp3-interactive:active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-collapse{height:0;overflow-y:hidden;-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-context-menu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-context-menu-popover-target{position:fixed}.jupyter-wrapper .bp3-divider{margin:5px;border-right:1px solid rgba(16,22,26,.15);border-bottom:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;min-height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog,.jupyter-wrapper .bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:30px 0;border-radius:6px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#ebf1f5;width:500px;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.jupyter-wrapper .bp3-dialog:focus{outline:0}.jupyter-wrapper .bp3-dialog.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-dialog{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#293742;color:#f5f8fa}.jupyter-wrapper .bp3-dialog-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:6px 6px 0 0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);background:#fff;min-height:40px;padding-right:5px;padding-left:20px}.jupyter-wrapper .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dialog-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-dialog-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4);background:#30404d}.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-dialog-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dialog-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:20px;line-height:18px}.jupyter-wrapper .bp3-dialog-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0 20px}.jupyter-wrapper .bp3-dialog-footer-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.jupyter-wrapper .bp3-dialog-footer-actions .bp3-button{margin-left:10px}.jupyter-wrapper .bp3-drawer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background:#fff;padding:0}.jupyter-wrapper .bp3-drawer:focus{outline:0}.jupyter-wrapper .bp3-drawer.bp3-position-top{top:0;right:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left{top:0;bottom:0;left:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right{top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){top:0;right:0;bottom:0;width:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{-webkit-transform:translateX(100%);transform:translateX(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{right:0;bottom:0;left:0;height:50%}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear{-webkit-transform:translateY(100%);transform:translateY(100%)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active,.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-drawer.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-drawer{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-drawer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(16,22,26,.15);box-shadow:0 1px 0 rgba(16,22,26,.15);min-height:40px;padding:5px;padding-left:20px}.jupyter-wrapper .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-drawer-header .bp3-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-right:10px;color:#5c7080}.jupyter-wrapper .bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0;line-height:inherit}.jupyter-wrapper .bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.jupyter-wrapper .bp3-dark .bp3-drawer-header{-webkit-box-shadow:0 1px 0 rgba(16,22,26,.4);box-shadow:0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon-large,.jupyter-wrapper .bp3-dark .bp3-drawer-header .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-drawer-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;line-height:18px}.jupyter-wrapper .bp3-drawer-footer{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);padding:10px 20px}.jupyter-wrapper .bp3-dark .bp3-drawer-footer{-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.4);box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text{display:inline-block;position:relative;cursor:text;max-width:100%;vertical-align:top;white-space:nowrap}.jupyter-wrapper .bp3-editable-text::before{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:3px;content:\"\";-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9),box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#137cbd}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#0f9960}.jupyter-wrapper .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#d9822b}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#db3737}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.jupyter-wrapper .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-editable-text:hover::before{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-disabled::before{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{-webkit-box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4);box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{-webkit-box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4);box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4);box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{-webkit-box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4);box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.jupyter-wrapper .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{-webkit-box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-editable-text-input,.jupyter-wrapper .bp3-editable-text-content{display:inherit;position:relative;min-width:inherit;max-width:inherit;vertical-align:top;text-transform:inherit;letter-spacing:inherit;color:inherit;font:inherit;resize:none}.jupyter-wrapper .bp3-editable-text-input{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;width:100%;padding:0;white-space:pre-wrap}.jupyter-wrapper .bp3-editable-text-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-editable-text-input:focus{outline:none}.jupyter-wrapper .bp3-editable-text-input::-ms-clear{display:none}.jupyter-wrapper .bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.jupyter-wrapper .bp3-editable-text-editing>.bp3-editable-text-content{position:absolute;left:0;visibility:hidden}.jupyter-wrapper .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-editable-text.bp3-multiline{display:block}.jupyter-wrapper .bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.jupyter-wrapper .bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-control-group>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select,.jupyter-wrapper .bp3-control-group .bp3-input,.jupyter-wrapper .bp3-control-group .bp3-select{position:relative}.jupyter-wrapper .bp3-control-group .bp3-input{z-index:2;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-input:focus{z-index:14;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-input[readonly],.jupyter-wrapper .bp3-control-group .bp3-input:disabled,.jupyter-wrapper .bp3-control-group .bp3-input.bp3-disabled{z-index:1}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.jupyter-wrapper .bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.jupyter-wrapper .bp3-control-group .bp3-button,.jupyter-wrapper .bp3-control-group .bp3-html-select select,.jupyter-wrapper .bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);z-index:4;border-radius:inherit}.jupyter-wrapper .bp3-control-group .bp3-button:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select:focus,.jupyter-wrapper .bp3-control-group .bp3-select select:focus{z-index:5}.jupyter-wrapper .bp3-control-group .bp3-button:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select:hover,.jupyter-wrapper .bp3-control-group .bp3-select select:hover{z-index:6}.jupyter-wrapper .bp3-control-group .bp3-button:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select:active,.jupyter-wrapper .bp3-control-group .bp3-select select:active{z-index:7}.jupyter-wrapper .bp3-control-group .bp3-button[readonly],.jupyter-wrapper .bp3-control-group .bp3-button:disabled,.jupyter-wrapper .bp3-control-group .bp3-button.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[readonly],.jupyter-wrapper .bp3-control-group .bp3-select select:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select.bp3-disabled{z-index:3}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent][readonly],.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.jupyter-wrapper .bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled{z-index:8}.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.jupyter-wrapper .bp3-control-group .bp3-select::after,.jupyter-wrapper .bp3-control-group .bp3-html-select::after,.jupyter-wrapper .bp3-control-group .bp3-select>.bp3-icon,.jupyter-wrapper .bp3-control-group .bp3-html-select>.bp3-icon{z-index:17}.jupyter-wrapper .bp3-control-group:not(.bp3-vertical)>*{margin-right:-1px}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>*{margin-right:0}.jupyter-wrapper .bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.jupyter-wrapper .bp3-control-group .bp3-popover-wrapper,.jupyter-wrapper .bp3-control-group .bp3-popover-target{border-radius:inherit}.jupyter-wrapper .bp3-control-group>:first-child{border-radius:3px 0 0 3px}.jupyter-wrapper .bp3-control-group>:last-child{margin-right:0;border-radius:0 3px 3px 0}.jupyter-wrapper .bp3-control-group>:only-child{margin-right:0;border-radius:3px}.jupyter-wrapper .bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.jupyter-wrapper .bp3-control-group>.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-fill>*:not(.bp3-fixed){-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jupyter-wrapper .bp3-control-group.bp3-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jupyter-wrapper .bp3-control-group.bp3-vertical>*{margin-top:-1px}.jupyter-wrapper .bp3-control-group.bp3-vertical>:first-child{margin-top:0;border-radius:3px 3px 0 0}.jupyter-wrapper .bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.jupyter-wrapper .bp3-control{display:block;position:relative;margin-bottom:10px;cursor:pointer;text-transform:none}.jupyter-wrapper .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control:not(.bp3-align-right){padding-left:26px}.jupyter-wrapper .bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.jupyter-wrapper .bp3-control.bp3-align-right{padding-right:26px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.jupyter-wrapper .bp3-control.bp3-disabled{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-control.bp3-inline{display:inline-block;margin-right:20px}.jupyter-wrapper .bp3-control input{position:absolute;top:0;left:0;opacity:0;z-index:-1}.jupyter-wrapper .bp3-control .bp3-control-indicator{display:inline-block;position:relative;margin-top:-3px;margin-right:10px;border:none;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));cursor:pointer;width:1em;height:1em;vertical-align:middle;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-control .bp3-control-indicator::before{display:block;width:1em;height:1em;content:\"\"}.jupyter-wrapper .bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.jupyter-wrapper .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background:#d8e1e8}.jupyter-wrapper .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed}.jupyter-wrapper .bp3-control input:focus~.bp3-control-indicator{outline:rgba(19,124,189,.6) auto 2px;outline-offset:2px;-moz-outline-radius:6px}.jupyter-wrapper .bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-top:1px;margin-left:10px}.jupyter-wrapper .bp3-control.bp3-large{font-size:16px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.jupyter-wrapper .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right{padding-right:30px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.jupyter-wrapper .bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.jupyter-wrapper .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#137cbd;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));color:#fff}.jupyter-wrapper .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);background-color:#106ba3}.jupyter-wrapper .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2);background-color:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.jupyter-wrapper .bp3-control.bp3-checkbox input:checked~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 0 0-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0 0 12 5z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator::before{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e\")}.jupyter-wrapper .bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.jupyter-wrapper .bp3-control.bp3-radio input:checked~.bp3-control-indicator::before{background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%)}.jupyter-wrapper .bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator::before{opacity:.5}.jupyter-wrapper .bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.jupyter-wrapper .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.jupyter-wrapper .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.jupyter-wrapper .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(255,255,255,.8)}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.jupyter-wrapper .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;-webkit-box-shadow:none !important;box-shadow:none !important;width:auto;min-width:1.75em;-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator::before{position:absolute;left:0;margin:2px;border-radius:50%;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);background:#fff;width:calc(1em - 4px);height:calc(1em - 4px);-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{left:calc(100% - 1em)}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.jupyter-wrapper .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator::before{background:rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background:#394b59}.jupyter-wrapper .bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator::before{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-control.bp3-switch .bp3-switch-inner-text{text-align:center;font-size:.7em}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{visibility:hidden;margin-right:1.2em;margin-left:.5em;line-height:0}.jupyter-wrapper .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{visibility:visible;margin-right:.5em;margin-left:1.2em;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{visibility:visible;line-height:1em}.jupyter-wrapper .bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{visibility:hidden;line-height:0}.jupyter-wrapper .bp3-dark .bp3-control{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-control .bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0))}.jupyter-wrapper .bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background:#202b33}.jupyter-wrapper .bp3-dark .bp3-control input:disabled~.bp3-control-indicator{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);cursor:not-allowed}.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.jupyter-wrapper .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-file-input{display:inline-block;position:relative;cursor:pointer;height:30px}.jupyter-wrapper .bp3-file-input input{opacity:0;margin:0;min-width:200px}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active:hover,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input::after.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input::after.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.jupyter-wrapper .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.jupyter-wrapper .bp3-file-input.bp3-fill{width:100%}.jupyter-wrapper .bp3-file-input.bp3-large,.jupyter-wrapper .bp3-large .bp3-file-input{height:40px}.jupyter-wrapper .bp3-file-input .bp3-file-upload-input-custom-text::after{content:attr(bp3-button-text)}.jupyter-wrapper .bp3-file-upload-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;left:0;padding-right:80px;color:rgba(92,112,128,.6);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-file-upload-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input:focus,.jupyter-wrapper .bp3-file-upload-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-file-upload-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;min-width:24px;min-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;position:absolute;top:0;right:0;margin:3px;border-radius:3px;width:70px;text-align:center;line-height:24px;content:\"Browse\"}.jupyter-wrapper .bp3-file-upload-input::after:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after:disabled.bp3-active:hover,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-file-upload-input:hover::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-file-upload-input:active::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-large .bp3-file-upload-input{height:40px;line-height:40px;font-size:16px;padding-right:95px}.jupyter-wrapper .bp3-large .bp3-file-upload-input[type=search],.jupyter-wrapper .bp3-large .bp3-file-upload-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-large .bp3-file-upload-input::after{min-width:30px;min-height:30px;margin:5px;width:85px;line-height:30px}.jupyter-wrapper .bp3-dark .bp3-file-upload-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:hover::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-file-upload-input:active::after{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-file-upload-input::after{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.jupyter-wrapper .bp3-form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 0 15px}.jupyter-wrapper .bp3-form-group label.bp3-label{margin-bottom:5px}.jupyter-wrapper .bp3-form-group .bp3-control{margin-top:7px}.jupyter-wrapper .bp3-form-group .bp3-form-helper-text{margin-top:5px;color:#5c7080;font-size:12px}.jupyter-wrapper .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.jupyter-wrapper .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.jupyter-wrapper .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.jupyter-wrapper .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.jupyter-wrapper .bp3-form-group.bp3-inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-form-group.bp3-inline.bp3-large label.bp3-label{margin:0 10px 0 0;line-height:40px}.jupyter-wrapper .bp3-form-group.bp3-inline label.bp3-label{margin:0 10px 0 0;line-height:30px}.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,.jupyter-wrapper .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-input-group{display:block;position:relative}.jupyter-wrapper .bp3-input-group .bp3-input{position:relative;width:100%}.jupyter-wrapper .bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.jupyter-wrapper .bp3-input-group .bp3-input-action,.jupyter-wrapper .bp3-input-group>.bp3-button,.jupyter-wrapper .bp3-input-group>.bp3-icon{position:absolute;top:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:first-child,.jupyter-wrapper .bp3-input-group>.bp3-button:first-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:first-child{left:0}.jupyter-wrapper .bp3-input-group .bp3-input-action:last-child,.jupyter-wrapper .bp3-input-group>.bp3-button:last-child,.jupyter-wrapper .bp3-input-group>.bp3-icon:last-child{right:0}.jupyter-wrapper .bp3-input-group .bp3-button{min-width:24px;min-height:24px;margin:3px;padding:0 7px}.jupyter-wrapper .bp3-input-group .bp3-button:empty{padding:0}.jupyter-wrapper .bp3-input-group>.bp3-icon{z-index:1;color:#5c7080}.jupyter-wrapper .bp3-input-group>.bp3-icon:empty{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-input-group>.bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input-action>.bp3-spinner{margin:7px}.jupyter-wrapper .bp3-input-group .bp3-tag{margin:5px}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,.jupyter-wrapper .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-input-group.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-button{min-width:30px;min-height:30px;margin:5px}.jupyter-wrapper .bp3-input-group.bp3-large>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner{margin:12px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.jupyter-wrapper .bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-button{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-tag{min-width:20px;min-height:20px;margin:2px}.jupyter-wrapper .bp3-input-group.bp3-small>.bp3-icon,.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner{margin:4px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input[type=search],.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.jupyter-wrapper .bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.jupyter-wrapper .bp3-input-group.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-input-group.bp3-round .bp3-button,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-input,.jupyter-wrapper .bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.jupyter-wrapper .bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input:disabled,.jupyter-wrapper .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.jupyter-wrapper .bp3-input{outline:none;border:none;border-radius:3px;-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);background:#fff;height:30px;padding:0 10px;vertical-align:middle;line-height:30px;color:#182026;font-size:14px;font-weight:400;-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-appearance:none;-moz-appearance:none;appearance:none}.jupyter-wrapper .bp3-input::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input:focus,.jupyter-wrapper .bp3-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input[type=search],.jupyter-wrapper .bp3-input.bp3-round{border-radius:30px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px}.jupyter-wrapper .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.jupyter-wrapper .bp3-input:disabled,.jupyter-wrapper .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6);resize:none}.jupyter-wrapper .bp3-input.bp3-large{height:40px;line-height:40px;font-size:16px}.jupyter-wrapper .bp3-input.bp3-large[type=search],.jupyter-wrapper .bp3-input.bp3-large.bp3-round{padding:0 15px}.jupyter-wrapper .bp3-input.bp3-small{height:24px;padding-right:8px;padding-left:8px;line-height:24px;font-size:12px}.jupyter-wrapper .bp3-input.bp3-small[type=search],.jupyter-wrapper .bp3-input.bp3-small.bp3-round{padding:0 12px}.jupyter-wrapper .bp3-input.bp3-fill{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.jupyter-wrapper .bp3-dark .bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary[readonly]{-webkit-box-shadow:inset 0 0 0 1px #137cbd;box-shadow:inset 0 0 0 1px #137cbd}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success{-webkit-box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:focus{-webkit-box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success[readonly]{-webkit-box-shadow:inset 0 0 0 1px #0f9960;box-shadow:inset 0 0 0 1px #0f9960}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning{-webkit-box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:focus{-webkit-box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning[readonly]{-webkit-box-shadow:inset 0 0 0 1px #d9822b;box-shadow:inset 0 0 0 1px #d9822b}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger{-webkit-box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:focus{-webkit-box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger[readonly]{-webkit-box-shadow:inset 0 0 0 1px #db3737;box-shadow:inset 0 0 0 1px #db3737}.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-input::-ms-clear{display:none}.jupyter-wrapper textarea.bp3-input{max-width:100%;padding:10px}.jupyter-wrapper textarea.bp3-input,.jupyter-wrapper textarea.bp3-input.bp3-large,.jupyter-wrapper textarea.bp3-input.bp3-small{height:auto;line-height:inherit}.jupyter-wrapper textarea.bp3-input.bp3-small{padding:8px}.jupyter-wrapper .bp3-dark textarea.bp3-input{-webkit-box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background:rgba(16,22,26,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark textarea.bp3-input:focus{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input[readonly]{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark textarea.bp3-input:disabled,.jupyter-wrapper .bp3-dark textarea.bp3-input.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background:rgba(57,75,89,.5);color:rgba(167,182,194,.6)}.jupyter-wrapper label.bp3-label{display:block;margin-top:0;margin-bottom:15px}.jupyter-wrapper label.bp3-label .bp3-html-select,.jupyter-wrapper label.bp3-label .bp3-input,.jupyter-wrapper label.bp3-label .bp3-select,.jupyter-wrapper label.bp3-label .bp3-slider,.jupyter-wrapper label.bp3-label .bp3-popover-wrapper{display:block;margin-top:5px;text-transform:none}.jupyter-wrapper label.bp3-label .bp3-button-group{margin-top:5px}.jupyter-wrapper label.bp3-label .bp3-select select,.jupyter-wrapper label.bp3-label .bp3-html-select select{width:100%;vertical-align:top;font-weight:400}.jupyter-wrapper label.bp3-label.bp3-disabled,.jupyter-wrapper label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}.jupyter-wrapper label.bp3-label.bp3-inline{line-height:30px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-html-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-select,.jupyter-wrapper label.bp3-label.bp3-inline .bp3-popover-wrapper{display:inline-block;margin:0 0 0 5px;vertical-align:top}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}.jupyter-wrapper label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}.jupyter-wrapper label.bp3-label.bp3-inline.bp3-large{line-height:40px}.jupyter-wrapper label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.jupyter-wrapper .bp3-dark label.bp3-label{color:#f5f8fa}.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled,.jupyter-wrapper .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{-webkit-box-flex:1;-ms-flex:1 1 14px;flex:1 1 14px;width:30px;min-height:0;padding:0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.jupyter-wrapper .bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.jupyter-wrapper .bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}.jupyter-wrapper form{display:block}.jupyter-wrapper .bp3-html-select select,.jupyter-wrapper .bp3-select select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;border-radius:3px;cursor:pointer;padding:5px 10px;vertical-align:middle;text-align:left;font-size:14px;-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;border-radius:3px;width:100%;height:30px;padding:0 25px 0 10px;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-html-select select>.bp3-fill,.jupyter-wrapper .bp3-select select>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-html-select select::before,.jupyter-wrapper .bp3-select select::before,.jupyter-wrapper .bp3-html-select select>*,.jupyter-wrapper .bp3-select select>*{margin-right:7px}.jupyter-wrapper .bp3-html-select select:empty::before,.jupyter-wrapper .bp3-select select:empty::before,.jupyter-wrapper .bp3-html-select select>:last-child,.jupyter-wrapper .bp3-select select>:last-child{margin-right:0}.jupyter-wrapper .bp3-html-select select:hover,.jupyter-wrapper .bp3-select select:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-html-select select:active,.jupyter-wrapper .bp3-select select:active,.jupyter-wrapper .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-select select.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled,.jupyter-wrapper .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-select select.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select:disabled.bp3-active:hover,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select select.bp3-disabled.bp3-active:hover,.jupyter-wrapper .bp3-select select.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal select{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(167,182,194,.3);text-decoration:none;color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:rgba(115,134,148,.3);color:#182026}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select{-webkit-box-shadow:none;box-shadow:none;background:none;color:inherit}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-active{background:rgba(138,155,168,.3);color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{background:none;cursor:not-allowed;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#106ba3}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(16,107,163,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{background:rgba(19,124,189,.3);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{background:none;color:rgba(72,175,240,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{background:rgba(19,124,189,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#0d8050}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{background:none;color:rgba(13,128,80,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{background:rgba(15,153,96,.3);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{background:none;color:rgba(61,204,145,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{background:rgba(15,153,96,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#bf7326}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(191,115,38,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{background:rgba(217,130,43,.3);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{background:none;color:rgba(255,179,102,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{background:rgba(217,130,43,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{-webkit-box-shadow:none;box-shadow:none;background:none;color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#c23030}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(194,48,48,.5)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{background:rgba(219,55,55,.3);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{background:none;color:rgba(255,115,115,.5)}.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{background:rgba(219,55,55,.3)}.jupyter-wrapper .bp3-html-select.bp3-large select,.jupyter-wrapper .bp3-select.bp3-large select{height:40px;padding-right:35px;font-size:16px}.jupyter-wrapper .bp3-dark .bp3-html-select select,.jupyter-wrapper .bp3-dark .bp3-select select{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover,.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select select:hover,.jupyter-wrapper .bp3-dark .bp3-select select:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-html-select select:active,.jupyter-wrapper .bp3-dark .bp3-select select:active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-select select:disabled,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-html-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-select select.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.jupyter-wrapper .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-html-select select:disabled,.jupyter-wrapper .bp3-select select:disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon,.jupyter-wrapper .bp3-select::after{position:absolute;top:7px;right:7px;color:#5c7080;pointer-events:none}.jupyter-wrapper .bp3-html-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-select .bp3-disabled.bp3-icon,.jupyter-wrapper .bp3-disabled.bp3-select::after{color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-html-select,.jupyter-wrapper .bp3-select{display:inline-block;position:relative;vertical-align:middle;letter-spacing:normal}.jupyter-wrapper .bp3-html-select select::-ms-expand,.jupyter-wrapper .bp3-select select::-ms-expand{display:none}.jupyter-wrapper .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-select .bp3-icon{color:#5c7080}.jupyter-wrapper .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-select .bp3-icon:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-html-select .bp3-icon:hover,.jupyter-wrapper .bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.jupyter-wrapper .bp3-html-select.bp3-large::after,.jupyter-wrapper .bp3-html-select.bp3-large .bp3-icon,.jupyter-wrapper .bp3-select.bp3-large::after,.jupyter-wrapper .bp3-select.bp3-large .bp3-icon{top:12px;right:12px}.jupyter-wrapper .bp3-html-select.bp3-fill,.jupyter-wrapper .bp3-html-select.bp3-fill select,.jupyter-wrapper .bp3-select.bp3-fill,.jupyter-wrapper .bp3-select.bp3-fill select{width:100%}.jupyter-wrapper .bp3-dark .bp3-html-select option,.jupyter-wrapper .bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-html-select::after,.jupyter-wrapper .bp3-dark .bp3-select::after{color:#a7b6c2}.jupyter-wrapper .bp3-select::after{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6c6\"}.jupyter-wrapper .bp3-running-text table,.jupyter-wrapper table.bp3-html-table{border-spacing:0;font-size:14px}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th,.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{padding:11px;vertical-align:top;text-align:left}.jupyter-wrapper .bp3-running-text table th,.jupyter-wrapper table.bp3-html-table th{color:#182026;font-weight:600}.jupyter-wrapper .bp3-running-text table td,.jupyter-wrapper table.bp3-html-table td{color:#182026}.jupyter-wrapper .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-running-text table th,.jupyter-wrapper .bp3-running-text .bp3-dark table th,.jupyter-wrapper .bp3-dark table.bp3-html-table th{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table td,.jupyter-wrapper .bp3-running-text .bp3-dark table td,.jupyter-wrapper .bp3-dark table.bp3-html-table td{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child th,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child th,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child th,.jupyter-wrapper .bp3-dark .bp3-running-text table tbody tr:first-child td,.jupyter-wrapper .bp3-running-text .bp3-dark table tbody tr:first-child td,.jupyter-wrapper .bp3-dark table.bp3-html-table tbody tr:first-child td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed th,.jupyter-wrapper table.bp3-html-table.bp3-html-table-condensed td,.jupyter-wrapper table.bp3-html-table.bp3-small th,.jupyter-wrapper table.bp3-html-table.bp3-small td{padding-top:6px;padding-bottom:6px}.jupyter-wrapper table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15);box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}.jupyter-wrapper table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{-webkit-box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){-webkit-box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 1px 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{-webkit-box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15);box-shadow:inset 1px 0 0 0 rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.jupyter-wrapper .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-key-combo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-key-combo>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-key-combo>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-key-combo::before,.jupyter-wrapper .bp3-key-combo>*{margin-right:5px}.jupyter-wrapper .bp3-key-combo:empty::before,.jupyter-wrapper .bp3-key-combo>:last-child{margin-right:0}.jupyter-wrapper .bp3-hotkey-dialog{top:40px;padding-bottom:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.jupyter-wrapper .bp3-hotkey-dialog .bp3-hotkey-label{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jupyter-wrapper .bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading{margin-bottom:20px}.jupyter-wrapper .bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.jupyter-wrapper .bp3-hotkey{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:0;margin-left:0}.jupyter-wrapper .bp3-hotkey:not(:last-child){margin-bottom:10px}.jupyter-wrapper .bp3-icon{display:inline-block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;vertical-align:text-bottom}.jupyter-wrapper .bp3-icon:not(:empty)::before{content:\"\" !important;content:unset !important}.jupyter-wrapper .bp3-icon>svg{display:block}.jupyter-wrapper .bp3-icon>svg:not([fill]){fill:currentColor}.jupyter-wrapper .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-icon-large.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-icon-large.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-icon-large.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-icon-large.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-dark .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-icon-large.bp3-intent-danger{color:#ff7373}.jupyter-wrapper span.bp3-icon-standard{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon-large{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}.jupyter-wrapper span.bp3-icon:empty{line-height:1;font-family:\"Icons20\";font-size:inherit;font-weight:400;font-style:normal}.jupyter-wrapper span.bp3-icon:empty::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.jupyter-wrapper .bp3-icon-add::before{content:\"\ue63e\"}.jupyter-wrapper .bp3-icon-add-column-left::before{content:\"\ue6f9\"}.jupyter-wrapper .bp3-icon-add-column-right::before{content:\"\ue6fa\"}.jupyter-wrapper .bp3-icon-add-row-bottom::before{content:\"\ue6f8\"}.jupyter-wrapper .bp3-icon-add-row-top::before{content:\"\ue6f7\"}.jupyter-wrapper .bp3-icon-add-to-artifact::before{content:\"\ue67c\"}.jupyter-wrapper .bp3-icon-add-to-folder::before{content:\"\ue6d2\"}.jupyter-wrapper .bp3-icon-airplane::before{content:\"\ue74b\"}.jupyter-wrapper .bp3-icon-align-center::before{content:\"\ue603\"}.jupyter-wrapper .bp3-icon-align-justify::before{content:\"\ue605\"}.jupyter-wrapper .bp3-icon-align-left::before{content:\"\ue602\"}.jupyter-wrapper .bp3-icon-align-right::before{content:\"\ue604\"}.jupyter-wrapper .bp3-icon-alignment-bottom::before{content:\"\ue727\"}.jupyter-wrapper .bp3-icon-alignment-horizontal-center::before{content:\"\ue726\"}.jupyter-wrapper .bp3-icon-alignment-left::before{content:\"\ue722\"}.jupyter-wrapper .bp3-icon-alignment-right::before{content:\"\ue724\"}.jupyter-wrapper .bp3-icon-alignment-top::before{content:\"\ue725\"}.jupyter-wrapper .bp3-icon-alignment-vertical-center::before{content:\"\ue723\"}.jupyter-wrapper .bp3-icon-annotation::before{content:\"\ue6f0\"}.jupyter-wrapper .bp3-icon-application::before{content:\"\ue735\"}.jupyter-wrapper .bp3-icon-applications::before{content:\"\ue621\"}.jupyter-wrapper .bp3-icon-archive::before{content:\"\ue907\"}.jupyter-wrapper .bp3-icon-arrow-bottom-left::before{content:\"\u2199\"}.jupyter-wrapper .bp3-icon-arrow-bottom-right::before{content:\"\u2198\"}.jupyter-wrapper .bp3-icon-arrow-down::before{content:\"\u2193\"}.jupyter-wrapper .bp3-icon-arrow-left::before{content:\"\u2190\"}.jupyter-wrapper .bp3-icon-arrow-right::before{content:\"\u2192\"}.jupyter-wrapper .bp3-icon-arrow-top-left::before{content:\"\u2196\"}.jupyter-wrapper .bp3-icon-arrow-top-right::before{content:\"\u2197\"}.jupyter-wrapper .bp3-icon-arrow-up::before{content:\"\u2191\"}.jupyter-wrapper .bp3-icon-arrows-horizontal::before{content:\"\u2194\"}.jupyter-wrapper .bp3-icon-arrows-vertical::before{content:\"\u2195\"}.jupyter-wrapper .bp3-icon-asterisk::before{content:\"*\"}.jupyter-wrapper .bp3-icon-automatic-updates::before{content:\"\ue65f\"}.jupyter-wrapper .bp3-icon-badge::before{content:\"\ue6e3\"}.jupyter-wrapper .bp3-icon-ban-circle::before{content:\"\ue69d\"}.jupyter-wrapper .bp3-icon-bank-account::before{content:\"\ue76f\"}.jupyter-wrapper .bp3-icon-barcode::before{content:\"\ue676\"}.jupyter-wrapper .bp3-icon-blank::before{content:\"\ue900\"}.jupyter-wrapper .bp3-icon-blocked-person::before{content:\"\ue768\"}.jupyter-wrapper .bp3-icon-bold::before{content:\"\ue606\"}.jupyter-wrapper .bp3-icon-book::before{content:\"\ue6b8\"}.jupyter-wrapper .bp3-icon-bookmark::before{content:\"\ue61a\"}.jupyter-wrapper .bp3-icon-box::before{content:\"\ue6bf\"}.jupyter-wrapper .bp3-icon-briefcase::before{content:\"\ue674\"}.jupyter-wrapper .bp3-icon-bring-data::before{content:\"\ue90a\"}.jupyter-wrapper .bp3-icon-build::before{content:\"\ue72d\"}.jupyter-wrapper .bp3-icon-calculator::before{content:\"\ue70b\"}.jupyter-wrapper .bp3-icon-calendar::before{content:\"\ue62b\"}.jupyter-wrapper .bp3-icon-camera::before{content:\"\ue69e\"}.jupyter-wrapper .bp3-icon-caret-down::before{content:\"\u2304\"}.jupyter-wrapper .bp3-icon-caret-left::before{content:\"\u2329\"}.jupyter-wrapper .bp3-icon-caret-right::before{content:\"\u232a\"}.jupyter-wrapper .bp3-icon-caret-up::before{content:\"\u2303\"}.jupyter-wrapper .bp3-icon-cell-tower::before{content:\"\ue770\"}.jupyter-wrapper .bp3-icon-changes::before{content:\"\ue623\"}.jupyter-wrapper .bp3-icon-chart::before{content:\"\ue67e\"}.jupyter-wrapper .bp3-icon-chat::before{content:\"\ue689\"}.jupyter-wrapper .bp3-icon-chevron-backward::before{content:\"\ue6df\"}.jupyter-wrapper .bp3-icon-chevron-down::before{content:\"\ue697\"}.jupyter-wrapper .bp3-icon-chevron-forward::before{content:\"\ue6e0\"}.jupyter-wrapper .bp3-icon-chevron-left::before{content:\"\ue694\"}.jupyter-wrapper .bp3-icon-chevron-right::before{content:\"\ue695\"}.jupyter-wrapper .bp3-icon-chevron-up::before{content:\"\ue696\"}.jupyter-wrapper .bp3-icon-circle::before{content:\"\ue66a\"}.jupyter-wrapper .bp3-icon-circle-arrow-down::before{content:\"\ue68e\"}.jupyter-wrapper .bp3-icon-circle-arrow-left::before{content:\"\ue68c\"}.jupyter-wrapper .bp3-icon-circle-arrow-right::before{content:\"\ue68b\"}.jupyter-wrapper .bp3-icon-circle-arrow-up::before{content:\"\ue68d\"}.jupyter-wrapper .bp3-icon-citation::before{content:\"\ue61b\"}.jupyter-wrapper .bp3-icon-clean::before{content:\"\ue7c5\"}.jupyter-wrapper .bp3-icon-clipboard::before{content:\"\ue61d\"}.jupyter-wrapper .bp3-icon-cloud::before{content:\"\u2601\"}.jupyter-wrapper .bp3-icon-cloud-download::before{content:\"\ue690\"}.jupyter-wrapper .bp3-icon-cloud-upload::before{content:\"\ue691\"}.jupyter-wrapper .bp3-icon-code::before{content:\"\ue661\"}.jupyter-wrapper .bp3-icon-code-block::before{content:\"\ue6c5\"}.jupyter-wrapper .bp3-icon-cog::before{content:\"\ue645\"}.jupyter-wrapper .bp3-icon-collapse-all::before{content:\"\ue763\"}.jupyter-wrapper .bp3-icon-column-layout::before{content:\"\ue6da\"}.jupyter-wrapper .bp3-icon-comment::before{content:\"\ue68a\"}.jupyter-wrapper .bp3-icon-comparison::before{content:\"\ue637\"}.jupyter-wrapper .bp3-icon-compass::before{content:\"\ue79c\"}.jupyter-wrapper .bp3-icon-compressed::before{content:\"\ue6c0\"}.jupyter-wrapper .bp3-icon-confirm::before{content:\"\ue639\"}.jupyter-wrapper .bp3-icon-console::before{content:\"\ue79b\"}.jupyter-wrapper .bp3-icon-contrast::before{content:\"\ue6cb\"}.jupyter-wrapper .bp3-icon-control::before{content:\"\ue67f\"}.jupyter-wrapper .bp3-icon-credit-card::before{content:\"\ue649\"}.jupyter-wrapper .bp3-icon-cross::before{content:\"\u2717\"}.jupyter-wrapper .bp3-icon-crown::before{content:\"\ue7b4\"}.jupyter-wrapper .bp3-icon-cube::before{content:\"\ue7c8\"}.jupyter-wrapper .bp3-icon-cube-add::before{content:\"\ue7c9\"}.jupyter-wrapper .bp3-icon-cube-remove::before{content:\"\ue7d0\"}.jupyter-wrapper .bp3-icon-curved-range-chart::before{content:\"\ue71b\"}.jupyter-wrapper .bp3-icon-cut::before{content:\"\ue6ef\"}.jupyter-wrapper .bp3-icon-dashboard::before{content:\"\ue751\"}.jupyter-wrapper .bp3-icon-data-lineage::before{content:\"\ue908\"}.jupyter-wrapper .bp3-icon-database::before{content:\"\ue683\"}.jupyter-wrapper .bp3-icon-delete::before{content:\"\ue644\"}.jupyter-wrapper .bp3-icon-delta::before{content:\"\u0394\"}.jupyter-wrapper .bp3-icon-derive-column::before{content:\"\ue739\"}.jupyter-wrapper .bp3-icon-desktop::before{content:\"\ue6af\"}.jupyter-wrapper .bp3-icon-diagram-tree::before{content:\"\ue7b3\"}.jupyter-wrapper .bp3-icon-direction-left::before{content:\"\ue681\"}.jupyter-wrapper .bp3-icon-direction-right::before{content:\"\ue682\"}.jupyter-wrapper .bp3-icon-disable::before{content:\"\ue600\"}.jupyter-wrapper .bp3-icon-document::before{content:\"\ue630\"}.jupyter-wrapper .bp3-icon-document-open::before{content:\"\ue71e\"}.jupyter-wrapper .bp3-icon-document-share::before{content:\"\ue71f\"}.jupyter-wrapper .bp3-icon-dollar::before{content:\"$\"}.jupyter-wrapper .bp3-icon-dot::before{content:\"\u2022\"}.jupyter-wrapper .bp3-icon-double-caret-horizontal::before{content:\"\ue6c7\"}.jupyter-wrapper .bp3-icon-double-caret-vertical::before{content:\"\ue6c6\"}.jupyter-wrapper .bp3-icon-double-chevron-down::before{content:\"\ue703\"}.jupyter-wrapper .bp3-icon-double-chevron-left::before{content:\"\ue6ff\"}.jupyter-wrapper .bp3-icon-double-chevron-right::before{content:\"\ue701\"}.jupyter-wrapper .bp3-icon-double-chevron-up::before{content:\"\ue702\"}.jupyter-wrapper .bp3-icon-doughnut-chart::before{content:\"\ue6ce\"}.jupyter-wrapper .bp3-icon-download::before{content:\"\ue62f\"}.jupyter-wrapper .bp3-icon-drag-handle-horizontal::before{content:\"\ue716\"}.jupyter-wrapper .bp3-icon-drag-handle-vertical::before{content:\"\ue715\"}.jupyter-wrapper .bp3-icon-draw::before{content:\"\ue66b\"}.jupyter-wrapper .bp3-icon-drive-time::before{content:\"\ue615\"}.jupyter-wrapper .bp3-icon-duplicate::before{content:\"\ue69c\"}.jupyter-wrapper .bp3-icon-edit::before{content:\"\u270e\"}.jupyter-wrapper .bp3-icon-eject::before{content:\"\u23cf\"}.jupyter-wrapper .bp3-icon-endorsed::before{content:\"\ue75f\"}.jupyter-wrapper .bp3-icon-envelope::before{content:\"\u2709\"}.jupyter-wrapper .bp3-icon-equals::before{content:\"\ue7d9\"}.jupyter-wrapper .bp3-icon-eraser::before{content:\"\ue773\"}.jupyter-wrapper .bp3-icon-error::before{content:\"\ue648\"}.jupyter-wrapper .bp3-icon-euro::before{content:\"\u20ac\"}.jupyter-wrapper .bp3-icon-exchange::before{content:\"\ue636\"}.jupyter-wrapper .bp3-icon-exclude-row::before{content:\"\ue6ea\"}.jupyter-wrapper .bp3-icon-expand-all::before{content:\"\ue764\"}.jupyter-wrapper .bp3-icon-export::before{content:\"\ue633\"}.jupyter-wrapper .bp3-icon-eye-off::before{content:\"\ue6cc\"}.jupyter-wrapper .bp3-icon-eye-on::before{content:\"\ue75a\"}.jupyter-wrapper .bp3-icon-eye-open::before{content:\"\ue66f\"}.jupyter-wrapper .bp3-icon-fast-backward::before{content:\"\ue6a8\"}.jupyter-wrapper .bp3-icon-fast-forward::before{content:\"\ue6ac\"}.jupyter-wrapper .bp3-icon-feed::before{content:\"\ue656\"}.jupyter-wrapper .bp3-icon-feed-subscribed::before{content:\"\ue78f\"}.jupyter-wrapper .bp3-icon-film::before{content:\"\ue6a1\"}.jupyter-wrapper .bp3-icon-filter::before{content:\"\ue638\"}.jupyter-wrapper .bp3-icon-filter-keep::before{content:\"\ue78c\"}.jupyter-wrapper .bp3-icon-filter-list::before{content:\"\ue6ee\"}.jupyter-wrapper .bp3-icon-filter-open::before{content:\"\ue7d7\"}.jupyter-wrapper .bp3-icon-filter-remove::before{content:\"\ue78d\"}.jupyter-wrapper .bp3-icon-flag::before{content:\"\u2691\"}.jupyter-wrapper .bp3-icon-flame::before{content:\"\ue7a9\"}.jupyter-wrapper .bp3-icon-flash::before{content:\"\ue6b3\"}.jupyter-wrapper .bp3-icon-floppy-disk::before{content:\"\ue6b7\"}.jupyter-wrapper .bp3-icon-flow-branch::before{content:\"\ue7c1\"}.jupyter-wrapper .bp3-icon-flow-end::before{content:\"\ue7c4\"}.jupyter-wrapper .bp3-icon-flow-linear::before{content:\"\ue7c0\"}.jupyter-wrapper .bp3-icon-flow-review::before{content:\"\ue7c2\"}.jupyter-wrapper .bp3-icon-flow-review-branch::before{content:\"\ue7c3\"}.jupyter-wrapper .bp3-icon-flows::before{content:\"\ue659\"}.jupyter-wrapper .bp3-icon-folder-close::before{content:\"\ue652\"}.jupyter-wrapper .bp3-icon-folder-new::before{content:\"\ue7b0\"}.jupyter-wrapper .bp3-icon-folder-open::before{content:\"\ue651\"}.jupyter-wrapper .bp3-icon-folder-shared::before{content:\"\ue653\"}.jupyter-wrapper .bp3-icon-folder-shared-open::before{content:\"\ue670\"}.jupyter-wrapper .bp3-icon-follower::before{content:\"\ue760\"}.jupyter-wrapper .bp3-icon-following::before{content:\"\ue761\"}.jupyter-wrapper .bp3-icon-font::before{content:\"\ue6b4\"}.jupyter-wrapper .bp3-icon-fork::before{content:\"\ue63a\"}.jupyter-wrapper .bp3-icon-form::before{content:\"\ue795\"}.jupyter-wrapper .bp3-icon-full-circle::before{content:\"\ue685\"}.jupyter-wrapper .bp3-icon-full-stacked-chart::before{content:\"\ue75e\"}.jupyter-wrapper .bp3-icon-fullscreen::before{content:\"\ue699\"}.jupyter-wrapper .bp3-icon-function::before{content:\"\ue6e5\"}.jupyter-wrapper .bp3-icon-gantt-chart::before{content:\"\ue6f4\"}.jupyter-wrapper .bp3-icon-geolocation::before{content:\"\ue640\"}.jupyter-wrapper .bp3-icon-geosearch::before{content:\"\ue613\"}.jupyter-wrapper .bp3-icon-git-branch::before{content:\"\ue72a\"}.jupyter-wrapper .bp3-icon-git-commit::before{content:\"\ue72b\"}.jupyter-wrapper .bp3-icon-git-merge::before{content:\"\ue729\"}.jupyter-wrapper .bp3-icon-git-new-branch::before{content:\"\ue749\"}.jupyter-wrapper .bp3-icon-git-pull::before{content:\"\ue728\"}.jupyter-wrapper .bp3-icon-git-push::before{content:\"\ue72c\"}.jupyter-wrapper .bp3-icon-git-repo::before{content:\"\ue748\"}.jupyter-wrapper .bp3-icon-glass::before{content:\"\ue6b1\"}.jupyter-wrapper .bp3-icon-globe::before{content:\"\ue666\"}.jupyter-wrapper .bp3-icon-globe-network::before{content:\"\ue7b5\"}.jupyter-wrapper .bp3-icon-graph::before{content:\"\ue673\"}.jupyter-wrapper .bp3-icon-graph-remove::before{content:\"\ue609\"}.jupyter-wrapper .bp3-icon-greater-than::before{content:\"\ue7e1\"}.jupyter-wrapper .bp3-icon-greater-than-or-equal-to::before{content:\"\ue7e2\"}.jupyter-wrapper .bp3-icon-grid::before{content:\"\ue6d0\"}.jupyter-wrapper .bp3-icon-grid-view::before{content:\"\ue6e4\"}.jupyter-wrapper .bp3-icon-group-objects::before{content:\"\ue60a\"}.jupyter-wrapper .bp3-icon-grouped-bar-chart::before{content:\"\ue75d\"}.jupyter-wrapper .bp3-icon-hand::before{content:\"\ue6de\"}.jupyter-wrapper .bp3-icon-hand-down::before{content:\"\ue6bb\"}.jupyter-wrapper .bp3-icon-hand-left::before{content:\"\ue6bc\"}.jupyter-wrapper .bp3-icon-hand-right::before{content:\"\ue6b9\"}.jupyter-wrapper .bp3-icon-hand-up::before{content:\"\ue6ba\"}.jupyter-wrapper .bp3-icon-header::before{content:\"\ue6b5\"}.jupyter-wrapper .bp3-icon-header-one::before{content:\"\ue793\"}.jupyter-wrapper .bp3-icon-header-two::before{content:\"\ue794\"}.jupyter-wrapper .bp3-icon-headset::before{content:\"\ue6dc\"}.jupyter-wrapper .bp3-icon-heart::before{content:\"\u2665\"}.jupyter-wrapper .bp3-icon-heart-broken::before{content:\"\ue7a2\"}.jupyter-wrapper .bp3-icon-heat-grid::before{content:\"\ue6f3\"}.jupyter-wrapper .bp3-icon-heatmap::before{content:\"\ue614\"}.jupyter-wrapper .bp3-icon-help::before{content:\"?\"}.jupyter-wrapper .bp3-icon-helper-management::before{content:\"\ue66d\"}.jupyter-wrapper .bp3-icon-highlight::before{content:\"\ue6ed\"}.jupyter-wrapper .bp3-icon-history::before{content:\"\ue64a\"}.jupyter-wrapper .bp3-icon-home::before{content:\"\u2302\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart::before{content:\"\ue70c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-asc::before{content:\"\ue75c\"}.jupyter-wrapper .bp3-icon-horizontal-bar-chart-desc::before{content:\"\ue71d\"}.jupyter-wrapper .bp3-icon-horizontal-distribution::before{content:\"\ue720\"}.jupyter-wrapper .bp3-icon-id-number::before{content:\"\ue771\"}.jupyter-wrapper .bp3-icon-image-rotate-left::before{content:\"\ue73a\"}.jupyter-wrapper .bp3-icon-image-rotate-right::before{content:\"\ue73b\"}.jupyter-wrapper .bp3-icon-import::before{content:\"\ue632\"}.jupyter-wrapper .bp3-icon-inbox::before{content:\"\ue629\"}.jupyter-wrapper .bp3-icon-inbox-filtered::before{content:\"\ue7d1\"}.jupyter-wrapper .bp3-icon-inbox-geo::before{content:\"\ue7d2\"}.jupyter-wrapper .bp3-icon-inbox-search::before{content:\"\ue7d3\"}.jupyter-wrapper .bp3-icon-inbox-update::before{content:\"\ue7d4\"}.jupyter-wrapper .bp3-icon-info-sign::before{content:\"\u2139\"}.jupyter-wrapper .bp3-icon-inheritance::before{content:\"\ue7d5\"}.jupyter-wrapper .bp3-icon-inner-join::before{content:\"\ue7a3\"}.jupyter-wrapper .bp3-icon-insert::before{content:\"\ue66c\"}.jupyter-wrapper .bp3-icon-intersection::before{content:\"\ue765\"}.jupyter-wrapper .bp3-icon-ip-address::before{content:\"\ue772\"}.jupyter-wrapper .bp3-icon-issue::before{content:\"\ue774\"}.jupyter-wrapper .bp3-icon-issue-closed::before{content:\"\ue776\"}.jupyter-wrapper .bp3-icon-issue-new::before{content:\"\ue775\"}.jupyter-wrapper .bp3-icon-italic::before{content:\"\ue607\"}.jupyter-wrapper .bp3-icon-join-table::before{content:\"\ue738\"}.jupyter-wrapper .bp3-icon-key::before{content:\"\ue78e\"}.jupyter-wrapper .bp3-icon-key-backspace::before{content:\"\ue707\"}.jupyter-wrapper .bp3-icon-key-command::before{content:\"\ue705\"}.jupyter-wrapper .bp3-icon-key-control::before{content:\"\ue704\"}.jupyter-wrapper .bp3-icon-key-delete::before{content:\"\ue708\"}.jupyter-wrapper .bp3-icon-key-enter::before{content:\"\ue70a\"}.jupyter-wrapper .bp3-icon-key-escape::before{content:\"\ue709\"}.jupyter-wrapper .bp3-icon-key-option::before{content:\"\ue742\"}.jupyter-wrapper .bp3-icon-key-shift::before{content:\"\ue706\"}.jupyter-wrapper .bp3-icon-key-tab::before{content:\"\ue757\"}.jupyter-wrapper .bp3-icon-known-vehicle::before{content:\"\ue73c\"}.jupyter-wrapper .bp3-icon-label::before{content:\"\ue665\"}.jupyter-wrapper .bp3-icon-layer::before{content:\"\ue6cf\"}.jupyter-wrapper .bp3-icon-layers::before{content:\"\ue618\"}.jupyter-wrapper .bp3-icon-layout::before{content:\"\ue60c\"}.jupyter-wrapper .bp3-icon-layout-auto::before{content:\"\ue60d\"}.jupyter-wrapper .bp3-icon-layout-balloon::before{content:\"\ue6d3\"}.jupyter-wrapper .bp3-icon-layout-circle::before{content:\"\ue60e\"}.jupyter-wrapper .bp3-icon-layout-grid::before{content:\"\ue610\"}.jupyter-wrapper .bp3-icon-layout-group-by::before{content:\"\ue611\"}.jupyter-wrapper .bp3-icon-layout-hierarchy::before{content:\"\ue60f\"}.jupyter-wrapper .bp3-icon-layout-linear::before{content:\"\ue6c3\"}.jupyter-wrapper .bp3-icon-layout-skew-grid::before{content:\"\ue612\"}.jupyter-wrapper .bp3-icon-layout-sorted-clusters::before{content:\"\ue6d4\"}.jupyter-wrapper .bp3-icon-learning::before{content:\"\ue904\"}.jupyter-wrapper .bp3-icon-left-join::before{content:\"\ue7a4\"}.jupyter-wrapper .bp3-icon-less-than::before{content:\"\ue7e3\"}.jupyter-wrapper .bp3-icon-less-than-or-equal-to::before{content:\"\ue7e4\"}.jupyter-wrapper .bp3-icon-lifesaver::before{content:\"\ue7c7\"}.jupyter-wrapper .bp3-icon-lightbulb::before{content:\"\ue6b0\"}.jupyter-wrapper .bp3-icon-link::before{content:\"\ue62d\"}.jupyter-wrapper .bp3-icon-list::before{content:\"\u2630\"}.jupyter-wrapper .bp3-icon-list-columns::before{content:\"\ue7b9\"}.jupyter-wrapper .bp3-icon-list-detail-view::before{content:\"\ue743\"}.jupyter-wrapper .bp3-icon-locate::before{content:\"\ue619\"}.jupyter-wrapper .bp3-icon-lock::before{content:\"\ue625\"}.jupyter-wrapper .bp3-icon-log-in::before{content:\"\ue69a\"}.jupyter-wrapper .bp3-icon-log-out::before{content:\"\ue64c\"}.jupyter-wrapper .bp3-icon-manual::before{content:\"\ue6f6\"}.jupyter-wrapper .bp3-icon-manually-entered-data::before{content:\"\ue74a\"}.jupyter-wrapper .bp3-icon-map::before{content:\"\ue662\"}.jupyter-wrapper .bp3-icon-map-create::before{content:\"\ue741\"}.jupyter-wrapper .bp3-icon-map-marker::before{content:\"\ue67d\"}.jupyter-wrapper .bp3-icon-maximize::before{content:\"\ue635\"}.jupyter-wrapper .bp3-icon-media::before{content:\"\ue62c\"}.jupyter-wrapper .bp3-icon-menu::before{content:\"\ue762\"}.jupyter-wrapper .bp3-icon-menu-closed::before{content:\"\ue655\"}.jupyter-wrapper .bp3-icon-menu-open::before{content:\"\ue654\"}.jupyter-wrapper .bp3-icon-merge-columns::before{content:\"\ue74f\"}.jupyter-wrapper .bp3-icon-merge-links::before{content:\"\ue60b\"}.jupyter-wrapper .bp3-icon-minimize::before{content:\"\ue634\"}.jupyter-wrapper .bp3-icon-minus::before{content:\"\u2212\"}.jupyter-wrapper .bp3-icon-mobile-phone::before{content:\"\ue717\"}.jupyter-wrapper .bp3-icon-mobile-video::before{content:\"\ue69f\"}.jupyter-wrapper .bp3-icon-moon::before{content:\"\ue754\"}.jupyter-wrapper .bp3-icon-more::before{content:\"\ue62a\"}.jupyter-wrapper .bp3-icon-mountain::before{content:\"\ue7b1\"}.jupyter-wrapper .bp3-icon-move::before{content:\"\ue693\"}.jupyter-wrapper .bp3-icon-mugshot::before{content:\"\ue6db\"}.jupyter-wrapper .bp3-icon-multi-select::before{content:\"\ue680\"}.jupyter-wrapper .bp3-icon-music::before{content:\"\ue6a6\"}.jupyter-wrapper .bp3-icon-new-drawing::before{content:\"\ue905\"}.jupyter-wrapper .bp3-icon-new-grid-item::before{content:\"\ue747\"}.jupyter-wrapper .bp3-icon-new-layer::before{content:\"\ue902\"}.jupyter-wrapper .bp3-icon-new-layers::before{content:\"\ue903\"}.jupyter-wrapper .bp3-icon-new-link::before{content:\"\ue65c\"}.jupyter-wrapper .bp3-icon-new-object::before{content:\"\ue65d\"}.jupyter-wrapper .bp3-icon-new-person::before{content:\"\ue6e9\"}.jupyter-wrapper .bp3-icon-new-prescription::before{content:\"\ue78b\"}.jupyter-wrapper .bp3-icon-new-text-box::before{content:\"\ue65b\"}.jupyter-wrapper .bp3-icon-ninja::before{content:\"\ue675\"}.jupyter-wrapper .bp3-icon-not-equal-to::before{content:\"\ue7e0\"}.jupyter-wrapper .bp3-icon-notifications::before{content:\"\ue624\"}.jupyter-wrapper .bp3-icon-notifications-updated::before{content:\"\ue7b8\"}.jupyter-wrapper .bp3-icon-numbered-list::before{content:\"\ue746\"}.jupyter-wrapper .bp3-icon-numerical::before{content:\"\ue756\"}.jupyter-wrapper .bp3-icon-office::before{content:\"\ue69b\"}.jupyter-wrapper .bp3-icon-offline::before{content:\"\ue67a\"}.jupyter-wrapper .bp3-icon-oil-field::before{content:\"\ue73f\"}.jupyter-wrapper .bp3-icon-one-column::before{content:\"\ue658\"}.jupyter-wrapper .bp3-icon-outdated::before{content:\"\ue7a8\"}.jupyter-wrapper .bp3-icon-page-layout::before{content:\"\ue660\"}.jupyter-wrapper .bp3-icon-panel-stats::before{content:\"\ue777\"}.jupyter-wrapper .bp3-icon-panel-table::before{content:\"\ue778\"}.jupyter-wrapper .bp3-icon-paperclip::before{content:\"\ue664\"}.jupyter-wrapper .bp3-icon-paragraph::before{content:\"\ue76c\"}.jupyter-wrapper .bp3-icon-path::before{content:\"\ue753\"}.jupyter-wrapper .bp3-icon-path-search::before{content:\"\ue65e\"}.jupyter-wrapper .bp3-icon-pause::before{content:\"\ue6a9\"}.jupyter-wrapper .bp3-icon-people::before{content:\"\ue63d\"}.jupyter-wrapper .bp3-icon-percentage::before{content:\"\ue76a\"}.jupyter-wrapper .bp3-icon-person::before{content:\"\ue63c\"}.jupyter-wrapper .bp3-icon-phone::before{content:\"\u260e\"}.jupyter-wrapper .bp3-icon-pie-chart::before{content:\"\ue684\"}.jupyter-wrapper .bp3-icon-pin::before{content:\"\ue646\"}.jupyter-wrapper .bp3-icon-pivot::before{content:\"\ue6f1\"}.jupyter-wrapper .bp3-icon-pivot-table::before{content:\"\ue6eb\"}.jupyter-wrapper .bp3-icon-play::before{content:\"\ue6ab\"}.jupyter-wrapper .bp3-icon-plus::before{content:\"+\"}.jupyter-wrapper .bp3-icon-polygon-filter::before{content:\"\ue6d1\"}.jupyter-wrapper .bp3-icon-power::before{content:\"\ue6d9\"}.jupyter-wrapper .bp3-icon-predictive-analysis::before{content:\"\ue617\"}.jupyter-wrapper .bp3-icon-prescription::before{content:\"\ue78a\"}.jupyter-wrapper .bp3-icon-presentation::before{content:\"\ue687\"}.jupyter-wrapper .bp3-icon-print::before{content:\"\u2399\"}.jupyter-wrapper .bp3-icon-projects::before{content:\"\ue622\"}.jupyter-wrapper .bp3-icon-properties::before{content:\"\ue631\"}.jupyter-wrapper .bp3-icon-property::before{content:\"\ue65a\"}.jupyter-wrapper .bp3-icon-publish-function::before{content:\"\ue752\"}.jupyter-wrapper .bp3-icon-pulse::before{content:\"\ue6e8\"}.jupyter-wrapper .bp3-icon-random::before{content:\"\ue698\"}.jupyter-wrapper .bp3-icon-record::before{content:\"\ue6ae\"}.jupyter-wrapper .bp3-icon-redo::before{content:\"\ue6c4\"}.jupyter-wrapper .bp3-icon-refresh::before{content:\"\ue643\"}.jupyter-wrapper .bp3-icon-regression-chart::before{content:\"\ue758\"}.jupyter-wrapper .bp3-icon-remove::before{content:\"\ue63f\"}.jupyter-wrapper .bp3-icon-remove-column::before{content:\"\ue755\"}.jupyter-wrapper .bp3-icon-remove-column-left::before{content:\"\ue6fd\"}.jupyter-wrapper .bp3-icon-remove-column-right::before{content:\"\ue6fe\"}.jupyter-wrapper .bp3-icon-remove-row-bottom::before{content:\"\ue6fc\"}.jupyter-wrapper .bp3-icon-remove-row-top::before{content:\"\ue6fb\"}.jupyter-wrapper .bp3-icon-repeat::before{content:\"\ue692\"}.jupyter-wrapper .bp3-icon-reset::before{content:\"\ue7d6\"}.jupyter-wrapper .bp3-icon-resolve::before{content:\"\ue672\"}.jupyter-wrapper .bp3-icon-rig::before{content:\"\ue740\"}.jupyter-wrapper .bp3-icon-right-join::before{content:\"\ue7a5\"}.jupyter-wrapper .bp3-icon-ring::before{content:\"\ue6f2\"}.jupyter-wrapper .bp3-icon-rotate-document::before{content:\"\ue6e1\"}.jupyter-wrapper .bp3-icon-rotate-page::before{content:\"\ue6e2\"}.jupyter-wrapper .bp3-icon-satellite::before{content:\"\ue76b\"}.jupyter-wrapper .bp3-icon-saved::before{content:\"\ue6b6\"}.jupyter-wrapper .bp3-icon-scatter-plot::before{content:\"\ue73e\"}.jupyter-wrapper .bp3-icon-search::before{content:\"\ue64b\"}.jupyter-wrapper .bp3-icon-search-around::before{content:\"\ue608\"}.jupyter-wrapper .bp3-icon-search-template::before{content:\"\ue628\"}.jupyter-wrapper .bp3-icon-search-text::before{content:\"\ue663\"}.jupyter-wrapper .bp3-icon-segmented-control::before{content:\"\ue6ec\"}.jupyter-wrapper .bp3-icon-select::before{content:\"\ue616\"}.jupyter-wrapper .bp3-icon-selection::before{content:\"\u29bf\"}.jupyter-wrapper .bp3-icon-send-to::before{content:\"\ue66e\"}.jupyter-wrapper .bp3-icon-send-to-graph::before{content:\"\ue736\"}.jupyter-wrapper .bp3-icon-send-to-map::before{content:\"\ue737\"}.jupyter-wrapper .bp3-icon-series-add::before{content:\"\ue796\"}.jupyter-wrapper .bp3-icon-series-configuration::before{content:\"\ue79a\"}.jupyter-wrapper .bp3-icon-series-derived::before{content:\"\ue799\"}.jupyter-wrapper .bp3-icon-series-filtered::before{content:\"\ue798\"}.jupyter-wrapper .bp3-icon-series-search::before{content:\"\ue797\"}.jupyter-wrapper .bp3-icon-settings::before{content:\"\ue6a2\"}.jupyter-wrapper .bp3-icon-share::before{content:\"\ue62e\"}.jupyter-wrapper .bp3-icon-shield::before{content:\"\ue7b2\"}.jupyter-wrapper .bp3-icon-shop::before{content:\"\ue6c2\"}.jupyter-wrapper .bp3-icon-shopping-cart::before{content:\"\ue6c1\"}.jupyter-wrapper .bp3-icon-signal-search::before{content:\"\ue909\"}.jupyter-wrapper .bp3-icon-sim-card::before{content:\"\ue718\"}.jupyter-wrapper .bp3-icon-slash::before{content:\"\ue769\"}.jupyter-wrapper .bp3-icon-small-cross::before{content:\"\ue6d7\"}.jupyter-wrapper .bp3-icon-small-minus::before{content:\"\ue70e\"}.jupyter-wrapper .bp3-icon-small-plus::before{content:\"\ue70d\"}.jupyter-wrapper .bp3-icon-small-tick::before{content:\"\ue6d8\"}.jupyter-wrapper .bp3-icon-snowflake::before{content:\"\ue7b6\"}.jupyter-wrapper .bp3-icon-social-media::before{content:\"\ue671\"}.jupyter-wrapper .bp3-icon-sort::before{content:\"\ue64f\"}.jupyter-wrapper .bp3-icon-sort-alphabetical::before{content:\"\ue64d\"}.jupyter-wrapper .bp3-icon-sort-alphabetical-desc::before{content:\"\ue6c8\"}.jupyter-wrapper .bp3-icon-sort-asc::before{content:\"\ue6d5\"}.jupyter-wrapper .bp3-icon-sort-desc::before{content:\"\ue6d6\"}.jupyter-wrapper .bp3-icon-sort-numerical::before{content:\"\ue64e\"}.jupyter-wrapper .bp3-icon-sort-numerical-desc::before{content:\"\ue6c9\"}.jupyter-wrapper .bp3-icon-split-columns::before{content:\"\ue750\"}.jupyter-wrapper .bp3-icon-square::before{content:\"\ue686\"}.jupyter-wrapper .bp3-icon-stacked-chart::before{content:\"\ue6e7\"}.jupyter-wrapper .bp3-icon-star::before{content:\"\u2605\"}.jupyter-wrapper .bp3-icon-star-empty::before{content:\"\u2606\"}.jupyter-wrapper .bp3-icon-step-backward::before{content:\"\ue6a7\"}.jupyter-wrapper .bp3-icon-step-chart::before{content:\"\ue70f\"}.jupyter-wrapper .bp3-icon-step-forward::before{content:\"\ue6ad\"}.jupyter-wrapper .bp3-icon-stop::before{content:\"\ue6aa\"}.jupyter-wrapper .bp3-icon-stopwatch::before{content:\"\ue901\"}.jupyter-wrapper .bp3-icon-strikethrough::before{content:\"\ue7a6\"}.jupyter-wrapper .bp3-icon-style::before{content:\"\ue601\"}.jupyter-wrapper .bp3-icon-swap-horizontal::before{content:\"\ue745\"}.jupyter-wrapper .bp3-icon-swap-vertical::before{content:\"\ue744\"}.jupyter-wrapper .bp3-icon-symbol-circle::before{content:\"\ue72e\"}.jupyter-wrapper .bp3-icon-symbol-cross::before{content:\"\ue731\"}.jupyter-wrapper .bp3-icon-symbol-diamond::before{content:\"\ue730\"}.jupyter-wrapper .bp3-icon-symbol-square::before{content:\"\ue72f\"}.jupyter-wrapper .bp3-icon-symbol-triangle-down::before{content:\"\ue733\"}.jupyter-wrapper .bp3-icon-symbol-triangle-up::before{content:\"\ue732\"}.jupyter-wrapper .bp3-icon-tag::before{content:\"\ue61c\"}.jupyter-wrapper .bp3-icon-take-action::before{content:\"\ue6ca\"}.jupyter-wrapper .bp3-icon-taxi::before{content:\"\ue79e\"}.jupyter-wrapper .bp3-icon-text-highlight::before{content:\"\ue6dd\"}.jupyter-wrapper .bp3-icon-th::before{content:\"\ue667\"}.jupyter-wrapper .bp3-icon-th-derived::before{content:\"\ue669\"}.jupyter-wrapper .bp3-icon-th-disconnect::before{content:\"\ue7d8\"}.jupyter-wrapper .bp3-icon-th-filtered::before{content:\"\ue7c6\"}.jupyter-wrapper .bp3-icon-th-list::before{content:\"\ue668\"}.jupyter-wrapper .bp3-icon-thumbs-down::before{content:\"\ue6be\"}.jupyter-wrapper .bp3-icon-thumbs-up::before{content:\"\ue6bd\"}.jupyter-wrapper .bp3-icon-tick::before{content:\"\u2713\"}.jupyter-wrapper .bp3-icon-tick-circle::before{content:\"\ue779\"}.jupyter-wrapper .bp3-icon-time::before{content:\"\u23f2\"}.jupyter-wrapper .bp3-icon-timeline-area-chart::before{content:\"\ue6cd\"}.jupyter-wrapper .bp3-icon-timeline-bar-chart::before{content:\"\ue620\"}.jupyter-wrapper .bp3-icon-timeline-events::before{content:\"\ue61e\"}.jupyter-wrapper .bp3-icon-timeline-line-chart::before{content:\"\ue61f\"}.jupyter-wrapper .bp3-icon-tint::before{content:\"\ue6b2\"}.jupyter-wrapper .bp3-icon-torch::before{content:\"\ue677\"}.jupyter-wrapper .bp3-icon-tractor::before{content:\"\ue90c\"}.jupyter-wrapper .bp3-icon-train::before{content:\"\ue79f\"}.jupyter-wrapper .bp3-icon-translate::before{content:\"\ue759\"}.jupyter-wrapper .bp3-icon-trash::before{content:\"\ue63b\"}.jupyter-wrapper .bp3-icon-tree::before{content:\"\ue7b7\"}.jupyter-wrapper .bp3-icon-trending-down::before{content:\"\ue71a\"}.jupyter-wrapper .bp3-icon-trending-up::before{content:\"\ue719\"}.jupyter-wrapper .bp3-icon-truck::before{content:\"\ue90b\"}.jupyter-wrapper .bp3-icon-two-columns::before{content:\"\ue657\"}.jupyter-wrapper .bp3-icon-unarchive::before{content:\"\ue906\"}.jupyter-wrapper .bp3-icon-underline::before{content:\"\u2381\"}.jupyter-wrapper .bp3-icon-undo::before{content:\"\u238c\"}.jupyter-wrapper .bp3-icon-ungroup-objects::before{content:\"\ue688\"}.jupyter-wrapper .bp3-icon-unknown-vehicle::before{content:\"\ue73d\"}.jupyter-wrapper .bp3-icon-unlock::before{content:\"\ue626\"}.jupyter-wrapper .bp3-icon-unpin::before{content:\"\ue650\"}.jupyter-wrapper .bp3-icon-unresolve::before{content:\"\ue679\"}.jupyter-wrapper .bp3-icon-updated::before{content:\"\ue7a7\"}.jupyter-wrapper .bp3-icon-upload::before{content:\"\ue68f\"}.jupyter-wrapper .bp3-icon-user::before{content:\"\ue627\"}.jupyter-wrapper .bp3-icon-variable::before{content:\"\ue6f5\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-asc::before{content:\"\ue75b\"}.jupyter-wrapper .bp3-icon-vertical-bar-chart-desc::before{content:\"\ue71c\"}.jupyter-wrapper .bp3-icon-vertical-distribution::before{content:\"\ue721\"}.jupyter-wrapper .bp3-icon-video::before{content:\"\ue6a0\"}.jupyter-wrapper .bp3-icon-volume-down::before{content:\"\ue6a4\"}.jupyter-wrapper .bp3-icon-volume-off::before{content:\"\ue6a3\"}.jupyter-wrapper .bp3-icon-volume-up::before{content:\"\ue6a5\"}.jupyter-wrapper .bp3-icon-walk::before{content:\"\ue79d\"}.jupyter-wrapper .bp3-icon-warning-sign::before{content:\"\ue647\"}.jupyter-wrapper .bp3-icon-waterfall-chart::before{content:\"\ue6e6\"}.jupyter-wrapper .bp3-icon-widget::before{content:\"\ue678\"}.jupyter-wrapper .bp3-icon-widget-button::before{content:\"\ue790\"}.jupyter-wrapper .bp3-icon-widget-footer::before{content:\"\ue792\"}.jupyter-wrapper .bp3-icon-widget-header::before{content:\"\ue791\"}.jupyter-wrapper .bp3-icon-wrench::before{content:\"\ue734\"}.jupyter-wrapper .bp3-icon-zoom-in::before{content:\"\ue641\"}.jupyter-wrapper .bp3-icon-zoom-out::before{content:\"\ue642\"}.jupyter-wrapper .bp3-icon-zoom-to-fit::before{content:\"\ue67b\"}.jupyter-wrapper .bp3-submenu>.bp3-popover-wrapper{display:block}.jupyter-wrapper .bp3-submenu .bp3-popover-target{display:block}.jupyter-wrapper .bp3-submenu.bp3-popover{-webkit-box-shadow:none;box-shadow:none;padding:0 5px}.jupyter-wrapper .bp3-submenu.bp3-popover>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.jupyter-wrapper .bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-menu{margin:0;border-radius:3px;background:#fff;min-width:180px;padding:5px;list-style:none;text-align:left;color:#182026}.jupyter-wrapper .bp3-menu-divider{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-divider{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-radius:2px;padding:5px 7px;text-decoration:none;line-height:20px;color:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-menu-item>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>*{margin-right:7px}.jupyter-wrapper .bp3-menu-item:empty::before,.jupyter-wrapper .bp3-menu-item>:last-child{margin-right:0}.jupyter-wrapper .bp3-menu-item>.bp3-fill{word-break:break-word}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.jupyter-wrapper .bp3-menu-item.bp3-disabled{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-dark .bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-success{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-menu-item::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.jupyter-wrapper .bp3-menu-item::before,.jupyter-wrapper .bp3-menu-item>.bp3-icon{margin-top:2px;color:#5c7080}.jupyter-wrapper .bp3-menu-item .bp3-menu-item-label{color:#5c7080}.jupyter-wrapper .bp3-menu-item:hover,.jupyter-wrapper .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.jupyter-wrapper .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.jupyter-wrapper .bp3-menu-item.bp3-disabled{outline:none !important;background-color:inherit !important;cursor:not-allowed !important;color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(92,112,128,.6) !important}.jupyter-wrapper .bp3-large .bp3-menu-item{padding:9px 7px;line-height:22px;font-size:16px}.jupyter-wrapper .bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.jupyter-wrapper .bp3-large .bp3-menu-item::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:1px;margin-right:10px}.jupyter-wrapper button.bp3-menu-item{border:none;background:none;width:100%;text-align:left}.jupyter-wrapper .bp3-menu-header{display:block;margin:5px;border-top:1px solid rgba(16,22,26,.15);cursor:default;padding-left:2px}.jupyter-wrapper .bp3-dark .bp3-menu-header{border-top-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-menu-header:first-of-type{border-top:none}.jupyter-wrapper .bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin:0;padding:10px 7px 0 1px;line-height:17px}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-large .bp3-menu-header>h6{padding-top:15px;padding-bottom:5px;font-size:18px}.jupyter-wrapper .bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.jupyter-wrapper .bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{background-color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{background-color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{background-color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{background-color:#db3737}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{color:#fff}.jupyter-wrapper .bp3-dark .bp3-menu-item::before,.jupyter-wrapper .bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item .bp3-menu-item-label{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-active,.jupyter-wrapper .bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled::before,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{color:rgba(167,182,194,.6) !important}.jupyter-wrapper .bp3-dark .bp3-menu-divider,.jupyter-wrapper .bp3-dark .bp3-menu-header{border-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.jupyter-wrapper .bp3-label .bp3-menu{margin-top:5px}.jupyter-wrapper .bp3-navbar{position:relative;z-index:10;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);background-color:#fff;width:100%;height:50px;padding:0 15px}.jupyter-wrapper .bp3-navbar.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-navbar{background-color:#394b59}.jupyter-wrapper .bp3-navbar.bp3-dark{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-navbar{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-navbar.bp3-fixed-top{position:fixed;top:0;right:0;left:0}.jupyter-wrapper .bp3-navbar-heading{margin-right:15px;font-size:16px}.jupyter-wrapper .bp3-navbar-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}.jupyter-wrapper .bp3-navbar-group.bp3-align-left{float:left}.jupyter-wrapper .bp3-navbar-group.bp3-align-right{float:right}.jupyter-wrapper .bp3-navbar-divider{margin:0 10px;border-left:1px solid rgba(16,22,26,.15);height:20px}.jupyter-wrapper .bp3-dark .bp3-navbar-divider{border-left-color:rgba(255,255,255,.15)}.jupyter-wrapper .bp3-non-ideal-state{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;text-align:center}.jupyter-wrapper .bp3-non-ideal-state>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-non-ideal-state>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-non-ideal-state::before,.jupyter-wrapper .bp3-non-ideal-state>*{margin-bottom:20px}.jupyter-wrapper .bp3-non-ideal-state:empty::before,.jupyter-wrapper .bp3-non-ideal-state>:last-child{margin-bottom:0}.jupyter-wrapper .bp3-non-ideal-state>*{max-width:400px}.jupyter-wrapper .bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.jupyter-wrapper .bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-overflow-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.jupyter-wrapper .bp3-overflow-list-spacer{-ms-flex-negative:1;flex-shrink:1;width:1px}.jupyter-wrapper body.bp3-overlay-open{overflow:hidden}.jupyter-wrapper .bp3-overlay{position:static;top:0;right:0;bottom:0;left:0;z-index:20}.jupyter-wrapper .bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.jupyter-wrapper .bp3-overlay.bp3-overlay-container{position:fixed;overflow:hidden}.jupyter-wrapper .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container{position:fixed;overflow:auto}.jupyter-wrapper .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.jupyter-wrapper .bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.jupyter-wrapper .bp3-overlay-content{position:fixed;z-index:20}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-content,.jupyter-wrapper .bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.jupyter-wrapper .bp3-overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:1;z-index:20;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear{opacity:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-enter-active,.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.jupyter-wrapper .bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-overlay-backdrop:focus{outline:none}.jupyter-wrapper .bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.jupyter-wrapper .bp3-panel-stack{position:relative;overflow:hidden}.jupyter-wrapper .bp3-panel-stack-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;-webkit-box-shadow:0 1px rgba(16,22,26,.15);box-shadow:0 1px rgba(16,22,26,.15);height:30px}.jupyter-wrapper .bp3-dark .bp3-panel-stack-header{-webkit-box-shadow:0 1px rgba(255,255,255,.15);box-shadow:0 1px rgba(255,255,255,.15)}.jupyter-wrapper .bp3-panel-stack-header>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jupyter-wrapper .bp3-panel-stack-header .bp3-heading{margin:0 5px}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.jupyter-wrapper .bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.jupyter-wrapper .bp3-panel-stack-view{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:-1px;border-right:1px solid rgba(16,22,26,.15);background-color:#fff;overflow-y:auto}.jupyter-wrapper .bp3-dark .bp3-panel-stack-view{background-color:#30404d}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-enter-active,.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-appear-active{-webkit-transform:translate(0%);transform:translate(0%);opacity:1;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0%);transform:translate(0%);opacity:1}.jupyter-wrapper .bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);display:inline-block;z-index:20;border-radius:3px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow{position:absolute;width:30px;height:30px}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{margin:5px;width:20px;height:20px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-top:-17px;margin-bottom:17px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-right:17px;margin-left:-17px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-0.3934px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-popover .bp3-popover-content{background:#fff;color:inherit}.jupyter-wrapper .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-popover .bp3-popover-arrow-fill{fill:#fff}.jupyter-wrapper .bp3-popover-enter>.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(0.3);transform:scale(0.3);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover .bp3-popover-content{position:relative;border-radius:3px}.jupyter-wrapper .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.jupyter-wrapper .bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.jupyter-wrapper .bp3-popover.bp3-minimal{margin:0 !important}.jupyter-wrapper .bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover,.jupyter-wrapper .bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-popover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-content{background:#30404d;color:inherit}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-popover.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-popover .bp3-popover-arrow-fill{fill:#30404d}.jupyter-wrapper .bp3-popover-arrow::before{display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg);border-radius:2px;content:\"\"}.jupyter-wrapper .bp3-tether-pinned .bp3-popover-arrow{display:none}.jupyter-wrapper .bp3-popover-backdrop{background:rgba(255,255,255,0)}.jupyter-wrapper .bp3-transition-container{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:20}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear{opacity:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-enter-active,.jupyter-wrapper .bp3-transition-container.bp3-popover-appear-active{opacity:1;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit{opacity:1}.jupyter-wrapper .bp3-transition-container.bp3-popover-exit-active{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-transition-container:focus{outline:none}.jupyter-wrapper .bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.jupyter-wrapper .bp3-transition-container[data-x-out-of-boundaries]{display:none}.jupyter-wrapper span.bp3-popover-target{display:inline-block}.jupyter-wrapper .bp3-popover-wrapper.bp3-fill{width:100%}.jupyter-wrapper .bp3-portal{position:absolute;top:0;right:0;left:0}@-webkit-keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{from{background-position:0 0}to{background-position:30px 0}}.jupyter-wrapper .bp3-progress-bar{display:block;position:relative;border-radius:40px;background:rgba(92,112,128,.2);width:100%;height:8px;overflow:hidden}.jupyter-wrapper .bp3-progress-bar .bp3-progress-meter{position:absolute;border-radius:40px;background:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%);background-color:rgba(92,112,128,.8);background-size:30px 30px;width:100%;height:100%;-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes 300ms linear infinite reverse}.jupyter-wrapper .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.jupyter-wrapper .bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.jupyter-wrapper .bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.jupyter-wrapper .bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.jupyter-wrapper .bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.jupyter-wrapper .bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}@keyframes skeleton-glow{from{border-color:rgba(206,217,224,.2);background:rgba(206,217,224,.2)}to{border-color:rgba(92,112,128,.2);background:rgba(92,112,128,.2)}}.jupyter-wrapper .bp3-skeleton{border-color:rgba(206,217,224,.2) !important;border-radius:2px;-webkit-box-shadow:none !important;box-shadow:none !important;background:rgba(206,217,224,.2);background-clip:padding-box !important;cursor:default;color:rgba(0,0,0,0) !important;-webkit-animation:1000ms linear infinite alternate skeleton-glow;animation:1000ms linear infinite alternate skeleton-glow;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-skeleton::before,.jupyter-wrapper .bp3-skeleton::after,.jupyter-wrapper .bp3-skeleton *{visibility:hidden !important}.jupyter-wrapper .bp3-slider{width:100%;min-width:150px;height:40px;position:relative;outline:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-slider:hover{cursor:pointer}.jupyter-wrapper .bp3-slider:active{cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-slider.bp3-disabled{opacity:.5;cursor:not-allowed}.jupyter-wrapper .bp3-slider.bp3-slider-unlabeled{height:16px}.jupyter-wrapper .bp3-slider-track,.jupyter-wrapper .bp3-slider-progress{top:5px;right:0;left:0;height:6px;position:absolute}.jupyter-wrapper .bp3-slider-track{border-radius:3px;overflow:hidden}.jupyter-wrapper .bp3-slider-progress{background:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.jupyter-wrapper .bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.jupyter-wrapper .bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.jupyter-wrapper .bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.jupyter-wrapper .bp3-slider-handle{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-color:#f5f8fa;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));color:#182026;position:absolute;top:0;left:0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;width:16px;height:16px}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5}.jupyter-wrapper .bp3-slider-handle:active,.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none}.jupyter-wrapper .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-slider-handle.bp3-disabled{outline:none;-webkit-box-shadow:none;box-shadow:none;background-color:rgba(206,217,224,.5);background-image:none;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle:disabled.bp3-active:hover,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active,.jupyter-wrapper .bp3-slider-handle.bp3-disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.jupyter-wrapper .bp3-slider-handle:focus{z-index:1}.jupyter-wrapper .bp3-slider-handle:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);background-clip:padding-box;background-color:#ebf1f5;z-index:2;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:-webkit-grab;cursor:grab}.jupyter-wrapper .bp3-slider-handle.bp3-active{-webkit-box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);background-color:#d8e1e8;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:-webkit-grabbing;cursor:grabbing}.jupyter-wrapper .bp3-disabled .bp3-slider-handle{-webkit-box-shadow:none;box-shadow:none;background:#bfccd6;pointer-events:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#394b59;background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover,.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-dark .bp3-slider-handle:active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2);background-color:#202b33;background-image:none}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(57,75,89,.5);background-image:none;color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-slider-handle:disabled.bp3-active,.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{background:rgba(57,75,89,.7)}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-slider-handle,.jupyter-wrapper .bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.jupyter-wrapper .bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.jupyter-wrapper .bp3-dark .bp3-disabled .bp3-slider-handle{border-color:#5c7080;-webkit-box-shadow:none;box-shadow:none;background:#5c7080}.jupyter-wrapper .bp3-slider-handle .bp3-slider-label{margin-left:8px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-disabled .bp3-slider-handle .bp3-slider-label{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-slider-handle.bp3-start,.jupyter-wrapper .bp3-slider-handle.bp3-end{width:8px}.jupyter-wrapper .bp3-slider-handle.bp3-start{border-top-right-radius:0;border-bottom-right-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end{margin-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.jupyter-wrapper .bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.jupyter-wrapper .bp3-slider-label{-webkit-transform:translate(-50%, 20px);transform:translate(-50%, 20px);display:inline-block;position:absolute;padding:2px 5px;vertical-align:top;line-height:1;font-size:12px}.jupyter-wrapper .bp3-slider.bp3-vertical{width:40px;min-width:40px;height:150px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-track,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:0;bottom:0;left:5px;width:6px;height:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px, 50%);transform:translate(20px, 50%)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-top:-8px;margin-left:0}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{margin-left:0;width:16px;height:8px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-top-left-radius:0;border-bottom-right-radius:3px}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.jupyter-wrapper .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{margin-bottom:8px;border-top-left-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:0}@-webkit-keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pt-spinner-animation{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jupyter-wrapper .bp3-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:visible;vertical-align:middle}.jupyter-wrapper .bp3-spinner svg{display:block}.jupyter-wrapper .bp3-spinner path{fill-opacity:0}.jupyter-wrapper .bp3-spinner .bp3-spinner-head{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);stroke:rgba(92,112,128,.8);stroke-linecap:round}.jupyter-wrapper .bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.jupyter-wrapper .bp3-spinner-animation{-webkit-animation:pt-spinner-animation 500ms linear infinite;animation:pt-spinner-animation 500ms linear infinite}.jupyter-wrapper .bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.jupyter-wrapper .bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.jupyter-wrapper .bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.jupyter-wrapper .bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.jupyter-wrapper .bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.jupyter-wrapper .bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.jupyter-wrapper .bp3-tabs.bp3-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;width:100%;padding:0 10px}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{-webkit-box-shadow:none;box-shadow:none;background-color:rgba(19,124,189,.2)}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{top:0;right:0;bottom:0;left:0;border-radius:3px;background-color:rgba(19,124,189,.2);height:auto}.jupyter-wrapper .bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.jupyter-wrapper .bp3-tab-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;margin:0;border:none;padding:0;list-style:none}.jupyter-wrapper .bp3-tab-list>*:not(:last-child){margin-right:20px}.jupyter-wrapper .bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;cursor:pointer;max-width:100%;vertical-align:top;line-height:30px;color:#182026;font-size:14px}.jupyter-wrapper .bp3-tab a{display:block;text-decoration:none;color:inherit}.jupyter-wrapper .bp3-tab-indicator-wrapper~.bp3-tab{-webkit-box-shadow:none !important;box-shadow:none !important;background-color:rgba(0,0,0,0) !important}.jupyter-wrapper .bp3-tab[aria-disabled=true]{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tab[aria-selected=true]{border-radius:0;-webkit-box-shadow:inset 0 -3px 0 #106ba3;box-shadow:inset 0 -3px 0 #106ba3}.jupyter-wrapper .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-tab:not([aria-disabled=true]):hover{color:#106ba3}.jupyter-wrapper .bp3-tab:focus{-moz-outline-radius:0}.jupyter-wrapper .bp3-large>.bp3-tab{line-height:40px;font-size:16px}.jupyter-wrapper .bp3-tab-panel{margin-top:20px}.jupyter-wrapper .bp3-tab-panel[aria-hidden=true]{display:none}.jupyter-wrapper .bp3-tab-indicator-wrapper{position:absolute;top:0;left:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);-webkit-transition:height,width,-webkit-transform;transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);pointer-events:none}.jupyter-wrapper .bp3-tab-indicator-wrapper .bp3-tab-indicator{position:absolute;right:0;bottom:0;left:0;background-color:#106ba3;height:3px}.jupyter-wrapper .bp3-tab-indicator-wrapper.bp3-no-animation{-webkit-transition:none;transition:none}.jupyter-wrapper .bp3-dark .bp3-tab{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true]{-webkit-box-shadow:inset 0 -3px 0 #48aff0;box-shadow:inset 0 -3px 0 #48aff0}.jupyter-wrapper .bp3-dark .bp3-tab[aria-selected=true],.jupyter-wrapper .bp3-dark .bp3-tab:not([aria-disabled=true]):hover{color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tab-indicator{background-color:#48aff0}.jupyter-wrapper .bp3-flex-expander{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1}.jupyter-wrapper .bp3-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border:none;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;background-color:#5c7080;min-width:20px;max-width:100%;min-height:20px;padding:2px 6px;line-height:16px;color:#f5f8fa;font-size:12px}.jupyter-wrapper .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.jupyter-wrapper .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.jupyter-wrapper .bp3-tag>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag::before,.jupyter-wrapper .bp3-tag>*{margin-right:4px}.jupyter-wrapper .bp3-tag:empty::before,.jupyter-wrapper .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag:focus{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag.bp3-round{border-radius:30px;padding-right:8px;padding-left:8px}.jupyter-wrapper .bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.jupyter-wrapper .bp3-dark .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag .bp3-icon-large{fill:currentColor}.jupyter-wrapper .bp3-tag>.bp3-icon,.jupyter-wrapper .bp3-tag .bp3-icon-standard,.jupyter-wrapper .bp3-tag .bp3-icon-large{fill:#fff}.jupyter-wrapper .bp3-tag.bp3-large,.jupyter-wrapper .bp3-large .bp3-tag{min-width:30px;min-height:30px;padding:0 10px;line-height:20px;font-size:14px}.jupyter-wrapper .bp3-tag.bp3-large::before,.jupyter-wrapper .bp3-tag.bp3-large>*,.jupyter-wrapper .bp3-large .bp3-tag::before,.jupyter-wrapper .bp3-large .bp3-tag>*{margin-right:7px}.jupyter-wrapper .bp3-tag.bp3-large:empty::before,.jupyter-wrapper .bp3-tag.bp3-large>:last-child,.jupyter-wrapper .bp3-large .bp3-tag:empty::before,.jupyter-wrapper .bp3-large .bp3-tag>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag.bp3-large.bp3-round,.jupyter-wrapper .bp3-large .bp3-tag.bp3-round{padding-right:12px;padding-left:12px}.jupyter-wrapper .bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.jupyter-wrapper .bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.jupyter-wrapper .bp3-tag.bp3-fill{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.jupyter-wrapper .bp3-tag.bp3-minimal>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal .bp3-icon-large{fill:#5c7080}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large{fill:#a7b6c2}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{fill:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{fill:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{fill:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.jupyter-wrapper .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{fill:#db3737}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.jupyter-wrapper .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.jupyter-wrapper .bp3-tag-remove{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:.5;margin-top:-2px;margin-right:-6px !important;margin-bottom:-2px;border:none;background:none;cursor:pointer;padding:2px;padding-left:0;color:inherit}.jupyter-wrapper .bp3-tag-remove:hover{opacity:.8;background:none;text-decoration:none}.jupyter-wrapper .bp3-tag-remove:active{opacity:1}.jupyter-wrapper .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons16\",sans-serif;font-size:16px;font-weight:400;font-style:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:\"\ue6d7\"}.jupyter-wrapper .bp3-large .bp3-tag-remove{margin-right:-10px !important;padding:5px;padding-left:0}.jupyter-wrapper .bp3-large .bp3-tag-remove:empty::before{line-height:1;font-family:\"Icons20\",sans-serif;font-size:20px;font-weight:400;font-style:normal}.jupyter-wrapper .bp3-tag-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;cursor:text;height:auto;min-height:30px;padding-right:0;padding-left:5px;line-height:inherit}.jupyter-wrapper .bp3-tag-input>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input>.bp3-tag-input-values{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-icon{margin-top:7px;margin-right:7px;margin-left:2px;color:#5c7080}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;margin-top:5px;margin-right:7px;min-width:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>.bp3-fill{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:empty::before,.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.jupyter-wrapper .bp3-tag-input .bp3-tag{overflow-wrap:break-word}.jupyter-wrapper .bp3-tag-input .bp3-tag.bp3-active{outline:rgba(19,124,189,.6) auto 2px;outline-offset:0;-moz-outline-radius:6px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:80px;line-height:20px}.jupyter-wrapper .bp3-tag-input .bp3-input-ghost:disabled,.jupyter-wrapper .bp3-tag-input .bp3-input-ghost.bp3-disabled{cursor:not-allowed}.jupyter-wrapper .bp3-tag-input .bp3-button,.jupyter-wrapper .bp3-tag-input .bp3-spinner{margin:3px;margin-left:0}.jupyter-wrapper .bp3-tag-input .bp3-button{min-width:24px;min-height:24px;padding:0 7px}.jupyter-wrapper .bp3-tag-input.bp3-large{height:auto;min-height:40px}.jupyter-wrapper .bp3-tag-input.bp3-large::before,.jupyter-wrapper .bp3-tag-input.bp3-large>*{margin-right:10px}.jupyter-wrapper .bp3-tag-input.bp3-large:empty::before,.jupyter-wrapper .bp3-tag-input.bp3-large>:last-child{margin-right:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-top:10px;margin-left:5px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-button{min-width:30px;min-height:30px;padding:5px 10px;margin:5px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-large .bp3-spinner{margin:8px;margin-left:0}.jupyter-wrapper .bp3-tag-input.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2);background-color:#fff}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tag-input.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-tag-input-icon,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.jupyter-wrapper .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active{-webkit-box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);background-color:rgba(16,22,26,.3)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{-webkit-box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{-webkit-box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{-webkit-box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.jupyter-wrapper .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{-webkit-box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-input-ghost{border:none;-webkit-box-shadow:none;box-shadow:none;background:none;padding:0}.jupyter-wrapper .bp3-input-ghost::-webkit-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-moz-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::-ms-input-placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost::placeholder{opacity:1;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-input-ghost:focus{outline:none !important}.jupyter-wrapper .bp3-toast{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative !important;margin:20px 0 0;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);background-color:#fff;min-width:300px;max-width:500px;pointer-events:all}.jupyter-wrapper .bp3-toast.bp3-toast-enter,.jupyter-wrapper .bp3-toast.bp3-toast-appear{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-enter~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.jupyter-wrapper .bp3-toast.bp3-toast-enter-active~.bp3-toast,.jupyter-wrapper .bp3-toast.bp3-toast-appear-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.jupyter-wrapper .bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:50ms;transition-delay:50ms}.jupyter-wrapper .bp3-toast .bp3-button-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:5px;padding-left:0}.jupyter-wrapper .bp3-toast>.bp3-icon{margin:12px;margin-right:0;color:#5c7080}.jupyter-wrapper .bp3-toast.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-toast{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);background-color:#394b59}.jupyter-wrapper .bp3-toast.bp3-dark>.bp3-icon,.jupyter-wrapper .bp3-dark .bp3-toast>.bp3-icon{color:#a7b6c2}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-]>.bp3-icon{color:#fff}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::before,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{color:rgba(255,255,255,.7) !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:rgba(255,255,255,.5)}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:rgba(255,255,255,.15) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:rgba(255,255,255,.3) !important;color:#fff !important}.jupyter-wrapper .bp3-toast[class*=bp3-intent-] .bp3-button::after{background:rgba(255,255,255,.3) !important}.jupyter-wrapper .bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.jupyter-wrapper .bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.jupyter-wrapper .bp3-toast-message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:11px;word-break:break-word}.jupyter-wrapper .bp3-toast-container{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;right:0;left:0;z-index:40;overflow:hidden;padding:0 20px 20px;pointer-events:none}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-top{top:0;bottom:auto}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-bottom{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;top:auto;bottom:0}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jupyter-wrapper .bp3-toast-container.bp3-toast-container-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.jupyter-wrapper .bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.jupyter-wrapper .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow{position:absolute;width:22px;height:22px}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{margin:4px;width:14px;height:14px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-top:-11px;margin-bottom:11px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-right:11px;margin-left:-11px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.jupyter-wrapper .bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.jupyter-wrapper .bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-0.22183px}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.jupyter-wrapper .bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.jupyter-wrapper .bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.jupyter-wrapper .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.2);box-shadow:1px 1px 6px rgba(16,22,26,.2)}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.jupyter-wrapper .bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.jupyter-wrapper .bp3-popover-enter>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8)}.jupyter-wrapper .bp3-popover-enter-active>.bp3-tooltip,.jupyter-wrapper .bp3-popover-appear-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.jupyter-wrapper .bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:100ms;transition-duration:100ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-tooltip .bp3-popover-content{padding:10px 12px}.jupyter-wrapper .bp3-tooltip.bp3-dark,.jupyter-wrapper .bp3-dark .bp3-tooltip{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-content,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-content{background:#e1e8ed;color:#394b59}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow::before,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{-webkit-box-shadow:1px 1px 6px rgba(16,22,26,.4);box-shadow:1px 1px 6px rgba(16,22,26,.4)}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-border,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.jupyter-wrapper .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,.jupyter-wrapper .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{fill:#e1e8ed}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.jupyter-wrapper .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.jupyter-wrapper .bp3-tooltip-indicator{border-bottom:dotted 1px;cursor:help}.jupyter-wrapper .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-tree .bp3-icon-large{color:#5c7080}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-tree-node-list{margin:0;padding-left:0;list-style:none}.jupyter-wrapper .bp3-tree-root{position:relative;background-color:rgba(0,0,0,0);cursor:default;padding-left:0}.jupyter-wrapper .bp3-tree-node-content-0{padding-left:0px}.jupyter-wrapper .bp3-tree-node-content-1{padding-left:23px}.jupyter-wrapper .bp3-tree-node-content-2{padding-left:46px}.jupyter-wrapper .bp3-tree-node-content-3{padding-left:69px}.jupyter-wrapper .bp3-tree-node-content-4{padding-left:92px}.jupyter-wrapper .bp3-tree-node-content-5{padding-left:115px}.jupyter-wrapper .bp3-tree-node-content-6{padding-left:138px}.jupyter-wrapper .bp3-tree-node-content-7{padding-left:161px}.jupyter-wrapper .bp3-tree-node-content-8{padding-left:184px}.jupyter-wrapper .bp3-tree-node-content-9{padding-left:207px}.jupyter-wrapper .bp3-tree-node-content-10{padding-left:230px}.jupyter-wrapper .bp3-tree-node-content-11{padding-left:253px}.jupyter-wrapper .bp3-tree-node-content-12{padding-left:276px}.jupyter-wrapper .bp3-tree-node-content-13{padding-left:299px}.jupyter-wrapper .bp3-tree-node-content-14{padding-left:322px}.jupyter-wrapper .bp3-tree-node-content-15{padding-left:345px}.jupyter-wrapper .bp3-tree-node-content-16{padding-left:368px}.jupyter-wrapper .bp3-tree-node-content-17{padding-left:391px}.jupyter-wrapper .bp3-tree-node-content-18{padding-left:414px}.jupyter-wrapper .bp3-tree-node-content-19{padding-left:437px}.jupyter-wrapper .bp3-tree-node-content-20{padding-left:460px}.jupyter-wrapper .bp3-tree-node-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:30px;padding-right:5px}.jupyter-wrapper .bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.jupyter-wrapper .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node-caret-none{min-width:30px}.jupyter-wrapper .bp3-tree-node-caret{color:#5c7080;-webkit-transform:rotate(0deg);transform:rotate(0deg);cursor:pointer;padding:7px;-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9),-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9)}.jupyter-wrapper .bp3-tree-node-caret:hover{color:#182026}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.jupyter-wrapper .bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.jupyter-wrapper .bp3-tree-node-caret.bp3-icon-standard::before{content:\"\ue695\"}.jupyter-wrapper .bp3-tree-node-icon{position:relative;margin-right:7px}.jupyter-wrapper .bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-label span{display:inline}.jupyter-wrapper .bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-wrapper,.jupyter-wrapper .bp3-tree-node-secondary-label .bp3-popover-target{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.jupyter-wrapper .bp3-tree-node.bp3-disabled .bp3-tree-node-icon{cursor:not-allowed;color:rgba(92,112,128,.6)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard,.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large{color:#fff}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret::before{color:rgba(255,255,255,.7)}.jupyter-wrapper .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover::before{color:#fff}.jupyter-wrapper .bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large{color:#a7b6c2}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{color:#137cbd}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{color:#0f9960}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{color:#d9822b}.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.jupyter-wrapper .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{color:#db3737}.jupyter-wrapper .bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.jupyter-wrapper .bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;top:20vh;left:calc(50% - 250px);z-index:21;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);background-color:#fff;width:500px}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.jupyter-wrapper .bp3-omnibar.bp3-overlay-enter-active,.jupyter-wrapper .bp3-omnibar.bp3-overlay-appear-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.jupyter-wrapper .bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;-webkit-transition-duration:200ms;transition-duration:200ms;-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);-webkit-transition-delay:0;transition-delay:0}.jupyter-wrapper .bp3-omnibar .bp3-input{border-radius:0;background-color:rgba(0,0,0,0)}.jupyter-wrapper .bp3-omnibar .bp3-input,.jupyter-wrapper .bp3-omnibar .bp3-input:focus{-webkit-box-shadow:none;box-shadow:none}.jupyter-wrapper .bp3-omnibar .bp3-menu{border-radius:0;-webkit-box-shadow:inset 0 1px 0 rgba(16,22,26,.15);box-shadow:inset 0 1px 0 rgba(16,22,26,.15);background-color:rgba(0,0,0,0);max-height:calc(60vh - 40px);overflow:auto}.jupyter-wrapper .bp3-omnibar .bp3-menu:empty{display:none}.jupyter-wrapper .bp3-dark .bp3-omnibar,.jupyter-wrapper .bp3-omnibar.bp3-dark{-webkit-box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);background-color:#30404d}.jupyter-wrapper .bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper .bp3-multi-select{min-width:150px}.jupyter-wrapper .bp3-multi-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto}.jupyter-wrapper .bp3-select-popover .bp3-popover-content{padding:5px}.jupyter-wrapper .bp3-select-popover .bp3-input-group{margin-bottom:0}.jupyter-wrapper .bp3-select-popover .bp3-menu{max-width:400px;max-height:300px;overflow:auto;padding:0}.jupyter-wrapper .bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px}.jupyter-wrapper :root{--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);--jp-icon-listings-info: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTAuOTc4IDUwLjk3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAuOTc4IDUwLjk3ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik00My41Miw3LjQ1OEMzOC43MTEsMi42NDgsMzIuMzA3LDAsMjUuNDg5LDBDMTguNjcsMCwxMi4yNjYsMi42NDgsNy40NTgsNy40NTgNCgkJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDANCgkJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoNCgkJCQkgTTQyLjEwNiw0Mi4xMDVjLTQuNDMyLDQuNDMxLTEwLjMzMiw2Ljg3Mi0xNi42MTUsNi44NzJoLTAuMDAyYy02LjI4NS0wLjAwMS0xMi4xODctMi40NDEtMTYuNjE3LTYuODcyDQoJCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzINCgkJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1Mw0KCQkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUNCgkJCQljMC0xLjA5Ni0wLjI2LTIuMDg4LTAuNzc5LTIuOTc5Yy0wLjU2NS0wLjg3OS0xLjUwMS0xLjMzNi0yLjgwNi0xLjM2OWMtMS44MDIsMC4wNTctMi45ODUsMC42NjctMy41NSwxLjgzMg0KCQkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkNCgkJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQ0KCQkJCWMwLDEuMTQyLTAuMTM3LDIuMTExLTAuNDEsMi45MTFjLTAuMzA5LDAuODQ1LTAuNzMxLDEuNTkzLTEuMjY4LDIuMjQzYy0wLjQ5MiwwLjY1LTEuMDY4LDEuMzE4LTEuNzMsMi4wMDINCgkJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5DQoJCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==);--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}.jupyter-wrapper .jp-AddIcon{background-image:var(--jp-icon-add)}.jupyter-wrapper .jp-BugIcon{background-image:var(--jp-icon-bug)}.jupyter-wrapper .jp-BuildIcon{background-image:var(--jp-icon-build)}.jupyter-wrapper .jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jupyter-wrapper .jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jupyter-wrapper .jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jupyter-wrapper .jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jupyter-wrapper .jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jupyter-wrapper .jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jupyter-wrapper .jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jupyter-wrapper .jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jupyter-wrapper .jp-CheckIcon{background-image:var(--jp-icon-check)}.jupyter-wrapper .jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jupyter-wrapper .jp-CircleIcon{background-image:var(--jp-icon-circle)}.jupyter-wrapper .jp-ClearIcon{background-image:var(--jp-icon-clear)}.jupyter-wrapper .jp-CloseIcon{background-image:var(--jp-icon-close)}.jupyter-wrapper .jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jupyter-wrapper .jp-CopyIcon{background-image:var(--jp-icon-copy)}.jupyter-wrapper .jp-CutIcon{background-image:var(--jp-icon-cut)}.jupyter-wrapper .jp-DownloadIcon{background-image:var(--jp-icon-download)}.jupyter-wrapper .jp-EditIcon{background-image:var(--jp-icon-edit)}.jupyter-wrapper .jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jupyter-wrapper .jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jupyter-wrapper .jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jupyter-wrapper .jp-FileIcon{background-image:var(--jp-icon-file)}.jupyter-wrapper .jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jupyter-wrapper .jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jupyter-wrapper .jp-FolderIcon{background-image:var(--jp-icon-folder)}.jupyter-wrapper .jp-Html5Icon{background-image:var(--jp-icon-html5)}.jupyter-wrapper .jp-ImageIcon{background-image:var(--jp-icon-image)}.jupyter-wrapper .jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jupyter-wrapper .jp-JsonIcon{background-image:var(--jp-icon-json)}.jupyter-wrapper .jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jupyter-wrapper .jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jupyter-wrapper .jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jupyter-wrapper .jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jupyter-wrapper .jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jupyter-wrapper .jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jupyter-wrapper .jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jupyter-wrapper .jp-LinkIcon{background-image:var(--jp-icon-link)}.jupyter-wrapper .jp-ListIcon{background-image:var(--jp-icon-list)}.jupyter-wrapper .jp-ListingsInfoIcon{background-image:var(--jp-icon-listings-info)}.jupyter-wrapper .jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jupyter-wrapper .jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jupyter-wrapper .jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jupyter-wrapper .jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jupyter-wrapper .jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jupyter-wrapper .jp-PasteIcon{background-image:var(--jp-icon-paste)}.jupyter-wrapper .jp-PythonIcon{background-image:var(--jp-icon-python)}.jupyter-wrapper .jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jupyter-wrapper .jp-ReactIcon{background-image:var(--jp-icon-react)}.jupyter-wrapper .jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jupyter-wrapper .jp-RegexIcon{background-image:var(--jp-icon-regex)}.jupyter-wrapper .jp-RunIcon{background-image:var(--jp-icon-run)}.jupyter-wrapper .jp-RunningIcon{background-image:var(--jp-icon-running)}.jupyter-wrapper .jp-SaveIcon{background-image:var(--jp-icon-save)}.jupyter-wrapper .jp-SearchIcon{background-image:var(--jp-icon-search)}.jupyter-wrapper .jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jupyter-wrapper .jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jupyter-wrapper .jp-StopIcon{background-image:var(--jp-icon-stop)}.jupyter-wrapper .jp-TabIcon{background-image:var(--jp-icon-tab)}.jupyter-wrapper .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jupyter-wrapper .jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jupyter-wrapper .jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jupyter-wrapper .jp-UndoIcon{background-image:var(--jp-icon-undo)}.jupyter-wrapper .jp-VegaIcon{background-image:var(--jp-icon-vega)}.jupyter-wrapper .jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jupyter-wrapper :root{--jp-icon-search-white: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==)}.jupyter-wrapper .jp-Icon,.jupyter-wrapper .jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jupyter-wrapper .jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jupyter-wrapper .jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jupyter-wrapper .jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.jupyter-wrapper .jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-none[fill]{fill:none}.jupyter-wrapper .jp-icon-none[stroke]{stroke:none}.jupyter-wrapper .jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jupyter-wrapper .jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jupyter-wrapper .jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jupyter-wrapper .jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jupyter-wrapper .jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jupyter-wrapper .jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jupyter-wrapper .jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jupyter-wrapper .jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jupyter-wrapper .jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jupyter-wrapper .jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jupyter-wrapper .jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jupyter-wrapper .jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jupyter-wrapper .jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jupyter-wrapper .jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-hover :hover .jp-icon-selectable-inverse[fill]{fill:#fff}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #tab-manager .lm-TabBar-tab.jp-mod-dirty.jp-mod-active>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:#fff}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon3[fill]{fill:none}.jupyter-wrapper .lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty>.lm-TabBar-tabCloseIcon>:not(:hover)>.jp-icon-busy[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jupyter-wrapper #jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}.jupyter-wrapper :root{--jp-warn-color0: var(--md-orange-700)}.jupyter-wrapper .jp-DragIcon{margin-right:4px}.jupyter-wrapper .jp-icon-alt .jp-icon0[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon0[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon1[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon2[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon3[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon4[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-alt .jp-icon-accent4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hoverShow:not(:hover) svg{display:none !important}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[fill]{fill:none}.jupyter-wrapper .jp-icon-hover :hover .jp-icon-none-hover[stroke]{stroke:none}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill]{fill:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill]{fill:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill]{fill:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill]{fill:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill]{fill:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke]{stroke:var(--jp-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke]{stroke:var(--jp-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke]{stroke:var(--jp-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke]{stroke:var(--jp-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke]{stroke:var(--jp-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill]{fill:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill]{fill:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill]{fill:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill]{fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill]{fill:var(--jp-inverse-layout-color4)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke]{stroke:var(--jp-inverse-layout-color0)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke]{stroke:var(--jp-inverse-layout-color1)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke]{stroke:var(--jp-inverse-layout-color2)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke]{stroke:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke]{stroke:var(--jp-inverse-layout-color4)}.jupyter-wrapper :focus{outline:unset;outline-offset:unset;-moz-outline-radius:unset}.jupyter-wrapper .jp-Button{border-radius:var(--jp-border-radius);padding:0px 12px;font-size:var(--jp-ui-font-size1)}.jupyter-wrapper button.jp-Button.bp3-button.bp3-minimal:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Button.minimal{color:unset !important}.jupyter-wrapper .jp-Button.jp-ToolbarButtonComponent{text-transform:none}.jupyter-wrapper .jp-InputGroup input{box-sizing:border-box;border-radius:0;background-color:rgba(0,0,0,0);color:var(--jp-ui-font-color0);box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .jp-InputGroup input:focus{box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .jp-InputGroup input::placeholder,.jupyter-wrapper input::placeholder{color:var(--jp-ui-font-color3)}.jupyter-wrapper .jp-BPIcon{display:inline-block;vertical-align:middle;margin:auto}.jupyter-wrapper .bp3-icon.jp-BPIcon>svg:not([fill]){fill:var(--jp-inverse-layout-color3)}.jupyter-wrapper .jp-InputGroupAction{padding:6px}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select{background-color:initial;border:none;border-radius:0;box-shadow:none;color:var(--jp-ui-font-color0);display:block;font-size:var(--jp-ui-font-size1);height:24px;line-height:14px;padding:0 25px 0 10px;text-align:left;-moz-appearance:none;-webkit-appearance:none}.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select:hover,.jupyter-wrapper .jp-HTMLSelect.jp-DefaultStyle select>option{background-color:var(--jp-layout-color2);color:var(--jp-ui-font-color0)}.jupyter-wrapper select{box-sizing:border-box}.jupyter-wrapper .jp-Collapse{display:flex;flex-direction:column;align-items:stretch;border-top:1px solid var(--jp-border-color2);border-bottom:1px solid var(--jp-border-color2)}.jupyter-wrapper .jp-Collapse-header{padding:1px 12px;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color1);font-size:var(--jp-ui-font-size2)}.jupyter-wrapper .jp-Collapse-header:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-Collapse-contents{padding:0px 12px 0px 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}.jupyter-wrapper :root{--jp-private-commandpalette-search-height: 28px}.jupyter-wrapper .lm-CommandPalette{padding-bottom:0px;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-search{padding:4px;background-color:var(--jp-layout-color1);z-index:2}.jupyter-wrapper .lm-CommandPalette-wrapper{overflow:overlay;padding:0px 9px;background-color:var(--jp-input-active-background);height:30px;box-shadow:inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color)}.jupyter-wrapper .lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper{box-shadow:inset 0 0 0 1px var(--jp-input-active-box-shadow-color),inset 0 0 0 3px var(--jp-input-active-box-shadow-color)}.jupyter-wrapper .lm-CommandPalette-wrapper::after{content:\" \";color:#fff;background-color:var(--jp-brand-color1);position:absolute;top:4px;right:4px;height:30px;width:10px;padding:0px 10px;background-image:var(--jp-icon-search-white);background-size:20px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .lm-CommandPalette-input{background:rgba(0,0,0,0);width:calc(100% - 18px);float:left;border:none;outline:none;font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);line-height:var(--jp-private-commandpalette-search-height)}.jupyter-wrapper .lm-CommandPalette-input::-webkit-input-placeholder,.jupyter-wrapper .lm-CommandPalette-input::-moz-placeholder,.jupyter-wrapper .lm-CommandPalette-input:-ms-input-placeholder{color:var(--jp-ui-font-color3);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .lm-CommandPalette-header:first-child{margin-top:0px}.jupyter-wrapper .lm-CommandPalette-header{border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;font-size:var(--jp-ui-font-size0);font-weight:600;letter-spacing:1px;margin-top:8px;padding:8px 0 8px 12px;text-transform:uppercase}.jupyter-wrapper .lm-CommandPalette-header.lm-mod-active{background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-header>mark{background-color:rgba(0,0,0,0);font-weight:bold;color:var(--jp-ui-font-color1)}.jupyter-wrapper .lm-CommandPalette-item{padding:4px 12px 4px 4px;color:var(--jp-ui-font-color1);font-size:var(--jp-ui-font-size1);font-weight:400;display:flex}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active{background:var(--jp-layout-color3)}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled){background:var(--jp-layout-color4)}.jupyter-wrapper .lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled){background:var(--jp-layout-color2)}.jupyter-wrapper .lm-CommandPalette-itemContent{overflow:hidden}.jupyter-wrapper .lm-CommandPalette-itemLabel>mark{color:var(--jp-ui-font-color0);background-color:rgba(0,0,0,0);font-weight:bold}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled mark{color:var(--jp-ui-font-color3)}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemIcon{margin:0 4px 0 0;position:relative;width:16px;top:2px;flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon{opacity:.4}.jupyter-wrapper .lm-CommandPalette-item .lm-CommandPalette-itemShortcut{flex:0 0 auto}.jupyter-wrapper .lm-CommandPalette-itemCaption{display:none}.jupyter-wrapper .lm-CommandPalette-content{background-color:var(--jp-layout-color1)}.jupyter-wrapper .lm-CommandPalette-content:empty:after{content:\"No results\";margin:auto;margin-top:20px;width:100px;display:block;font-size:var(--jp-ui-font-size2);font-family:var(--jp-ui-font-family);font-weight:lighter}.jupyter-wrapper .lm-CommandPalette-emptyMessage{text-align:center;margin-top:24px;line-height:1.32;padding:0px 8px;color:var(--jp-content-font-color3)}.jupyter-wrapper .jp-Dialog{position:absolute;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;top:0px;left:0px;margin:0;padding:0;width:100%;height:100%;background:var(--jp-dialog-background)}.jupyter-wrapper .jp-Dialog-content{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;background:var(--jp-layout-color1);padding:24px;padding-bottom:12px;min-width:300px;min-height:150px;max-width:1000px;max-height:500px;box-sizing:border-box;box-shadow:var(--jp-elevation-z20);word-wrap:break-word;border-radius:var(--jp-border-radius);font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color1)}.jupyter-wrapper .jp-Dialog-button{overflow:visible}.jupyter-wrapper button.jp-Dialog-button:focus{outline:1px solid var(--jp-brand-color1);outline-offset:4px;-moz-outline-radius:0px}.jupyter-wrapper button.jp-Dialog-button:focus::-moz-focus-inner{border:0}.jupyter-wrapper .jp-Dialog-header{flex:0 0 auto;padding-bottom:12px;font-size:var(--jp-ui-font-size3);font-weight:400;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-body{display:flex;flex-direction:column;flex:1 1 auto;font-size:var(--jp-ui-font-size1);background:var(--jp-layout-color1);overflow:auto}.jupyter-wrapper .jp-Dialog-footer{display:flex;flex-direction:row;justify-content:flex-end;flex:0 0 auto;margin-left:-12px;margin-right:-12px;padding:12px}.jupyter-wrapper .jp-Dialog-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.jupyter-wrapper .jp-Dialog-body>.jp-select-wrapper{width:100%}.jupyter-wrapper .jp-Dialog-body>button{padding:0px 16px}.jupyter-wrapper .jp-Dialog-body>label{line-height:1.4;color:var(--jp-ui-font-color0)}.jupyter-wrapper .jp-Dialog-button.jp-mod-styled:not(:last-child){margin-right:12px}.jupyter-wrapper .jp-HoverBox{position:fixed}.jupyter-wrapper .jp-HoverBox.jp-mod-outofview{display:none}.jupyter-wrapper .jp-IFrame{width:100%;height:100%}.jupyter-wrapper .jp-IFrame>iframe{border:none}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-IFrame:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MainAreaWidget>:focus{outline:none}.jupyter-wrapper :root{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink-600: #d81b60;--md-pink-700: #c2185b;--md-pink-800: #ad1457;--md-pink-900: #880e4f;--md-pink-A100: #ff80ab;--md-pink-A200: #ff4081;--md-pink-A400: #f50057;--md-pink-A700: #c51162;--md-purple-50: #f3e5f5;--md-purple-100: #e1bee7;--md-purple-200: #ce93d8;--md-purple-300: #ba68c8;--md-purple-400: #ab47bc;--md-purple-500: #9c27b0;--md-purple-600: #8e24aa;--md-purple-700: #7b1fa2;--md-purple-800: #6a1b9a;--md-purple-900: #4a148c;--md-purple-A100: #ea80fc;--md-purple-A200: #e040fb;--md-purple-A400: #d500f9;--md-purple-A700: #aa00ff;--md-deep-purple-50: #ede7f6;--md-deep-purple-100: #d1c4e9;--md-deep-purple-200: #b39ddb;--md-deep-purple-300: #9575cd;--md-deep-purple-400: #7e57c2;--md-deep-purple-500: #673ab7;--md-deep-purple-600: #5e35b1;--md-deep-purple-700: #512da8;--md-deep-purple-800: #4527a0;--md-deep-purple-900: #311b92;--md-deep-purple-A100: #b388ff;--md-deep-purple-A200: #7c4dff;--md-deep-purple-A400: #651fff;--md-deep-purple-A700: #6200ea;--md-indigo-50: #e8eaf6;--md-indigo-100: #c5cae9;--md-indigo-200: #9fa8da;--md-indigo-300: #7986cb;--md-indigo-400: #5c6bc0;--md-indigo-500: #3f51b5;--md-indigo-600: #3949ab;--md-indigo-700: #303f9f;--md-indigo-800: #283593;--md-indigo-900: #1a237e;--md-indigo-A100: #8c9eff;--md-indigo-A200: #536dfe;--md-indigo-A400: #3d5afe;--md-indigo-A700: #304ffe;--md-blue-50: #e3f2fd;--md-blue-100: #bbdefb;--md-blue-200: #90caf9;--md-blue-300: #64b5f6;--md-blue-400: #42a5f5;--md-blue-500: #2196f3;--md-blue-600: #1e88e5;--md-blue-700: #1976d2;--md-blue-800: #1565c0;--md-blue-900: #0d47a1;--md-blue-A100: #82b1ff;--md-blue-A200: #448aff;--md-blue-A400: #2979ff;--md-blue-A700: #2962ff;--md-light-blue-50: #e1f5fe;--md-light-blue-100: #b3e5fc;--md-light-blue-200: #81d4fa;--md-light-blue-300: #4fc3f7;--md-light-blue-400: #29b6f6;--md-light-blue-500: #03a9f4;--md-light-blue-600: #039be5;--md-light-blue-700: #0288d1;--md-light-blue-800: #0277bd;--md-light-blue-900: #01579b;--md-light-blue-A100: #80d8ff;--md-light-blue-A200: #40c4ff;--md-light-blue-A400: #00b0ff;--md-light-blue-A700: #0091ea;--md-cyan-50: #e0f7fa;--md-cyan-100: #b2ebf2;--md-cyan-200: #80deea;--md-cyan-300: #4dd0e1;--md-cyan-400: #26c6da;--md-cyan-500: #00bcd4;--md-cyan-600: #00acc1;--md-cyan-700: #0097a7;--md-cyan-800: #00838f;--md-cyan-900: #006064;--md-cyan-A100: #84ffff;--md-cyan-A200: #18ffff;--md-cyan-A400: #00e5ff;--md-cyan-A700: #00b8d4;--md-teal-50: #e0f2f1;--md-teal-100: #b2dfdb;--md-teal-200: #80cbc4;--md-teal-300: #4db6ac;--md-teal-400: #26a69a;--md-teal-500: #009688;--md-teal-600: #00897b;--md-teal-700: #00796b;--md-teal-800: #00695c;--md-teal-900: #004d40;--md-teal-A100: #a7ffeb;--md-teal-A200: #64ffda;--md-teal-A400: #1de9b6;--md-teal-A700: #00bfa5;--md-green-50: #e8f5e9;--md-green-100: #c8e6c9;--md-green-200: #a5d6a7;--md-green-300: #81c784;--md-green-400: #66bb6a;--md-green-500: #4caf50;--md-green-600: #43a047;--md-green-700: #388e3c;--md-green-800: #2e7d32;--md-green-900: #1b5e20;--md-green-A100: #b9f6ca;--md-green-A200: #69f0ae;--md-green-A400: #00e676;--md-green-A700: #00c853;--md-light-green-50: #f1f8e9;--md-light-green-100: #dcedc8;--md-light-green-200: #c5e1a5;--md-light-green-300: #aed581;--md-light-green-400: #9ccc65;--md-light-green-500: #8bc34a;--md-light-green-600: #7cb342;--md-light-green-700: #689f38;--md-light-green-800: #558b2f;--md-light-green-900: #33691e;--md-light-green-A100: #ccff90;--md-light-green-A200: #b2ff59;--md-light-green-A400: #76ff03;--md-light-green-A700: #64dd17;--md-lime-50: #f9fbe7;--md-lime-100: #f0f4c3;--md-lime-200: #e6ee9c;--md-lime-300: #dce775;--md-lime-400: #d4e157;--md-lime-500: #cddc39;--md-lime-600: #c0ca33;--md-lime-700: #afb42b;--md-lime-800: #9e9d24;--md-lime-900: #827717;--md-lime-A100: #f4ff81;--md-lime-A200: #eeff41;--md-lime-A400: #c6ff00;--md-lime-A700: #aeea00;--md-yellow-50: #fffde7;--md-yellow-100: #fff9c4;--md-yellow-200: #fff59d;--md-yellow-300: #fff176;--md-yellow-400: #ffee58;--md-yellow-500: #ffeb3b;--md-yellow-600: #fdd835;--md-yellow-700: #fbc02d;--md-yellow-800: #f9a825;--md-yellow-900: #f57f17;--md-yellow-A100: #ffff8d;--md-yellow-A200: #ffff00;--md-yellow-A400: #ffea00;--md-yellow-A700: #ffd600;--md-amber-50: #fff8e1;--md-amber-100: #ffecb3;--md-amber-200: #ffe082;--md-amber-300: #ffd54f;--md-amber-400: #ffca28;--md-amber-500: #ffc107;--md-amber-600: #ffb300;--md-amber-700: #ffa000;--md-amber-800: #ff8f00;--md-amber-900: #ff6f00;--md-amber-A100: #ffe57f;--md-amber-A200: #ffd740;--md-amber-A400: #ffc400;--md-amber-A700: #ffab00;--md-orange-50: #fff3e0;--md-orange-100: #ffe0b2;--md-orange-200: #ffcc80;--md-orange-300: #ffb74d;--md-orange-400: #ffa726;--md-orange-500: #ff9800;--md-orange-600: #fb8c00;--md-orange-700: #f57c00;--md-orange-800: #ef6c00;--md-orange-900: #e65100;--md-orange-A100: #ffd180;--md-orange-A200: #ffab40;--md-orange-A400: #ff9100;--md-orange-A700: #ff6d00;--md-deep-orange-50: #fbe9e7;--md-deep-orange-100: #ffccbc;--md-deep-orange-200: #ffab91;--md-deep-orange-300: #ff8a65;--md-deep-orange-400: #ff7043;--md-deep-orange-500: #ff5722;--md-deep-orange-600: #f4511e;--md-deep-orange-700: #e64a19;--md-deep-orange-800: #d84315;--md-deep-orange-900: #bf360c;--md-deep-orange-A100: #ff9e80;--md-deep-orange-A200: #ff6e40;--md-deep-orange-A400: #ff3d00;--md-deep-orange-A700: #dd2c00;--md-brown-50: #efebe9;--md-brown-100: #d7ccc8;--md-brown-200: #bcaaa4;--md-brown-300: #a1887f;--md-brown-400: #8d6e63;--md-brown-500: #795548;--md-brown-600: #6d4c41;--md-brown-700: #5d4037;--md-brown-800: #4e342e;--md-brown-900: #3e2723;--md-grey-50: #fafafa;--md-grey-100: #f5f5f5;--md-grey-200: #eeeeee;--md-grey-300: #e0e0e0;--md-grey-400: #bdbdbd;--md-grey-500: #9e9e9e;--md-grey-600: #757575;--md-grey-700: #616161;--md-grey-800: #424242;--md-grey-900: #212121;--md-blue-grey-50: #eceff1;--md-blue-grey-100: #cfd8dc;--md-blue-grey-200: #b0bec5;--md-blue-grey-300: #90a4ae;--md-blue-grey-400: #78909c;--md-blue-grey-500: #607d8b;--md-blue-grey-600: #546e7a;--md-blue-grey-700: #455a64;--md-blue-grey-800: #37474f;--md-blue-grey-900: #263238}.jupyter-wrapper .jp-Spinner{position:absolute;display:flex;justify-content:center;align-items:center;z-index:10;left:0;top:0;width:100%;height:100%;background:var(--jp-layout-color0);outline:none}.jupyter-wrapper .jp-SpinnerContent{font-size:10px;margin:50px auto;text-indent:-9999em;width:3em;height:3em;border-radius:50%;background:var(--jp-brand-color3);background:linear-gradient(to right, #f37626 10%, rgba(255, 255, 255, 0) 42%);position:relative;animation:load3 1s infinite linear,fadeIn 1s}.jupyter-wrapper .jp-SpinnerContent:before{width:50%;height:50%;background:#f37626;border-radius:100% 0 0 0;position:absolute;top:0;left:0;content:\"\"}.jupyter-wrapper .jp-SpinnerContent:after{background:var(--jp-layout-color0);width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.jupyter-wrapper button.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:none;box-sizing:border-box;text-align:center;line-height:32px;height:32px;padding:0px 12px;letter-spacing:.8px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled{background:var(--jp-input-background);height:28px;box-sizing:border-box;border:var(--jp-border-width) solid var(--jp-border-color1);padding-left:7px;padding-right:7px;font-size:var(--jp-ui-font-size2);color:var(--jp-ui-font-color0);outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper input.jp-mod-styled:focus{border:var(--jp-border-width) solid var(--md-blue-500);box-shadow:inset 0 0 4px var(--md-blue-300)}.jupyter-wrapper .jp-select-wrapper{display:flex;position:relative;flex-direction:column;padding:1px;background-color:var(--jp-layout-color1);height:28px;box-sizing:border-box;margin-bottom:12px}.jupyter-wrapper .jp-select-wrapper.jp-mod-focused select.jp-mod-styled{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-input-active-background)}.jupyter-wrapper select.jp-mod-styled:hover{background-color:var(--jp-layout-color1);cursor:pointer;color:var(--jp-ui-font-color0);background-color:var(--jp-input-hover-background);box-shadow:inset 0 0px 1px rgba(0,0,0,.5)}.jupyter-wrapper select.jp-mod-styled{flex:1 1 auto;height:32px;width:100%;font-size:var(--jp-ui-font-size2);background:var(--jp-input-background);color:var(--jp-ui-font-color0);padding:0 25px 0 8px;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.jupyter-wrapper :root{--jp-private-toolbar-height: calc( 28px + var(--jp-border-width) )}.jupyter-wrapper .jp-Toolbar{color:var(--jp-ui-font-color1);flex:0 0 auto;display:flex;flex-direction:row;border-bottom:var(--jp-border-width) solid var(--jp-toolbar-border-color);box-shadow:var(--jp-toolbar-box-shadow);background:var(--jp-toolbar-background);min-height:var(--jp-toolbar-micro-height);padding:2px;z-index:1}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item.jp-Toolbar-spacer{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-Toolbar-item.jp-Toolbar-kernelStatus{display:inline-block;width:32px;background-repeat:no-repeat;background-position:center;background-size:16px}.jupyter-wrapper .jp-Toolbar>.jp-Toolbar-item{flex:0 0 auto;display:flex;padding-left:1px;padding-right:1px;font-size:var(--jp-ui-font-size1);line-height:var(--jp-private-toolbar-height);height:100%}.jupyter-wrapper div.jp-ToolbarButton{color:rgba(0,0,0,0);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px;margin:0px}.jupyter-wrapper button.jp-ToolbarButtonComponent{background:var(--jp-layout-color1);border:none;box-sizing:border-box;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;padding:0px 6px;margin:0px;height:24px;border-radius:var(--jp-border-radius);display:flex;align-items:center;text-align:center;font-size:14px;min-width:unset;min-height:unset}.jupyter-wrapper button.jp-ToolbarButtonComponent:disabled{opacity:.4}.jupyter-wrapper button.jp-ToolbarButtonComponent span{padding:0px;flex:0 0 auto}.jupyter-wrapper button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label{font-size:var(--jp-ui-font-size1);line-height:100%;padding-left:2px;color:var(--jp-ui-font-color1)}.jupyter-wrapper body.p-mod-override-cursor *,.jupyter-wrapper body.lm-mod-override-cursor *{cursor:inherit !important}.jupyter-wrapper .jp-JSONEditor{display:flex;flex-direction:column;width:100%}.jupyter-wrapper .jp-JSONEditor-host{flex:1 1 auto;border:var(--jp-border-width) solid var(--jp-input-border-color);border-radius:0px;background:var(--jp-layout-color0);min-height:50px;padding:1px}.jupyter-wrapper .jp-JSONEditor.jp-mod-error .jp-JSONEditor-host{border-color:red;outline-color:red}.jupyter-wrapper .jp-JSONEditor-header{display:flex;flex:1 0 auto;padding:0 0 0 12px}.jupyter-wrapper .jp-JSONEditor-header label{flex:0 0 auto}.jupyter-wrapper .jp-JSONEditor-commitButton{height:16px;width:16px;background-size:18px;background-repeat:no-repeat;background-position:center}.jupyter-wrapper .jp-JSONEditor-host.jp-mod-focused{background-color:var(--jp-input-active-background);border:1px solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .jp-Editor.jp-mod-dropTarget{border:var(--jp-border-width) solid var(--jp-input-active-border-color);box-shadow:var(--jp-input-box-shadow)}.jupyter-wrapper .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.jupyter-wrapper .CodeMirror-lines{padding:4px 0}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{background-color:#fff}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter-wrapper .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter-wrapper .CodeMirror-guttermarker{color:#000}.jupyter-wrapper .CodeMirror-guttermarker-subtle{color:#999}.jupyter-wrapper .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter-wrapper .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter-wrapper .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.jupyter-wrapper .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter-wrapper .cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.jupyter-wrapper .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@-webkit-keyframes blink{50%{background-color:rgba(0,0,0,0)}}@keyframes blink{50%{background-color:rgba(0,0,0,0)}}.jupyter-wrapper .cm-tab{display:inline-block;text-decoration:inherit}.jupyter-wrapper .CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.jupyter-wrapper .CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.jupyter-wrapper .cm-s-default .cm-header{color:blue}.jupyter-wrapper .cm-s-default .cm-quote{color:#090}.jupyter-wrapper .cm-negative{color:#d44}.jupyter-wrapper .cm-positive{color:#292}.jupyter-wrapper .cm-header,.jupyter-wrapper .cm-strong{font-weight:bold}.jupyter-wrapper .cm-em{font-style:italic}.jupyter-wrapper .cm-link{text-decoration:underline}.jupyter-wrapper .cm-strikethrough{text-decoration:line-through}.jupyter-wrapper .cm-s-default .cm-keyword{color:#708}.jupyter-wrapper .cm-s-default .cm-atom{color:#219}.jupyter-wrapper .cm-s-default .cm-number{color:#164}.jupyter-wrapper .cm-s-default .cm-def{color:blue}.jupyter-wrapper .cm-s-default .cm-variable-2{color:#05a}.jupyter-wrapper .cm-s-default .cm-variable-3,.jupyter-wrapper .cm-s-default .cm-type{color:#085}.jupyter-wrapper .cm-s-default .cm-comment{color:#a50}.jupyter-wrapper .cm-s-default .cm-string{color:#a11}.jupyter-wrapper .cm-s-default .cm-string-2{color:#f50}.jupyter-wrapper .cm-s-default .cm-meta{color:#555}.jupyter-wrapper .cm-s-default .cm-qualifier{color:#555}.jupyter-wrapper .cm-s-default .cm-builtin{color:#30a}.jupyter-wrapper .cm-s-default .cm-bracket{color:#997}.jupyter-wrapper .cm-s-default .cm-tag{color:#170}.jupyter-wrapper .cm-s-default .cm-attribute{color:#00c}.jupyter-wrapper .cm-s-default .cm-hr{color:#999}.jupyter-wrapper .cm-s-default .cm-link{color:#00c}.jupyter-wrapper .cm-s-default .cm-error{color:red}.jupyter-wrapper .cm-invalidchar{color:red}.jupyter-wrapper .CodeMirror-composing{border-bottom:2px solid}.jupyter-wrapper div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.jupyter-wrapper div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.jupyter-wrapper .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter-wrapper .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter-wrapper .CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.jupyter-wrapper .CodeMirror-sizer{position:relative;border-right:30px solid rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-vscrollbar,.jupyter-wrapper .CodeMirror-hscrollbar,.jupyter-wrapper .CodeMirror-scrollbar-filler,.jupyter-wrapper .CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.jupyter-wrapper .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter-wrapper .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter-wrapper .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter-wrapper .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter-wrapper .CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.jupyter-wrapper .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.jupyter-wrapper .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.jupyter-wrapper .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter-wrapper .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter-wrapper .CodeMirror-gutter-wrapper ::selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-gutter-wrapper ::-moz-selection{background-color:rgba(0,0,0,0)}.jupyter-wrapper .CodeMirror-lines{cursor:text;min-height:1px}.jupyter-wrapper .CodeMirror pre.CodeMirror-line,.jupyter-wrapper .CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:rgba(0,0,0,0);font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line,.jupyter-wrapper .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter-wrapper .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter-wrapper .CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.jupyter-wrapper .CodeMirror-rtl pre{direction:rtl}.jupyter-wrapper .CodeMirror-code{outline:none}.jupyter-wrapper .CodeMirror-scroll,.jupyter-wrapper .CodeMirror-sizer,.jupyter-wrapper .CodeMirror-gutter,.jupyter-wrapper .CodeMirror-gutters,.jupyter-wrapper .CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter-wrapper .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter-wrapper .CodeMirror-cursor{position:absolute;pointer-events:none}.jupyter-wrapper .CodeMirror-measure pre{position:static}.jupyter-wrapper div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter-wrapper div.CodeMirror-dragcursors{visibility:visible}.jupyter-wrapper .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter-wrapper .CodeMirror-selected{background:#d9d9d9}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter-wrapper .CodeMirror-crosshair{cursor:crosshair}.jupyter-wrapper .CodeMirror-line::selection,.jupyter-wrapper .CodeMirror-line>span::selection,.jupyter-wrapper .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter-wrapper .CodeMirror-line::-moz-selection,.jupyter-wrapper .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter-wrapper .cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.jupyter-wrapper .cm-force-border{padding-right:.1px}@media print{.jupyter-wrapper .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.jupyter-wrapper .cm-tab-wrap-hack:after{content:\"\"}.jupyter-wrapper span.CodeMirror-selectedtext{background:none}.jupyter-wrapper .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.jupyter-wrapper .CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.jupyter-wrapper .CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.jupyter-wrapper .CodeMirror-dialog input{border:none;outline:none;background:rgba(0,0,0,0);width:20em;color:inherit;font-family:monospace}.jupyter-wrapper .CodeMirror-dialog button{font-size:70%}.jupyter-wrapper .CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter{width:.7em}.jupyter-wrapper .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{cursor:pointer}.jupyter-wrapper .CodeMirror-foldgutter-open:after{content:\"\u25be\"}.jupyter-wrapper .CodeMirror-foldgutter-folded:after{content:\"\u25b8\"}.jupyter-wrapper .cm-s-material.CodeMirror{background-color:#263238;color:#eff}.jupyter-wrapper .cm-s-material .CodeMirror-gutters{background:#263238;color:#546e7a;border:none}.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker,.jupyter-wrapper .cm-s-material .CodeMirror-guttermarker-subtle,.jupyter-wrapper .cm-s-material .CodeMirror-linenumber{color:#546e7a}.jupyter-wrapper .cm-s-material .CodeMirror-cursor{border-left:1px solid #fc0}.jupyter-wrapper .cm-s-material div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-material .CodeMirror-line>span>span::-moz-selection{background:rgba(128,203,196,.2)}.jupyter-wrapper .cm-s-material .CodeMirror-activeline-background{background:rgba(0,0,0,.5)}.jupyter-wrapper .cm-s-material .cm-keyword{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-operator{color:#89ddff}.jupyter-wrapper .cm-s-material .cm-variable-2{color:#eff}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#f07178}.jupyter-wrapper .cm-s-material .cm-builtin{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-atom{color:#f78c6c}.jupyter-wrapper .cm-s-material .cm-number{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-def{color:#82aaff}.jupyter-wrapper .cm-s-material .cm-string{color:#c3e88d}.jupyter-wrapper .cm-s-material .cm-string-2{color:#f07178}.jupyter-wrapper .cm-s-material .cm-comment{color:#546e7a}.jupyter-wrapper .cm-s-material .cm-variable{color:#f07178}.jupyter-wrapper .cm-s-material .cm-tag{color:#ff5370}.jupyter-wrapper .cm-s-material .cm-meta{color:#ffcb6b}.jupyter-wrapper .cm-s-material .cm-attribute{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-property{color:#c792ea}.jupyter-wrapper .cm-s-material .cm-qualifier{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-variable-3,.jupyter-wrapper .cm-s-material .cm-type{color:#decb6b}.jupyter-wrapper .cm-s-material .cm-error{color:#fff;background-color:#ff5370}.jupyter-wrapper .cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f !important}.jupyter-wrapper .cm-s-zenburn .CodeMirror-foldgutter-open,.jupyter-wrapper .CodeMirror-foldgutter-folded{color:#999}.jupyter-wrapper .cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.jupyter-wrapper .cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-comment{color:#7f9f7f}.jupyter-wrapper .cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:bold}.jupyter-wrapper .cm-s-zenburn span.cm-atom{color:#bfebbf}.jupyter-wrapper .cm-s-zenburn span.cm-def{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-variable{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-variable-2{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-string{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-string-2{color:#cc9393}.jupyter-wrapper .cm-s-zenburn span.cm-number{color:#dcdccc}.jupyter-wrapper .cm-s-zenburn span.cm-tag{color:#93e0e3}.jupyter-wrapper .cm-s-zenburn span.cm-property{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-attribute{color:#dfaf8f}.jupyter-wrapper .cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.jupyter-wrapper .cm-s-zenburn span.cm-meta{color:#f0dfaf}.jupyter-wrapper .cm-s-zenburn span.cm-header{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.cm-operator{color:#f0efd0}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:rgba(0,0,0,0);border-bottom:1px solid}.jupyter-wrapper .cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline{background:#000}.jupyter-wrapper .cm-s-zenburn .CodeMirror-activeline-background{background:#000}.jupyter-wrapper .cm-s-zenburn div.CodeMirror-selected{background:#545454}.jupyter-wrapper .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.jupyter-wrapper .cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.jupyter-wrapper .cm-s-abcdef div.CodeMirror-selected{background:#515151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.jupyter-wrapper .cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker{color:#222}.jupyter-wrapper .cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.jupyter-wrapper .cm-s-abcdef .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-abcdef .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-atom{color:#77f}.jupyter-wrapper .cm-s-abcdef span.cm-number{color:violet}.jupyter-wrapper .cm-s-abcdef span.cm-def{color:#fffabc}.jupyter-wrapper .cm-s-abcdef span.cm-variable{color:#abcdef}.jupyter-wrapper .cm-s-abcdef span.cm-variable-2{color:#cacbcc}.jupyter-wrapper .cm-s-abcdef span.cm-variable-3,.jupyter-wrapper .cm-s-abcdef span.cm-type{color:#def}.jupyter-wrapper .cm-s-abcdef span.cm-property{color:#fedcba}.jupyter-wrapper .cm-s-abcdef span.cm-operator{color:#ff0}.jupyter-wrapper .cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.jupyter-wrapper .cm-s-abcdef span.cm-string{color:#2b4}.jupyter-wrapper .cm-s-abcdef span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-abcdef span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-abcdef span.cm-builtin{color:#30aabc}.jupyter-wrapper .cm-s-abcdef span.cm-bracket{color:#8a8a8a}.jupyter-wrapper .cm-s-abcdef span.cm-tag{color:#fd4}.jupyter-wrapper .cm-s-abcdef span.cm-attribute{color:#df0}.jupyter-wrapper .cm-s-abcdef span.cm-error{color:red}.jupyter-wrapper .cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:bold}.jupyter-wrapper .cm-s-abcdef span.cm-link{color:#8a2be2}.jupyter-wrapper .cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.jupyter-wrapper .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.jupyter-wrapper .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0px}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-light .CodeMirror-guttermarker-subtle{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.jupyter-wrapper .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.jupyter-wrapper .cm-s-base16-light span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-light span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-property,.jupyter-wrapper .cm-s-base16-light span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-light span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-light span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-light span.cm-bracket{color:#202020}.jupyter-wrapper .cm-s-base16-light span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-light span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.jupyter-wrapper .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.jupyter-wrapper .cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5 !important;background-color:#6a9fb5 !important}.jupyter-wrapper .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0px}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.jupyter-wrapper .cm-s-base16-dark span.cm-comment{color:#8f5536}.jupyter-wrapper .cm-s-base16-dark span.cm-atom{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-number{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-property,.jupyter-wrapper .cm-s-base16-dark span.cm-attribute{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-keyword{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-string{color:#f4bf75}.jupyter-wrapper .cm-s-base16-dark span.cm-variable{color:#90a959}.jupyter-wrapper .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.jupyter-wrapper .cm-s-base16-dark span.cm-def{color:#d28445}.jupyter-wrapper .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.jupyter-wrapper .cm-s-base16-dark span.cm-tag{color:#ac4142}.jupyter-wrapper .cm-s-base16-dark span.cm-link{color:#aa759f}.jupyter-wrapper .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.jupyter-wrapper .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-dracula.CodeMirror,.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:none}.jupyter-wrapper .cm-s-dracula .CodeMirror-gutters{color:#282a36}.jupyter-wrapper .cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula span.cm-comment{color:#6272a4}.jupyter-wrapper .cm-s-dracula span.cm-string,.jupyter-wrapper .cm-s-dracula span.cm-string-2{color:#f1fa8c}.jupyter-wrapper .cm-s-dracula span.cm-number{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-variable{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-2{color:#fff}.jupyter-wrapper .cm-s-dracula span.cm-def{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-operator{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-atom{color:#bd93f9}.jupyter-wrapper .cm-s-dracula span.cm-meta{color:#f8f8f2}.jupyter-wrapper .cm-s-dracula span.cm-tag{color:#ff79c6}.jupyter-wrapper .cm-s-dracula span.cm-attribute{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-qualifier{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-property{color:#66d9ef}.jupyter-wrapper .cm-s-dracula span.cm-builtin{color:#50fa7b}.jupyter-wrapper .cm-s-dracula span.cm-variable-3,.jupyter-wrapper .cm-s-dracula span.cm-type{color:#ffb86c}.jupyter-wrapper .cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.jupyter-wrapper .cm-s-hopscotch span.cm-comment{color:#b33508}.jupyter-wrapper .cm-s-hopscotch span.cm-atom{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-number{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch span.cm-property,.jupyter-wrapper .cm-s-hopscotch span.cm-attribute{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-keyword{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-string{color:#fdcc59}.jupyter-wrapper .cm-s-hopscotch span.cm-variable{color:#8fc13e}.jupyter-wrapper .cm-s-hopscotch span.cm-variable-2{color:#1290bf}.jupyter-wrapper .cm-s-hopscotch span.cm-def{color:#fd8b19}.jupyter-wrapper .cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.jupyter-wrapper .cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.jupyter-wrapper .cm-s-hopscotch span.cm-tag{color:#dd464c}.jupyter-wrapper .cm-s-hopscotch span.cm-link{color:#c85e7c}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.jupyter-wrapper .cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.jupyter-wrapper .cm-s-mbo div.CodeMirror-selected{background:#716c62}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.jupyter-wrapper .cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0px}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker{color:#fff}.jupyter-wrapper .cm-s-mbo .CodeMirror-guttermarker-subtle{color:gray}.jupyter-wrapper .cm-s-mbo .CodeMirror-linenumber{color:#dadada}.jupyter-wrapper .cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.jupyter-wrapper .cm-s-mbo span.cm-comment{color:#95958a}.jupyter-wrapper .cm-s-mbo span.cm-atom{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-number{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-property,.jupyter-wrapper .cm-s-mbo span.cm-attribute{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-keyword{color:#ffb928}.jupyter-wrapper .cm-s-mbo span.cm-string{color:#ffcf6c}.jupyter-wrapper .cm-s-mbo span.cm-string.cm-property{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-variable-2{color:#00a8c6}.jupyter-wrapper .cm-s-mbo span.cm-def{color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:bold}.jupyter-wrapper .cm-s-mbo span.cm-tag{color:#9ddfe9}.jupyter-wrapper .cm-s-mbo span.cm-link{color:#f54b07}.jupyter-wrapper .cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.jupyter-wrapper .cm-s-mbo span.cm-qualifier{color:#ffffec}.jupyter-wrapper .cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928 !important}.jupyter-wrapper .cm-s-mbo .CodeMirror-matchingtag{background:rgba(255,255,255,.37)}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.jupyter-wrapper .cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.jupyter-wrapper .cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.jupyter-wrapper .cm-s-mdn-like .cm-keyword{color:#6262ff}.jupyter-wrapper .cm-s-mdn-like .cm-atom{color:#f90}.jupyter-wrapper .cm-s-mdn-like .cm-number{color:#ca7841}.jupyter-wrapper .cm-s-mdn-like .cm-def{color:#8da6ce}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-2,.jupyter-wrapper .cm-s-mdn-like span.cm-tag{color:#690}.jupyter-wrapper .cm-s-mdn-like span.cm-variable-3,.jupyter-wrapper .cm-s-mdn-like span.cm-def,.jupyter-wrapper .cm-s-mdn-like span.cm-type{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-variable{color:#07a}.jupyter-wrapper .cm-s-mdn-like .cm-property{color:#905}.jupyter-wrapper .cm-s-mdn-like .cm-qualifier{color:#690}.jupyter-wrapper .cm-s-mdn-like .cm-operator{color:#cda869}.jupyter-wrapper .cm-s-mdn-like .cm-comment{color:#777;font-weight:normal}.jupyter-wrapper .cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.jupyter-wrapper .cm-s-mdn-like .cm-string-2{color:#bd6b18}.jupyter-wrapper .cm-s-mdn-like .cm-meta{color:#000}.jupyter-wrapper .cm-s-mdn-like .cm-builtin{color:#9b7536}.jupyter-wrapper .cm-s-mdn-like .cm-tag{color:#997643}.jupyter-wrapper .cm-s-mdn-like .cm-attribute{color:#d6bb6d}.jupyter-wrapper .cm-s-mdn-like .cm-header{color:#ff6400}.jupyter-wrapper .cm-s-mdn-like .cm-hr{color:#aeaeae}.jupyter-wrapper .cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.jupyter-wrapper .cm-s-mdn-like .cm-error{border-bottom:1px solid red}.jupyter-wrapper div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}.jupyter-wrapper div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid gray;color:inherit}.jupyter-wrapper .cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.jupyter-wrapper .cm-s-seti.CodeMirror{background-color:#151718 !important;color:#cfd2d1 !important;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.jupyter-wrapper .cm-s-seti .CodeMirror-cursor{border-left:solid thin #f8f8f0}.jupyter-wrapper .cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.jupyter-wrapper .cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,.1)}.jupyter-wrapper .cm-s-seti span.cm-comment{color:#41535b}.jupyter-wrapper .cm-s-seti span.cm-string,.jupyter-wrapper .cm-s-seti span.cm-string-2{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-number{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-variable{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-variable-2{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-def{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#ff79c6}.jupyter-wrapper .cm-s-seti span.cm-operator{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-keyword{color:#e6cd69}.jupyter-wrapper .cm-s-seti span.cm-atom{color:#cd3f45}.jupyter-wrapper .cm-s-seti span.cm-meta{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-tag{color:#55b5db}.jupyter-wrapper .cm-s-seti span.cm-attribute{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-qualifier{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-property{color:#a074c4}.jupyter-wrapper .cm-s-seti span.cm-variable-3,.jupyter-wrapper .cm-s-seti span.cm-type{color:#9fca56}.jupyter-wrapper .cm-s-seti span.cm-builtin{color:#9fca56}.jupyter-wrapper .cm-s-seti .CodeMirror-activeline-background{background:#101213}.jupyter-wrapper .cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}.jupyter-wrapper .solarized.base03{color:#002b36}.jupyter-wrapper .solarized.base02{color:#073642}.jupyter-wrapper .solarized.base01{color:#586e75}.jupyter-wrapper .solarized.base00{color:#657b83}.jupyter-wrapper .solarized.base0{color:#839496}.jupyter-wrapper .solarized.base1{color:#93a1a1}.jupyter-wrapper .solarized.base2{color:#eee8d5}.jupyter-wrapper .solarized.base3{color:#fdf6e3}.jupyter-wrapper .solarized.solar-yellow{color:#b58900}.jupyter-wrapper .solarized.solar-orange{color:#cb4b16}.jupyter-wrapper .solarized.solar-red{color:#dc322f}.jupyter-wrapper .solarized.solar-magenta{color:#d33682}.jupyter-wrapper .solarized.solar-violet{color:#6c71c4}.jupyter-wrapper .solarized.solar-blue{color:#268bd2}.jupyter-wrapper .solarized.solar-cyan{color:#2aa198}.jupyter-wrapper .solarized.solar-green{color:#859900}.jupyter-wrapper .cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.jupyter-wrapper .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.jupyter-wrapper .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.jupyter-wrapper .cm-s-solarized .CodeMirror-widget{text-shadow:none}.jupyter-wrapper .cm-s-solarized .cm-header{color:#586e75}.jupyter-wrapper .cm-s-solarized .cm-quote{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-keyword{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .cm-atom{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-number{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-def{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-variable{color:#839496}.jupyter-wrapper .cm-s-solarized .cm-variable-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-variable-3,.jupyter-wrapper .cm-s-solarized .cm-type{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-property{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-operator{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.jupyter-wrapper .cm-s-solarized .cm-string{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-string-2{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-meta{color:#859900}.jupyter-wrapper .cm-s-solarized .cm-qualifier{color:#b58900}.jupyter-wrapper .cm-s-solarized .cm-builtin{color:#d33682}.jupyter-wrapper .cm-s-solarized .cm-bracket{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.jupyter-wrapper .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.jupyter-wrapper .cm-s-solarized .cm-tag{color:#93a1a1}.jupyter-wrapper .cm-s-solarized .cm-attribute{color:#2aa198}.jupyter-wrapper .cm-s-solarized .cm-hr{color:rgba(0,0,0,0);border-top:1px solid #586e75;display:block}.jupyter-wrapper .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.jupyter-wrapper .cm-s-solarized .cm-special{color:#6c71c4}.jupyter-wrapper .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.jupyter-wrapper .cm-s-solarized .cm-error,.jupyter-wrapper .cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.jupyter-wrapper .cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)}.jupyter-wrapper .cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-light .CodeMirror-line>span>span::selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-ligh .CodeMirror-line>span>span::-moz-selection{background:#eee8d5}.jupyter-wrapper .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutters{border-right:0}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.jupyter-wrapper .cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.jupyter-wrapper .cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.jupyter-wrapper .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.jupyter-wrapper .cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.jupyter-wrapper .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.jupyter-wrapper .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.jupyter-wrapper .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,.06)}.jupyter-wrapper .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.jupyter-wrapper .cm-s-the-matrix.CodeMirror{background:#000;color:lime}.jupyter-wrapper .cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.jupyter-wrapper .cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker{color:lime}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-guttermarker-subtle{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid lime}.jupyter-wrapper .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}.jupyter-wrapper .cm-s-the-matrix span.cm-atom{color:#3ff}.jupyter-wrapper .cm-s-the-matrix span.cm-number{color:#ffb94f}.jupyter-wrapper .cm-s-the-matrix span.cm-def{color:#99c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable{color:#f6c}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-2{color:#c6f}.jupyter-wrapper .cm-s-the-matrix span.cm-variable-3,.jupyter-wrapper .cm-s-the-matrix span.cm-type{color:#96f}.jupyter-wrapper .cm-s-the-matrix span.cm-property{color:#62ffa0}.jupyter-wrapper .cm-s-the-matrix span.cm-operator{color:#999}.jupyter-wrapper .cm-s-the-matrix span.cm-comment{color:#ccc}.jupyter-wrapper .cm-s-the-matrix span.cm-string{color:#39c}.jupyter-wrapper .cm-s-the-matrix span.cm-meta{color:#c9f}.jupyter-wrapper .cm-s-the-matrix span.cm-qualifier{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-builtin{color:#30a}.jupyter-wrapper .cm-s-the-matrix span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-the-matrix span.cm-tag{color:#ffbd40}.jupyter-wrapper .cm-s-the-matrix span.cm-attribute{color:#fff700}.jupyter-wrapper .cm-s-the-matrix span.cm-error{color:red}.jupyter-wrapper .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.jupyter-wrapper .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}.jupyter-wrapper .cm-s-xq-light span.cm-atom{color:#6c8cd5}.jupyter-wrapper .cm-s-xq-light span.cm-number{color:#164}.jupyter-wrapper .cm-s-xq-light span.cm-def{text-decoration:underline}.jupyter-wrapper .cm-s-xq-light span.cm-variable{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-2{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-variable-3,.jupyter-wrapper .cm-s-xq-light span.cm-type{color:#000}.jupyter-wrapper .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.jupyter-wrapper .cm-s-xq-light span.cm-string{color:red}.jupyter-wrapper .cm-s-xq-light span.cm-meta{color:#ff0}.jupyter-wrapper .cm-s-xq-light span.cm-qualifier{color:gray}.jupyter-wrapper .cm-s-xq-light span.cm-builtin{color:#7ea656}.jupyter-wrapper .cm-s-xq-light span.cm-bracket{color:#cc7}.jupyter-wrapper .cm-s-xq-light span.cm-tag{color:#3f7f7f}.jupyter-wrapper .cm-s-xq-light span.cm-attribute{color:#7f007f}.jupyter-wrapper .cm-s-xq-light span.cm-error{color:red}.jupyter-wrapper .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.jupyter-wrapper .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid gray;color:#000 !important;background:#ff0}.jupyter-wrapper .CodeMirror{line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);border:0;border-radius:0;height:auto}.jupyter-wrapper .CodeMirror pre{padding:0 var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-dialog{background-color:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .CodeMirror-lines{padding:var(--jp-code-padding) 0}.jupyter-wrapper .CodeMirror-linenumber{padding:0 8px}.jupyter-wrapper .jp-CodeMirrorEditor-static{margin:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeMirrorEditor,.jupyter-wrapper .jp-CodeMirrorEditor-static{cursor:text}.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}@media screen and (min-width: 2138px)and (max-width: 4319px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width1) solid var(--jp-editor-cursor-color)}}@media screen and (min-width: 4320px){.jupyter-wrapper .jp-CodeMirrorEditor[data-type=inline] .CodeMirror-cursor{border-left:var(--jp-code-cursor-width2) solid var(--jp-editor-cursor-color)}}.jupyter-wrapper .CodeMirror.jp-mod-readOnly .CodeMirror-cursor{display:none}.jupyter-wrapper .CodeMirror-gutters{border-right:1px solid var(--jp-border-color2);background-color:var(--jp-layout-color0)}.jupyter-wrapper .jp-CollaboratorCursor{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:none;border-bottom:3px solid;background-clip:content-box;margin-left:-5px;margin-right:-5px}.jupyter-wrapper .CodeMirror-selectedtext.cm-searching{background-color:var(--jp-search-selected-match-background-color) !important;color:var(--jp-search-selected-match-color) !important}.jupyter-wrapper .cm-searching{background-color:var(--jp-search-unselected-match-background-color) !important;color:var(--jp-search-unselected-match-color) !important}.jupyter-wrapper .CodeMirror-focused .CodeMirror-selected{background-color:var(--jp-editor-selected-focused-background)}.jupyter-wrapper .CodeMirror-selected{background-color:var(--jp-editor-selected-background)}.jupyter-wrapper .jp-CollaboratorCursor-hover{position:absolute;z-index:1;transform:translateX(-50%);color:#fff;border-radius:3px;padding-left:4px;padding-right:4px;padding-top:1px;padding-bottom:1px;text-align:center;font-size:var(--jp-ui-font-size1);white-space:nowrap}.jupyter-wrapper .jp-CodeMirror-ruler{border-left:1px dashed var(--jp-border-color2)}.jupyter-wrapper .CodeMirror.cm-s-jupyter{background:var(--jp-layout-color0);color:var(--jp-content-font-color1)}.jupyter-wrapper .jp-CodeConsole .CodeMirror.cm-s-jupyter,.jupyter-wrapper .jp-Notebook .CodeMirror.cm-s-jupyter{background:rgba(0,0,0,0)}.jupyter-wrapper .cm-s-jupyter .CodeMirror-cursor{border-left:var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)}.jupyter-wrapper .cm-s-jupyter span.cm-keyword{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-atom{color:var(--jp-mirror-editor-atom-color)}.jupyter-wrapper .cm-s-jupyter span.cm-number{color:var(--jp-mirror-editor-number-color)}.jupyter-wrapper .cm-s-jupyter span.cm-def{color:var(--jp-mirror-editor-def-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable{color:var(--jp-mirror-editor-variable-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-2{color:var(--jp-mirror-editor-variable-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-variable-3{color:var(--jp-mirror-editor-variable-3-color)}.jupyter-wrapper .cm-s-jupyter span.cm-punctuation{color:var(--jp-mirror-editor-punctuation-color)}.jupyter-wrapper .cm-s-jupyter span.cm-property{color:var(--jp-mirror-editor-property-color)}.jupyter-wrapper .cm-s-jupyter span.cm-operator{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.jupyter-wrapper .cm-s-jupyter span.cm-comment{color:var(--jp-mirror-editor-comment-color);font-style:italic}.jupyter-wrapper .cm-s-jupyter span.cm-string{color:var(--jp-mirror-editor-string-color)}.jupyter-wrapper .cm-s-jupyter span.cm-string-2{color:var(--jp-mirror-editor-string-2-color)}.jupyter-wrapper .cm-s-jupyter span.cm-meta{color:var(--jp-mirror-editor-meta-color)}.jupyter-wrapper .cm-s-jupyter span.cm-qualifier{color:var(--jp-mirror-editor-qualifier-color)}.jupyter-wrapper .cm-s-jupyter span.cm-builtin{color:var(--jp-mirror-editor-builtin-color)}.jupyter-wrapper .cm-s-jupyter span.cm-bracket{color:var(--jp-mirror-editor-bracket-color)}.jupyter-wrapper .cm-s-jupyter span.cm-tag{color:var(--jp-mirror-editor-tag-color)}.jupyter-wrapper .cm-s-jupyter span.cm-attribute{color:var(--jp-mirror-editor-attribute-color)}.jupyter-wrapper .cm-s-jupyter span.cm-header{color:var(--jp-mirror-editor-header-color)}.jupyter-wrapper .cm-s-jupyter span.cm-quote{color:var(--jp-mirror-editor-quote-color)}.jupyter-wrapper .cm-s-jupyter span.cm-link{color:var(--jp-mirror-editor-link-color)}.jupyter-wrapper .cm-s-jupyter span.cm-error{color:var(--jp-mirror-editor-error-color)}.jupyter-wrapper .cm-s-jupyter span.cm-hr{color:#999}.jupyter-wrapper .cm-s-jupyter span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter-wrapper .cm-s-jupyter .CodeMirror-activeline-background,.jupyter-wrapper .cm-s-jupyter .CodeMirror-gutter{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-RenderedLatex{color:var(--jp-content-font-color1);font-size:var(--jp-content-font-size1);line-height:var(--jp-content-line-height)}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedLatex{padding:var(--jp-code-padding);text-align:left}.jupyter-wrapper .jp-MimeDocument{outline:none}.jupyter-wrapper :root{--jp-private-filebrowser-button-height: 28px;--jp-private-filebrowser-button-width: 48px}.jupyter-wrapper .jp-FileBrowser{display:flex;flex-direction:column;color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1)}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{border-bottom:none;height:auto;margin:var(--jp-toolbar-header-margin);box-shadow:none}.jupyter-wrapper .jp-BreadCrumbs{flex:0 0 auto;margin:4px 12px}.jupyter-wrapper .jp-BreadCrumbs-item{margin:0px 2px;padding:0px 2px;border-radius:var(--jp-border-radius);cursor:pointer}.jupyter-wrapper .jp-BreadCrumbs-item:hover{background-color:var(--jp-layout-color2)}.jupyter-wrapper .jp-BreadCrumbs-item:first-child{margin-left:0px}.jupyter-wrapper .jp-BreadCrumbs-item.jp-mod-dropTarget{background-color:var(--jp-brand-color2);opacity:.7}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{padding:0px}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar{justify-content:space-evenly}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item{flex:1}.jupyter-wrapper .jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent{width:100%}.jupyter-wrapper .jp-DirListing{flex:1 1 auto;display:flex;flex-direction:column;outline:0}.jupyter-wrapper .jp-DirListing-header{flex:0 0 auto;display:flex;flex-direction:row;overflow:hidden;border-top:var(--jp-border-width) solid var(--jp-border-color2);border-bottom:var(--jp-border-width) solid var(--jp-border-color1);box-shadow:var(--jp-toolbar-box-shadow);z-index:2}.jupyter-wrapper .jp-DirListing-headerItem{padding:4px 12px 2px 12px;font-weight:500}.jupyter-wrapper .jp-DirListing-headerItem:hover{background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-name{flex:1 0 84px}.jupyter-wrapper .jp-DirListing-headerItem.jp-id-modified{flex:0 0 112px;border-left:var(--jp-border-width) solid var(--jp-border-color2);text-align:right}.jupyter-wrapper .jp-DirListing-narrow .jp-id-modified,.jupyter-wrapper .jp-DirListing-narrow .jp-DirListing-itemModified{display:none}.jupyter-wrapper .jp-DirListing-headerItem.jp-mod-selected{font-weight:600}.jupyter-wrapper .jp-DirListing-content{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-DirListing.jp-mod-native-drop .jp-DirListing-content{outline:5px dashed rgba(128,128,128,.5);outline-offset:-10px;cursor:copy}.jupyter-wrapper .jp-DirListing-item{display:flex;flex-direction:row;padding:4px 12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-selected{color:#fff;background:var(--jp-brand-color1)}.jupyter-wrapper .jp-DirListing-item.jp-mod-dropTarget{background:var(--jp-brand-color3)}.jupyter-wrapper .jp-DirListing-item:hover:not(.jp-mod-selected){background:var(--jp-layout-color2)}.jupyter-wrapper .jp-DirListing-itemIcon{flex:0 0 20px;margin-right:4px}.jupyter-wrapper .jp-DirListing-itemText{flex:1 0 64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none}.jupyter-wrapper .jp-DirListing-itemModified{flex:0 0 125px;text-align:right}.jupyter-wrapper .jp-DirListing-editor{flex:1 0 64px;outline:none;border:none}.jupyter-wrapper .jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon:before{color:#32cd32;content:\"\u25cf\";font-size:8px;position:absolute;left:-8px}.jupyter-wrapper .jp-DirListing-item.lm-mod-drag-image,.jupyter-wrapper .jp-DirListing-item.jp-mod-selected.lm-mod-drag-image{font-size:var(--jp-ui-font-size1);padding-left:4px;margin-left:4px;width:160px;background-color:var(--jp-ui-inverse-font-color2);box-shadow:var(--jp-elevation-z2);border-radius:0px;color:var(--jp-ui-font-color1);transform:translateX(-40%) translateY(-58%)}.jupyter-wrapper .jp-DirListing-deadSpace{flex:1 1 auto;margin:0;padding:0;list-style-type:none;overflow:auto;background-color:var(--jp-layout-color1)}.jupyter-wrapper .jp-Document{min-width:120px;min-height:120px;outline:none}.jupyter-wrapper .jp-FileDialog.jp-mod-conflict input{color:red}.jupyter-wrapper .jp-FileDialog .jp-new-name-title{margin-top:12px}.jupyter-wrapper .jp-OutputArea{overflow-y:auto}.jupyter-wrapper .jp-OutputArea-child{display:flex;flex-direction:row}.jupyter-wrapper .jp-OutputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-outprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-OutputArea-output{height:auto;overflow:auto;user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text}.jupyter-wrapper .jp-OutputArea-child .jp-OutputArea-output{flex-grow:1;flex-shrink:1}.jupyter-wrapper .jp-OutputArea-output.jp-mod-isolated{width:100%;display:block}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated{position:relative}.jupyter-wrapper body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-OutputArea-output pre{border:none;margin:0px;padding:0px;overflow-x:auto;overflow-y:auto;word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.jupyter-wrapper .jp-OutputArea-output.jp-RenderedHTMLCommon table{margin-left:0;margin-right:0}.jupyter-wrapper .jp-OutputArea-output dl,.jupyter-wrapper .jp-OutputArea-output dt,.jupyter-wrapper .jp-OutputArea-output dd{display:block}.jupyter-wrapper .jp-OutputArea-output dl{width:100%;overflow:hidden;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dt{font-weight:bold;float:left;width:20%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea-output dd{float:left;width:80%;padding:0;margin:0}.jupyter-wrapper .jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt{display:none}.jupyter-wrapper .jp-OutputArea-output.jp-OutputArea-executeResult{margin-left:0px;flex:1 1 auto}.jupyter-wrapper .jp-OutputArea-executeResult.jp-RenderedText{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-OutputArea-stdin{line-height:var(--jp-code-line-height);padding-top:var(--jp-code-padding);display:flex}.jupyter-wrapper .jp-Stdin-prompt{color:var(--jp-content-font-color0);padding-right:var(--jp-code-padding);vertical-align:baseline;flex:0 0 auto}.jupyter-wrapper .jp-Stdin-input{font-family:var(--jp-code-font-family);font-size:inherit;color:inherit;background-color:inherit;width:42%;min-width:200px;vertical-align:baseline;padding:0em .25em;margin:0em .25em;flex:0 0 70%}.jupyter-wrapper .jp-Stdin-input:focus{box-shadow:none}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea{height:100%;display:block}.jupyter-wrapper .jp-LinkedOutputView .jp-OutputArea-output:only-child{height:100%}.jupyter-wrapper .jp-Collapser{flex:0 0 var(--jp-cell-collapser-width);padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0);border-radius:var(--jp-border-radius);opacity:1}.jupyter-wrapper .jp-Collapser-child{display:block;width:100%;box-sizing:border-box;position:absolute;top:0px;bottom:0px}.jupyter-wrapper .jp-CellHeader,.jupyter-wrapper .jp-CellFooter{height:0px;width:100%;padding:0px;margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-InputArea{display:flex;flex-direction:row}.jupyter-wrapper .jp-InputArea-editor{flex:1 1 auto}.jupyter-wrapper .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);border-radius:0px;background:var(--jp-cell-editor-background)}.jupyter-wrapper .jp-InputPrompt{flex:0 0 var(--jp-cell-prompt-width);color:var(--jp-cell-inprompt-font-color);font-family:var(--jp-cell-prompt-font-family);padding:var(--jp-code-padding);letter-spacing:var(--jp-cell-prompt-letter-spacing);opacity:var(--jp-cell-prompt-opacity);line-height:var(--jp-code-line-height);font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0);opacity:var(--jp-cell-prompt-opacity);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-wrapper .jp-Placeholder{display:flex;flex-direction:row;flex:1 1 auto}.jupyter-wrapper .jp-Placeholder-prompt{box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content{flex:1 1 auto;border:none;background:rgba(0,0,0,0);height:20px;box-sizing:border-box}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon{width:32px;height:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--jp-border-radius)}.jupyter-wrapper .jp-Placeholder-content .jp-MoreHorizIcon:hover{border:1px solid var(--jp-border-color1);box-shadow:0px 0px 2px 0px rgba(0,0,0,.25);background-color:var(--jp-layout-color0)}.jupyter-wrapper :root{--jp-private-cell-scrolling-output-offset: 5px}.jupyter-wrapper .jp-Cell{padding:var(--jp-cell-padding);margin:0px;border:none;outline:none;background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Cell-inputWrapper,.jupyter-wrapper .jp-Cell-outputWrapper{display:flex;flex-direction:row;padding:0px;margin:0px;overflow:visible}.jupyter-wrapper .jp-Cell-inputArea,.jupyter-wrapper .jp-Cell-outputArea{flex:1 1 auto}.jupyter-wrapper .jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser{border:none !important;background:rgba(0,0,0,0) !important}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser{min-height:var(--jp-cell-collapser-min-height)}.jupyter-wrapper .jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper{margin-top:5px}.jupyter-wrapper .jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output{padding-top:var(--jp-code-padding)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea{overflow-y:auto;max-height:200px;box-shadow:inset 0 0 6px 2px rgba(0,0,0,.3);margin-left:var(--jp-private-cell-scrolling-output-offset)}.jupyter-wrapper .jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt{flex:0 0 calc(var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset))}.jupyter-wrapper .jp-MarkdownOutput{flex:1 1 auto;margin-top:0;margin-bottom:0;padding-left:var(--jp-code-padding)}.jupyter-wrapper .jp-MarkdownOutput.jp-RenderedHTMLCommon{overflow:auto}.jupyter-wrapper .jp-NotebookPanel-toolbar{padding:2px}.jupyter-wrapper .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused{border:none;box-shadow:none}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown select{height:24px;font-size:var(--jp-ui-font-size1);line-height:14px;border-radius:0;display:block}.jupyter-wrapper .jp-Notebook-toolbarCellTypeDropdown span{top:5px !important}.jupyter-wrapper :root{--jp-private-notebook-dragImage-width: 304px;--jp-private-notebook-dragImage-height: 36px;--jp-private-notebook-selected-color: var(--md-blue-400);--jp-private-notebook-active-color: var(--md-green-400)}.jupyter-wrapper .jp-NotebookPanel{display:block;height:100%}.jupyter-wrapper .jp-NotebookPanel.jp-Document{min-width:240px;min-height:120px}.jupyter-wrapper .jp-Notebook{padding:var(--jp-notebook-padding);outline:none;overflow:auto;background:var(--jp-layout-color0)}.jupyter-wrapper .jp-Notebook.jp-mod-scrollPastEnd::after{display:block;content:\"\";min-height:var(--jp-notebook-scroll-padding)}.jupyter-wrapper .jp-Notebook .jp-Cell{overflow:visible}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-InputPrompt{cursor:move}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt{opacity:var(--jp-cell-prompt-not-active-opacity);color:var(--jp-cell-prompt-not-active-font-color)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser{background:var(--jp-brand-color1)}.jupyter-wrapper .jp-Notebook .jp-Cell .jp-Collapser:hover{box-shadow:var(--jp-elevation-z2);background:var(--jp-brand-color1);opacity:var(--jp-cell-collapser-not-active-hover-opacity)}.jupyter-wrapper .jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover{background:var(--jp-brand-color0);opacity:1}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected{background:var(--jp-notebook-multiselected-color)}.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected){background:rgba(0,0,0,0)}.jupyter-wrapper .jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor{border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);box-shadow:var(--jp-input-box-shadow);background-color:var(--jp-cell-editor-active-background)}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropSource{opacity:.5}.jupyter-wrapper .jp-Notebook-cell.jp-mod-dropTarget,.jupyter-wrapper .jp-Notebook.jp-mod-commandMode .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget{border-top-color:var(--jp-private-notebook-selected-color);border-top-style:solid;border-top-width:2px}.jupyter-wrapper .jp-dragImage{display:flex;flex-direction:row;width:var(--jp-private-notebook-dragImage-width);height:var(--jp-private-notebook-dragImage-height);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background);overflow:visible}.jupyter-wrapper .jp-dragImage-singlePrompt{box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-dragImage .jp-dragImage-content{flex:1 1 auto;z-index:2;font-size:var(--jp-code-font-size);font-family:var(--jp-code-font-family);line-height:var(--jp-code-line-height);padding:var(--jp-code-padding);border:var(--jp-border-width) solid var(--jp-cell-editor-border-color);background:var(--jp-cell-editor-background-color);color:var(--jp-content-font-color3);text-align:left;margin:4px 4px 4px 0px}.jupyter-wrapper .jp-dragImage .jp-dragImage-prompt{flex:0 0 auto;min-width:36px;color:var(--jp-cell-inprompt-font-color);padding:var(--jp-code-padding);padding-left:12px;font-family:var(--jp-cell-prompt-font-family);letter-spacing:var(--jp-cell-prompt-letter-spacing);line-height:1.9;font-size:var(--jp-code-font-size);border:var(--jp-border-width) solid rgba(0,0,0,0)}.jupyter-wrapper .jp-dragImage-multipleBack{z-index:-1;position:absolute;height:32px;width:300px;top:8px;left:8px;background:var(--jp-layout-color2);border:var(--jp-border-width) solid var(--jp-input-border-color);box-shadow:2px 2px 4px 0px rgba(0,0,0,.12)}.jupyter-wrapper .jp-NotebookTools{display:block;min-width:var(--jp-sidebar-min-width);color:var(--jp-ui-font-color1);background:var(--jp-layout-color1);font-size:var(--jp-ui-font-size1);overflow:auto}.jupyter-wrapper .jp-NotebookTools-tool{padding:0px 12px 0 12px}.jupyter-wrapper .jp-ActiveCellTool{padding:12px;background-color:var(--jp-layout-color1);border-top:none !important}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-prompt{flex:0 0 auto;padding-left:0px}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor{flex:1 1 auto;background:var(--jp-cell-editor-background);border-color:var(--jp-cell-editor-border-color)}.jupyter-wrapper .jp-ActiveCellTool .jp-InputArea-editor .CodeMirror{background:rgba(0,0,0,0)}.jupyter-wrapper .jp-MetadataEditorTool{flex-direction:column;padding:12px 0px 12px 0px}.jupyter-wrapper .jp-RankedPanel>:not(:first-child){margin-top:12px}.jupyter-wrapper .jp-KeySelector select.jp-mod-styled{font-size:var(--jp-ui-font-size1);color:var(--jp-ui-font-color0);border:var(--jp-border-width) solid var(--jp-border-color1)}.jupyter-wrapper .jp-KeySelector label,.jupyter-wrapper .jp-MetadataEditorTool label{line-height:1.4}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook{--jp-content-font-size1: var(--jp-content-presentation-font-size1);--jp-code-font-size: var(--jp-code-presentation-font-size)}.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,.jupyter-wrapper .jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt{flex:0 0 110px}.jupyter-wrapper .md-typeset__scrollwrap{margin:0}.jupyter-wrapper .jp-MarkdownOutput{padding:0}.jupyter-wrapper h1 .anchor-link,.jupyter-wrapper h2 .anchor-link,.jupyter-wrapper h3 .anchor-link,.jupyter-wrapper h4 .anchor-link,.jupyter-wrapper h5 .anchor-link,.jupyter-wrapper h6 .anchor-link{display:none;margin-left:.5rem;color:var(--md-default-fg-color--lighter)}.jupyter-wrapper h1 .anchor-link:hover,.jupyter-wrapper h2 .anchor-link:hover,.jupyter-wrapper h3 .anchor-link:hover,.jupyter-wrapper h4 .anchor-link:hover,.jupyter-wrapper h5 .anchor-link:hover,.jupyter-wrapper h6 .anchor-link:hover{text-decoration:none;color:var(--md-accent-fg-color)}.jupyter-wrapper h1:hover .anchor-link,.jupyter-wrapper h2:hover .anchor-link,.jupyter-wrapper h3:hover .anchor-link,.jupyter-wrapper h4:hover .anchor-link,.jupyter-wrapper h5:hover .anchor-link,.jupyter-wrapper h6:hover .anchor-link{display:inline-block}.jupyter-wrapper .jp-InputArea{width:100%}.jupyter-wrapper .jp-Cell-inputArea{width:100%}.jupyter-wrapper .jp-RenderedHTMLCommon{width:100%}.jupyter-wrapper .jp-Cell-inputWrapper .jp-InputPrompt{display:none}.jupyter-wrapper .jp-CodeCell .jp-Cell-inputWrapper .jp-InputPrompt{display:block}.jupyter-wrapper .highlight pre{overflow:auto}.jupyter-wrapper .celltoolbar{border:none;background:#eee;border-radius:2px 2px 0px 0px;width:100%;height:29px;padding-right:4px;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;box-pack:end;justify-content:flex-start;display:-webkit-flex}.jupyter-wrapper .celltoolbar .tags_button_container{display:flex}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container{display:flex;flex-direction:row;flex-grow:1;overflow:hidden;position:relative}.jupyter-wrapper .celltoolbar .tags_button_container .tag-container .cell-tag{background-color:#fff;white-space:nowrap;margin:3px 4px;padding:0 4px;border-radius:1px;border:1px solid #ccc;box-shadow:none;width:inherit;font-size:11px;font-family:\"Roboto Mono\",SFMono-Regular,Consolas,Menlo,monospace;height:22px;display:inline-block}.jupyter-wrapper .jp-InputArea-editor{width:1px}.jupyter-wrapper .jp-InputPrompt{overflow:unset}.jupyter-wrapper .jp-OutputPrompt{overflow:unset}.jupyter-wrapper .jp-RenderedText{font-size:var(--jp-code-font-size)}.jupyter-wrapper .highlight-ipynb{overflow:auto}.jupyter-wrapper .highlight-ipynb pre{margin:0;padding:5px 10px}.jupyter-wrapper table{width:max-content}.jupyter-wrapper table.dataframe{margin-left:auto;margin-right:auto;border:none;border-collapse:collapse;border-spacing:0;color:#000;font-size:12px;table-layout:fixed}.jupyter-wrapper table.dataframe thead{border-bottom:1px solid #000;vertical-align:bottom}.jupyter-wrapper table.dataframe tr,.jupyter-wrapper table.dataframe th,.jupyter-wrapper table.dataframe td{text-align:right;vertical-align:middle;padding:.5em .5em;line-height:normal;white-space:normal;max-width:none;border:none}.jupyter-wrapper table.dataframe th{font-weight:bold}.jupyter-wrapper table.dataframe tbody tr:nth-child(odd){background:#f5f5f5}.jupyter-wrapper table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}.jupyter-wrapper *+table{margin-top:1em}.jupyter-wrapper .jp-InputArea-editor{position:relative}.jupyter-wrapper .zeroclipboard-container{position:absolute;top:-3px;right:0;z-index:1000}.jupyter-wrapper .zeroclipboard-container clipboard-copy{-webkit-appearance:button;-moz-appearance:button;padding:7px 5px;font:11px system-ui,sans-serif;display:inline-block;cursor:default}.jupyter-wrapper .zeroclipboard-container .clipboard-copy-icon{padding:4px 4px 2px;color:#57606a;vertical-align:text-bottom}.jupyter-wrapper .clipboard-copy-txt{display:none}[data-md-color-scheme=slate] .clipboard-copy-icon{color:#fff !important}[data-md-color-scheme=slate] table.dataframe{color:#e9ebfc}[data-md-color-scheme=slate] table.dataframe thead{border-bottom:1px solid rgba(233,235,252,.12)}[data-md-color-scheme=slate] table.dataframe tbody tr:nth-child(odd){background:#222}[data-md-color-scheme=slate] table.dataframe tbody tr:hover{background:rgba(66,165,245,.2)}table{width:max-content} /*# sourceMappingURL=mkdocs-jupyter.css.map*/ init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: \"AMS\", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ], displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'center', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([\"Typeset\", MathJax.Hub]); } } init_mathjax(); Getting Started with Shape Cohort Generator \u00b6 Before you start! \u00b6 This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows. In this notebook, you will learn: \u00b6 How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes. About ShapeCohortGenerator \u00b6 ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families. What is a shape cohort ? \u00b6 A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized. Why ShapeCohortGenerator ? \u00b6 We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow. What families of shape can be generated by ShapeCohortGenerator ? \u00b6 ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes . Ellipsoids \u00b6 An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$ Supershapes \u00b6 Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below. 2D Supershapes \u00b6 2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images. Joint Ellipsoids \u00b6 Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation. Torus \u00b6 Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside). What you can do with ShapeCohortGenerator ? \u00b6 The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code. Importing shapeworks library \u00b6 In [ ]: Copied! import shapeworks as sw import shapeworks as sw Importing ShapeCohortGen library \u00b6 To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen Defining parameters for pyvista plotter \u00b6 In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges Generating an Ellipsoid Cohort \u00b6 Step 1: Initalize Ellipsoid Generator \u00b6 Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views Step 4: Generate Images - Turning segmentations into non-binary images \u00b6 For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0) Generating Supershapes Cohort \u00b6 SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$. Step 1: Initialize SuperShapes Generator \u00b6 Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir) Step 2: Generate Meshes \u00b6 For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook) Step 3: Generate Segmentations \u00b6 This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views) Step 4: Generate Images \u00b6 This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#getting-started-with-shape-cohort-generator","text":"","title":"Getting Started with Shape Cohort Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#before-you-start","text":"This notebook assumes that shapeworks conda environment has been activated using conda activate shapeworks on the terminal. See Getting Started with Notebooks for information on setting up your environment and notebook shortcuts. See Getting Started with Meshes to learn how to load and visualize meshes. See Getting Started with Segmentations to learn how to load and visualize binary segmentations. Note example output was generated on Linux/Mac environment and may look different on Windows.","title":"Before you start!"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#in-this-notebook-you-will-learn","text":"How to use the ShapeCohortGenerator package to generate meshes and segmentations (binary images) for synthetic shape cohorts, i.e., parameterized families of shapes.","title":"In this notebook, you will learn:"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#about-shapecohortgenerator","text":"ShapeCohortGenerator is a python package that generates synthetic shape cohorts with groundtruth surface correspondences by varying different parameters describing such shape families.","title":"About ShapeCohortGenerator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-is-a-shape-cohort","text":"A shape cohort is a collection of geometric shapes that attain clear differences in shape; however, they share common characteristics that stem from the underlying mechanisms involved in their formation. For real-world shapes, e.g., anatomical structures, such common characteristics (or factor of variations) are not known in advance, hence ShapeWorks discovers such factors of variations directly from surface meshes or binary segmentations of such shapes. ShapeCohortGenerator uses the true factors of variations known for synthetic shapes that are analytically parameterized.","title":"What is a shape cohort ?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#why-shapecohortgenerator","text":"We require a shape population dataset to run the shape modeling workflow. Each population dataset requires unique grooming steps. Developing and testing complicated grooming pipelines for large-scale datasets can consume a lot of computational resources and time. Hence, having a few toy datasets, which are lightweight and robust in variability can make this development and debugging process easier and simpler.These cohorts can also be used to test the optimization workflow.","title":"Why ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-families-of-shape-can-be-generated-by-shapecohortgenerator","text":"ShapeCohortGenerator currently supports two families of synthetic shapes, namely ellipsoids and supershapes .","title":"What families of shape can be generated by ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#ellipsoids","text":"An ellipsoid is symmetrical about three mutually perpendicular axes that intersect at the center. If a, b, and c are the principal semiaxes, the general equation of such an ellipsoid is $$\\frac{x^2}{a^2} + \\frac{y^2}{b^2} + \\frac{z^2}{c^2} = 1$$","title":"Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#supershapes","text":"Supershapes are an extension of superellipses that can exhibit variable symmetry as well as asymmetry. Supershapes can be described through a single equation, the so-called superformula, that parametrizes a wide variety of shapes, including geometric primitives. The superformula is given by : $$ r(\\theta) = \\left[ \\left| \\frac{1}{a} \\cos \\left( \\frac{m\\theta}{4} \\right) \\right|^{n_2} + \\left| \\frac{1}{b} \\sin \\left(\\frac{m\\theta}{4} \\right) \\right|^{n_3} \\right]^{-\\frac{1}{n_1}} $$ Unlike superellipses, supershapes need not to be symmetric; the parameter $m$ controls the rotational symmetry. The values of $a$ and $b$ control the size, and the exponents $n_1,n_2$ and $n_3$ control the curvature of the sides. The superformula can produce a wide range of shapes,including many shapes found in nature. The ShapeCohortGenerator package allows the user to specify the rotational symmetry $m$ and the size. The values of $n_1,n_2$ and $n_3$ are randomly selected to creates shapes with different curvatures. Examples of these supershapes with different $m$ values can be seen below.","title":"Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#2d-supershapes","text":"2D supershapes are the same as Supershapes but two-dimensional instead of three. When generation is called, contours are created rather than meshes When generate_segmentations and generate_images are called, 2D .png images are created rather than 3D .nrrd images.","title":"2D Supershapes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#joint-ellipsoids","text":"Joint ellipsoids are two ellipsoids positioned in a parameterized way in relation to each other. This cohort allows for exploring modes of variation such as relative rotation.","title":"Joint Ellipsoids"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#torus","text":"Tori are donut-shaped surfaces generated by a circle rotated about an axis in its plane that does not intersect the circle. For the tori mesh generation, the arguments are the same as for ellipsoids, except instead of randomize_x_radius and randomize_y_radius we have randomize_ring_radius (outside) and randomize_cross_section_radius (inside).","title":"Torus"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#what-you-can-do-with-shapecohortgenerator","text":"The ShapeCohortGenerator package can be used to generate collections of ellipsoids or supershapes, where the user can control the number of shapes in the cohort and the variability of the members of the cohort. Each cohort will have mesh data (vtk format, supershapes will be saved in stl format) and segmentation image data (nrrd format). These cohorts generated by the package can be directly run with ShapeWorks . Generating these cohorts in the Output folder would be a good way to start. We will also define modular/generic helper functions as we walk through these items to reuse functionalities without duplicating code.","title":"What you can do with ShapeCohortGenerator?"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapeworks-library","text":"In [ ]: Copied! import shapeworks as sw import shapeworks as sw","title":"Importing shapeworks library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#importing-shapecohortgen-library","text":"To use this package, first a generator is defined, then generate() is called that generates shapes in vtk mesh format. Then segmentations (binary image) and images (synthetic intensities that mimic imaging data for real shapes) can be created from those meshes. Each generator has three functions: generate() for mesh generation (function specific to generator type) generate_segmentations() for segmentation generation based on meshes (general function shared by all generator types) generate_images() for image generation based on segmentations (general function shared by all generator types) In [ ]: Copied! import ShapeCohortGen import ShapeCohortGen","title":"Importing ShapeCohortGen library"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#defining-parameters-for-pyvista-plotter","text":"In [ ]: Copied! # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges # define parameters that controls the plotter # common for volumes and meshes visualization notebook = False # True will set the renderings inline show_borders = True # show borders for each rendering window show_axes = True # show a vtk axes widget for each rendering window show_bounds = True # show volume bounding box show_all_edges = True # add an unlabeled and unticked box at the boundaries of plot. font_size = 10 # text font size for windows link_views = True # link all rendering windows so that they share same camera and axes boundaries # for volumes shade_volumes = True # use shading when performing volume rendering color_map = 'coolwarm' # color map for volume rendering, e.g., 'bone', 'coolwarm', 'cool', 'viridis', 'magma' # for meshes meshes_color = 'tan' # color to be used for meshes (can be a list with the same size as meshList if different colors are needed) mesh_style = 'surface' # visualization style of the mesh. style='surface', style='wireframe', style='points'. show_mesh_edges = False # show mesh edges","title":"Defining parameters for pyvista plotter"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-an-ellipsoid-cohort","text":"","title":"Generating an Ellipsoid Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initalize-ellipsoid-generator","text":"Here, we will initialize an ellipsoid cohort generator. The output directory needs to be specified, otherwise an output directory will automatically generated. Arguments: out_dir : path where the dataset should be saved Datatype : string Default value : current_directory/generated_ellipsoid_cohort/ In [ ]: Copied! out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen . EllipsoidCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Ellipsoids/\" ellipsoid_generator = ShapeCohortGen.EllipsoidCohortGenerator(out_dir)","title":"Step 1: Initalize Ellipsoid Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the ellipsoid mesh generation, you can specify the following arguments: num_samples : number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellipsoid if set to True Datatype : bool Defaut value : True randomize_x_radius : randomizes the radius of the ellipsoid along x-axis if set to True or else the value is fixed as 20 for all ellipsoids Datatype : bool Defaut value : True randomize_y_radius : randomizes the radius of the ellipsoid along y-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True randomize_z_radius : randomizes the radius of the ellipsoid along z-axis if set to True or else the value is fixed as 10 for all ellipsoids Datatype : bool Defaut value : True In [ ]: Copied! num_samples = 8 meshFiles = ellipsoid_generator . generate ( num_samples ) num_samples = 8 meshFiles = ellipsoid_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"For segmentation generation, you can specify the following arguments: randomize_size : randomize the size of the images to include more background if set to True Datatype : bool Defaut value : True spacing : set the spacing of the segmentation image Datatype: list Default value: [1,1,1] allow_on_boundary : If set to True ,randomly selects 20% samples and ensure that the shapes are touching two random selected axes out of [x,y,z] Datatype : bool Defaut value : True In [ ]: Copied! segFiles = ellipsoid_generator . generate_segmentations () segFiles = ellipsoid_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images-turning-segmentations-into-non-binary-images","text":"For the image generation, a Gaussian distribution is used to define foreground and background pixels values and a blur factor is used to blur the boundary with a Gaussian filter. You can specify the following arguments: blur_factor : size of Gaussian filter to use for boundary blurring Datatype : int Defaut value : 1 foreground_mean : mean of the foreground pixel value distribution Datatype: int Default value: 180 foreground_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 background_mean : mean of the background pixel value distribution Datatype: int Default value: 80 background_var : variance of the foreground pixel value distribution Datatype : int Defaut value : 30 In [ ]: Copied! imageFiles = ellipsoid_generator . generate_images () imageFiles = ellipsoid_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0)","title":"Step 4: Generate Images - Turning segmentations into non-binary images"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#generating-supershapes-cohort","text":"SuperShapes are parameterized shapes that have geometry based on a given number of lobes, $m$.","title":"Generating Supershapes Cohort"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-1-initialize-supershapes-generator","text":"Here, we will initialize SuperShapes cohort generator. The output directory needs to be specified otherwise an output directory will automatically be generated. Argument: out_dir : path where the dataset should be saved Datatype : string Default value : 'current_directory/generated_supershapes_cohort/' In [ ]: Copied! out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen . SupershapesCohortGenerator ( out_dir ) out_dir = \"../Output/Generated_Supershapes/\" ss_generator = ShapeCohortGen.SupershapesCohortGenerator(out_dir)","title":"Step 1: Initialize SuperShapes Generator"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-2-generate-meshes","text":"For the supershapes mesh generation, you can specify the following arguments: num_samples - number of samples in the cohort(dataset) Datatype : int Default value : 3 randomize_center : randomizes the centers for ellipsoid mesh generation if set to True Datatype : bool Defaut value : True randomize_rotation : randomizes the orientation of the ellispoids if set to True Datatype : bool Defaut value : True m : number of lobes supershapes should have Datatype : int Default value: 3 size : size of meshes (won't be more than 'size' away from center in any direction) Datatype: int Default value: 20 In [ ]: Copied! num_samples = 8 meshFiles = ss_generator . generate ( num_samples ) num_samples = 8 meshFiles = ss_generator.generate(num_samples) In [ ]: Copied! meshList = [] for i in range ( len ( meshFiles )): shapeMesh = sw . Mesh ( meshFiles [ i ]) meshList . append ( shapeMesh ) # Plot the meshes sw . plot_meshes ( meshList , use_same_window = True , notebook = notebook ) meshList = [] for i in range(len(meshFiles)): shapeMesh = sw.Mesh(meshFiles[i]) meshList.append(shapeMesh) # Plot the meshes sw.plot_meshes(meshList, use_same_window=True, notebook=notebook)","title":"Step 2: Generate Meshes"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-3-generate-segmentations","text":"This is data type independent, the options are the same as they were for the ellipsoid. In [ ]: Copied! segFiles = ss_generator . generate_segmentations () segFiles = ss_generator.generate_segmentations() Let's visualize the generated segmentations. In [ ]: Copied! shapeSegList = [] shapeNames = [] for segFile in segFiles : shapeSegList . append ( sw . Image ( segFile )) shapeNames . append ( segFile . split ( '/' )[ - 1 ]) print ( shapeNames ) sw . plot_volumes ( shapeSegList , volumeNames = shapeNames , notebook = notebook , show_borders = show_borders , shade_volumes = shade_volumes , show_axes = show_axes , show_bounds = show_bounds , show_all_edges = show_all_edges , font_size = font_size , link_views = True ) #link_views) shapeSegList = [] shapeNames = [] for segFile in segFiles: shapeSegList.append(sw.Image(segFile)) shapeNames.append(segFile.split('/')[-1]) print(shapeNames) sw.plot_volumes(shapeSegList, volumeNames = shapeNames, notebook = notebook, show_borders = show_borders, shade_volumes = shade_volumes, show_axes = show_axes, show_bounds = show_bounds, show_all_edges = show_all_edges, font_size = font_size, link_views = True ) #link_views)","title":"Step 3: Generate Segmentations"},{"location":"notebooks/getting-started-with-shape-cohort-generation.html#step-4-generate-images","text":"This is also a standard function and has all the same options as listed before. In [ ]: Copied! imageFiles = ss_generator . generate_images () imageFiles = ss_generator.generate_images() Let's compare a segmentation to it's corresponding image. In [ ]: Copied! print ( \"Segmentation:\" ) seg0 = sw . Image ( segFiles [ 0 ]) sw . plot_volumes ( seg0 , notebook = notebook ) print(\"Segmentation:\") seg0 = sw.Image(segFiles[0]) sw.plot_volumes(seg0, notebook=notebook) In [ ]: Copied! print ( \"Image:\" ) img0 = sw . Image ( imageFiles [ 0 ]) sw . plot_volumes ( img0 , notebook = notebook ) print(\"Image:\") img0 = sw.Image(imageFiles[0]) sw.plot_volumes(img0, notebook=notebook)","title":"Step 4: Generate Images"},{"location":"python/python-api.html","text":"ShapeWorks Python API ShapeWorks Python API ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor Pi = 3.141592653589793 Convert a string or number to a floating point number, if possible. X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z Analyze () Bases: pybind11_object create_shape_from_points () method descriptor create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape get_mean_shape () method descriptor get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh get_mean_shape_points () method descriptor get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]] get_mode_shape () method descriptor get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape get_num_modes () method descriptor get_num_modes(self: shapeworks_py.Analyze) -> int get_num_particles () method descriptor get_num_particles(self: shapeworks_py.Analyze) -> int get_num_subjects () method descriptor get_num_subjects(self: shapeworks_py.Analyze) -> int get_shape_points () method descriptor get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles get_shapes () method descriptor get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > > get_subject_features () method descriptor get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]] groups_active () method descriptor groups_active(self: shapeworks_py.Analyze) -> bool run_offline_analysis () method descriptor run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None Axis () Bases: pybind11_object Members: invalid X Y Z X = < Axis . X : 0 > Members: invalid X Y Z Y = < Axis . Y : 1 > Members: invalid X Y Z Z = < Axis . Z : 2 > Members: invalid X Y Z invalid = < Axis . invalid : - 1 > Members: invalid X Y Z name property name(self: handle) -> str DomainType () Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain ContourDomain = < DomainType . ContourDomain : 67 > Members: MeshDomain ImageDomain ContourDomain ImageDomain = < DomainType . ImageDomain : 73 > Members: MeshDomain ImageDomain ContourDomain MeshDomain = < DomainType . MeshDomain : 77 > Members: MeshDomain ImageDomain ContourDomain name property name(self: handle) -> str Image () Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). antialias () method descriptor antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified) applyCurvatureFilter () method descriptor applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter applyGradientFilter () method descriptor applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter applyIntensityFilter () method descriptor applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter applySigmoidFilter () method descriptor applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter applyTPLevelSetFilter () method descriptor applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter applyTransform () method descriptor applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor) assign () method descriptor assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)). binarize () method descriptor binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value center () method descriptor center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval] clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0) closeHoles () method descriptor closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value compare () method descriptor compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images computeDT () method descriptor computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue coordsys () method descriptor coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space copy () method descriptor copy(self: shapeworks_py.Image) -> shapeworks_py.Image createCenterOfMassTransform () method descriptor createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image createRigidRegistrationTransform () method descriptor createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations crop () method descriptor crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding dims () method descriptor dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image evaluate () method descriptor evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space extractLabel () method descriptor extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image gaussianBlur () method descriptor gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur isolate () method descriptor isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object logicalBoundingBox () method descriptor logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region logicalToPhysical () method descriptor logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space max () method descriptor max(self: shapeworks_py.Image) -> float maximum of image mean () method descriptor mean(self: shapeworks_py.Image) -> float mean of image min () method descriptor min(self: shapeworks_py.Image) -> float minimum of image origin () method descriptor origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin pad () method descriptor pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value physicalBoundingBox () method descriptor physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue physicalToLogical () method descriptor physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space physicalboundingBox () method descriptor physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image recenter () method descriptor recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image reflect () method descriptor reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis resample () method descriptor resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing resize () method descriptor resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing) rotate () method descriptor rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) scale () method descriptor scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin) setCoordsys () method descriptor setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image setOrigin () method descriptor setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value setSpacing () method descriptor setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel size () method descriptor size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing) spacing () method descriptor spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image std () method descriptor std(self: shapeworks_py.Image) -> float standard deviation of image toArray () method descriptor toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this). toMesh () method descriptor toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue topologyPreservingSmooth () method descriptor topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter] translate () method descriptor translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image write () method descriptor write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension) ImageUtils ( args , kwargs ) Bases: pybind11_object boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images createWarpTransform () staticmethod createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points IndexRegion () Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None max property max point of region min property min point of region origin () method descriptor origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount size () method descriptor size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid InterpolationType () Bases: pybind11_object Members: Linear NearestNeighbor Linear = < InterpolationType . Linear : 0 > Members: Linear NearestNeighbor NearestNeighbor = < InterpolationType . NearestNeighbor : 1 > Members: Linear NearestNeighbor name property name(self: handle) -> str Mesh () Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Face = < FieldType . Face : 1 > Members: Point Face Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Point = < FieldType . Point : 0 > Members: Point Face PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine AlignmentType () Bases: pybind11_object Members: Rigid Similarity Affine Affine = < AlignmentType . Affine : 2 > Members: Rigid Similarity Affine Rigid = < AlignmentType . Rigid : 0 > Members: Rigid Similarity Affine Similarity = < AlignmentType . Similarity : 1 > Members: Rigid Similarity Affine name property name(self: handle) -> str CurvatureType () Bases: pybind11_object Members: Principal Gaussian Mean Gaussian = < CurvatureType . Gaussian : 1 > Members: Principal Gaussian Mean Mean = < CurvatureType . Mean : 2 > Members: Principal Gaussian Mean Principal = < CurvatureType . Principal : 0 > Members: Principal Gaussian Mean name property name(self: handle) -> str DistanceMethod () Bases: pybind11_object Members: PointToPoint PointToCell PointToCell = < DistanceMethod . PointToCell : 1 > Members: PointToPoint PointToCell PointToPoint = < DistanceMethod . PointToPoint : 0 > Members: PointToPoint PointToCell name property name(self: handle) -> str FieldType () Bases: pybind11_object Members: Point Face Face = < FieldType . Face : 1 > Members: Point Face Point = < FieldType . Point : 0 > Members: Point Face name property name(self: handle) -> str SubdivisionType () Bases: pybind11_object Members: Butterfly Loop Butterfly = < SubdivisionType . Butterfly : 0 > Members: Butterfly Loop Loop = < SubdivisionType . Loop : 1 > Members: Butterfly Loop name property name(self: handle) -> str applySubdivisionFilter () method descriptor applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop) applyTransform () method descriptor applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh boundingBox () method descriptor boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh center () method descriptor center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh centerOfMass () method descriptor centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh clip () method descriptor clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clipClosedSurface () method descriptor clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface closestPoint () method descriptor closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh closestPointId () method descriptor closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space compareField () method descriptor compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields computeNormals () method descriptor computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals computeThickness () method descriptor computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness copy () method descriptor copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh coverage () method descriptor coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head) createTransform () method descriptor createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10) curvature () method descriptor curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean) distance () method descriptor distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points faces () method descriptor faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed fillHoles () method descriptor fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them fixElement () method descriptor fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh geodesicDistance () method descriptor geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh getFace () method descriptor getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed getField () method descriptor getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field getFieldNames () method descriptor getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh getFieldValue () method descriptor getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field getMultiFieldValue () method descriptor getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field getPoint () method descriptor getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index invertNormals () method descriptor invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals numFaces () method descriptor numFaces(self: shapeworks_py.Mesh) -> int number of faces numPoints () method descriptor numPoints(self: shapeworks_py.Mesh) -> int number of points points () method descriptor points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point probeVolume () method descriptor probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image reflect () method descriptor reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis remesh () method descriptor remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity remeshPercent () method descriptor remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity rotate () method descriptor rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees) scale () method descriptor scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh setField () method descriptor setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array setFieldValue () method descriptor setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value smooth () method descriptor smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing smoothSinc () method descriptor smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing toDistanceTransform () method descriptor toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding) toImage () method descriptor toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing) translate () method descriptor translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh write () method descriptor write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension MeshUtils ( args , kwargs ) Bases: pybind11_object boundaryLoopExtractor () staticmethod boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file boundingBox () staticmethod boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes computeMeanNormals () staticmethod computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes findReferenceMesh () staticmethod findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes generateNormals () staticmethod generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes sharedBoundaryExtractor () staticmethod sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes MeshWarper () Bases: pybind11_object buildMesh () method descriptor buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3]) extractLandmarks () method descriptor extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3]) generateWarp () method descriptor generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping getGoodParticlesIndices () method descriptor getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles. getLandmarksMap () method descriptor getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices. getReferenceMesh () method descriptor getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping. getReferenceParticles () method descriptor getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping. getWarpMatrix () method descriptor getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control). hasBadParticles () method descriptor hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s). prepareMesh () staticmethod prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted). Optimize () Bases: pybind11_object GetParticleSystem () method descriptor GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]] LoadParameterFile () method descriptor LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool Run () method descriptor Run(self: shapeworks_py.Optimize) -> bool SetIterationCallbackFunction () method descriptor SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None SetUpOptimize () method descriptor SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool Parameters () Bases: pybind11_object as_map () method descriptor as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map get () method descriptor get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist key_exists () method descriptor key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not remove_entry () method descriptor remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry reset_parameters () method descriptor reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank set () method descriptor set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key ParticleShapeStatistics () Bases: pybind11_object PCA () method descriptor PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data eigenValues () method descriptor eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values eigenVectors () method descriptor eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors numDims () method descriptor numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system pcaLoadings () method descriptor pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed percentVarByMode () method descriptor percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components principalComponentProjections () method descriptor principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components sampleSize () method descriptor sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system ParticleSystem () Bases: pybind11_object D () method descriptor D(self: shapeworks_py.ParticleSystem) -> int EvaluationCompare () method descriptor EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool ExactCompare () method descriptor ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool N () method descriptor N(self: shapeworks_py.ParticleSystem) -> int Particles () method descriptor Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]] Paths () method descriptor Paths(self: shapeworks_py.ParticleSystem) -> List[str] ShapeAsPointSet () method descriptor ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape PhysicalRegion () Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None max property max point of region min property min point of region expand () method descriptor expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point origin () method descriptor origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region pad () method descriptor pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount shrink () method descriptor shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both size () method descriptor size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region valid () method descriptor valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid Project () Bases: pybind11_object clear_parameters () method descriptor clear_parameters(self: shapeworks_py.Project, name: str) -> None get_domain_names () method descriptor get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc) get_feature_names () method descriptor get_feature_names(self: shapeworks_py.Project) -> List[str] get_filename () method descriptor get_filename(self: shapeworks_py.Project) -> str Return the filename get_groomed_domain_types () method descriptor get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types get_groomed_present () method descriptor get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present get_group_names () method descriptor get_group_names(self: shapeworks_py.Project) -> List[str] get_group_values () method descriptor get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str] get_headers () method descriptor get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet get_images_present () method descriptor get_images_present(self: shapeworks_py.Project) -> bool get_number_of_domains_per_subject () method descriptor get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains get_number_of_subjects () method descriptor get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project get_original_domain_types () method descriptor get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types get_originals_present () method descriptor get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present get_parameters () method descriptor get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters get_particles_present () method descriptor get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present get_string_column () method descriptor get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name get_subjects () method descriptor get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects get_supported_version () method descriptor get_supported_version(self: shapeworks_py.Project) -> int get_version () method descriptor get_version(self: shapeworks_py.Project) -> int load () method descriptor load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file save () method descriptor save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file set_filename () method descriptor set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename set_groomed_domain_types () method descriptor set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types set_original_domain_types () method descriptor set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types set_parameters () method descriptor set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None set_subjects () method descriptor set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None store_subjects () method descriptor store_subjects(self: shapeworks_py.Project) -> None ReconstructSurface_RBFSSparseTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None ReconstructSurface_ThinPlateSplineTransform () Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None meanSurface () method descriptor meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None samplesAlongPCAModes () method descriptor samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None setDoProcrustes () method descriptor setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None setDoProcrustesScaling () method descriptor setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None setEnableOutput () method descriptor setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None setMaxAngleDegrees () method descriptor setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None setMaxStdDev () method descriptor setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None setMaxVarianceCaptured () method descriptor setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None setMeanBeforeWarp () method descriptor setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None setModeIndex () method descriptor setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None setNumOfClusters () method descriptor setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None setNumOfModes () method descriptor setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None setNumOfParticles () method descriptor setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None setNumOfSamplesPerMode () method descriptor setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None setOutPath () method descriptor setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None setOutPrefix () method descriptor setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None surface () method descriptor surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None ShapeEvaluation ( args , kwargs ) Bases: pybind11_object ComputeCompactness () staticmethod ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system ComputeFullCompactness () staticmethod ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes ComputeFullGeneralization () staticmethod ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes ComputeFullSpecificity () staticmethod ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes ComputeGeneralization () staticmethod ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system ComputeSpecificity () staticmethod ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system Subject () Bases: pybind11_object get_constraints_filenames () method descriptor get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain) get_display_name () method descriptor get_display_name(self: shapeworks_py.Subject) -> str Get the display name get_extra_values () method descriptor get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret) get_feature_filenames () method descriptor get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames get_groomed_filenames () method descriptor get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames get_groomed_transforms () method descriptor get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain) get_group_value () method descriptor get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value get_group_values () method descriptor get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map get_landmarks_filenames () method descriptor get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain) get_local_particle_filenames () method descriptor get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames get_number_of_domains () method descriptor get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains get_original_filenames () method descriptor get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames get_procrustes_transforms () method descriptor get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain) get_world_particle_filenames () method descriptor get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames set_constraints_filenames () method descriptor set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain) set_display_name () method descriptor set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name set_extra_values () method descriptor set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values set_feature_filenames () method descriptor set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames set_groomed_filenames () method descriptor set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames set_groomed_transforms () method descriptor set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain) set_group_values () method descriptor set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None set_landmarks_filenames () method descriptor set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain) set_local_particle_filenames () method descriptor set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain) set_number_of_domains () method descriptor set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains set_original_filenames () method descriptor set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain) set_procrustes_transforms () method descriptor set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain) set_world_particle_filenames () method descriptor set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames Variant () Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None as_str () method descriptor as_str(self: shapeworks_py.Variant) -> str Return the variant string content VectorImage () Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space evaluate () method descriptor evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space WarpTransform ( args , kwargs ) Bases: pybind11_object axis_is_valid () builtin axis_is_valid(axis: List[float]) -> bool ensure an axis is valid degToRad () builtin degToRad(deg: float) -> float convert degrees to radians mean () builtin mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field range () builtin range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field seed () builtin seed(seed: int = 1698248459365377) -> None sets the seed for random number generation (internal use) stddev () builtin stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field toAxis () builtin toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"Python API Reference"},{"location":"python/python-api.html#shapeworks-python-api","text":"ShapeWorks Python API","title":"ShapeWorks Python API"},{"location":"python/python-api.html#shapeworks_py.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.Pi","text":"Convert a string or number to a floating point number, if possible.","title":"Pi"},{"location":"python/python-api.html#shapeworks_py.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Analyze","text":"Bases: pybind11_object","title":"Analyze"},{"location":"python/python-api.html#shapeworks_py.Analyze.create_shape_from_points","text":"create_shape_from_points(self: shapeworks_py.Analyze, arg0: shapeworks::Particles) -> shapeworks::Shape","title":"create_shape_from_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape","text":"get_mean_shape(self: shapeworks_py.Analyze) -> shapeworks_py.Mesh","title":"get_mean_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mean_shape_points","text":"get_mean_shape_points(self: shapeworks_py.Analyze) -> numpy.ndarray[numpy.float64[m, 1]]","title":"get_mean_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_mode_shape","text":"get_mode_shape(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Shape","title":"get_mode_shape()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_modes","text":"get_num_modes(self: shapeworks_py.Analyze) -> int","title":"get_num_modes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_particles","text":"get_num_particles(self: shapeworks_py.Analyze) -> int","title":"get_num_particles()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_num_subjects","text":"get_num_subjects(self: shapeworks_py.Analyze) -> int","title":"get_num_subjects()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shape_points","text":"get_shape_points(self: shapeworks_py.Analyze, arg0: int, arg1: float) -> shapeworks::Particles","title":"get_shape_points()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_shapes","text":"get_shapes(self: shapeworks_py.Analyze) -> std::__1::vector , std::__1::allocator\\ > >","title":"get_shapes()"},{"location":"python/python-api.html#shapeworks_py.Analyze.get_subject_features","text":"get_subject_features(self: shapeworks_py.Analyze, arg0: int, arg1: str) -> numpy.ndarray[numpy.float32[m, 1]]","title":"get_subject_features()"},{"location":"python/python-api.html#shapeworks_py.Analyze.groups_active","text":"groups_active(self: shapeworks_py.Analyze) -> bool","title":"groups_active()"},{"location":"python/python-api.html#shapeworks_py.Analyze.run_offline_analysis","text":"run_offline_analysis(self: shapeworks_py.Analyze, arg0: str, arg1: float, arg2: float) -> None","title":"run_offline_analysis()"},{"location":"python/python-api.html#shapeworks_py.Axis","text":"Bases: pybind11_object Members: invalid X Y Z","title":"Axis"},{"location":"python/python-api.html#shapeworks_py.Axis.X","text":"Members: invalid X Y Z","title":"X"},{"location":"python/python-api.html#shapeworks_py.Axis.Y","text":"Members: invalid X Y Z","title":"Y"},{"location":"python/python-api.html#shapeworks_py.Axis.Z","text":"Members: invalid X Y Z","title":"Z"},{"location":"python/python-api.html#shapeworks_py.Axis.invalid","text":"Members: invalid X Y Z","title":"invalid"},{"location":"python/python-api.html#shapeworks_py.Axis.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.DomainType","text":"Bases: pybind11_object Members: MeshDomain ImageDomain ContourDomain","title":"DomainType"},{"location":"python/python-api.html#shapeworks_py.DomainType.ContourDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ContourDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.ImageDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"ImageDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.MeshDomain","text":"Members: MeshDomain ImageDomain ContourDomain","title":"MeshDomain"},{"location":"python/python-api.html#shapeworks_py.DomainType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Image","text":"Bases: pybind11_object init (self: shapeworks_py.Image, arg0: str) -> None init (self: shapeworks_py.Image, arg0: shapeworks_py.Image) -> None init (self: shapeworks_py.Image, arg0: numpy.ndarray) -> None Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"Image"},{"location":"python/python-api.html#shapeworks_py.Image.antialias","text":"antialias(self: shapeworks_py.Image, iterations: int = 50, maxRMSErr: float = 0.009999999776482582, layers: int = 3) -> shapeworks_py.Image antialiases binary volumes (layers is set to 3 when not specified)","title":"antialias()"},{"location":"python/python-api.html#shapeworks_py.Image.applyCurvatureFilter","text":"applyCurvatureFilter(self: shapeworks_py.Image, iterations: int = 10) -> shapeworks_py.Image denoises an image using curvature driven flow using curvature flow image filter","title":"applyCurvatureFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyGradientFilter","text":"applyGradientFilter(self: shapeworks_py.Image) -> shapeworks_py.Image computes gradient magnitude at each pixel using gradient magnitude filter","title":"applyGradientFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyIntensityFilter","text":"applyIntensityFilter(self: shapeworks_py.Image, min: float = 0.0, max: float = 0.0) -> shapeworks_py.Image applies intensity windowing image filter","title":"applyIntensityFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applySigmoidFilter","text":"applySigmoidFilter(self: shapeworks_py.Image, alpha: float = 10.0, beta: float = 10.0) -> shapeworks_py.Image computes sigmoid function pixel-wise using sigmoid image filter","title":"applySigmoidFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTPLevelSetFilter","text":"applyTPLevelSetFilter(self: shapeworks_py.Image, featureImage: shapeworks_py.Image, scaling: float = 20.0) -> shapeworks_py.Image segments structures in image using topology preserving geodesic active contour level set filter","title":"applyTPLevelSetFilter()"},{"location":"python/python-api.html#shapeworks_py.Image.applyTransform","text":"applyTransform( args, *kwargs) Overloaded function. applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: shapeworks_py.WarpTransform, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image applies the given warp transformation to the image using the specified resampling filter (Linear or NearestNeighbor) applyTransform(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = , meshTransform: bool = False) -> shapeworks_py.Image applies the given transformation to the image by using resampling filter with new origin, dims, spacing, and sampling along given direction axes (a 3x3 row-major matrix) using the specified interpolation method (Linear or NearestNeighbor)","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.assign","text":"assign(self: shapeworks_py.Image, arg0: numpy.ndarray) -> shapeworks_py.Image Initialize an image from a numpy array (must be dtype float32). Transfers ownership of the array without copying. If a copy is desired, construct using Image(np.array(arr)).","title":"assign()"},{"location":"python/python-api.html#shapeworks_py.Image.binarize","text":"binarize(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 3.4028234663852886e+38, innerVal: float = 1.0, outerVal: float = 0.0) -> shapeworks_py.Image sets portion of image greater than min and less than or equal to max to the specified value","title":"binarize()"},{"location":"python/python-api.html#shapeworks_py.Image.center","text":"center(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of center of this image","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Image.centerOfMass","text":"centerOfMass(self: shapeworks_py.Image, minVal: float = 0.0, maxVal: float = 1.0) -> numpy.ndarray returns average physical coordinate of pixels in range (minval, maxval]","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Image.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Image, o: List[float], p1: List[float], p2: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (containing three non-colinear points) to val (default 0.0) clip(self: shapeworks_py.Image, n: List[float], q: List[float], val: float = 0.0) -> shapeworks_py.Image sets values on the back side of cutting plane (normal n containing point p) to val (default 0.0)","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Image.closeHoles","text":"closeHoles(self: shapeworks_py.Image, foreground: float = 0.0) -> shapeworks_py.Image closes holes in a volume defined by values larger than specified value","title":"closeHoles()"},{"location":"python/python-api.html#shapeworks_py.Image.compare","text":"compare( args, *kwargs) Overloaded function. compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images compare(self: shapeworks_py.Image, other: shapeworks_py.Image, verifyall: bool = True, tolerance: float = 0.0, precision: float = 1e-12) -> bool compares two images","title":"compare()"},{"location":"python/python-api.html#shapeworks_py.Image.computeDT","text":"computeDT(self: shapeworks_py.Image, isovalue: float = 0.0) -> shapeworks_py.Image computes signed distance transform volume from an image at the specified isovalue","title":"computeDT()"},{"location":"python/python-api.html#shapeworks_py.Image.coordsys","text":"coordsys(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[3, 3]] return 3x3 coordinate system in which this image lives in physical space","title":"coordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.copy","text":"copy(self: shapeworks_py.Image) -> shapeworks_py.Image","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Image.createCenterOfMassTransform","text":"createCenterOfMassTransform(self: shapeworks_py.Image) -> numpy.ndarray[numpy.float64[m, n]] creates a transform that translates center of mass to center of image","title":"createCenterOfMassTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.createRigidRegistrationTransform","text":"createRigidRegistrationTransform(self: shapeworks_py.Image, target: shapeworks_py.Image, isoValue: float = 0.0, iterations: int = 20) -> numpy.ndarray[numpy.float64[m, n]] creates transform to target image using iterative closest point (ICP) registration; images MUST be distance transforms; isovalue is used to create meshes from these distance transform images, which are then passed to ICP for the given number of iterations","title":"createRigidRegistrationTransform()"},{"location":"python/python-api.html#shapeworks_py.Image.crop","text":"crop(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion, padding: int = 0) -> shapeworks_py.Image crops the image down to the given (physica) region, with optional padding","title":"crop()"},{"location":"python/python-api.html#shapeworks_py.Image.dims","text":"dims(self: shapeworks_py.Image) -> numpy.ndarray logical dimensions of the image","title":"dims()"},{"location":"python/python-api.html#shapeworks_py.Image.evaluate","text":"evaluate(self: shapeworks_py.Image, pt: List[float]) -> float evaluate the image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.Image.extractLabel","text":"extractLabel(self: shapeworks_py.Image, label: float = 1.0) -> shapeworks_py.Image extracts/isolates a specific pixel label from a given multi-label volume and outputs the corresponding binary image","title":"extractLabel()"},{"location":"python/python-api.html#shapeworks_py.Image.gaussianBlur","text":"gaussianBlur(self: shapeworks_py.Image, sigma: float = 0.0) -> shapeworks_py.Image applies gaussian blur","title":"gaussianBlur()"},{"location":"python/python-api.html#shapeworks_py.Image.isolate","text":"isolate(self: shapeworks_py.Image) -> shapeworks_py.Image isolate largest object","title":"isolate()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalBoundingBox","text":"logicalBoundingBox(self: shapeworks_py.Image) -> shapeworks::IndexRegion returns the index coordinates of this image's region","title":"logicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.logicalToPhysical","text":"logicalToPhysical( args, *kwargs) Overloaded function. logicalToPhysical(self: shapeworks_py.Image, region: shapeworks::IndexRegion) -> shapeworks::PhysicalRegion converts from a logical region (index coordinates) to a physical region logicalToPhysical(self: shapeworks_py.Image, c: List[int]) -> numpy.ndarray converts a logical (index) coordinate to physical space","title":"logicalToPhysical()"},{"location":"python/python-api.html#shapeworks_py.Image.max","text":"max(self: shapeworks_py.Image) -> float maximum of image","title":"max()"},{"location":"python/python-api.html#shapeworks_py.Image.mean","text":"mean(self: shapeworks_py.Image) -> float mean of image","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.Image.min","text":"min(self: shapeworks_py.Image) -> float minimum of image","title":"min()"},{"location":"python/python-api.html#shapeworks_py.Image.origin","text":"origin(self: shapeworks_py.Image) -> numpy.ndarray physical coordinates of image origin","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.Image.pad","text":"pad( args, *kwargs) Overloaded function. pad(self: shapeworks_py.Image, pad: int, value: float = 0.0) -> shapeworks_py.Image pads an image by same number of pixels in all directions with constant value pad(self: shapeworks_py.Image, padx: int, pady: int, padz: int, value: float = 0.0) -> shapeworks_py.Image pads an image by desired number of pixels in each direction with constant value pad(self: shapeworks_py.Image, region: shapeworks::IndexRegion, value: float = 0.0) -> shapeworks_py.Image pads an image to include the given region with constant value","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalBoundingBox","text":"physicalBoundingBox(self: shapeworks_py.Image, isovalue: float = 1.0) -> shapeworks::PhysicalRegion returns region of physical space occupied by the region of data <= the given isoValue","title":"physicalBoundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalToLogical","text":"physicalToLogical( args, *kwargs) Overloaded function. physicalToLogical(self: shapeworks_py.Image, region: shapeworks::PhysicalRegion) -> shapeworks::IndexRegion converts from a physical region to a logical region (index coordinates) physicalToLogical(self: shapeworks_py.Image, p: List[float]) -> numpy.ndarray converts a physical coordinate to a logical (index) space","title":"physicalToLogical()"},{"location":"python/python-api.html#shapeworks_py.Image.physicalboundingBox","text":"physicalboundingBox(self: shapeworks_py.Image) -> shapeworks::PhysicalRegion returns region of physical space occupied by this image","title":"physicalboundingBox()"},{"location":"python/python-api.html#shapeworks_py.Image.recenter","text":"recenter(self: shapeworks_py.Image) -> shapeworks_py.Image recenters an image by changing its origin in the image header to the physical coordinates of the center of the image","title":"recenter()"},{"location":"python/python-api.html#shapeworks_py.Image.reflect","text":"reflect(self: shapeworks_py.Image, axis: shapeworks_py.Axis) -> shapeworks_py.Image reflect image with respect to logical image center and the specified axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Image.resample","text":"resample( args, *kwargs) Overloaded function. resample(self: shapeworks_py.Image, transform: numpy.ndarray[numpy.float64[4, 4]], origin: List[float], dims: List[int], spacing: List[float], direction: numpy.ndarray[numpy.float64[3, 3]], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples by applying transform then sampling from given origin along direction axes at spacing physical units per pixel for dims pixels using specified interpolator resample(self: shapeworks_py.Image, physicalSpacing: List[float], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image resamples image using new physical spacing, updating logical dims to keep all image data for this spacing resample(self: shapeworks_py.Image, isoSpacing: float = 1.0, interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image isotropically resamples image using giving isospacing","title":"resample()"},{"location":"python/python-api.html#shapeworks_py.Image.resize","text":"resize(self: shapeworks_py.Image, logicalDims: List[int], interp: shapeworks_py.InterpolationType = ) -> shapeworks_py.Image change logical dims (computes new physical spacing)","title":"resize()"},{"location":"python/python-api.html#shapeworks_py.Image.rotate","text":"rotate( args, *kwargs) Overloaded function. rotate(self: shapeworks_py.Image, angle: float, axis: itk::Vector ) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians) rotate(self: shapeworks_py.Image, angle: float, axis: List[float]) -> shapeworks_py.Image rotate around center (not origin) using axis (default z-axis) by angle (in radians)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Image.scale","text":"scale(self: shapeworks_py.Image, scale_vec: List[float]) -> shapeworks_py.Image scale image by scale_vec around center (not origin)","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Image.setCoordsys","text":"setCoordsys(self: shapeworks_py.Image, coordsys: numpy.ndarray[numpy.float64[3, 3]] = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) -> shapeworks_py.Image sets the orientation of this image","title":"setCoordsys()"},{"location":"python/python-api.html#shapeworks_py.Image.setOrigin","text":"setOrigin(self: shapeworks_py.Image, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Image sets the image origin in physical space to the given value","title":"setOrigin()"},{"location":"python/python-api.html#shapeworks_py.Image.setSpacing","text":"setSpacing(self: shapeworks_py.Image, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image set image spacing, the size of each pixel","title":"setSpacing()"},{"location":"python/python-api.html#shapeworks_py.Image.size","text":"size(self: shapeworks_py.Image) -> numpy.ndarray physical dimensions of the image (dims * spacing)","title":"size()"},{"location":"python/python-api.html#shapeworks_py.Image.spacing","text":"spacing(self: shapeworks_py.Image) -> numpy.ndarray physical spacing of the image","title":"spacing()"},{"location":"python/python-api.html#shapeworks_py.Image.std","text":"std(self: shapeworks_py.Image) -> float standard deviation of image","title":"std()"},{"location":"python/python-api.html#shapeworks_py.Image.toArray","text":"toArray(self: shapeworks_py.Image, copy: bool = False, for_viewing: bool = False) -> numpy.ndarray returns raw array of image data, directly sharing data by default, copying if specified. NOTE: many Image operations reallocate image array, so while the array returned from this function is writable, it is best used immediately for Python operations; use for_viewing argument to get array in column-major ('F') order ('sw2vtkImage' already does this).","title":"toArray()"},{"location":"python/python-api.html#shapeworks_py.Image.toMesh","text":"toMesh(self: shapeworks_py.Image, isovalue: float) -> shapeworks::Mesh converts image to mesh at specified isovalue","title":"toMesh()"},{"location":"python/python-api.html#shapeworks_py.Image.topologyPreservingSmooth","text":"topologyPreservingSmooth(self: shapeworks_py.Image, scaling: float = 20.0, sigmoidAlpha: float = 10.5, sigmoidBeta: float = 10.0) -> shapeworks_py.Image creates a feature image (by applying gradient then sigmoid filters), then passes it to the TPLevelSet filter [curvature flow filter is often applied to the image before this filter]","title":"topologyPreservingSmooth()"},{"location":"python/python-api.html#shapeworks_py.Image.translate","text":"translate(self: shapeworks_py.Image, v: List[float]) -> shapeworks_py.Image translates image","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Image.write","text":"write(self: shapeworks_py.Image, filename: str, compressed: bool = True) -> shapeworks_py.Image writes the current image (determines type by its extension)","title":"write()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils","text":"Bases: pybind11_object","title":"ImageUtils"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of filenames boundingBox(images: List[shapeworks_py.Image], isoValue: float = 1.0) -> shapeworks_py.PhysicalRegion compute largest bounding box surrounding the specified isovalue of the specified set of images","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.ImageUtils.createWarpTransform","text":"createWarpTransform(source_landmarks: str, target_landmarks: str, stride: int = 1) -> shapeworks_py.WarpTransform computes a warp transform from the source to the target landmarks (in the given files) using every stride points","title":"createWarpTransform()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion","text":"Bases: pybind11_object init (self: shapeworks_py.IndexRegion) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float], arg1: List[float]) -> None init (self: shapeworks_py.IndexRegion, arg0: List[float]) -> None","title":"IndexRegion"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.origin","text":"origin(self: shapeworks_py.IndexRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.pad","text":"pad(self: shapeworks_py.IndexRegion, padding: int) -> shapeworks_py.IndexRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.size","text":"size(self: shapeworks_py.IndexRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.IndexRegion.valid","text":"valid(self: shapeworks_py.IndexRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.InterpolationType","text":"Bases: pybind11_object Members: Linear NearestNeighbor","title":"InterpolationType"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.Linear","text":"Members: Linear NearestNeighbor","title":"Linear"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.NearestNeighbor","text":"Members: Linear NearestNeighbor","title":"NearestNeighbor"},{"location":"python/python-api.html#shapeworks_py.InterpolationType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh","text":"Bases: pybind11_object init (self: shapeworks_py.Mesh, arg0: str) -> None init (self: shapeworks_py.Mesh, arg0: vtkSmartPointer ) -> None init (self: shapeworks_py.Mesh, arg0: numpy.ndarray[numpy.float64[m, n]], arg1: numpy.ndarray[numpy.int32[m, n]]) -> None","title":"Mesh"},{"location":"python/python-api.html#shapeworks_py.Mesh.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType","text":"Bases: pybind11_object Members: Rigid Similarity Affine","title":"AlignmentType"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Affine","text":"Members: Rigid Similarity Affine","title":"Affine"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Rigid","text":"Members: Rigid Similarity Affine","title":"Rigid"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.Similarity","text":"Members: Rigid Similarity Affine","title":"Similarity"},{"location":"python/python-api.html#shapeworks_py.Mesh.AlignmentType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType","text":"Bases: pybind11_object Members: Principal Gaussian Mean","title":"CurvatureType"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Gaussian","text":"Members: Principal Gaussian Mean","title":"Gaussian"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Mean","text":"Members: Principal Gaussian Mean","title":"Mean"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.Principal","text":"Members: Principal Gaussian Mean","title":"Principal"},{"location":"python/python-api.html#shapeworks_py.Mesh.CurvatureType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod","text":"Bases: pybind11_object Members: PointToPoint PointToCell","title":"DistanceMethod"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToCell","text":"Members: PointToPoint PointToCell","title":"PointToCell"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.PointToPoint","text":"Members: PointToPoint PointToCell","title":"PointToPoint"},{"location":"python/python-api.html#shapeworks_py.Mesh.DistanceMethod.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType","text":"Bases: pybind11_object Members: Point Face","title":"FieldType"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Face","text":"Members: Point Face","title":"Face"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.Point","text":"Members: Point Face","title":"Point"},{"location":"python/python-api.html#shapeworks_py.Mesh.FieldType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType","text":"Bases: pybind11_object Members: Butterfly Loop","title":"SubdivisionType"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Butterfly","text":"Members: Butterfly Loop","title":"Butterfly"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.Loop","text":"Members: Butterfly Loop","title":"Loop"},{"location":"python/python-api.html#shapeworks_py.Mesh.SubdivisionType.name","text":"name(self: handle) -> str","title":"name"},{"location":"python/python-api.html#shapeworks_py.Mesh.applySubdivisionFilter","text":"applySubdivisionFilter(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.SubdivisionType = , subdivision: int = 1) -> shapeworks_py.Mesh applies subdivision filter (butterfly (default) or loop)","title":"applySubdivisionFilter()"},{"location":"python/python-api.html#shapeworks_py.Mesh.applyTransform","text":"applyTransform(self: shapeworks_py.Mesh, transform: numpy.ndarray[numpy.float64[4, 4]], imageTransform: bool = False) -> shapeworks_py.Mesh applies the given transformation to the mesh","title":"applyTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.boundingBox","text":"boundingBox(self: shapeworks_py.Mesh) -> shapeworks_py.PhysicalRegion computes bounding box of current mesh","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.Mesh.center","text":"center(self: shapeworks_py.Mesh) -> numpy.ndarray center of mesh","title":"center()"},{"location":"python/python-api.html#shapeworks_py.Mesh.centerOfMass","text":"centerOfMass(self: shapeworks_py.Mesh) -> numpy.ndarray center of mass of mesh","title":"centerOfMass()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clip","text":"clip( args, *kwargs) Overloaded function. clip(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane clip(self: shapeworks_py.Mesh, o: List[float], p1: List[float], p2: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane","title":"clip()"},{"location":"python/python-api.html#shapeworks_py.Mesh.clipClosedSurface","text":"clipClosedSurface(self: shapeworks_py.Mesh, point: List[float], normal: List[float]) -> shapeworks_py.Mesh clips a mesh using a cutting plane resulting in a closed surface","title":"clipClosedSurface()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPoint","text":"closestPoint(self: shapeworks_py.Mesh, point: List[float]) -> tuple returns closest point to given point on mesh","title":"closestPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.closestPointId","text":"closestPointId(self: shapeworks_py.Mesh, point: List[float]) -> int returns closest point id in this mesh to the given point in space","title":"closestPointId()"},{"location":"python/python-api.html#shapeworks_py.Mesh.compareField","text":"compareField(self: shapeworks_py.Mesh, other_mesh: shapeworks_py.Mesh, name1: str, name2: str = '', eps: float = -1.0) -> bool compares two meshes based on fields","title":"compareField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeNormals","text":"computeNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh computes and adds oriented point and cell normals","title":"computeNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.computeThickness","text":"computeThickness(self: shapeworks_py.Mesh, ct: shapeworks_py.Image, dt: shapeworks_py.Image = None, maxDist: float = 10000, medianRadius: float = 5.0, distanceMesh: str = '') -> shapeworks_py.Mesh Computes cortical thickness","title":"computeThickness()"},{"location":"python/python-api.html#shapeworks_py.Mesh.copy","text":"copy(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh","title":"copy()"},{"location":"python/python-api.html#shapeworks_py.Mesh.coverage","text":"coverage(self: shapeworks_py.Mesh, otherMesh: shapeworks_py.Mesh, allowBackIntersections: bool = True, angleThreshold: float = 0, backSearchRadius: float = 0) -> shapeworks_py.Mesh determines coverage between current mesh and another mesh (e.g. acetabular cup / femoral head)","title":"coverage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.createTransform","text":"createTransform(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, align: shapeworks_py.Mesh.AlignmentType = , iterations: int = 10) -> numpy.ndarray[numpy.float64[4, 4]] creates a transform using specified AlignmentType (Mesh.Rigid, Mesh.Similarity, Mesh.Affine) for specified number of iterations (default alignment: Similarity, default iterations: 10)","title":"createTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.curvature","text":"curvature(self: shapeworks_py.Mesh, type: shapeworks_py.Mesh.CurvatureType = ) -> numpy.ndarray computes and adds curvature (principal (default) or gaussian or mean)","title":"curvature()"},{"location":"python/python-api.html#shapeworks_py.Mesh.distance","text":"distance(self: shapeworks_py.Mesh, target: shapeworks_py.Mesh, method: shapeworks_py.Mesh.DistanceMethod = ) -> tuple computes closest distance from vertices of this mesh to target mesh, returning indices of faces or vertices in target mesh that contain closest points","title":"distance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.faces","text":"faces(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.int32[m, n]] matrix with number of faces with indices of the three points from which each face is composed","title":"faces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fillHoles","text":"fillHoles(self: shapeworks_py.Mesh, hole_size: float = 1000) -> shapeworks_py.Mesh finds holes in a mesh and closes them","title":"fillHoles()"},{"location":"python/python-api.html#shapeworks_py.Mesh.fixElement","text":"fixElement(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh fix element winding of mesh","title":"fixElement()"},{"location":"python/python-api.html#shapeworks_py.Mesh.geodesicDistance","text":"geodesicDistance( args, *kwargs) Overloaded function. geodesicDistance(self: shapeworks_py.Mesh, source: int, target: int) -> float computes geodesic distance between two vertices (specified by their indices) on mesh geodesicDistance(self: shapeworks_py.Mesh, landmark: List[float]) -> numpy.ndarray computes geodesic distance between a point (landmark) and each vertex on mesh geodesicDistance(self: shapeworks_py.Mesh, curve: List[List[float]]) -> numpy.ndarray computes geodesic distance between a set of points (curve) and all vertices on mesh","title":"geodesicDistance()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFace","text":"getFace(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray return indices of the three points with which the face at the given index is composed","title":"getFace()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getField","text":"getField(self: shapeworks_py.Mesh, name: str, type: shapeworks_py.Mesh.FieldType) -> numpy.ndarray gets the field","title":"getField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldNames","text":"getFieldNames(self: shapeworks_py.Mesh) -> List[str] print all field names in mesh","title":"getFieldNames()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getFieldValue","text":"getFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> float gets the value at the given index of field","title":"getFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getMultiFieldValue","text":"getMultiFieldValue(self: shapeworks_py.Mesh, idx: str, name: int) -> numpy.ndarray[numpy.float64[m, 1]] gets the vector value at the given index of field","title":"getMultiFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.getPoint","text":"getPoint(self: shapeworks_py.Mesh, id: int) -> numpy.ndarray (x,y,z) coordinates of vertex at given index","title":"getPoint()"},{"location":"python/python-api.html#shapeworks_py.Mesh.invertNormals","text":"invertNormals(self: shapeworks_py.Mesh) -> shapeworks_py.Mesh handle flipping normals","title":"invertNormals()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numFaces","text":"numFaces(self: shapeworks_py.Mesh) -> int number of faces","title":"numFaces()"},{"location":"python/python-api.html#shapeworks_py.Mesh.numPoints","text":"numPoints(self: shapeworks_py.Mesh) -> int number of points","title":"numPoints()"},{"location":"python/python-api.html#shapeworks_py.Mesh.points","text":"points(self: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] matrix with number of points with (x,y,z) coordinates of each point","title":"points()"},{"location":"python/python-api.html#shapeworks_py.Mesh.probeVolume","text":"probeVolume(self: shapeworks_py.Mesh, image: shapeworks_py.Image) -> shapeworks_py.Mesh samples image data values at point locations specified by image","title":"probeVolume()"},{"location":"python/python-api.html#shapeworks_py.Mesh.reflect","text":"reflect(self: shapeworks_py.Mesh, axis: shapeworks_py.Axis, origin: List[float] = [0.0, 0.0, 0.0]) -> shapeworks_py.Mesh reflect meshes with respect to a specified center and specific axis","title":"reflect()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remesh","text":"remesh(self: shapeworks_py.Mesh, numVertices: int, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity","title":"remesh()"},{"location":"python/python-api.html#shapeworks_py.Mesh.remeshPercent","text":"remeshPercent(self: shapeworks_py.Mesh, percentage: float, adaptivity: float) -> shapeworks_py.Mesh applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity","title":"remeshPercent()"},{"location":"python/python-api.html#shapeworks_py.Mesh.rotate","text":"rotate(self: shapeworks_py.Mesh, angle: float, axis: shapeworks_py.Axis) -> shapeworks_py.Mesh rotate using axis by angle (in degrees)","title":"rotate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.scale","text":"scale(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh scale mesh","title":"scale()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setField","text":"setField(self: shapeworks_py.Mesh, name: str, array: numpy.ndarray, type: shapeworks_py.Mesh.FieldType) -> shapeworks_py.Mesh sets the given field for points with array","title":"setField()"},{"location":"python/python-api.html#shapeworks_py.Mesh.setFieldValue","text":"setFieldValue(self: shapeworks_py.Mesh, idx: str, value: int, name: float = '') -> None sets the given index of field to value","title":"setFieldValue()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smooth","text":"smooth(self: shapeworks_py.Mesh, iterations: int = 0, relaxation: float = 0.0) -> shapeworks_py.Mesh applies laplacian smoothing","title":"smooth()"},{"location":"python/python-api.html#shapeworks_py.Mesh.smoothSinc","text":"smoothSinc(self: shapeworks_py.Mesh, iterations: int = 0, passband: float = 0.0) -> shapeworks_py.Mesh applies windowed sinc smoothing","title":"smoothSinc()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toDistanceTransform","text":"toDistanceTransform(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0], padding: List[int] = [1, 1, 1]) -> shapeworks_py.Image converts specified region to distance transform image with specified spacing and padding (default: unit spacing and 1 pixel of padding)","title":"toDistanceTransform()"},{"location":"python/python-api.html#shapeworks_py.Mesh.toImage","text":"toImage(self: shapeworks_py.Mesh, region: shapeworks_py.PhysicalRegion = { min: [1e+09, 1e+09, 1e+09], max: [-1e+09, -1e+09, -1e+09] }, spacing: List[float] = [1.0, 1.0, 1.0]) -> shapeworks_py.Image rasterizes specified region to create binary image of desired dims (default: unit spacing)","title":"toImage()"},{"location":"python/python-api.html#shapeworks_py.Mesh.translate","text":"translate(self: shapeworks_py.Mesh, v: List[float]) -> shapeworks_py.Mesh translates mesh","title":"translate()"},{"location":"python/python-api.html#shapeworks_py.Mesh.write","text":"write(self: shapeworks_py.Mesh, pathname: str, binaryFile: bool = False) -> shapeworks_py.Mesh writes mesh, format specified by filename extension","title":"write()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils","text":"Bases: pybind11_object","title":"MeshUtils"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundaryLoopExtractor","text":"boundaryLoopExtractor(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh for a mesh extracts the boundary loop and export the boundary loop as a contour .vtp file","title":"boundaryLoopExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.boundingBox","text":"boundingBox( args, *kwargs) Overloaded function. boundingBox(filenames: List[str], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes boundingBox(meshes: List[shapeworks_py.Mesh], center: bool = False) -> shapeworks_py.PhysicalRegion calculate bounding box incrementally for meshes","title":"boundingBox()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.computeMeanNormals","text":"computeMeanNormals( args, *kwargs) Overloaded function. computeMeanNormals(filenames: List[str], autoGenerateNormals: bool = True) -> numpy.ndarray computes average normals for each point in given set of meshes computeMeanNormals(meshes: List[shapeworks_py.Mesh]) -> numpy.ndarray computes average normals for each point in given set of meshes","title":"computeMeanNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.findReferenceMesh","text":"findReferenceMesh(meshes: List[shapeworks_py.Mesh]) -> int find reference mesh from a set of meshes","title":"findReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.generateNormals","text":"generateNormals(meshes: List[shapeworks_py.Mesh], forceRegen: bool = False) -> None generates and adds normals for points and faces for each mesh in given set of meshes","title":"generateNormals()"},{"location":"python/python-api.html#shapeworks_py.MeshUtils.sharedBoundaryExtractor","text":"sharedBoundaryExtractor(mesh_l: shapeworks_py.Mesh, mesh_r: shapeworks_py.Mesh, tol: float = 0.001) -> tuple extract the shared boundary for the given left and right meshes and save the individual meshes","title":"sharedBoundaryExtractor()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper","text":"Bases: pybind11_object","title":"MeshWarper"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.buildMesh","text":"buildMesh(self: shapeworks_py.MeshWarper, particles: numpy.ndarray[numpy.float64[m, n]]) -> shapeworks_py.Mesh Build the mesh from particle positions (matrix [Nx3])","title":"buildMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.extractLandmarks","text":"extractLandmarks(self: shapeworks_py.MeshWarper, warped_mesh: shapeworks_py.Mesh) -> numpy.ndarray[numpy.float64[m, n]] Extract the landmarks from the warped mesh and return the landmarks (matrix [Nx3])","title":"extractLandmarks()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.generateWarp","text":"generateWarp( args, *kwargs) Overloaded function. generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and pre-compute the warping generateWarp(self: shapeworks_py.MeshWarper, reference_mesh: shapeworks_py.Mesh, reference_particles: numpy.ndarray[numpy.float64[m, n]], landmarks: numpy.ndarray[numpy.float64[m, n]]) -> bool Assign the reference mesh/particles (matrix [Nx3]) and landmarks (matrix [Nx3]) and pre-compute the warping","title":"generateWarp()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getGoodParticlesIndices","text":"getGoodParticlesIndices(self: shapeworks_py.MeshWarper) -> List[int] Return the indexes of good particles.","title":"getGoodParticlesIndices()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getLandmarksMap","text":"getLandmarksMap(self: shapeworks_py.MeshWarper) -> Dict[int, int] Return the map of landmarks to vertices.","title":"getLandmarksMap()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceMesh","text":"getReferenceMesh(self: shapeworks_py.MeshWarper) -> shapeworks_py.Mesh Return the mesh used for warping.","title":"getReferenceMesh()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getReferenceParticles","text":"getReferenceParticles(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the particles used for warping.","title":"getReferenceParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.getWarpMatrix","text":"getWarpMatrix(self: shapeworks_py.MeshWarper) -> numpy.ndarray[numpy.float64[m, n]] Return the warping matrix (Vertices = Warp * Control).","title":"getWarpMatrix()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.hasBadParticles","text":"hasBadParticles(self: shapeworks_py.MeshWarper) -> bool Return true if warping has removed any bad particle(s).","title":"hasBadParticles()"},{"location":"python/python-api.html#shapeworks_py.MeshWarper.prepareMesh","text":"prepareMesh(mesh: shapeworks_py.Mesh) -> shapeworks_py.Mesh Return the prepared mesh used for warping (before vertices were inserted).","title":"prepareMesh()"},{"location":"python/python-api.html#shapeworks_py.Optimize","text":"Bases: pybind11_object","title":"Optimize"},{"location":"python/python-api.html#shapeworks_py.Optimize.GetParticleSystem","text":"GetParticleSystem(self: shapeworks_py.Optimize) -> numpy.ndarray[numpy.float64[m, n]]","title":"GetParticleSystem()"},{"location":"python/python-api.html#shapeworks_py.Optimize.LoadParameterFile","text":"LoadParameterFile(self: shapeworks_py.Optimize, arg0: str) -> bool","title":"LoadParameterFile()"},{"location":"python/python-api.html#shapeworks_py.Optimize.Run","text":"Run(self: shapeworks_py.Optimize) -> bool","title":"Run()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetIterationCallbackFunction","text":"SetIterationCallbackFunction(self: shapeworks_py.Optimize, arg0: Callable[[], None]) -> None","title":"SetIterationCallbackFunction()"},{"location":"python/python-api.html#shapeworks_py.Optimize.SetUpOptimize","text":"SetUpOptimize(self: shapeworks_py.Optimize, projectFile: shapeworks::Project) -> bool","title":"SetUpOptimize()"},{"location":"python/python-api.html#shapeworks_py.Parameters","text":"Bases: pybind11_object","title":"Parameters"},{"location":"python/python-api.html#shapeworks_py.Parameters.as_map","text":"as_map(self: shapeworks_py.Parameters) -> Dict[str, str] get underlying map","title":"as_map()"},{"location":"python/python-api.html#shapeworks_py.Parameters.get","text":"get(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> shapeworks::Variant get a parameter based on a key, return default if it doesn't exist","title":"get()"},{"location":"python/python-api.html#shapeworks_py.Parameters.key_exists","text":"key_exists(self: shapeworks_py.Parameters, key: str) -> bool return if a key exists or not","title":"key_exists()"},{"location":"python/python-api.html#shapeworks_py.Parameters.remove_entry","text":"remove_entry(self: shapeworks_py.Parameters, key: str) -> None remove an entry","title":"remove_entry()"},{"location":"python/python-api.html#shapeworks_py.Parameters.reset_parameters","text":"reset_parameters(self: shapeworks_py.Parameters) -> None reset parameters to blank","title":"reset_parameters()"},{"location":"python/python-api.html#shapeworks_py.Parameters.set","text":"set(self: shapeworks_py.Parameters, key: str, Variant: shapeworks::Variant) -> None set a parameter based on a key","title":"set()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics","text":"Bases: pybind11_object","title":"ParticleShapeStatistics"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.PCA","text":"PCA(self: shapeworks_py.ParticleShapeStatistics, particleSystem: shapeworks_py.ParticleSystem, domainsPerShape: int = 1) -> int calculates the eigen values and eigen vectors of the data","title":"PCA()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenValues","text":"eigenValues(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the eigen values","title":"eigenValues()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.eigenVectors","text":"eigenVectors(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the eigenvectors","title":"eigenVectors()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.numDims","text":"numDims(self: shapeworks_py.ParticleShapeStatistics) -> int returns the number of features of the particle system","title":"numDims()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.pcaLoadings","text":"pcaLoadings(self: shapeworks_py.ParticleShapeStatistics) -> numpy.ndarray[numpy.float64[m, n]] returns the coefficients of the linear combination of the original variables from which the principal components are constructed","title":"pcaLoadings()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.percentVarByMode","text":"percentVarByMode(self: shapeworks_py.ParticleShapeStatistics) -> List[float] return the variance accounted for by the principal components","title":"percentVarByMode()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.principalComponentProjections","text":"principalComponentProjections(self: shapeworks_py.ParticleShapeStatistics) -> int projects the original data on the calculated principal components","title":"principalComponentProjections()"},{"location":"python/python-api.html#shapeworks_py.ParticleShapeStatistics.sampleSize","text":"sampleSize(self: shapeworks_py.ParticleShapeStatistics) -> int returns the sample size of the particle system","title":"sampleSize()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem","text":"Bases: pybind11_object","title":"ParticleSystem"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.D","text":"D(self: shapeworks_py.ParticleSystem) -> int","title":"D()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.EvaluationCompare","text":"EvaluationCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"EvaluationCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ExactCompare","text":"ExactCompare(self: shapeworks_py.ParticleSystem, arg0: shapeworks_py.ParticleSystem) -> bool","title":"ExactCompare()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.N","text":"N(self: shapeworks_py.ParticleSystem) -> int","title":"N()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Particles","text":"Particles(self: shapeworks_py.ParticleSystem) -> numpy.ndarray[numpy.float64[m, n]]","title":"Particles()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.Paths","text":"Paths(self: shapeworks_py.ParticleSystem) -> List[str]","title":"Paths()"},{"location":"python/python-api.html#shapeworks_py.ParticleSystem.ShapeAsPointSet","text":"ShapeAsPointSet(self: shapeworks_py.ParticleSystem, id_shape: int) -> numpy.ndarray[numpy.float64[m, n]] Return the particle pointset [Nx3] of the specified shape","title":"ShapeAsPointSet()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion","text":"Bases: pybind11_object init (self: shapeworks_py.PhysicalRegion) -> None init (self: shapeworks_py.PhysicalRegion, arg0: List[float], arg1: List[float]) -> None","title":"PhysicalRegion"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.max","text":"max point of region","title":"max"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.min","text":"min point of region","title":"min"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.expand","text":"expand( args, *kwargs) Overloaded function. expand(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion expand this region up to the largest portions of both expand(self: shapeworks_py.PhysicalRegion, point: itk::Point ) -> shapeworks_py.PhysicalRegion expand this region to include this point","title":"expand()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.origin","text":"origin(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return origin of region","title":"origin()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.pad","text":"pad(self: shapeworks_py.PhysicalRegion, padding: float) -> shapeworks_py.PhysicalRegion grows or shrinks the region by the specified amount","title":"pad()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.shrink","text":"shrink(self: shapeworks_py.PhysicalRegion, other: shapeworks_py.PhysicalRegion) -> shapeworks_py.PhysicalRegion shrink this region down to the smallest portions of both","title":"shrink()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.size","text":"size(self: shapeworks_py.PhysicalRegion) -> numpy.ndarray return size of region","title":"size()"},{"location":"python/python-api.html#shapeworks_py.PhysicalRegion.valid","text":"valid(self: shapeworks_py.PhysicalRegion) -> bool ensure if region is valid","title":"valid()"},{"location":"python/python-api.html#shapeworks_py.Project","text":"Bases: pybind11_object","title":"Project"},{"location":"python/python-api.html#shapeworks_py.Project.clear_parameters","text":"clear_parameters(self: shapeworks_py.Project, name: str) -> None","title":"clear_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_domain_names","text":"get_domain_names(self: shapeworks_py.Project) -> List[str] Return the domain names (e.g. femur, pelvis, etc)","title":"get_domain_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_feature_names","text":"get_feature_names(self: shapeworks_py.Project) -> List[str]","title":"get_feature_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_filename","text":"get_filename(self: shapeworks_py.Project) -> str Return the filename","title":"get_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_domain_types","text":"get_groomed_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the groomed domain types","title":"get_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_groomed_present","text":"get_groomed_present(self: shapeworks_py.Project) -> bool Return if groomed files are present","title":"get_groomed_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_names","text":"get_group_names(self: shapeworks_py.Project) -> List[str]","title":"get_group_names()"},{"location":"python/python-api.html#shapeworks_py.Project.get_group_values","text":"get_group_values(self: shapeworks_py.Project, group_names: str) -> List[str]","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Project.get_headers","text":"get_headers(self: shapeworks_py.Project) -> List[str] Return the headers of the subject sheet","title":"get_headers()"},{"location":"python/python-api.html#shapeworks_py.Project.get_images_present","text":"get_images_present(self: shapeworks_py.Project) -> bool","title":"get_images_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_domains_per_subject","text":"get_number_of_domains_per_subject(self: shapeworks_py.Project) -> int Return the number of domains","title":"get_number_of_domains_per_subject()"},{"location":"python/python-api.html#shapeworks_py.Project.get_number_of_subjects","text":"get_number_of_subjects(self: shapeworks_py.Project) -> int Return the number of subjects in the project","title":"get_number_of_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_original_domain_types","text":"get_original_domain_types(self: shapeworks_py.Project) -> List[shapeworks_py.DomainType] Return the original domain types","title":"get_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.get_originals_present","text":"get_originals_present(self: shapeworks_py.Project) -> bool Return if original files are present","title":"get_originals_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_parameters","text":"get_parameters(self: shapeworks_py.Project, name: str, domain_name: str = '') -> shapeworks::Parameters","title":"get_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.get_particles_present","text":"get_particles_present(self: shapeworks_py.Project) -> bool Return if particle files are present","title":"get_particles_present()"},{"location":"python/python-api.html#shapeworks_py.Project.get_string_column","text":"get_string_column(self: shapeworks_py.Project, name: str) -> List[str] Return a column by name","title":"get_string_column()"},{"location":"python/python-api.html#shapeworks_py.Project.get_subjects","text":"get_subjects(self: shapeworks_py.Project) -> List[shapeworks::Subject] Return the list of Subjects","title":"get_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.get_supported_version","text":"get_supported_version(self: shapeworks_py.Project) -> int","title":"get_supported_version()"},{"location":"python/python-api.html#shapeworks_py.Project.get_version","text":"get_version(self: shapeworks_py.Project) -> int","title":"get_version()"},{"location":"python/python-api.html#shapeworks_py.Project.load","text":"load(self: shapeworks_py.Project, filename: str) -> bool Load from XLSX file","title":"load()"},{"location":"python/python-api.html#shapeworks_py.Project.save","text":"save(self: shapeworks_py.Project, filename: str) -> bool Save to XLSX file","title":"save()"},{"location":"python/python-api.html#shapeworks_py.Project.set_filename","text":"set_filename(self: shapeworks_py.Project, filename: str) -> None Set project filename","title":"set_filename()"},{"location":"python/python-api.html#shapeworks_py.Project.set_groomed_domain_types","text":"set_groomed_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the groomed domain types","title":"set_groomed_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_original_domain_types","text":"set_original_domain_types(self: shapeworks_py.Project, types: List[shapeworks_py.DomainType]) -> None Set the original domain types","title":"set_original_domain_types()"},{"location":"python/python-api.html#shapeworks_py.Project.set_parameters","text":"set_parameters(self: shapeworks_py.Project, name: str, params: shapeworks::Parameters, domain_name: str = '') -> None","title":"set_parameters()"},{"location":"python/python-api.html#shapeworks_py.Project.set_subjects","text":"set_subjects(self: shapeworks_py.Project, subjects: List[shapeworks::Subject]) -> None","title":"set_subjects()"},{"location":"python/python-api.html#shapeworks_py.Project.store_subjects","text":"store_subjects(self: shapeworks_py.Project) -> None","title":"store_subjects()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform) -> None init (self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_RBFSSparseTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_RBFSSparseTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_RBFSSparseTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform","text":"Bases: pybind11_object init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform) -> None init (self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, arg0: str, arg1: str, arg2: str) -> None","title":"ReconstructSurface_ThinPlateSplineTransform"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.meanSurface","text":"meanSurface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, distanceTransformFiles: List[str], localPointsFiles: List[str], worldPointsFiles: List[str]) -> None","title":"meanSurface()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.samplesAlongPCAModes","text":"samplesAlongPCAModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, worldPointsFiles: List[str]) -> None","title":"samplesAlongPCAModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustes","text":"setDoProcrustes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustes: bool) -> None","title":"setDoProcrustes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setDoProcrustesScaling","text":"setDoProcrustesScaling(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, doProcrustesScaling: bool) -> None","title":"setDoProcrustesScaling()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setEnableOutput","text":"setEnableOutput(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, enableOutput: bool) -> None","title":"setEnableOutput()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxAngleDegrees","text":"setMaxAngleDegrees(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxAngleDegrees: float) -> None","title":"setMaxAngleDegrees()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxStdDev","text":"setMaxStdDev(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxStdDev: float) -> None","title":"setMaxStdDev()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMaxVarianceCaptured","text":"setMaxVarianceCaptured(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, maxVarianceCaptured: float) -> None","title":"setMaxVarianceCaptured()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setMeanBeforeWarp","text":"setMeanBeforeWarp(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, meanBeforeWarp: bool) -> None","title":"setMeanBeforeWarp()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setModeIndex","text":"setModeIndex(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, modeIndex: int) -> None","title":"setModeIndex()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfClusters","text":"setNumOfClusters(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfClusters: int) -> None","title":"setNumOfClusters()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfModes","text":"setNumOfModes(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfModes: int) -> None","title":"setNumOfModes()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfParticles","text":"setNumOfParticles(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfParticles: int) -> None","title":"setNumOfParticles()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setNumOfSamplesPerMode","text":"setNumOfSamplesPerMode(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, numOfSamplesPerMode: int) -> None","title":"setNumOfSamplesPerMode()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPath","text":"setOutPath(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, path: str) -> None","title":"setOutPath()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.setOutPrefix","text":"setOutPrefix(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, prefix: str) -> None","title":"setOutPrefix()"},{"location":"python/python-api.html#shapeworks_py.ReconstructSurface_ThinPlateSplineTransform.surface","text":"surface(self: shapeworks_py.ReconstructSurface_ThinPlateSplineTransform, localPointsFiles: List[str]) -> None","title":"surface()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation","text":"Bases: pybind11_object","title":"ShapeEvaluation"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeCompactness","text":"ComputeCompactness(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the compactness measure for a particle system","title":"ComputeCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullCompactness","text":"ComputeFullCompactness(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the compactness measure for a particle system, all modes","title":"ComputeFullCompactness()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullGeneralization","text":"ComputeFullGeneralization(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the generalization measure for a particle system, all modes","title":"ComputeFullGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeFullSpecificity","text":"ComputeFullSpecificity(particleSystem: shapeworks_py.ParticleSystem, progress_callback: Callable[[float], None] = None) -> numpy.ndarray[numpy.float64[m, 1]] Computes the specificity measure for a particle system, all modes","title":"ComputeFullSpecificity()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeGeneralization","text":"ComputeGeneralization(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the generalization measure for a particle system","title":"ComputeGeneralization()"},{"location":"python/python-api.html#shapeworks_py.ShapeEvaluation.ComputeSpecificity","text":"ComputeSpecificity(particleSystem: shapeworks_py.ParticleSystem, nModes: int, saveTo: str = '') -> float Computes the specificity measure for a particle system","title":"ComputeSpecificity()"},{"location":"python/python-api.html#shapeworks_py.Subject","text":"Bases: pybind11_object","title":"Subject"},{"location":"python/python-api.html#shapeworks_py.Subject.get_constraints_filenames","text":"get_constraints_filenames(self: shapeworks_py.Subject) -> List[str] Get the constraints filenames (one per domain)","title":"get_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_display_name","text":"get_display_name(self: shapeworks_py.Subject) -> str Get the display name","title":"get_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_extra_values","text":"get_extra_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get extra values (extra columns we don't interpret)","title":"get_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_feature_filenames","text":"get_feature_filenames(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the feature map filenames","title":"get_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_filenames","text":"get_groomed_filenames(self: shapeworks_py.Subject) -> List[str] Get groomed filenames","title":"get_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_groomed_transforms","text":"get_groomed_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the groomed transforms (one vector per domain)","title":"get_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_value","text":"get_group_value(self: shapeworks_py.Subject, group_name: str) -> str Get a specific group value","title":"get_group_value()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_group_values","text":"get_group_values(self: shapeworks_py.Subject) -> tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int> Get the group values map","title":"get_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_landmarks_filenames","text":"get_landmarks_filenames(self: shapeworks_py.Subject) -> List[str] Get the landmarks filenames (one per domain)","title":"get_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_local_particle_filenames","text":"get_local_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get local particle filenames","title":"get_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_number_of_domains","text":"get_number_of_domains(self: shapeworks_py.Subject) -> int Get the number of domains","title":"get_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_original_filenames","text":"get_original_filenames(self: shapeworks_py.Subject) -> List[str] Get original filenames","title":"get_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_procrustes_transforms","text":"get_procrustes_transforms(self: shapeworks_py.Subject) -> List[List[float]] Get the procrustes transforms (one vector per domain)","title":"get_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.get_world_particle_filenames","text":"get_world_particle_filenames(self: shapeworks_py.Subject) -> List[str] Get the world particle filenames","title":"get_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_constraints_filenames","text":"set_constraints_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the constraint filenames (one per domain)","title":"set_constraints_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_display_name","text":"set_display_name(self: shapeworks_py.Subject, display_name: str) -> None Set the display name","title":"set_display_name()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_extra_values","text":"set_extra_values(self: shapeworks_py.Subject, extra_values: Dict[str, str]) -> None Set extra values","title":"set_extra_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_feature_filenames","text":"set_feature_filenames(self: shapeworks_py.Subject, filenames: tsl::ordered_map , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ >, std::__1::hash\\ , std::__1::allocator\\ > >, std::__1::equal_to\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > >, std::__1::deque\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > >, std::__1::allocator\\ , std::__1::allocator\\ >, std::__1::basic_string\\ , std::__1::allocator\\ > > > >, unsigned int>) -> None Set the feature map filenames","title":"set_feature_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_filenames","text":"set_groomed_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set groomed filenames","title":"set_groomed_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_groomed_transforms","text":"set_groomed_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the groomed transforms (one vector per domain)","title":"set_groomed_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_group_values","text":"set_group_values(self: shapeworks_py.Subject, Set group values mapgroup_values: Dict[str, str]) -> None","title":"set_group_values()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_landmarks_filenames","text":"set_landmarks_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the landmarks filenames (one per domain)","title":"set_landmarks_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_local_particle_filenames","text":"set_local_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set local particle filenames (one per domain)","title":"set_local_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_number_of_domains","text":"set_number_of_domains(self: shapeworks_py.Subject, number_of_domains: int) -> None Set the number of domains","title":"set_number_of_domains()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_original_filenames","text":"set_original_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set original filenames (one per domain)","title":"set_original_filenames()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_procrustes_transforms","text":"set_procrustes_transforms(self: shapeworks_py.Subject, transforms: List[List[float]]) -> None Set the procrustes transforms (one vector per domain)","title":"set_procrustes_transforms()"},{"location":"python/python-api.html#shapeworks_py.Subject.set_world_particle_filenames","text":"set_world_particle_filenames(self: shapeworks_py.Subject, filenames: List[str]) -> None Set the world particle filenames","title":"set_world_particle_filenames()"},{"location":"python/python-api.html#shapeworks_py.Variant","text":"Bases: pybind11_object init (self: shapeworks_py.Variant) -> None init (self: shapeworks_py.Variant, arg0: List[int]) -> None init (self: shapeworks_py.Variant, arg0: List[float]) -> None init (self: shapeworks_py.Variant, arg0: List[bool]) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: int) -> None init (self: shapeworks_py.Variant, arg0: float) -> None init (self: shapeworks_py.Variant, arg0: str) -> None init (self: shapeworks_py.Variant, arg0: bool) -> None","title":"Variant"},{"location":"python/python-api.html#shapeworks_py.Variant.as_str","text":"as_str(self: shapeworks_py.Variant) -> str Return the variant string content","title":"as_str()"},{"location":"python/python-api.html#shapeworks_py.VectorImage","text":"Bases: pybind11_object create a vector image from an image (usually a distance transform) that can be sampled at any point in space","title":"VectorImage"},{"location":"python/python-api.html#shapeworks_py.VectorImage.evaluate","text":"evaluate(self: shapeworks_py.VectorImage, pt: List[float]) -> List[float] evaluate the vector image at any given point in space","title":"evaluate()"},{"location":"python/python-api.html#shapeworks_py.WarpTransform","text":"Bases: pybind11_object","title":"WarpTransform"},{"location":"python/python-api.html#shapeworks_py.axis_is_valid","text":"axis_is_valid(axis: List[float]) -> bool ensure an axis is valid","title":"axis_is_valid()"},{"location":"python/python-api.html#shapeworks_py.degToRad","text":"degToRad(deg: float) -> float convert degrees to radians","title":"degToRad()"},{"location":"python/python-api.html#shapeworks_py.mean","text":"mean(arg0: numpy.ndarray) -> float incrementally compute (single-component) mean of field","title":"mean()"},{"location":"python/python-api.html#shapeworks_py.range","text":"range(arg0: numpy.ndarray) -> List[float] compute (single-component) range of field","title":"range()"},{"location":"python/python-api.html#shapeworks_py.seed","text":"seed(seed: int = 1698248459365377) -> None sets the seed for random number generation (internal use)","title":"seed()"},{"location":"python/python-api.html#shapeworks_py.stddev","text":"stddev(arg0: numpy.ndarray) -> float compute (single-component) standard deviation of field","title":"stddev()"},{"location":"python/python-api.html#shapeworks_py.toAxis","text":"toAxis(str: str) -> shapeworks_py.Axis convert to axis","title":"toAxis()"},{"location":"studio/deepssm-in-studio.html","text":"DeepSSM in Studio ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps. Importing Data for DeepSSM In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see: Defining Data Split The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10. Data Augmentation The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data. Training The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains. Testing In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"DeepSSM Module"},{"location":"studio/deepssm-in-studio.html#deepssm-in-studio","text":"ShapeWorks Studio supports data augmentation and DeepSSM model training and testing. For a full explanantion of the process see: Data Augmentation for Deep Learning and SSMs Directly from Images . Running DeepSSM requires an optimized shape model for training data. To run DeepSSM in Studio, load a ShapeWorks Project Spreadsheet with the following columns: local_particles, world_particles image, groomed, meshes. The input to DeepSSM is the unsegmented images given in the image column and the predicted output is the world particles. The groomed and mesh inputs are used for visualization and error maps.","title":"DeepSSM in Studio"},{"location":"studio/deepssm-in-studio.html#importing-data-for-deepssm","text":"In this example, we demonstrate DeepSSM in studio with parameterized Supershapes that have three dominant PCA modes. The data is available at https://www.sci.utah.edu/~shapeworks/doc-resources/zips/supershapes.zip . Loading the project spreadsheet and clicking to the analyze tab we see:","title":"Importing Data for DeepSSM"},{"location":"studio/deepssm-in-studio.html#defining-data-split","text":"The first step is to define what percentage of the input data to use in training, validation, and testing. First, the testing data is split from the dataset and kept out of data augmentation and model training. For example, if the dataset is comprised of 10 samples and the test split is set to 20 percent, then the test set will have two samples. After data augmentation, the validation split is used to define a validation set. For example, if there are 8 real samples (excluding test examples) and 2 are augmented and the validation split is set to 30 percent, then the validation set will have 3 of those 10.","title":"Defining Data Split"},{"location":"studio/deepssm-in-studio.html#data-augmentation","text":"The next step is to run data augmentation to create more training examples. Users can specify how many samples to generate, how many PCA dimensions to us or how much variability to preserve, and what type of sampling distribution to use. For a more detailed description of these parameters, please see: Data Augmentation for Deep Learning and Data Augmentation Notebook . While data augmentation is running a progress bar is displayed across the bottom. After it has completed, the newly generated data is displayed below the real data in the right panel for comparison. A table is shown which contains the real and augmented image paths, particle paths, and PCA scores. Parallel violin plots are displayed to compare the distribution of each PCA score across the real and augmented data. This can be helpful in visually assessing if the type of distribution used in augmentation provided a good fit for the data.","title":"Data Augmentation"},{"location":"studio/deepssm-in-studio.html#training","text":"The next step is to train the DeepSSM model. Some training parameters are exposed which are explained in detail here: SSMs Directly from Images . As the model trains, each epoch the display updates. The \"Training Output\" table logs the epochs, learning rate, and training and validation errors. The training and validation error are also plotted over epochs in a scatterplot below. To the right, examples of training andvalidation predictions are displayed and updated every epoch. Here we can see the examples with the greatest, smallest, and median error. The distance from the predicted particles to the true particles is displayed as a heat map with a corresponding scale. This gives an idea of model prediction quality as the model trains.","title":"Training"},{"location":"studio/deepssm-in-studio.html#testing","text":"In the final step, predictions are made on the testing set which is unseen to the DeepSSM model. A mesh is created based on these particle positions and the surface to surface distance from this mesh to the true mesh is calculated. This is displayed as a heat map on the predictions and the average for each sample is shown in the table.","title":"Testing"},{"location":"studio/getting-started-with-studio.html","text":"Getting Started With ShapeWorks Studio ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface. Splash Screen The splash screen provides access to recent projects and an option to create a new blank project. Data Module The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information. Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information. Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information. Analysis Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information. Preferences Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software Data Collection ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run). Viewer Controls See Studio Viewer Controls for details on viewer controls. Menus File Menu New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom Export Menu See Studio Export Options for details on export options. Project setup ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Getting Started"},{"location":"studio/getting-started-with-studio.html#getting-started-with-shapeworks-studio","text":"ShapeWorks Studio provides an all-in-one GUI based interface to the ShapeWorks toolkit. In Studio, you can manage input Data, Groom, Optimize and Analyze your data all within a single interface.","title":"Getting Started With ShapeWorks Studio"},{"location":"studio/getting-started-with-studio.html#splash-screen","text":"The splash screen provides access to recent projects and an option to create a new blank project.","title":"Splash Screen"},{"location":"studio/getting-started-with-studio.html#data-module","text":"The Data Module shows the project data table, landmarks, constraints as well as user-defined/saved notes. This module enables you to add and remove shapes (segmentations and surface meshes) to your cohort, define anatomical landmarks, place cutting planes and free form constraints for surface exclusion. See Studio Data Module for more information.","title":"Data Module"},{"location":"studio/getting-started-with-studio.html#groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. See Studio Groom Module for more information.","title":"Groom Module"},{"location":"studio/getting-started-with-studio.html#optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. See Studio Optimize Module for more information.","title":"Optimize Module"},{"location":"studio/getting-started-with-studio.html#analysis-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. See Studio Analyze Module for more information.","title":"Analysis Module"},{"location":"studio/getting-started-with-studio.html#preferences","text":"Studio provides a number of preference options. Option Description Color Scheme Base foreground and background colors for viewers Color Map Color map used for scalar ranges Reverse Color Map Option to reverse the color map Discrete Color Mode Option to use discrete colors for color map Groom Output Folder name for groom output Optimize Output Folder name for optimize particle output Mesh Cache Enabled Whether to use a cache of meshes Mesh Cache Memory to Use Percentage of phyisical memory to allow mesh cache to use Mesh Parallel Reconstruction Whether to use parallelized mesh reconstruction Mesh Parallel Number of Threads How many threads to use for parallelized mesh reconstruction Orientation Marker Type Medical, Triad, or None Orientation Marker Corner Upper Right, Upper Left, Lower Left, Lower Right PCA Range Number of standard deviations for PCA slider Number of PCA Steps Number of steps for PCA slider bar Geodesics Cache Size Multiplier Multiplier value for geodesics caching Log Location A display of where the current log file is located Automatically Check for Updates Whether Studio should automatically check for updates to ShapeWorks Send Anonymous Usage Statistics Whether Studio should send anonymous usage statistics to the ShapeWorks team to help improve the software","title":"Preferences"},{"location":"studio/getting-started-with-studio.html#data-collection","text":"ShapeWorks Studio can optionally send anonymous usage statistics to the ShapeWorks team. This data helps the team by providing basic user tracking numbers that we report to funding agencies to help in acquiring additional funding. Additionally, we are prospectively collecting a few usage parameters that may aid in development of particular features. No user data (images, meshes, segmentations, etc) are ever transferred, only basic user event information (e.g. number of times optimize is run).","title":"Data Collection"},{"location":"studio/getting-started-with-studio.html#viewer-controls","text":"See Studio Viewer Controls for details on viewer controls.","title":"Viewer Controls"},{"location":"studio/getting-started-with-studio.html#menus","text":"","title":"Menus"},{"location":"studio/getting-started-with-studio.html#file-menu","text":"New Project - Create a new project Open Project - Open a project from disk Show Project folder - Open Explorer/Finder for project location (windows/mac) Save Project - Save project to disk Save Project As - Save a copy of the project to a new file Import Shapes... - Import new shapes Export - See export below Up to 8 recent projects are shown at the bottom","title":"File Menu"},{"location":"studio/getting-started-with-studio.html#export-menu","text":"See Studio Export Options for details on export options.","title":"Export Menu"},{"location":"studio/getting-started-with-studio.html#project-setup","text":"ShapeWorks Studio and the shapeworks commands groom and optimize store project data in an XLSX spreadsheet. The spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputing data into shapeworks for grooming, optimizing and analyzing data. See Here for more details regaring the project sheet and the python API available to generate the project sheet.","title":"Project setup"},{"location":"studio/multiple-domains.html","text":"Multiple Domains SSM ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet: Importing Data for Multiple Domains In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see: Grooming Multiple Domains When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox. Optimizing Multi-Domain SSM For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process. Analyzing Multi-Domain SSM Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow. Mixed-type Domains Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation. Multiple Domain Alignments In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#multiple-domains-ssm","text":"ShapeWorks Studio supports grooming, optimization and analysis for multiple domains/anatomies within a project. To set up a project with multiple domains per subject, simply add additional shape columns to a ShapeWorks Project Spreadsheet:","title":"Multiple Domains SSM"},{"location":"studio/multiple-domains.html#importing-data-for-multiple-domains","text":"In this example, we have defined two domains, left_atrium and appendage . The multiple domains are shown in the Data panel when importing a ShapeWorks Project Spreadsheet file with more than one column with the shape prefix. When we open this in Studio, we will see:","title":"Importing Data for Multiple Domains"},{"location":"studio/multiple-domains.html#grooming-multiple-domains","text":"When multiple domains are present, grooming options will be available on a per-domain basis with a combobox at the top of the grooming panel. This allows for different grooming options depending on the anatomy type. You may also apply the same grooming to all domains using the Apply grooming parameters to all domains checkbox.","title":"Grooming Multiple Domains"},{"location":"studio/multiple-domains.html#optimizing-multi-domain-ssm","text":"For optimization, each domain can be given a different number of particles, but all other parameters are global to the optimization process.","title":"Optimizing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#analyzing-multi-domain-ssm","text":"Analysis options are similar for multiple domains as for single domain usage. Each domain will be reconstructed separated and shown as a mesh with a different color. Here is an illustration for the full multi-domain workflow.","title":"Analyzing Multi-Domain SSM"},{"location":"studio/multiple-domains.html#mixed-type-domains","text":"Multiple domains in ShapeWorks are implemented in a domain-type agnostic, where shapes models can be groomed, optimized, and analyzed for cohorts of mixed-types such as meshes and binary segmentations. Here is an example of grooming, optimizing, and analyzing a multi-domain model with the pelvis given as a surface mesh and the femur given as a binary segmentation.","title":"Mixed-type Domains"},{"location":"studio/multiple-domains.html#multiple-domain-alignments","text":"In the presence of multiple anatomies, there are multiple alignment strategies that can be employed. These strategies can be explored as part of the Analysis module. The correspondence model can be aligned based on any particular reference domain, a global alignment, or with all articulation removed (local alignment). Below is an example of these four options with a pelvis and femur model.","title":"Multiple Domain Alignments"},{"location":"studio/studio-analyze.html","text":"ShapeWorks Studio Analyze Module After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module. View Panel The View panel contains all of the options for controlling the analyis viewer options. Group The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences: Network Analysis The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D Samples The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample. PCA The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first. Multi-Level PCA The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure. Show Difference to Mean This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well. Metrics Panel The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation. Surface Reconstruction Panel The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option. Particles Panel The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Analyze Module"},{"location":"studio/studio-analyze.html#shapeworks-studio-analyze-module","text":"After optimization is complete, you may analyze the data in Studio using the Analysis module. There are several panels available in the Analysis Module.","title":"ShapeWorks Studio Analyze Module"},{"location":"studio/studio-analyze.html#view-panel","text":"The View panel contains all of the options for controlling the analyis viewer options.","title":"View Panel"},{"location":"studio/studio-analyze.html#group","text":"The Group mode allows for group comparison to quantify and visualize population-level differences. Each group_ column from the project can be selected and the differences between any two values (i.e., group identifiers) in the groups can be displayed by selecting the group values in the left and right dropdown boxes. A group difference display showing vectors and a colormap of distance can be shown using the \"Diff -->\" button. Additionally an LDA chart is generated for group differences:","title":"Group"},{"location":"studio/studio-analyze.html#network-analysis","text":"The Network Analysis tool provides a method to statistically analyze data captured in feature maps. Two implementations have been included: Network Analysis and SPM1D. Statistical parametric mapping (SPM, https://www.fil.ion.ucl.ac.uk/spm/) was introduced for the analysis of brain imaging data and has since been used in statistical analysis of surface-based group differences. The SPM1D option uses this technique without consideration of the connectivity and spatial relationship of the input data. The Network Analysis method uses the relative size of the network of connected correspondence particles to identify significant differences amongst groups, as originally described by Forman and colleagues (Forman SD, et al. Magnetic Resonance in Medicine33:636-647, 1995). Our publication on the specifics of this method and example applications is in review and will be referenced here when available. Option Description Feature Map Choose which feature to operate on. P-value Threshold The initial p-value used to threshold particles as an initial step to the evaluation of cluster size. Only modify from 0.05 for adjusted statistical assumptions. Cluster P-value The cluster p-value defines the p-value used to identify significant clusters for the group. Traditional statistics would assume a p-value of 0.05. Permutations This is the number of permutations used in the analysis. The maximum value is driven by the sample size, however 10,000 is generally considered acceptably large. Display Choose to display Network Analysis output or SPM1D","title":"Network Analysis"},{"location":"studio/studio-analyze.html#samples","text":"The Samples tab of the view panel allows you to view all of the samples in your cohort, view a single sample by index, or view the median sample.","title":"Samples"},{"location":"studio/studio-analyze.html#pca","text":"The PCA tab of the View panel shows reconstructed shapes (surface meshes) along PCA modes of variation. Modes of variations are shape parameters learned/discovered from your data that describes shape variations. You can control the location along the PCA mode with the Standard Deviation slider. The extent of this slider is configurable in Preferences . Values displayed: Lambda - This shows the PCA loading of current position of the slider. The middle of the slider, at the mean value, will be 0. The extent of lambda is defined by the number of standard deviations of the slider as described above. At standard deviation of 1.0, it will be the square root of the mode's eigenvalue. Eigenvalue - This shows the eigenvalue of the currently selected mode. This is a unitless measure of how much variance is explained by this mode. The modes are sorted in decreasing order of eigenvalue, corresponding to the most variance explained first.","title":"PCA"},{"location":"studio/studio-analyze.html#multi-level-pca","text":"The PCA tab of the View panel shows options to select modes of variation in different subspaces when a multiple domain shape model is loaded: Shape and Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along ordinary PCA modes of variation. PCA is done in the shared space of the multi-object shape structure and thus the shsape and pose variations are entangled here. Shape - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only morphological modes of variation. Multi-Level Component Analysis is done in the shape subspace (within-object) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see morphological changes of each object in the shape structure. Relative Pose - Selecting this option shows reconstructed shapes and it's eigenvalue and lambda, along only relative pose modes of variation. Multi-Level Component Analysis is done in the relative pose subspace (between-objects) of the multi-object shape structure. Shape and pose variations are disentangled here and we only see alignment changes between the objects in the multi-object shape structure.","title":"Multi-Level PCA"},{"location":"studio/studio-analyze.html#show-difference-to-mean","text":"This checkbox allows for visualization from any surface to the mean. Arrow glyphs can be shown to display the difference as well.","title":"Show Difference to Mean"},{"location":"studio/studio-analyze.html#metrics-panel","text":"The Metrics panel shows the Compactness, Specificity, and Generalization charts. These are interactive charts with hover menus and the ability to zoom, pan, etc. See Shape Model Evaluation for more information about shape evaluation.","title":"Metrics Panel"},{"location":"studio/studio-analyze.html#surface-reconstruction-panel","text":"The surface reconstruction panel provides options for the surface reconstruction method. There are three surface reconstruction methods available depending on the data you supply. Legacy - If an older XML file with only particle files is supplied, then only this option is available. This is the fallback option since it requires only the particles. Mesh Warping Based - Mesh warping based method that utilizes the mean mesh. You must have either meshes supplied or image based (distance transforms). Distance Transform Based - Surface reconstruction based on distance transforms. Project must have distance transforms. Below is an example of the difference in using this option.","title":"Surface Reconstruction Panel"},{"location":"studio/studio-analyze.html#particles-panel","text":"The Particles Panel enabled the display of \"good/bad particles\" in ShapeWorks Studio. A maximum angle parameter is given (default 45 degrees). When a particle's surface normal across subjects (averaged) exceeds this angle, the particle will be marked \"bad\" and shown in red. Good particles are shown in green. This can help in identifying problems with correspondence as it is typically expected that surface normals for given particles should be similar across subjects.","title":"Particles Panel"},{"location":"studio/studio-data.html","text":"ShapeWorks Studio Data Module Importing data There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window Landmarks Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality. Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Data Module"},{"location":"studio/studio-data.html#shapeworks-studio-data-module","text":"","title":"ShapeWorks Studio Data Module"},{"location":"studio/studio-data.html#importing-data","text":"There are multiple ways to import data into studio: From the command line: ShapeWorksStudio [file1] [file2]... File -> Import Shapes Click the plus / Import button in the Table panel Drag and drop supported files over the Studio window","title":"Importing data"},{"location":"studio/studio-data.html#landmarks","text":"Studio supports adding, manipulating and moving anatomical landmarks for each input shape. Landmarks should be corresponding between shapes and can be used for alignment/registration as well as initial particle position placement. Below is a demonstration of the landmarks functionality.","title":"Landmarks"},{"location":"studio/studio-data.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/studio-data.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/studio-data.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/studio-data.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete. Below is a demonstration of the free form constraints functionality.","title":"Removing a Constraint"},{"location":"studio/studio-export.html","text":"ShapeWorks Studio Export Options The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display Export Screenshot Dialog The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export Export PCA Montage The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export Creating Videos The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Export Options"},{"location":"studio/studio-export.html#shapeworks-studio-export-options","text":"The File -> Export menu is shown below. Export Current Mesh - Export the current mesh as a VTK mesh file Export Current Particles - Export the currently display particles as an \"X Y Z\" particles file Export Current Particle Scalars - Export the currently displayed particle scalars as a CSV file Export Current Mesh Scalars - Export the currently displayed mesh scalars as a CSV file Export All Subjects Particle Scalars - Export the particle scalars for all subjects Export Eigenvectors - Export the PCA eigenvectors Export Eigenvalues - Export the PCA eigenvalues Export PCA Component Scores - Export the raw PCA component scores for each subject as a CSV file Export PCA Mode Particles - Export the PCA mode particles at each step of the PCA slider Export PCA Montage - Launch export dialog for exporting montage of PCA images Export Screenshot - Launch export dialog for exporting current display","title":"ShapeWorks Studio Export Options"},{"location":"studio/studio-export.html#export-screenshot-dialog","text":"The Export Screenshot dialog allows you to export the currently displayed image using a variety of options Option Description Show Corner Widget Show or hide the orientation widget Transparent Background Enables transparent background in image export Show Color Scale Show or hide color scale, when applicable Override Window Size Override the window size and choose a resolution for export","title":"Export Screenshot Dialog"},{"location":"studio/studio-export.html#export-pca-montage","text":"The PCA Montage exporter allows you to create a multi-image montage across PCA modes. Options are similar to the screenshot export with the addition of controls: Option Description PCA Modes Comma separated list of modes or ranges to include PCA Images Number of images to export on either side of the mean PCA Range Standard deviation range of PCA export","title":"Export PCA Montage"},{"location":"studio/studio-export.html#creating-videos","text":"The best way to create videos from ShapeWorks Studio is to use a dedicated stand-alone screen video recording tool. This gives full control over changes in camera angle, display options (e.g. PCA modes, slider animation), compression levels, video formats, etc. We recommend the following tools: MacOS built in screen recording OBS Studio for Windows, MacOS and Linux","title":"Creating Videos"},{"location":"studio/studio-groom.html","text":"ShapeWorks Studio Groom Module The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"Groom Module"},{"location":"studio/studio-groom.html#shapeworks-studio-groom-module","text":"The Groom module provides options to preprocess/groom the input data. Options differ for binary segmentations and meshes. You also have the option of skipping grooming if your data is already prepped. Image Grooming Parameters Parameter Description Isolate Isolate the largest object in a segmentation. This removes extraneous noise voxels that would result in disjoint objects. Fill Holes Fill small holes in segmentation Crop Crop image down to ROI of segmentation Pad Pad image with zeroes by a given number of voxels. Typically combined with cropping Antialias Perform anti-aliasing to reduce segmentation stairstep effect Resample Resample image spacing either to isotropic (recommended) or any given spacing Distance Transform Create a distance transform for image based optimization Blur Perform smoothing on the distance transform using a gaussian blur Convert to Mesh Optionally convert to mesh at the end of Image Grooming. This enables the Mesh Grooming pipeline and will run the optimization on meshes Mesh Grooming Parameters Parameter Description Fill Holes Fill small holes in the mesh Smooth Perform either Laplacian or Windowed Sinc smoothing Laplacian Smoothing Laplacian smoothing option with specified iterations and relaxation factor. In general, it is recommended to use smaller relaxation factors and more iterations rather than larger relaxation and fewer iterations Windowed Sinc Smoothing Windowed Sinc smoothing with specified iterations and passband (typically between 0 and 2). Lower passpand values produce more smoothing. Remesh Enabled remeshing using ACVD library Remesh Percent Specify target vertices as a percentage of existing vertices Remesh Vertices Specify target vertices directly Remesh Adaptivity Curvature adaptivity of remeshing (0 = uniform, 2.0 most adaptive). This allocates more triangles/vertices to areas of higher curvature Alignment Parameters Parameter Description Reflect Option to reflect some shapes over a given axis if a given column matches a given value (e.g. reflect 'side' over 'Y' if 'left') Alignment Option to align with centering (center of mass), iterative closest point (translation and rotation), or landmarks (best fit, when specified)","title":"ShapeWorks Studio Groom Module"},{"location":"studio/studio-optimize.html","text":"ShapeWorks Studio Optimize Module The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"Optimize Module"},{"location":"studio/studio-optimize.html#shapeworks-studio-optimize-module","text":"The Optimize module provides options for the particle-based optimization. After selecting options and clicking \"Run Optimize\", you can monitor the process of the optimization in real-time. Particle positions will be displayed on individual shapes as they progress where color encodes surface correspondences across different shapes in your cohort. Optimization Parameters Parameter Description Number of Particles The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given value Initial Relative Weighting The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01) Relative Weighting The relative weight of the correspondence term in the optimization steps. Starting Regularization Sets the starting regularization value. See details about regularization here Ending Regularization Sets the ending regularization value. See details about regularization here Iterations per Split The number of iterations in the initialization step for each split (i.e., scale) Optimization Iterations Number of iterations for each optimization step. Geodesic Distance Enable the use of geodesic distance for particle to particle interactions. This is much slower, but can help with some complex structures/ Normals Enable the use of surface normals as a correspondence feature Normals Strength Amount to scale surface normals feature to give it enough weight relative to XYZ. Procrustes Enable use of procrustes registration as part of optimization Procrustes Scaling Enable scaling as part of procrustes to remove overall scale from the model Procrustes Rotation/Translation Enable procrustes rotation/translation to remove translation/rotation from the model Procrustes Interval Interval of iterations to run procrustes Multiscale Mode Enable multiscale optimization where each particle split level after the multiscale start number runs in both initialization and optimization modes Multiscale Start Number of particles to begin multscale mode Use Initial Landmarks Enable the use of landmarks as starting particles Narrow Band Number of voxels surrounding zero level for distance transform based optimizations. Normally a value of 4 is sufficient","title":"ShapeWorks Studio Optimize Module"},{"location":"studio/studio-viewer.html","text":"ShapeWorks Studio Viewer Controls At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64) Comparing mesh types The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance: Feature maps and scalars controls When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set. Image volume support When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers Keyboard Shortcuts The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item. Point selection As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Viewer Controls"},{"location":"studio/studio-viewer.html#shapeworks-studio-viewer-controls","text":"At the bottom of the viewers are the controls for the viewers: Each button has tooltips with descriptions. The controls from left to right are: Autoview / reset view Cutting plane visibility Landmark visibility Glyph visibility with dropdown for glyph size and detail Isosurface visibility with dropdown for surface opacity (of each domain) View mode (original/groomed/reconstructed) Align (whether to align each object based on the alignment strategy) Compare mode (e.g. compare original vs groomed) Number of views in lightbox (1,2,4,9,16,25,36,49,64)","title":"ShapeWorks Studio Viewer Controls"},{"location":"studio/studio-viewer.html#comparing-mesh-types","text":"The comparison mode toggle also has a dropdown with additional controls: Comparison can be performed either as an overlay (with individual opacity controls): Or comparison can be performed showing a surface to surface distance:","title":"Comparing mesh types"},{"location":"studio/studio-viewer.html#feature-maps-and-scalars-controls","text":"When feature volumes or meshes with scalars are loaded, or other scalar values are present, the extended panel will be displayed: This adds the feature map / scalar selection and a checkbox to apply a uniform scale to all viewers, vs local scale for each. Additionally, the auto range can be turned off and specified range can be set.","title":"Feature maps and scalars controls"},{"location":"studio/studio-viewer.html#image-volume-support","text":"When image volumes are provided, another extended panel will be displayed: Image selection Plane direction (X/Y/Z) Enabled 2D/3D viewere mode Shared Brightness/Contrast between viewers Sync slice position between viewers","title":"Image volume support"},{"location":"studio/studio-viewer.html#keyboard-shortcuts","text":"The keyboard shortcuts are available from the Help -> Keyboard Shortcuts menu item.","title":"Keyboard Shortcuts"},{"location":"studio/studio-viewer.html#point-selection","text":"As shown in the keyboard shortcuts panel, you can hover over a particle and press the '1' key. This will select this point on all viewers. The selected point will become white and all other points will change to a color based on the distance to the chosen point. To turn off this display, press '1' while hovering over something other than a particle. Additionally, after selecting a point, you may select another point by pressing '2' while hovering. This will set the first point to white, the second point to yellow and the rest to black. This is an easy way to see how particlar particles vary and correspond across shapes.","title":"Point selection"},{"location":"studio/using-constraints.html","text":"Using Constraints in Studio ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region. Defining Cutting-Plane Constraints Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Defining Free-Form Constraints Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area. Removing a Constraint To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#using-constraints-in-studio","text":"ShapeWorks Studio supports grooming, optimization and analysis of shapes with constraints, i.e. explicit inclusion and exclusion areas of the surfaces. These constraints can be defined in Studio as cutting-plane or free-form constraints. In other words, when you define a constraint, particles will be limited to the allowed area and will not cross into the disallowed region.","title":"Using Constraints in Studio"},{"location":"studio/using-constraints.html#defining-cutting-plane-constraints","text":"Follow the steps below to define cutting planes on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. ctrl+click 3 points on a shape surface to define a plane. Slide plane along the normal with shift+click. Right click plane point to flip, delete or copy plane to other shapes . Now the newly defined cutting-plane constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Cutting-Plane Constraints"},{"location":"studio/using-constraints.html#defining-free-form-constraints","text":"Follow the steps below to define free-form constraints on an existing project: Make sure you are on the Data tab. Click the Constraints drop-down menu. Click the \"Painting Enabled\" toggle to checked. Select brush size using slider if different from default. Select whether to paint included or excluded area. Paint on the shape you would like to define the free-form constraint on. Now the newly-defined free form constraint is active for the desired domain on the desired shape. This will show on the constraints panel. Now particles will not spread to the grayed out area.","title":"Defining Free-Form Constraints"},{"location":"studio/using-constraints.html#removing-a-constraint","text":"To remove a constraint: Make sure you are on the Data tab with the constraints drop-down menu open. The planes and free-form constraints previously defined will be listed. For cutting planes, you can also right click a plane point for the same effect. To delete, select the one to delete and click delete.","title":"Removing a Constraint"},{"location":"tools/ShapeWorksCommands.html","text":"ShapeWorks Commands shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable . shapeworks Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top Analyze Commands analyze Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands Groom Commands groom Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands Image Commands add Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands antialias Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands binarize Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands blur Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands bounding-box-image Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands clip-image Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands close-holes Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands compare-image Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands compute-dt Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands crop Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands curvature Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands divide Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands extract-label Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands gradient Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands icp-image Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands image-bounds Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands image-info Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands image-to-mesh Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands intensity Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands isolate Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands multiply Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands negate Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands pad Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands read-image Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands recenter Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands reflect-image Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands resample Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands resize Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands rotate Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands scale-image Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands set-origin Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands set-region Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands set-spacing Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands sigmoid Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands subtract Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands topo-preserving-smooth Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands tp-levelset Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands translate-image Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands warp-image Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands write-image Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands Mesh Commands bounding-box-mesh Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands clip-closed-surface Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands clip-mesh Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands closest-point Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands compare-mesh Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands compute-normals Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands compute-thickness Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands coverage Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands distance Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands field-mean Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-names Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands field-range Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands field-std Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands fill-holes Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands fix-element Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands geodesic-distance Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands geodesic-distance-landmark Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands get-field Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands get-field-value Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands invert-normal Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands landmark-geodesics Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands mean-normals Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands mesh-bounds Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands mesh-curvature Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands mesh-info Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands mesh-to-dt Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands mesh-to-image Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands probe-volume Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands read-mesh Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands reflect-mesh Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands remesh Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands remesh-percent Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands scale-mesh Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands set-field Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands set-field-value Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands smooth Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands smooth-sinc Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands transform-mesh Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands translate-mesh Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands warp-mesh Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands write-mesh Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands Optimize Commands optimize Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands ParticleSystem Commands compactness Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands generalization Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands read-particle-system Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands specificity Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands Project Commands convert-project Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands Shapeworks Commands seed Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands","text":"shapeworks is a single executable for ShapeWorks with a set of sub-executables (commands) that are flexible, modular, loosely coupled, and standardized subcommands, with interactive help to perform individual operations needed for a typical shape modeling workflow that includes the Groom, Optimize, and Analyze phases. Activate shapeworks environment Each time you use ShapeWorks from the command line, you must first activate its environment using the conda activate shapeworks command on the terminal. Add shapeworks to your path Please make sure that shapeworks is in your path. See Adding to PATH Environment Variable .","title":"ShapeWorks Commands"},{"location":"tools/ShapeWorksCommands.html#shapeworks","text":"Usage: shapeworks [args]... Description: Unified ShapeWorks executable that includes command line utilities for automated construction of compact statistical landmark-based shape models of ensembles of shapes Options: -h, --help: show this help message and exit --version: show program's version number and exit -q, --quiet: don't print status messages Back to Top","title":"shapeworks"},{"location":"tools/ShapeWorksCommands.html#analyze-commands","text":"","title":"Analyze Commands"},{"location":"tools/ShapeWorksCommands.html#analyze","text":"Usage: shapeworks analyze [args]... Description: Offline analysis of a shapeworks project, output json and meshes Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --output=STRING: Path to output file. --range=FLOAT: Standard deviation range for PCA [default: 3.0]. --steps=INT: Number of steps to use for PCA [default: 21]. Back to Top Back to Analyze Commands","title":"analyze"},{"location":"tools/ShapeWorksCommands.html#groom-commands","text":"","title":"Groom Commands"},{"location":"tools/ShapeWorksCommands.html#groom","text":"Usage: shapeworks groom [args]... Description: groom a shapeworks project Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Groom Commands","title":"groom"},{"location":"tools/ShapeWorksCommands.html#image-commands","text":"","title":"Image Commands"},{"location":"tools/ShapeWorksCommands.html#add","text":"Usage: shapeworks add [args]... Description: add a value to each pixel in the given image and/or add another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to add to each pixel [default: 0.0]. --name=STRING: Name of image to add pixelwise. Back to Top Back to Image Commands","title":"add"},{"location":"tools/ShapeWorksCommands.html#antialias","text":"Usage: shapeworks antialias [args]... Description: antialiases binary volumes Options: -h, --help: show this help message and exit --iterations=INT: Maximum number of iterations [default: 50]. --maxrmserror=DOUBLE: Maximum RMS error determines how fast the solver converges. Range [0.0, 1.0], larger is faster [default: 0.01]. --layers=INT: Number of layers around a 3d pixel to use for this computation [default: 3]. Back to Top Back to Image Commands","title":"antialias"},{"location":"tools/ShapeWorksCommands.html#binarize","text":"Usage: shapeworks binarize [args]... Description: sets portion of image greater than min and less than or equal to max to the specified value Options: -h, --help: show this help message and exit --min=DOUBLE: Lower threshold level [default: 0.0]. --max=DOUBLE: Upper threshold level [default: inf ]. --value=DOUBLE: Value to set region [default: 1]. Back to Top Back to Image Commands","title":"binarize"},{"location":"tools/ShapeWorksCommands.html#blur","text":"Usage: shapeworks blur [args]... Description: applies gaussian blur Options: -h, --help: show this help message and exit --sigma=DOUBLE: Value of sigma [default: 0]. Back to Top Back to Image Commands","title":"blur"},{"location":"tools/ShapeWorksCommands.html#bounding-box-image","text":"Usage: shapeworks bounding-box-image [args]... Description: compute largest physical bounding box surrounding the specified isovalue of the specified set of images Options: -h, --help: show this help message and exit --names : Paths to images (must be followed by -- ), ex: \"bounding-box-image --names *.nrrd -- --isovalue 1.5\") --isovalue=DOUBLE: Threshold value [default: 1]. Back to Top Back to Image Commands","title":"bounding-box-image"},{"location":"tools/ShapeWorksCommands.html#clip-image","text":"Usage: shapeworks clip-image [args]... Description: clips volume with the specified cutting planes defined by three 3D points Options: -h, --help: show this help message and exit --x1=DOUBLE: Value of x1 for cutting plane [default: 0]. --y1=DOUBLE: Value of y1 for cutting plane [default: 0]. --z1=DOUBLE: Value of z1 for cutting plane [default: 0]. --x2=DOUBLE: Value of x2 for cutting plane [default: 0]. --y2=DOUBLE: Value of y2 for cutting plane [default: 0]. --z2=DOUBLE: Value of z2 for cutting plane [default: 0]. --x3=DOUBLE: Value of x3 for cutting plane [default: 0]. --y3=DOUBLE: Value of y3 for cutting plane [default: 0]. --z3=DOUBLE: Value of z3 for cutting plane [default: 0]. --value=DOUBLE: Value of clipped pixels [default: 0]. Back to Top Back to Image Commands","title":"clip-image"},{"location":"tools/ShapeWorksCommands.html#close-holes","text":"Usage: shapeworks close-holes [args]... Description: closes holes in a volume defined by values larger than specified value Options: -h, --help: show this help message and exit --value=DOUBLE: Largest value not in volume [default: 0]. Back to Top Back to Image Commands","title":"close-holes"},{"location":"tools/ShapeWorksCommands.html#compare-image","text":"Usage: shapeworks compare-image [args]... Description: compare two images Options: -h, --help: show this help message and exit --name=STRING: Compare this image with another. --verifyall=BOOL: Also verify origin, spacing, and direction matches [default: true]. --tolerance=DOUBLE: Allowed percentage of pixel differences [default: 0]. --precision=DOUBLE: Allowed difference between two pixels for them to still be considered equal [default: 1e-12]. Back to Top Back to Image Commands","title":"compare-image"},{"location":"tools/ShapeWorksCommands.html#compute-dt","text":"Usage: shapeworks compute-dt [args]... Description: computes signed distance transform volume from an image at the specified isovalue Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Level set value that defines the interface between foreground and background [default: 0]. Back to Top Back to Image Commands","title":"compute-dt"},{"location":"tools/ShapeWorksCommands.html#crop","text":"Usage: shapeworks crop [args]... Description: crop image down to the current region of physical space (from bounding-box or set-region commands) Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"crop"},{"location":"tools/ShapeWorksCommands.html#curvature","text":"Usage: shapeworks curvature [args]... Description: denoises an image using curvature driven flow using curvature flow image filter Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 10]. Back to Top Back to Image Commands","title":"curvature"},{"location":"tools/ShapeWorksCommands.html#divide","text":"Usage: shapeworks divide [args]... Description: divide an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to divide [default: 0.0]. Back to Top Back to Image Commands","title":"divide"},{"location":"tools/ShapeWorksCommands.html#extract-label","text":"Usage: shapeworks extract-label [args]... Description: extracts/isolates a specific voxel label from a given multi-label volume and outputs the corresponding binary image Options: -h, --help: show this help message and exit --label=DOUBLE: Label value to be extracted [default: 1]. Back to Top Back to Image Commands","title":"extract-label"},{"location":"tools/ShapeWorksCommands.html#gradient","text":"Usage: shapeworks gradient [args]... Description: computes gradient magnitude of an image region at each pixel using gradient magnitude filter Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"gradient"},{"location":"tools/ShapeWorksCommands.html#icp-image","text":"Usage: shapeworks icp-image [args]... Description: transform current image using iterative closest point (ICP) 3D rigid registration computed from current distance map to target distance map Options: -h, --help: show this help message and exit --target=STRING: Distance map of target image. --isovalue=DOUBLE: Isovalue of distance maps used to create ICPtransform [default: 0]. --iterations=UNSIGNED: Number of iterations run ICP registration [default: 20]. Back to Top Back to Image Commands","title":"icp-image"},{"location":"tools/ShapeWorksCommands.html#image-bounds","text":"Usage: shapeworks image-bounds [args]... Description: return bounds of image, optionally with an isovalue to restrict region Options: -h, --help: show this help message and exit --isovalue=DOUBLE: Isovalue [default: entire image]. Back to Top Back to Image Commands","title":"image-bounds"},{"location":"tools/ShapeWorksCommands.html#image-info","text":"Usage: shapeworks image-info [args]... Description: prints requested image dimensions, spacing, size, origin, direction (coordinate system), center, center of mass and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --dims: Whether to display image dimensions [default: true]. --spacing: Whether to display physical spacing [default: true]. --size: Whether to display size [default: true]. --origin: Whether to display physical origin [default: true]. --direction: Whether to display direction [default: true]. --center: Whether to display center. [default: true] --centerofmass: Whether to display center of mass. [default: true] --boundingbox: Whether to display bounding box. [default: true] Back to Top Back to Image Commands","title":"image-info"},{"location":"tools/ShapeWorksCommands.html#image-to-mesh","text":"Usage: shapeworks image-to-mesh [args]... Description: converts the current image to a mesh Options: -h, --help: show this help message and exit -v DOUBLE, --isovalue=DOUBLE: Isovalue to determine mesh boundary [default: 1]. Back to Top Back to Image Commands","title":"image-to-mesh"},{"location":"tools/ShapeWorksCommands.html#intensity","text":"Usage: shapeworks intensity [args]... Description: applies intensity windowing image filter Options: -h, --help: show this help message and exit --min=DOUBLE: Minimum value of window [default: 0]. --max=DOUBLE: Maximum value of window [default: 0]. Back to Top Back to Image Commands","title":"intensity"},{"location":"tools/ShapeWorksCommands.html#isolate","text":"Usage: shapeworks isolate [args]... Description: finds the largest object in a binary segmentation and removes all other objects Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"isolate"},{"location":"tools/ShapeWorksCommands.html#multiply","text":"Usage: shapeworks multiply [args]... Description: multiply an image by a constant Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value with which to multiply [default: 1.0] Back to Top Back to Image Commands","title":"multiply"},{"location":"tools/ShapeWorksCommands.html#negate","text":"Usage: shapeworks negate [args]... Description: negate the values in the given image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"negate"},{"location":"tools/ShapeWorksCommands.html#pad","text":"Usage: shapeworks pad [args]... Description: pads an image with specified value by specified number of voxels in the x-, y-, and/or z- directions; origin remains at the same location (note: negative padding to shrink an image is permitted) Options: -h, --help: show this help message and exit --padding=INT: Pad this many voxels in ALL directions (used if set) [default: 0]. -x INT, --padx=INT: Pad this many voxels in the x-direction [default: 0]. -y INT, --pady=INT: Pad this many voxels in the y-direction [default: 0]. -z INT, --padz=INT: Pad this many voxels in the z-direction [default: 0]. --value=DOUBLE: Value used to fill padded voxels [default: 0]. Back to Top Back to Image Commands","title":"pad"},{"location":"tools/ShapeWorksCommands.html#read-image","text":"Usage: shapeworks read-image [args]... Description: reads an image Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Image Commands","title":"read-image"},{"location":"tools/ShapeWorksCommands.html#recenter","text":"Usage: shapeworks recenter [args]... Description: recenters an image by changing its origin in the image header to the physical coordinates of the center of the image Options: -h, --help: show this help message and exit Back to Top Back to Image Commands","title":"recenter"},{"location":"tools/ShapeWorksCommands.html#reflect-image","text":"Usage: shapeworks reflect-image [args]... Description: reflect image with respect to logical image center and the specified axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). Back to Top Back to Image Commands","title":"reflect-image"},{"location":"tools/ShapeWorksCommands.html#resample","text":"Usage: shapeworks resample [args]... Description: resamples an image using new physical spacing (computes new dims) Options: -h, --help: show this help message and exit --isospacing=DOUBLE: Use this spacing in all dimensions. --spacex=DOUBLE: Pixel spacing in x-direction [default: 1]. --spacey=DOUBLE: Pixel spacing in y-direction [default: 1]. --spacez=DOUBLE: Pixel spacing in z-direction [default: 1]. --sizex=UNSIGNED: Output size in x-direction [default: current size]. --sizey=UNSIGNED: Output size in y-direction [default: current size]. --sizez=UNSIGNED: Output size in z-direction [default: current size]. --originx=DOUBLE: Output origin in x-direction [default: current origin]. --originy=DOUBLE: Output origin in y-direction [default: current origin]. --originz=DOUBLE: Output origin in z-direction [default: current origin]. --interp=CHOICE: Interpolation method to use [default: linear]. (choose from 'linear', 'nearest') Back to Top Back to Image Commands","title":"resample"},{"location":"tools/ShapeWorksCommands.html#resize","text":"Usage: shapeworks resize [args]... Description: resizes an image (computes new physical spacing) Options: -h, --help: show this help message and exit -x UNSIGNED, --sizex=UNSIGNED: Output size in x-direction [default: current size]. -y UNSIGNED, --sizey=UNSIGNED: Output size in y-direction [default: current size]. -z UNSIGNED, --sizez=UNSIGNED: Output size in z-direction [default: current size]. Back to Top Back to Image Commands","title":"resize"},{"location":"tools/ShapeWorksCommands.html#rotate","text":"Usage: shapeworks rotate [args]... Description: rotates image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --rx=DOUBLE: Physical axis around which to rotate [default: z-axis]. -y DOUBLE, --ry=DOUBLE: Physical axis around which to rotate [default: z-axis]. -z DOUBLE, --rz=DOUBLE: Physical axis around which to rotate [default: z-axis]. --radians=DOUBLE: Angle in radians. --degrees=DOUBLE: Angle in degrees. Back to Top Back to Image Commands","title":"rotate"},{"location":"tools/ShapeWorksCommands.html#scale-image","text":"Usage: shapeworks scale-image [args]... Description: scales image by specified value Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Image Commands","title":"scale-image"},{"location":"tools/ShapeWorksCommands.html#set-origin","text":"Usage: shapeworks set-origin [args]... Description: set origin Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: X value of origin [default: 0]. -y DOUBLE, --y=DOUBLE: Y value of origin [default: 0]. -z DOUBLE, --z=DOUBLE: Z value of origin [default: 0]. Back to Top Back to Image Commands","title":"set-origin"},{"location":"tools/ShapeWorksCommands.html#set-region","text":"Usage: shapeworks set-region [args]... Description: set the current (physical) region to the specified min/max in each direction, for use with downstreams commands such as crop (note: could instead use the image-bounds command with an isovalue) Options: -h, --help: show this help message and exit --xmin=DOUBLE: Minimum X. --xmax=DOUBLE: Maximum X. --ymin=DOUBLE: Minimum Y. --ymax=DOUBLE: Maximum Y. --zmin=DOUBLE: Minimum Z. --zmax=DOUBLE: Maximum Z. Back to Top Back to Image Commands","title":"set-region"},{"location":"tools/ShapeWorksCommands.html#set-spacing","text":"Usage: shapeworks set-spacing [args]... Description: set spacing Options: -h, --help: show this help message and exit -x DOUBLE, --x=DOUBLE: x value of spacing [default: 1]. -y DOUBLE, --y=DOUBLE: y value of spacing [default: 1]. -z DOUBLE, --z=DOUBLE: z value of spacing [default: 1]. Back to Top Back to Image Commands","title":"set-spacing"},{"location":"tools/ShapeWorksCommands.html#sigmoid","text":"Usage: shapeworks sigmoid [args]... Description: computes sigmoid function pixel-wise using sigmoid image filter Options: -h, --help: show this help message and exit --alpha=DOUBLE: Value of alpha [default: 10]. --beta=DOUBLE: Value of beta [default: 10]. Back to Top Back to Image Commands","title":"sigmoid"},{"location":"tools/ShapeWorksCommands.html#subtract","text":"Usage: shapeworks subtract [args]... Description: subtract a value from each pixel in this image and/or subtract another image in a pixelwise manner Options: -h, --help: show this help message and exit -x DOUBLE, --value=DOUBLE: Value to subtract from each pixel [default: 0.0]. --name=STRING: Name of image to subtract pixelwise. Back to Top Back to Image Commands","title":"subtract"},{"location":"tools/ShapeWorksCommands.html#topo-preserving-smooth","text":"Usage: shapeworks topo-preserving-smooth [args]... Description: helper command that applies gradient and sigmoid filters to create a feature image for the TPLevelSet filter; note that a curvature flow filter is sometimes applied to the image before this Options: -h, --help: show this help message and exit --scaling=DOUBLE: Scale for TPLevelSet level set filter [default: 20]. --alpha=DOUBLE: Value of alpha for sigmoid fitler [default: 10]. --beta=DOUBLE: Value of beta for sigmoid fitler [default: 10]. Back to Top Back to Image Commands","title":"topo-preserving-smooth"},{"location":"tools/ShapeWorksCommands.html#tp-levelset","text":"Usage: shapeworks tp-levelset [args]... Description: segments structures in image using topology preserving geodesic active contour level set filter Options: -h, --help: show this help message and exit --featureimage=STRING: Path of feature image for filter --scaling=DOUBLE: Value of scale [default: 20]. Back to Top Back to Image Commands","title":"tp-levelset"},{"location":"tools/ShapeWorksCommands.html#translate-image","text":"Usage: shapeworks translate-image [args]... Description: translates image by specified physical (image space) distance Options: -h, --help: show this help message and exit --centerofmass: Use center of mass [default: false]. -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Image Commands","title":"translate-image"},{"location":"tools/ShapeWorksCommands.html#warp-image","text":"Usage: shapeworks warp-image [args]... Description: finds the warp between the source and target landmarks and transforms image by this warp Options: -h, --help: show this help message and exit --source=STRING: Path to source landmarks. --target=STRING: Path to target landmarks. --stride=INT: Every stride points will be used for warping [default: 1]. Back to Top Back to Image Commands","title":"warp-image"},{"location":"tools/ShapeWorksCommands.html#write-image","text":"Usage: shapeworks write-image [args]... Description: writes the current image (determines type by its extension) Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --compressed=BOOL: Whether to compress file [default: true]. Back to Top Back to Image Commands","title":"write-image"},{"location":"tools/ShapeWorksCommands.html#mesh-commands","text":"","title":"Mesh Commands"},{"location":"tools/ShapeWorksCommands.html#bounding-box-mesh","text":"Usage: shapeworks bounding-box-mesh [args]... Description: compute bounding box of mesh Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"bounding-box-mesh --names *.vtk -- --center 1\") Back to Top Back to Mesh Commands","title":"bounding-box-mesh"},{"location":"tools/ShapeWorksCommands.html#clip-closed-surface","text":"Usage: shapeworks clip-closed-surface [args]... Description: clips mesh resulting in a closed surface Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-closed-surface"},{"location":"tools/ShapeWorksCommands.html#clip-mesh","text":"Usage: shapeworks clip-mesh [args]... Description: clips mesh Options: -h, --help: show this help message and exit --px=DOUBLE: Value of point.x for cutting plane [default: 0]. --py=DOUBLE: Value of point.y for cutting plane [default: 0]. --pz=DOUBLE: Value of point.z for cutting plane [default: 0]. --nx=DOUBLE: Value of normal.x for cutting plane [default: 0]. --ny=DOUBLE: Value of normal.y for cutting plane [default: 0]. --nz=DOUBLE: Value of normal.z for cutting plane [default: 0]. Back to Top Back to Mesh Commands","title":"clip-mesh"},{"location":"tools/ShapeWorksCommands.html#closest-point","text":"Usage: shapeworks closest-point [args]... Description: returns closest point to given point on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for point. --y=DOUBLE: Value of y for point. --z=DOUBLE: Value of z for point. Back to Top Back to Mesh Commands","title":"closest-point"},{"location":"tools/ShapeWorksCommands.html#compare-mesh","text":"Usage: shapeworks compare-mesh [args]... Description: compare two meshes Options: -h, --help: show this help message and exit --name=STRING: Compare this mesh with another. --epsilon=DOUBLE: Epsilon [default: -1]. Back to Top Back to Mesh Commands","title":"compare-mesh"},{"location":"tools/ShapeWorksCommands.html#compute-normals","text":"Usage: shapeworks compute-normals [args]... Description: computes and adds oriented point and cell normals Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"compute-normals"},{"location":"tools/ShapeWorksCommands.html#compute-thickness","text":"Usage: shapeworks compute-thickness [args]... Description: Computes thickness values each mesh vertex and output vtk meshes with scalar field defined Options: -h, --help: show this help message and exit --image=STRING: Path of image. --distance_transform=STRING: Path of distance_transform. --max_dist=DOUBLE: Maximum distance to determine thickness --median_radius=DOUBLE: Median radius for smoothing, multiplier of average edge length --distance_mesh=STRING: Path to write distance mesh. Back to Top Back to Mesh Commands","title":"compute-thickness"},{"location":"tools/ShapeWorksCommands.html#coverage","text":"Usage: shapeworks coverage [args]... Description: creates mesh of coverage between two meshes Options: -h, --help: show this help message and exit --name=STRING: Path to other mesh with which to create coverage. --allowbackintersections=BOOL: Allow back-intersections in coverage calculation [default: true]. --anglethreshold=DOUBLE: This checks the cosine between the ray\u2019s direction vector (e1) and the normal at the intersection point (e2) [default: 0]. --backsearchradius=DOUBLE: Max distance of a back-intersection [default: 0]. Back to Top Back to Mesh Commands","title":"coverage"},{"location":"tools/ShapeWorksCommands.html#distance","text":"Usage: shapeworks distance [args]... Description: computes the distance between two meshes, printing the largest distance between any point from source to target, target to source, and the Hausdorff distance (the largest of these two) Options: -h, --help: show this help message and exit --name=STRING: Filename of other mesh. --method=CHOICE: Method used to compute distance (point-to-point or point-to-cell) [default: point-to-cell]. (choose from 'point-to-point', 'point-to-cell') --ids=BOOL: Set shared field to the ids of the closest points/cells instead of the distances [default: false]. --summary=BOOL: Print largest distance of any point in mesh to target [default: true]. Back to Top Back to Mesh Commands","title":"distance"},{"location":"tools/ShapeWorksCommands.html#field-mean","text":"Usage: shapeworks field-mean [args]... Description: prints the mean of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-mean"},{"location":"tools/ShapeWorksCommands.html#field-names","text":"Usage: shapeworks field-names [args]... Description: prints all the field names present in mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"field-names"},{"location":"tools/ShapeWorksCommands.html#field-range","text":"Usage: shapeworks field-range [args]... Description: prints the range of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-range"},{"location":"tools/ShapeWorksCommands.html#field-std","text":"Usage: shapeworks field-std [args]... Description: prints the standard deviation of the given field Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to fetch (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"field-std"},{"location":"tools/ShapeWorksCommands.html#fill-holes","text":"Usage: shapeworks fill-holes [args]... Description: finds holes in a mesh and closes them Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fill-holes"},{"location":"tools/ShapeWorksCommands.html#fix-element","text":"Usage: shapeworks fix-element [args]... Description: fix element winding of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"fix-element"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance","text":"Usage: shapeworks geodesic-distance [args]... Description: computes geodesic distance between two vertices on mesh Options: -h, --help: show this help message and exit --v1=INT: Index of first point in mesh. --v2=INT: Index of second point in mesh. Back to Top Back to Mesh Commands","title":"geodesic-distance"},{"location":"tools/ShapeWorksCommands.html#geodesic-distance-landmark","text":"Usage: shapeworks geodesic-distance-landmark [args]... Description: computes geodesic distance between a point (landmark) and each vertex on mesh Options: -h, --help: show this help message and exit --x=DOUBLE: Value of x for landmark point. --y=DOUBLE: Value of y for landmark point. --z=DOUBLE: Value of z for landmark point. Back to Top Back to Mesh Commands","title":"geodesic-distance-landmark"},{"location":"tools/ShapeWorksCommands.html#get-field","text":"Usage: shapeworks get-field [args]... Description: gets field of mesh with given name Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to get (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"get-field"},{"location":"tools/ShapeWorksCommands.html#get-field-value","text":"Usage: shapeworks get-field-value [args]... Description: prints value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. Back to Top Back to Mesh Commands","title":"get-field-value"},{"location":"tools/ShapeWorksCommands.html#invert-normal","text":"Usage: shapeworks invert-normal [args]... Description: flips the normal Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"invert-normal"},{"location":"tools/ShapeWorksCommands.html#landmark-geodesics","text":"Usage: shapeworks landmark-geodesics [args]... Description: Computes geodesic distance to each landmark and store as a field Options: -h, --help: show this help message and exit --landmarks=STRING: Path of landmarks file. Back to Top Back to Mesh Commands","title":"landmark-geodesics"},{"location":"tools/ShapeWorksCommands.html#mean-normals","text":"Usage: shapeworks mean-normals [args]... Description: computes average normals for each point in given set of meshes Options: -h, --help: show this help message and exit --names : Paths to meshes (must be followed by -- ), ex: \"mean-normals --names *.vtk --\") --generatenormals=BOOL: Auto generate normals if the mesh does not have normals [default: true]. Back to Top Back to Mesh Commands","title":"mean-normals"},{"location":"tools/ShapeWorksCommands.html#mesh-bounds","text":"Usage: shapeworks mesh-bounds [args]... Description: return physical bounds of mesh Options: -h, --help: show this help message and exit Back to Top Back to Mesh Commands","title":"mesh-bounds"},{"location":"tools/ShapeWorksCommands.html#mesh-curvature","text":"Usage: shapeworks mesh-curvature [args]... Description: computes and adds curvature Options: -h, --help: show this help message and exit --type=CHOICE: Curvature type to use [default: principal]. (choose from 'principal', 'gaussian', 'mean') Back to Top Back to Mesh Commands","title":"mesh-curvature"},{"location":"tools/ShapeWorksCommands.html#mesh-info","text":"Usage: shapeworks mesh-info [args]... Description: prints requested mesh center, center of mass, number of vertices, number of faces and bounding box [default: prints everything] Options: -h, --help: show this help message and exit --vertices: Whether to display number of vertices [default: true]. --faces: Whether to display number of faces [default: true]. --center: Whether to display center [default: true]. --centerofmass: Whether to display center of mass [default: true]. --boundingbox: Whether to display bounding box [default: true]. --fieldnames: Whether to display field names [default: true]. Back to Top Back to Mesh Commands","title":"mesh-info"},{"location":"tools/ShapeWorksCommands.html#mesh-to-dt","text":"Usage: shapeworks mesh-to-dt [args]... Description: converts mesh to a distance transform, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=INT: Number of pixels to pad the output region [default: 1]. Back to Top Back to Mesh Commands","title":"mesh-to-dt"},{"location":"tools/ShapeWorksCommands.html#mesh-to-image","text":"Usage: shapeworks mesh-to-image [args]... Description: converts mesh to a binary segmentation image, using unit spacing by default Options: -h, --help: show this help message and exit --sx=DOUBLE: Spacing of output image in x-direction [default: unit spacing]. --sy=DOUBLE: Spacing of output image in y-direction [default: unit spacing]. --sz=DOUBLE: Spacing of output image in z-direction [default: unit spacing]. --pad=DOUBLE: Pad the region to extract [default: 0.0]. Back to Top Back to Mesh Commands","title":"mesh-to-image"},{"location":"tools/ShapeWorksCommands.html#probe-volume","text":"Usage: shapeworks probe-volume [args]... Description: probe feature volumes at each mesh vertex and output vtk meshes with scalar field defined based on such probing process Options: -h, --help: show this help message and exit --image=STRING: Path of image. Back to Top Back to Mesh Commands","title":"probe-volume"},{"location":"tools/ShapeWorksCommands.html#read-mesh","text":"Usage: shapeworks read-mesh [args]... Description: reads a mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to read. Back to Top Back to Mesh Commands","title":"read-mesh"},{"location":"tools/ShapeWorksCommands.html#reflect-mesh","text":"Usage: shapeworks reflect-mesh [args]... Description: reflect meshes with respect to a specified center and specific axis Options: -h, --help: show this help message and exit --axis=STRING: Axis along which to reflect (X, Y, or Z). -x DOUBLE, --originx=DOUBLE: Origin about which reflection occurs in x-direction [default: 0]. -y DOUBLE, --originy=DOUBLE: Origin about which reflection occurs in y-direction [default: 0]. -z DOUBLE, --originz=DOUBLE: Origin about which reflection occurs in z-direction [default: 0]. Back to Top Back to Mesh Commands","title":"reflect-mesh"},{"location":"tools/ShapeWorksCommands.html#remesh","text":"Usage: shapeworks remesh [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given number of vertices and adaptivity Options: -h, --help: show this help message and exit --target=DOUBLE: Target number of vertices. --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh"},{"location":"tools/ShapeWorksCommands.html#remesh-percent","text":"Usage: shapeworks remesh-percent [args]... Description: applies remeshing using approximated centroidal voronoi diagrams for a given percentage of vertices and adaptivity Options: -h, --help: show this help message and exit --percentage=DOUBLE: Target percentage number of vertices --adaptivity=DOUBLE: 0-2, low adaptivity to high adaptivity Back to Top Back to Mesh Commands","title":"remesh-percent"},{"location":"tools/ShapeWorksCommands.html#scale-mesh","text":"Usage: shapeworks scale-mesh [args]... Description: scales mesh Options: -h, --help: show this help message and exit -x DOUBLE, --sx=DOUBLE: X scale. -y DOUBLE, --sy=DOUBLE: Y scale. -z DOUBLE, --sz=DOUBLE: Z scale. Back to Top Back to Mesh Commands","title":"scale-mesh"},{"location":"tools/ShapeWorksCommands.html#set-field","text":"Usage: shapeworks set-field [args]... Description: adds the current field to the current mesh with the given name. Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. --type=CHOICE: Type of field to set (point or face). (choose from 'point', 'face') Back to Top Back to Mesh Commands","title":"set-field"},{"location":"tools/ShapeWorksCommands.html#set-field-value","text":"Usage: shapeworks set-field-value [args]... Description: sets value of element at index in given field of mesh Options: -h, --help: show this help message and exit --name=STRING: Name of scalar field. -i INT, --index=INT: index of value to return [default: 0]. --value=DOUBLE: value to be set [default: 0]. Back to Top Back to Mesh Commands","title":"set-field-value"},{"location":"tools/ShapeWorksCommands.html#smooth","text":"Usage: shapeworks smooth [args]... Description: applies laplacian smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --relaxation=DOUBLE: Amount of displacement for a vertex to move in each iteration [default: 0]. Back to Top Back to Mesh Commands","title":"smooth"},{"location":"tools/ShapeWorksCommands.html#smooth-sinc","text":"Usage: shapeworks smooth-sinc [args]... Description: applies windowed sinc smoothing Options: -h, --help: show this help message and exit --iterations=INT: Number of iterations [default: 0]. --passband=DOUBLE: Set the passband value for the windowed sinc filter [default: 0]. Back to Top Back to Mesh Commands","title":"smooth-sinc"},{"location":"tools/ShapeWorksCommands.html#transform-mesh","text":"Usage: shapeworks transform-mesh [args]... Description: transform mesh to target mesh using iterative closest point (ICP) using specified landmark transform (rigid, similarity, or affine) Options: -h, --help: show this help message and exit --target=STRING: Filename of target mesh. --type=CHOICE: Alignment type to use [default: similarity]. (choose from 'rigid', 'similarity', 'affine') --iterations=UNSIGNED: Number of iterations run [default: 10]. Back to Top Back to Mesh Commands","title":"transform-mesh"},{"location":"tools/ShapeWorksCommands.html#translate-mesh","text":"Usage: shapeworks translate-mesh [args]... Description: translates mesh Options: -h, --help: show this help message and exit -x DOUBLE, --tx=DOUBLE: X distance. -y DOUBLE, --ty=DOUBLE: Y distance. -z DOUBLE, --tz=DOUBLE: Z distance. Back to Top Back to Mesh Commands","title":"translate-mesh"},{"location":"tools/ShapeWorksCommands.html#warp-mesh","text":"Usage: shapeworks warp-mesh [args]... Description: warps a mesh given reference and target particles Options: -h, --help: show this help message and exit --reference_mesh=STRING: Name of reference mesh. --reference_points=STRING: Name of reference points. --landmark_file=STRING: Optional Argument to specify the name of Landmark file, if landmarks are available for warping --target_points : Names of target points (must be followed by -- ), ex: \"... --target_points *.particles -- ... --save_dir=STRING: Optional: Path to the directory where the mesh files will be saved Back to Top Back to Mesh Commands","title":"warp-mesh"},{"location":"tools/ShapeWorksCommands.html#write-mesh","text":"Usage: shapeworks write-mesh [args]... Description: writes the current mesh Options: -h, --help: show this help message and exit --name=STRING: Name of file to write. --binary=BOOL: Whether to write file as binary. Back to Top Back to Mesh Commands","title":"write-mesh"},{"location":"tools/ShapeWorksCommands.html#optimize-commands","text":"","title":"Optimize Commands"},{"location":"tools/ShapeWorksCommands.html#optimize","text":"Usage: shapeworks optimize [args]... Description: generate a particle system Options: -h, --help: show this help message and exit --name=STRING: Path to project file. --progress: Show progress [default: false]. --xmlconsole: XML console output [default: false]. Back to Top Back to Optimize Commands","title":"optimize"},{"location":"tools/ShapeWorksCommands.html#particlesystem-commands","text":"","title":"ParticleSystem Commands"},{"location":"tools/ShapeWorksCommands.html#compactness","text":"Usage: shapeworks compactness [args]... Description: Compute compactness of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the scree plots for all modes to a file. Back to Top Back to ParticleSystem Commands","title":"compactness"},{"location":"tools/ShapeWorksCommands.html#generalization","text":"Usage: shapeworks generalization [args]... Description: compute generalization of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by generalization along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"generalization"},{"location":"tools/ShapeWorksCommands.html#read-particle-system","text":"Usage: shapeworks read-particle-system [args]... Description: reads a particle system Options: -h, --help: show this help message and exit --names : Paths to .particle files (must be followed by -- ), ex: \"--names *.particle -- next-command...\") Back to Top Back to ParticleSystem Commands","title":"read-particle-system"},{"location":"tools/ShapeWorksCommands.html#specificity","text":"Usage: shapeworks specificity [args]... Description: compute specificity of a loaded particle system Options: -h, --help: show this help message and exit --nmodes=INT: Number of modes to use [default: 1]. --saveto=STRING: Save the reconstructions sorted by specificity along with the mapping to the original shape. Back to Top Back to ParticleSystem Commands","title":"specificity"},{"location":"tools/ShapeWorksCommands.html#project-commands","text":"","title":"Project Commands"},{"location":"tools/ShapeWorksCommands.html#convert-project","text":"Usage: shapeworks convert-project [args]... Description: convert a shapeworks project (xlsx or swproj) Options: -h, --help: show this help message and exit --name=STRING: Path to input project file (xlsx or swproj). --output=STRING: Path to output project file (xlsx or swproj). Back to Top Back to Project Commands","title":"convert-project"},{"location":"tools/ShapeWorksCommands.html#shapeworks-commands_1","text":"","title":"Shapeworks Commands"},{"location":"tools/ShapeWorksCommands.html#seed","text":"Usage: shapeworks seed [args]... Description: sets the seed for random number generation (useful for debugging) Options: -h, --help: show this help message and exit --value=INT: Value of seed. Back to Top Back to Shapeworks Commands","title":"seed"},{"location":"use-cases/right-ventricle.html","text":"Right Ventricle: Highly Variable Shapes What is the Use Case? This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released! Grooming Steps For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Supported Tags --use_subsample --num_subsample --skip_grooming --tiny_test Optimizing Parameters Analyzing Shape Model","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#right-ventricle-highly-variable-shapes","text":"","title":"Right Ventricle: Highly Variable Shapes"},{"location":"use-cases/right-ventricle.html#what-is-the-use-case","text":"This use case demonstrates using ShapeWorks tools to perform the following. Model the highly variable shapes of the right ventricle Study the group difference of right ventricle shape between control and patients Build a shape model where shapes are given as binary segmentations Groom a dataset that only contains shapes In this study, we have two sets of data, the control group with 6 subjects, and the patient group consists of 26 subjects. For each group, we have diastole and systole segmentations. The goal is to study the variation of the systole and diastole in the two groups. We pre-process/groom diastole and systole data and then optimize the particle system for them, independently. Then using the group difference analysis tool of ShapeWorks, we can quantify and study the difference of variation in control and patient groups from diastole to systole stage of heart. Important This use case is not yet released!","title":"What is the Use Case?"},{"location":"use-cases/right-ventricle.html#grooming-steps","text":"For a description of the grooming tools and parameters, see: How to Groom Your Dataset? . Isotropic Resampling : Binary segmentations are resampled to have an isotropic voxel spacing using a user-defined spacing. This step could also be used to produce images and segmentations with smaller voxel spacing, and thereby reduce aliasing artifacts (i.e., staircase/jagged surface) due to binarization for segmentations. Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : All of the segmentations are then aligned to the selected reference using rigid alignment, which factors out the rotation and remaining translation. Cropping : The segmentations are cropped so that all of the samples are within the same bounding box. The bounding box parameters are computed based on the biggest bounding box that encapsulates all the segmentations of the given dataset. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase.","title":"Grooming Steps"},{"location":"use-cases/right-ventricle.html#supported-tags","text":"--use_subsample --num_subsample --skip_grooming --tiny_test","title":"Supported Tags"},{"location":"use-cases/right-ventricle.html#optimizing-parameters","text":"","title":"Optimizing Parameters"},{"location":"use-cases/right-ventricle.html#analyzing-shape-model","text":"","title":"Analyzing Shape Model"},{"location":"use-cases/use-cases.html","text":"Getting Started with Use Cases What is a Use Case? Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples . Running A Use Case The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case. Uploading a Dataset Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite) Downloading a Dataset Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory] Use Case Data When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj Use Cases Arguments When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below. --use_subsample Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10 --use_single_scale Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale --mesh_mode Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode --tiny_test Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test --verify Use Case Workflow Overview The use cases which demomstrate the Shape Modeling Workflow follow this general outline: Grooming Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet. Optimization Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters . Analysis of Results The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#getting-started-with-use-cases","text":"","title":"Getting Started with Use Cases"},{"location":"use-cases/use-cases.html#what-is-a-use-case","text":"Use cases are Python examples that can help users get familiar with ShapeWorks and the general shape modeling workflow. The full dataset associated with each use case (input and output) is available on ShapeWorks Data Portal and downloads automatically when the use case runs. Most use cases demomstrates the Shape Modeling Workflow : Grooming a dataset for optimization. Optimizing a correpsondence model on the groomed data. Analyzing the correspondence model. However, some do not involve grooming, and some only demonstrate the functionality of ShapeWorks statistical tools. For an overview and brief description of the available use cases, see Examples .","title":"What is a Use Case?"},{"location":"use-cases/use-cases.html#running-a-use-case","text":"The use cases are located at: Examples/Python/ . To run a use case, run the following commands with the shapeworks environment activated: $ cd /path/to/shapeworks/Examples/Python $ python RunUseCase.py [use case name] To see the names currently supported use cases and the complete list of optional arguments, run: $ python RunUseCase.py --help Using bash on Windows Windows also has several Unix shells such as git-bash available. These also work with conda activate shapeworks in the same way. However, there is one crucial issue: running Python scripts requires prefixing with winpty . For example, winpty python RunUseCase.py ... . When a use case is run, the dataset required for the use case is automatically downloaded. This requires registering for a free ShapeWorks account by visiting the ShapeWorks Data Portal . Danger Do not use the same password as for your bank account or email. After registering a free account, you can log in from within the script. Note: You are only required to enter your credentials the first time you run a use case.","title":"Running A Use Case"},{"location":"use-cases/use-cases.html#uploading-a-dataset","text":"Uploading a dataset requires the following parameters: dataset_name - The name of the dataset and the same name must be used while running the usecase. licence_filename - File location which contains licence information of the dataset ack_filename - File location which contains acknowledge information of the dataset description - Description of the dataset project_file - File location which contains the project file of dataset using by the usecase which needs to be uploaded. (must be in swproj extension) overwrite - This is a boolean variable which controls any existing dataset with same name should be deleted or not. if True is passed it will delete the existing dataset. The default value is True. For example refer the following command $ import shapeworks as sw $ sw.upload_dataset(dataset_name, licence_filename, acknowledgement_filename, description, project_file, overwrite)","title":"Uploading a Dataset"},{"location":"use-cases/use-cases.html#downloading-a-dataset","text":"Downloading a Dataset requires the following parameters: datasetName - The name of the dataset which needs to be downloaded. outputDirectory - The location where the dataset should be downloaded. For example refer the following command $ python portal.py [dataset name] [output directory]","title":"Downloading a Dataset"},{"location":"use-cases/use-cases.html#use-case-data","text":"When a use case runs, the appropriate zipped data downloads to Examples/Python/Data/ . The data is then extracted to Examples/Python/output/use_case_name/ where all the output from running the use case is also saved. The downloaded data includes the raw input data (segmentations, meshes, and/or images) as well as the expected output from both the final grooming step of the use case (i.e., distance transforms) and the optimized shape model (particle files and project excel sheets). An \"project.swproj\" file is included so that the resulting shape model can be visualized in Studio without running the use case. For example, to view the shape model downloaded for the ellipsoid use case run: $ cd Examples/Python/Output/ellipsoid/ellipsoid_1mode/ $ cp shape_model ../ $ ShapeWorksStudio ellipsoid_multiscale.xlsx or $ ShapeWorksStudio ellipsoid_multiscale.swproj","title":"Use Case Data"},{"location":"use-cases/use-cases.html#use-cases-arguments","text":"When calling RunUseCase.py , various optional arguments can be used. To see the complete list of supported arguments from the command line, run: $ python RunUseCase.py --help A description of each optional argument and how to use it is provided below.","title":"Use Cases Arguments"},{"location":"use-cases/use-cases.html#-use_subsample","text":"Users can run a use case on a subset of the data by adding the --use_subsample argument followed by the --num_subsample argument with the number of samples you wish to use. This will select a representative subset of the specified sample size to run through the pipeline so that the use case runs faster and uses less memory. The subset is determined by running clustering, then picking one sample from each cluster so that the resulting subset is representative of all the data. If --use_subsample is used without --num_subsample , it will use the default number of subsamples which is 3. Note the entire dataset will still be downloaded to run the clustering. $ python RunUseCase.py [use case name] --use_subsample --num_subsample 10","title":"--use_subsample"},{"location":"use-cases/use-cases.html#-use_single_scale","text":"Use cases can be run with multi-scale or single-scale optimization. In both cases, particles on each shape sample are initialized using the particle splitting strategy starting from a single particle (or a given set of landmarks) until reaching the required number of particles. The optimized particles at each scale are used to initialize the next scale. At each scale, particles undergo initialization and optimization stages. The multi-scale argument triggers both the initialization and optimization stages. The single-scale mode uses the initialization stage at each scale and runs the optimization stage when the required number of particles is reached (i.e., at the last scale). The differences between initialization and optimization stages are: How important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting parameter. Hence, the initial_relative_weighting parameter is the weight used in the initialization stage, and the relative_weighting is the weight used for the optimization stage. How the notion of correspondence (inter-surface) is quantified. In initialization, especially when we do not have enough particles to describe the geometry of each surface, we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). In optimization, we use the entropy of the distribution of the shapes (assuming Gaussian-distributed shapes), which is quantified based on the covariance matrix. In the multi-scale setting, we can use shape statistics at later scales using the use_shape_statistics_after parameter, where we have more particles that can reveal the covariance structure.The default mode is multi-scale. To run single-scale, use the --use_single_scale argument. $ python RunUseCase.py [use case name] --use_single_scale","title":"--use_single_scale"},{"location":"use-cases/use-cases.html#-mesh_mode","text":"Use cases that optimize on distance transforms can be run in mesh mode to optimize on meshes instead. When the --mesh_mode argument is used, groomed distance transforms are converted to meshes (by extracting the isosurface at zero), and those meshes are passed to the optimizer. The --mesh_mode argument does not affect mesh-based use cases. $ python RunUseCase.py [insert name of image-based use case here] --mesh_mode","title":"--mesh_mode"},{"location":"use-cases/use-cases.html#-tiny_test","text":"Users can run a fast version of the use case using the --tiny_test argument. This runs on a subset of the data for fewer optimization iterations to verify ShapeWorks has been properly installed. It is meant to quickly test that use cases can run, not to create a good correspondence model. Only a subset of the data will be downloaded directly in the Output folder for the tiny test, and no zip file will be downloaded in the Data folder. No new data will be downloaded if the data has already been unzipped in the Output folder. $ python RunUseCase.py [use case name] --tiny_test","title":"--tiny_test"},{"location":"use-cases/use-cases.html#-verify","text":"","title":"--verify"},{"location":"use-cases/use-cases.html#use-case-workflow-overview","text":"The use cases which demomstrate the Shape Modeling Workflow follow this general outline:","title":"Use Case Workflow Overview"},{"location":"use-cases/use-cases.html#grooming","text":"Grooming involves pre-processing steps to prepare the data for optimization and calculate the alignment transforms which will be passed to the optimizer. This involves generating distance transforms if starting with binary segmentations or generating groomed meshes if starting with unaligned meshes and calculating the alignment transformation matrix for each shape. The grooming steps are unique to each use case, but common steps are explained here: Common Grooming Steps . Note some use cases start with pre-aligned data that does not require grooming. Prefix Transforms Worflow Switched from Transforming the Data (e.g. centering) to Passing the Transform as the Prefix Transform. Instead of passing groomed and aligned shapes to the optimizer, now, the use cases only perform the grooming steps that do not change the co-ordinates of the shape. For the grooming steps that alter the co-ordinates, the transformation matrices are calculated and sent to the optimizer to be applied(pre-multiplied) after optimization. See How to Step Up Optimization? page for details regarding setting up the project sheet.","title":"Grooming"},{"location":"use-cases/use-cases.html#optimization","text":"Optimization involves automatically computing a dense set of corresponding landmark positions from the groomed shape representations (distance transforms or meshes). Optimization can be run with different parameters in ShapeWorksStudio or via the command line. In the use cases, optimization parameters are defined in the optimize sheet of the project.xlsx or project.swproj and optimization is run from the command line. For a full decription of parameters, please see: optimization parameters .","title":"Optimization"},{"location":"use-cases/use-cases.html#analysis-of-results","text":"The resulting correspondence points from optimization can be viewed and analyzed in ShapeWorks Studio . This is a Qt and VTK-based graphical user interface (GUI), that allows visualizing the correspondence model for each shape sample where particle coloring is used to reflect correspondence among shapes. After optimization, the use cases create and open an project.xlsx or project.swproj file for viewing the results in Studio. Studio opens automatically when the use case finishes running. This project.xlsx or project.swproj file can be reopened at any time after running the use case for subsequent analysis by calling ShapeworksStudio project.xlsx or ShapeworksStudio project.swproj . For a full description of how to analyze results in Studio, see Analyzing Results .","title":"Analysis of Results"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html","text":"Ellipsoid: Cutting Planes What is the Use Case? The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid: Grooming Steps This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15. Analyzing Shape Models Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Ellipsoid: Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#ellipsoid-cutting-planes","text":"","title":"Ellipsoid: Cutting Planes"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#what-is-the-use-case","text":"The ellipsoid_cut example demonstrates using multiple cutting planes to constrain the distribution of particles on ellipsoids which are already aligned. This can be used in modeling scenarios where statistical modeling/analysis is needed for a region-of-interest on the anatomy/object-class at hand without having to affect the input data. Here is an example of where the cutting planes intersect and ellipsoid:","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#grooming-steps","text":"This use case starts with pre-aligned segmentations. The only grooming step is computing the signed distance transform for each segmentation.","title":"Grooming Steps"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 32 , \"use_normals\" : 1 , \"normals_strength\" : 15 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 3000 , \"optimization_iterations\" : 3000 , \"starting_regularization\" : 100 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"verbosity\" : 0 , } Here cutting_plane_counts is two for every ellipsoid and there are 15 ellipsoids so it is a list of twos of length 15. The cutting_planes parameter is a list of the two cutting plane points of length 15.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/ellipsoid-cutting-planes.html#analyzing-shape-models","text":"Below we can see the resulting shape model where correspondence points do not lie beyond the cutting planes and only a secton of the ellipsoids are modeled.","title":"Analyzing Shape Models"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html","text":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP) What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results. Starting a New Project with Constraints Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs. Grooming Steps You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs: Optimization Parameters We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure: Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#studio-femur-shape-model-from-meshes-with-cutting-planes-using-studio-wip","text":"","title":"Studio Femur: Shape Model from Meshes with Cutting Planes Using Studio (WIP)"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). This is a tutorial on how to use this in Studio. The files will be available in Shapeworks/Examples/Studio/FemurConstraints for you to follow along or see the results.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#starting-a-new-project-with-constraints","text":"Follow these instructions to start a new project and define constraints on your shapes: Open ShapeWorks Studio and click \"Start New Project\" from the Splash Screen. If you just want to explore and not follow, you can just load Shapeworks/Examples/Studio/FemurConstraints/FemurConstraints.xlsx. Drag-and-drop or import the femurs in Shapeworks/Examples/Studio/FemurConstraints. Follow the instructions for using constraints to define constraints. Here we define a cutting plane and a free-form constraint to each of four femurs.","title":"Starting a New Project with Constraints"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#grooming-steps","text":"You can select the grooming parameters in the Groom tab and click \"Run Groom\". The default parameters work for this use case, but you can experiment with tuning them. Here is what the femur meshes look like before grooming: The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : All of the meshes are aligned to the selected reference using rigid alignment, which factors out the rotation and translation. Here are the resulting groomed femurs:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#optimization-parameters","text":"We modify the following parameters to these values for the optimization \"number_of_particles\" : 128 \"optimization_iterations\" : 2000 \"starting_regularization\" : 100 \"ending_regularization\" : 50 \"relative_weighting\" : 1 \"initial_relative_weighting\" : 0.05 Here is a video showing the entire procedure:","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes-studio.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting-plane constraint nor the free-form constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored.","title":"Analyzing Shape Model"},{"location":"use-cases/constraint-based/femur-cutting-planes.html","text":"Femur: Shape Model from Meshes with Cutting Planes What is the Use Case? The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case. Grooming Steps Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur. Analyzing Shape Model Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Femur:Shape Model with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#femur-shape-model-from-meshes-with-cutting-planes","text":"","title":"Femur: Shape Model from Meshes with Cutting Planes"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#what-is-the-use-case","text":"The femur use case demonstrates using the shape modeling workflow on a real-world femur dataset. The femur shapes are represented as triangular surface meshes and the dataset also contains corresponding imaging data (e.g., CT). There are both left and right femurs in this dataset, thus some must be reflected so that they can all be aligned. The femur meshes have also been segmented with various shaft lengths, as can be seen below. To remove this variability so that it is not captured in the shape model, a cutting plane is used as an optimization constraint. Important Minimum of 32GB of RAM required to run the full use case.","title":"What is the Use Case?"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#grooming-steps","text":"Here is what the femur meshes look like before grooming. Some femurs are out of frame because they are not centered or aligned. The femur mesh grooming steps are: Reflect Meshes : In this use case, we have both right and left femur surface meshes. To align all the femurs, we choose one side to reflect. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Centering : Meshes are translated so that their center lies at [0,0,0]. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied along with respective cutting planes:","title":"Grooming Steps"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } Here cutting_plane_counts is 49, one for every femur and the cutting_planes is the same cutting plane points for every femur.","title":"Optimization Parameters"},{"location":"use-cases/constraint-based/femur-cutting-planes.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using multi-scale optimization. Note the particles are not placed below the cutting plane constraint. The surface extending below the particles is a surface reconstruction artifact which can be ignored. Here are femur samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the femur dataset.","title":"Analyzing Shape Model"},{"location":"use-cases/contour-based/supershapes-contour.html","text":"Supershapes:Shape Model for Contour Domains What is the Use Case? The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data: Grooming Steps In this use case, we download pre-groomed data. The input contours are: Relevant Arguments This use case does not support any arguments Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#supershapesshape-model-for-contour-domains","text":"","title":"Supershapes:Shape Model for Contour Domains"},{"location":"use-cases/contour-based/supershapes-contour.html#what-is-the-use-case","text":"The supershapes_1mode_contour use case demonstrates using ShapeWorks tools to perform optimization for N-dimensional contours. Contours are represented as a series of lines, that may be a closed loop. We consider 2D shapes generated from the supershape equation , with a single parameter sampled from a chi-squared distribution. Here is an example of the data:","title":"What is the Use Case?"},{"location":"use-cases/contour-based/supershapes-contour.html#grooming-steps","text":"In this use case, we download pre-groomed data. The input contours are:","title":"Grooming Steps"},{"location":"use-cases/contour-based/supershapes-contour.html#relevant-arguments","text":"This use case does not support any arguments","title":"Relevant Arguments"},{"location":"use-cases/contour-based/supershapes-contour.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 64 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 100 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 5 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 2 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 4 , }","title":"Optimization Parameters"},{"location":"use-cases/contour-based/supershapes-contour.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. During the generation of the input supershapes data,the n2 and n3 variables were kept constant, and only the n1 variable was varied according to values sampled from a chi squared distribution. We obtain a shape model that accurately captures this variation(first mode variance = 98%)","title":"Analyzing Shape Model"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html","text":"Femur Shape Model Directly from Images What is the Use Case? The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU. Relevant Arguments --tiny_test Use Case Pipeline The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below. Step 1: Getting the original data The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green). Step 2: Define the data split The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing. Step 3: Find training alignment transforms Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed. Step 4: Optimize training particles Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model. Step 5: Groom training images Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4. Step 6: Data augmentation Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots. Step 7: Find validation and test alignment transforms and groom images To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images. Step 8: Optimize validation particles with fixed domains In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs. Step 9: Create PyTorch loaders from data The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased. Step 10: Training DeepSSM A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch. Step 11: Predict validation particles and analyze accuracy The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults . Step 12: Predict test particles and analyze accuracy Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Femur SSM Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#femur-shape-model-directly-from-images","text":"","title":"Femur Shape Model Directly from Images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#what-is-the-use-case","text":"The deep_ssm use case demonstrates how to get shape models from unsegmented images using deep learning on the femur data. This includes performing data augmentation as well as building, training and testing a DeepSSM model. For a detailed description of these processes, please see Data Augmentation for Deep Learning and SSMs Directly from Images . The image and shape data used for training and testing results from running the femur use case . Note running this use case does not require running the femur use case , the required data will automatically be downloaded. On CUDA This use case uses Pytorch and requires a GPU to run in a timely manner. When you source install_shapeworks.sh , it detects if you have a GPU and installs the version of Pytorch compatible with your version of CUDA. Note we only support the three most recent versions of CUDA. If your GPU requires an older CUDA version, you will need to update the Pytorch install in your shapeworks conda environment to the correct CUDA version. For more information on doing so, see pytorch.org . To do a quick check to see if Pytorch is running on your GPU, you can run the use case with the --tiny-test tag. This will quickly run the use case on a few examples and print an error if it is not running on the GPU.","title":"What is the Use Case?"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#use-case-pipeline","text":"The use case pipeline includes creation of a training, validation, and testing sets. This involves particle optimization, image grooming, and data augmentation . Additionally, the use case demonstrates creating and training a DeepSSM network using ShapeWorks Python packages. For a full explanation of these packages see Using the Data Augmentation Python Package and Using the DeepSSM Python Package . Each step of the pipeline is outlined below.","title":"Use Case Pipeline"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-1-getting-the-original-data","text":"The femur data is downloaded from the ShapeWorks Data Portal . The data includes the original unsegmented .nrrd images, corresponding .ply mesh files, and .json constraint files with cutting planes. Below is one example of an MRI (blue), mesh (white), and corrresponding cutting plane (green).","title":"Step 1: Getting the original data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-2-define-the-data-split","text":"The data is randomly split into training (80%), validation (10%), and test (10%) sets. Of the 49 examples in the femur dataset, 39 are used to create training set, 5 are held out for the validation set, and the remaining 5 are held out for a test set. If running --tiny_test only 5 samples are downloaded and 3 are used in training, 1 for validation, and 1 for testing.","title":"Step 2: Define the data split"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-3-find-training-alignment-transforms","text":"Training DeepSSM requires labels or ground truth particles, thus we run optimization on the training set. As the femur meshes are unaligned, this requires finiding the alignment transforms to use in optimization. The steps for computing the transforms are the same as in the Femur Use Case . See Groom for more information on specific steps. In addition to computing the transforms, the smallest bounding box which contains all aligned meshes is computed.","title":"Step 3: Find training alignment transforms"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-4-optimize-training-particles","text":"Particles are optimized on the training femur meshes using corresponding alignment transforms and cutting planes as is done in the Femur Use Case . Below are some training set femur samples with their optimized correspondences. Here is the mean shape of the optimized training shape model.","title":"Step 4: Optimize training particles"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-5-groom-training-images","text":"Input images for the DeepSSM training set are created by taking the original training MRIs and applying the corresponding alignment transform (from step 3), applying the corresponding Procrustes transform (from optimization in step 4), and cropping using the boudning box (computed in step 3). This results in input images which consistently cropped and in alignment with the ground truth world particles. Here are some examples of slices of the groomed training images. These are now in alignment with the optimized world particles from Step 4.","title":"Step 5: Groom training images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-6-data-augmentation","text":"Data augmentation is run using the images and particle files allocated for training. 2967 augmented samples are created so that DeepSSM can be trained on 3000 total examples. The data is embedded to 12 dimensions using PCA, preserving 95% of the population variation. A Gaussian distribution is then fit to the embedded data and used in sampling new shape samples for data augmentation. The functions relevant to this step are runDataAugmentation and visualizeAugmentation . The distribution of real and augmented PCA scores are visualized as parallel violin plots.","title":"Step 6: Data augmentation"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-7-find-validation-and-test-alignment-transforms-and-groom-images","text":"To prepare the input images for the validation and test sets, the original MRIs are reflected if neccesary then aligned to a reference image using image registration. The reference image is selected as the groomed image corresponded to the training sample used in mesh alignment in step 3. The images are then cropped using the same bounding box computed in step 3 and the combined transforms are saved. Note this step does not use the validation or test meshes and can be performed without segmentation. Here are some examples of the groomed validation and test images.","title":"Step 7: Find validation and test alignment transforms and groom images"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-8-optimize-validation-particles-with-fixed-domains","text":"In order to quantify the accuracy of DeepSSM, ground truth particles are optimized on the validation set. This is done by adding the validation meshes to the training model while keeping the training particles fixed as is done in the Fixed Domain Use Case . The transforms found in step 7 are passed and Procrustes is turned off as these transform matrices account for scale. Below are the resulting particles on the validation femurs.","title":"Step 8: Optimize validation particles with fixed domains"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-9-create-pytorch-loaders-from-data","text":"The groomed images and particle files are reformatted into tensors for training and testing the DeepSSM network. In the case of the test loader, a place holder is used for the particles as we do not have ground truth particles. The functions relevant to this step are getTrainValLoaders and getTestLoader . Note If a CUDA memory error occurs when running the use case, the batch size value may need to be decreased.","title":"Step 9: Create PyTorch loaders from data"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-10-training-deepssm","text":"A DeepSSM model is created and trained for 10 epochs. A learning rate of 0.001 is used, and the validation error is calculated and reported every epoch. The function relevant to this step is trainDeepSSM . The training and validation errors are plotted after each epoch.","title":"Step 10: Training DeepSSM"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-11-predict-validation-particles-and-analyze-accuracy","text":"The trained DeepSSM model is used to predict the world particles for the validation images. The function relevant to this step is testDeepSSM . The predicted local particles are aquired by applying the inverse transforms from step 7 to the world particles. The accuracy is then analyzed via two means. The first is the mean square error between the predicted worl dparticles and ground truth world particles. The second is the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. These results are printed to the console. The function relevant to this step is analyzeResults .","title":"Step 11: Predict validation particles and analyze accuracy"},{"location":"use-cases/deep-learning-based/deep-ssm-femur.html#step-12-predict-test-particles-and-analyze-accuracy","text":"Similarly, the trained DeepSSM model is used to predict the world particles for the test images via testDeepSSM . As there are no ground truth particles, accuracy is just analyzed using the surface-to-surface distance between the true mesh and the mesh generated from the predicted local particles. Below we can see the results on the 5 test shapes. The original image is with the predicted meshes which have a heat map displaying the surface-tosurface distance to the true mesh.","title":"Step 12: Predict test particles and analyze accuracy"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Data This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain_mesh use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints to capture inter-domains correlations and interactions directly on triangular surface meshes The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#grooming-data","text":"This is how the meshes in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). The reference is selected based on domain 1 shapes. Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Data"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 2 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample, we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html","text":"Ellipsoid Mesh: Basic Example What is the Use Case? The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks. Grooming Steps This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#ellipsoid-mesh-basic-example","text":"","title":"Ellipsoid Mesh: Basic Example"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#what-is-the-use-case","text":"The ellipsoid_mesh use case uses the same dataset as the ellipsoid use case, but optimization is done on meshes rather than distance transforms. The dataset comprises of axis-aligned ellipsoids with varying radii along the x-axis. The ellipsoid_mesh use case represents the standard use version of a shape modeling workflow from meshes using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. The ellipsoids have random orientations. Remeshing : Meshes are remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/ellipsoid_mesh.html#analyzing-shape-model","text":"Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/hip.html","text":"Shape Model for Multiple Domains directly from Mesh What is the Use Case? The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones. Grooming Data This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Hip: Multiple Domains Alignment"},{"location":"use-cases/mesh-based/hip.html#shape-model-for-multiple-domains-directly-from-mesh","text":"","title":"Shape Model for Multiple Domains directly from Mesh"},{"location":"use-cases/mesh-based/hip.html#what-is-the-use-case","text":"The hip_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains). The use case uses the hip joint to demonstrate the capability of ShapeWorks to capture inter-domains correlations and interactions directly on triangular surface meshes. The use case showcases how to calculate the different alignment options available for multiple organ anatomies. The dataset available for this use case: hip - a collection of femur and pelvis bones.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/hip.html#grooming-data","text":"This is how the meshes in the dataset look before grooming. Smoothing and Remeshing : Meshes are smoothed and remeshed to ensure uniform vertices. Reference Selection : The reference is selected by first computing the mean (average) mesh, then selecting the mesh closest to that mean (i.e., medoid). Rigid Alignment : This use case calculates three types of alignment: a. Calculate the local alignment matrix using only femurs w.r.t to the femur of the reference shape b. Calcualte the local alignment matrix using only pelvis w.r.t to the pelvis of the reference shape c. Calcualte the global alignment matrix for the complete joint using the reference shape Here we show how the shapes would look like if the transforms are applied. Meshes obtained after grooming w.r.t femurs: Meshes obtained after grooming w.r.t pelvis: Meshes obtained after grooming w.r.t the whole joint:","title":"Grooming Data"},{"location":"use-cases/mesh-based/hip.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/hip.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Optimization parameters for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2500 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"relative_weighting\" : 3 , \"initial_relative_weighting\" : 0.05 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_normals\" : 1 , \"normals_strength\" : 5.0 , \"procrustes\" : 1 , \"procrustes_scaling\" : 1 , \"procrustes_rotation_translation\" : 1 } num_particles = [ 256 , 256 ]","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/hip.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Modes of variation of the hip joint with global alignment Modes of variation of the hip joint by aligning w.r.t the femur Modes of variation of the hip joint by aligning w.r.t the pelvis","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/lumps.html","text":"Lumps: Shape Model directly from Mesh What is the Use Case? The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population. Grooming Steps This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#lumps-shape-model-directly-from-mesh","text":"","title":"Lumps: Shape Model directly from Mesh"},{"location":"use-cases/mesh-based/lumps.html#what-is-the-use-case","text":"The lumps use case demonstrates a minimal example of running ShapeWorks directly on a mesh using a synthetic dataset. The shapes in this dataset are spheres with two lumps or nodes that vary in size. The use case demonstrates that the ShapeWorks workflow results in a correct shape model- i.e., only the position of particles on the lumps vary; the rest are constant across the shape population.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/lumps.html#grooming-steps","text":"This is a synthetic dataset that is already in alignment and does not require grooming. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/lumps.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/lumps.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 100 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 2000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/lumps.html#analyzing-shape-model","text":"Here is the mean shape of the optimized shape mode using single-scale optimization. Note the two tiny lumps at the top, and towards the right. Here are lumps samples with their optimized correspondences. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the lumps dataset using single-scale optimization. Note that the particles which do not lie on the lumps remain stationary. The shape model correctly caputures the modes of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/mesh-based/thin-cavity-bean.html","text":"Thin Cavity Bean: Shape Model with Geodesic Distances What is the Use Case? The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation. Grooming Steps In this use case, we download pre-groomed data. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --use_single_scale --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on. Analyzing Shape Model Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#thin-cavity-bean-shape-model-with-geodesic-distances","text":"","title":"Thin Cavity Bean: Shape Model with Geodesic Distances"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#what-is-the-use-case","text":"The thin_cavity_bean use case demonstrates using geodesic distance based repulsion for mesh domains in optimization. Here is an example of the data: The shapes vary only in location of the thin cavity. This use case demonstrates that ShapeWorks optimization with geodescic distance can correctly capture this mode of variation.","title":"What is the Use Case?"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#grooming-steps","text":"In this use case, we download pre-groomed data. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 1024 , \"use_normals\" : 1 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 2500 , \"starting_regularization\" : 3000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.01 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_geodesic_distance\" : 1 , } Note geodesics_enabled is set to on.","title":"Optimization Parameters"},{"location":"use-cases/mesh-based/thin-cavity-bean.html#analyzing-shape-model","text":"Here we can see the resulting shape model correctly captures the moving cavity as the only mode of variation.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html","text":"Fixed Domains Ellipsoid: Shape Model on New Shapes What is the Use Case? The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids. Grooming Steps This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms. Relevant Arguments --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" } Analyzing Shape Model Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#fixed-domains-ellipsoid-shape-model-on-new-shapes","text":"","title":"Fixed Domains Ellipsoid: Shape Model on New Shapes"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#what-is-the-use-case","text":"The ellipsoid_fd use case is designed to demonstrate the functionality of the fixed domain of ShapeWorks. Fixed domains is used in cases where we need to place correspondences on new shapes using a pre-existing shape model. In this example, we use a dataset which contains a previously generated shape model on ellipsoids (see Ellispoid Use Case ) and prepped segmentations of five new ellipsoids.","title":"What is the Use Case?"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#grooming-steps","text":"This use case assumes that the new samples are already aligned with the existing shape model. The only grooming step is computing the signed distance transform for each new segmentation. Below are the pre-existing (first fifteen) and new (last five) groomed distance transforms.","title":"Grooming Steps"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 15.0 , \"checkpointing_interval\" : 0 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 10 , \"optimization_iterations\" : 10 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"relative_weighting\" : 15 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"use_landmarks\" : 1 , \"use_fixed_subjects\" : 1 , \"narrow_band\" : 1e10 , \"fixed_subjects_column\" : \"fixed\" , \"fixed_subjects_choice\" : \"yes\" }","title":"Optimization Parameters"},{"location":"use-cases/multistep/fixed-domain-ellipsoid.html#analyzing-shape-model","text":"Here we can see the optimized particles for the new samples (numbers 15-19). The particles for the original samples (0-14) have remained the same. The primary mode of variation is along the x-axis as it was before adding the new shapes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html","text":"Incremental Supershapes: Building a Shape Model Incrementally What is the Use Case? The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script. Use Case Options When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size. Sorting Method The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median. Initial Model Size The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed. Incremental Batch Size The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization. Grooming Steps In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes: Relevant Arguments --use_subsample --num_subsample --tiny_test --interactive Incremental Optimization In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized. Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch. Analyzing Shape Model The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes. Evaluation of the Benefits of Incremental Optimization To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model. Subsample of Dataset The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-supershapes-building-a-shape-model-incrementally","text":"","title":"Incremental Supershapes: Building a Shape Model Incrementally"},{"location":"use-cases/multistep/incremental_supershapes.html#what-is-the-use-case","text":"The incremental_supershapes use case demonstrates how a shape model can be built incrementally. This approach is beneficial in two scenarios. The first is when the cohort of shapes is very large, where optimizing particle position across all shapes at once would take a very long time. In this case, by fitting a shape model on a subset of the data, then incrementally updating the shape model using the previous model as initialization, the total time for optimization can be greatly reduced. The second scenario is when the dataset is small but contains a large amount of shape variation. In this case, by initially fitting a model on the most similar shapes, then incrementally adding outlier shapes, we can achieve a more compact shape model with better correspondence than if we were to optimize the whole dataset at once. The use case dataset is comprised of parameterized meshes called Supershapes generated using the ShapeWorks Shape Cohort Generation package. There are 50 meshes that vary greatly in shape. They have 2 to 7 lobes, and the parameters are sampled from a chi-squared distribution. The function used to generate the data is included in the Python script.","title":"What is the Use Case?"},{"location":"use-cases/multistep/incremental_supershapes.html#use-case-options","text":"When this use case is run with the --interactive tag, the user is prompted to set the following options: sorting method, initial model size, and incremental batch size.","title":"Use Case Options"},{"location":"use-cases/multistep/incremental_supershapes.html#sorting-method","text":"The sorting method determines how the shapes are sorted to be added incrementally. There are three options: - random : This option results in sorting the shapes randomly. It may be appropriate to use when the cohort of shapes is very large and the effect of outliers is likely small. - median : When this option is used, the pairwise surface-to-surface distance between all of the meshes is first computed. Then the median shape (the shape with minimum distance to all other shapes) is found. The meshes are then sorted from closest to the median to furthest. The shapes furthest from the median typically represent outliers. - distribution : Similar to median, when this option is used, the pairwise surface-to-surface distances are computed and the median mesh is selected. We then incrementally add one mesh at a time to the distribution (starting with the median), selecting the mesh with minimum distance to all others in the distribution. This results in meshes sorted from most inlying to most outlying. The default option is median.","title":"Sorting Method"},{"location":"use-cases/multistep/incremental_supershapes.html#initial-model-size","text":"The initial model size specifies how many shapes to use in the initial optimization. This can range between 2 and 50 and the default value is 10. Note when 50 is used, all of the shapes are used in the initial model; thus the use case is not incremental. The initial shapes are the first of the sorted shapes. After the initial shape model is optimized, Studio opens to allow for visualization. Incremental optimization pursues after Studio is closed.","title":"Initial Model Size"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-batch-size","text":"The incremental batch size specifies how many shapes to add in each incremental optimization. This can range from 1 to (50 - initial model size) and the default is 5. After all batches have been incrementally optimized, Studio opens to allow for visualization.","title":"Incremental Batch Size"},{"location":"use-cases/multistep/incremental_supershapes.html#grooming-steps","text":"In this use case, the Superhapes are generated so that they are already aligned/groomed. Here are some examples of the meshes:","title":"Grooming Steps"},{"location":"use-cases/multistep/incremental_supershapes.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test --interactive","title":"Relevant Arguments"},{"location":"use-cases/multistep/incremental_supershapes.html#incremental-optimization","text":"In incremental optimization, an initial shape model is fit by running optimization as usual. Additional shapes are then added, and the shape model is incrementally updated by initializing particles using the previous shape model and running optimization again. The mean particles from the existing shape model are used to initialize particles on new shapes. The order in which shapes are added depends on the specified sorting method. The first batch is used to create an initial shape model and the remaining batches are incrementally added and optimized.","title":"Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks, which requires that the optimization parameters are specified in a python dictionary. Please refer to Parameter Dictionary in Python for more details. Here are the parameters used for optimizing the initial shape model: { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 300 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 300 , \"optimization_iterations\" : 1400 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 , \"multiscale\" : 1 , \"multiscale_particles\" : 32 } After the initial optimization, the following parameters are updated for each incremental optimization: { \"use_landmarks\" : 1 , \"iterations_per_split\" : 0 , \"optimization_iterations\" : 100 , \"multiscale\" : 0 } Here \"use_landmarks\" enables particle initialization. We use single scale optimization with no initialization iterations since the particles are already initialized by the former shape model or mean particles. We can also reduce the optimization iterations as we are not starting from scratch.","title":"Optimization Parameters"},{"location":"use-cases/multistep/incremental_supershapes.html#analyzing-shape-model","text":"The following example output was generated using the default options: median sorting, initial model size of 10, and incremental batch size of 5. Below is the initial shape model after optimizing on the first batch of 10 meshes. We can see all 10 are relatively similar. Below is the final shape model after incrementally adding batches and running optimization. We can see the shape model accurately captures the original shapes as well as the more unique ones. Here is the mean shape of the final shape model along the first PCA mode. Almost all of the variance is captured by the first four PCA modes.","title":"Analyzing Shape Model"},{"location":"use-cases/multistep/incremental_supershapes.html#evaluation-of-the-benefits-of-incremental-optimization","text":"To see the benefit of incremental optimization, we can compare the results from running the use case with different options. By comparing the variance graphs below, we can see that the incremental optimization results in a mode compact shape model. Sorting the shapes using either median or distribution so that optimization is done on inliers first and then outliers are incrementally added, results in a better model.","title":"Evaluation of the Benefits of Incremental Optimization"},{"location":"use-cases/multistep/incremental_supershapes.html#subsample-of-dataset","text":"The benefit of incremental optimization is even more apparent in the case where the dataset is small and varies greatly. To see this, we can run the use case with the --use_subsample tag. The subsample is automatically selected using clustering so that it is representative of the entire dataset, thus it is defined to have as much variation as possible. For example, when --num_subsample is set to 9, the selected meshes are shown below. Below is the first mode of variation from the shape model optimized incrementally on the subset. Below is the first mode of variation from a shape model optimized on the whole subset at once for the same total number of optimization iterations as the incremental model. We can see that the incremental optimization approach resulted in a much better shape model.","title":"Subsample of Dataset"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html","text":"Shape Model for Multiple Domains from Segmentations What is the Use Case? The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ] Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#shape-model-for-multiple-domains-from-segmentations","text":"","title":"Shape Model for Multiple Domains from Segmentations"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#what-is-the-use-case","text":"The ellipsoid_multiple_domain use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, to capture inter-domains correlations and interactions. The dataset available for this use case: ellipsoid_joint_rotation - two stacked ellipsoids with the same radii, with the top ellipsoid rotating w.r.t the bottom ellipsoid.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in the ellipsoid joint dataset are resampled with an isotropic voxel spacing. Reference Selection : For the ellipsoid_joint datasets available on the ShapeWorks portal, the mode of variation is rotation and/or size of the second ellipsoid w.r.t to the first ellipsoid. Hence, we align the shapes using the first domain as the reference. This is domain-specific alignment. The reference is selected by first computing the mean (average) distance transform of the segmentations belonging to the reference domain, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' 4. Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 200 , \"optimization_iterations\" : 200 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : domains_per_shape , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } num_particles = [ 128 , 128 ]","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid-multiple-domain.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the optimized shape. Below are the particles for each sample; we can see they are uniformly distributed.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/ellipsoid.html","text":"Ellipsoid: Basic Example What is the Use Case? The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#ellipsoid-basic-example","text":"","title":"Ellipsoid: Basic Example"},{"location":"use-cases/segmentation-based/ellipsoid.html#what-is-the-use-case","text":"The ellipsoid dataset comprises of axis-aligned ellipsoids with varying radii along all the x-axis. This example is a stepping stone for the user to get familiar with the workflow of ShapeWorks. The ellipsoid use case represents the standard use version of a shape modeling workflow using ShapeWorks.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/ellipsoid.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the ellipsoids have random centers andn orientations. Isotropic Resampling : Binary segmentations in ellipsoid/segmentations/ are resampled to have an isotropic voxel spacing. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment :For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Padding : The segmentations are padded with zeros on every side. Distance Transform : Finally, the smooth signed distance transform is computed, and the dataset is now ready for the optimize phase. Distance transform obtained after grooming.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/ellipsoid.html#relevant-arguments","text":"--use_subsample --num_subsample --skip_grooming --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/ellipsoid.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/ellipsoid.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Below is the mean shape reulting from optimization. Here we can see that there is only one major mode of variation. Below are the particles for each sample, we can see they are uniformly distributed. Animating along the first PCA mode we can see the variation in the radius along the x-axis.","title":"Analyzing Shape Model"},{"location":"use-cases/segmentation-based/left-atrium.html","text":"Left Atrium: Shape Model from Segmentations What is the Use Case? The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset. Grooming Steps This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied. Relevant Arguments --use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#left-atrium-shape-model-from-segmentations","text":"","title":"Left Atrium: Shape Model from Segmentations"},{"location":"use-cases/segmentation-based/left-atrium.html#what-is-the-use-case","text":"The left_atrium use case demonstrates using ShapeWorks tools to perform the following: - Groom data and build a shape model where shapes are given as binary segmentations - Showcase both single-scale and multi-scale optimization for particles optimization Corresponding imaging data (e.g., MRI) is available with this dataset.","title":"What is the Use Case?"},{"location":"use-cases/segmentation-based/left-atrium.html#grooming-steps","text":"This is how the segmentations in the dataset look before grooming.Here it can been seen that the atriums have random centers andn orientations. The grooming stage entails rigid transformations to align samples for groupwise modeling and analysis. It also changes the origin, voxel size, image size, orientation, etc. of the shape data. Grooming can be done with imaging data (CT/MRI) so that it is carried through each grooming step and with the shapes so that is remains in alignemtn and can be used for subsequent analysis. Here are the grooming steps: Isotropic Resampling : Binary segmentations in left_atrium/segmentations/ are resampled to have an isotropic voxel spacing. Centering : Segmenations are translated to have an origin at (0,0,0). Apply Padding : Segmentations that touch the image boundary will have an artificial hole at that intersection. Segmentations are padded by adding a user-defined number of voxels along each image direction (rows, cols, and slices) to avoid introducing artificial holes. Center-of-Mass Alignment : This translational alignment step is performed before rigidly aligning the samples to a shape reference. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for rigid alignment. Reference Selection : The reference is selected by first computing the mean (average) distance transform of the segmentations, then selecting the sample closest to that mean (i.e., medoid). Rigid Alignment : For all the shapes, the transformation is calculated to factor out translation and rotation based on the reference shape.This transformation matrix will be sent to the optimizer as a 'prefix transform' Bounding Box : The smallest region which fits all of the samples is found. Cropping : The segmentations are cropped to the size of the bounding box. Distance Transform : Finally, the signed distance transform is computed, and the dataset is now ready for the optimize phase. Here are the resulting groomed ditsance transforms.Here we show how the shapes would look like if the transforms are applied.","title":"Grooming Steps"},{"location":"use-cases/segmentation-based/left-atrium.html#relevant-arguments","text":"--use_subsample --num_subsample --use_single_scale --mesh_mode --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/segmentation-based/left-atrium.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 4000 , \"starting_regularization\" : 1000 , \"ending_regularization\" : 10 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"procrustes\" : 1 , \"initial_relative_weighting\" : 0.1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/segmentation-based/left-atrium.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model. Here is the mean shape of the optimized shape mode using multi-scale optimization. Here is a video showing the shape modes of variation (computed using principal component analysis - PCA) of the left atrium dataset using multi-scale optimization.","title":"Analyzing Shape Model"},{"location":"use-cases/shared-boundary-based/peanut.html","text":"Peanut: Shape Model of Multiple Domains with Shared Boundaries What is the Use Case? The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller. Grooming Steps This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset. Relevant Arguments --use_subsample --num_subsample --tiny_test Optimization Parameters The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 } Analyzing Shape Model Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Peanut:Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#peanut-shape-model-of-multiple-domains-with-shared-boundaries","text":"","title":"Peanut: Shape Model of Multiple Domains with Shared Boundaries"},{"location":"use-cases/shared-boundary-based/peanut.html#what-is-the-use-case","text":"The peanut_shared_boundary use case demonstrates using ShapeWorks tools to perform shape modelings for anatomies with multiple structures (domains), e.g., joints, with shared boundaries to capture inter-domains correlations and interactions. It also demonstrates the shared mesh boundary and contour extraction tools and runs multi-domain (meshes and contours) optimization on the peanut dataset. The peanut dataset,consists of two aligned spheres, but one of the spheres is subtracted from the other. There exists a shared surface between the two spheres. The radii of the two spheres vary inversely, ie: as one gets bigger the other gets smaller.","title":"What is the Use Case?"},{"location":"use-cases/shared-boundary-based/peanut.html#grooming-steps","text":"This is how the meshes in the dataset look before grooming. Remeshing : Meshes are remeshed to ensure uniform vertices. Extract Shared Boundary : In this step, we ingest the two original shapes and output three new shapes, two of which correspond to the original shapes and one for the shared boundary. Smoothing :Applied laplacian smoothing. Extract Contour : The boundary loop of the shared surface is obtained. Groomed dataset.","title":"Grooming Steps"},{"location":"use-cases/shared-boundary-based/peanut.html#relevant-arguments","text":"--use_subsample --num_subsample --tiny_test","title":"Relevant Arguments"},{"location":"use-cases/shared-boundary-based/peanut.html#optimization-parameters","text":"The python code for the use case calls the optimize command of ShapeWorks which reads the project sheet with the shape filenames and optimization parameter values. See Project excel file for details regarding creating the project sheet. Below are the default optimization parameters for this use case. # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 128 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 1000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 1000 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"recompute_regularization_interval\" : 1 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 1 , \"initial_relative_weighting\" : 0.05 , \"procrustes_interval\" : 0 , \"procrustes_scaling\" : 0 , \"save_init_splits\" : 0 , \"verbosity\" : 0 }","title":"Optimization Parameters"},{"location":"use-cases/shared-boundary-based/peanut.html#analyzing-shape-model","text":"Once the python code runs the optimization, the files are saved in the Output folder after which ShapeWorks Studio is launched from the python code to analyze the model.","title":"Analyzing Shape Model"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html","text":"Ellipsoid: Shape Evaluation in Python What is the Use Case? The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#ellipsoid-shape-evaluation-in-python","text":"","title":"Ellipsoid: Shape Evaluation in Python"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#what-is-the-use-case","text":"The ellipsoid_evaluate use case demonstrates the functionality of shape evaluation tools of ShapeWorks python API. These API's include calculation of quantitative evaluation metrics such as specificity, generalization, and compactness.For detailed explaination of the evaluation metrics, refer to Shape Model Evaluation. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-evaluate.html#analyzing-shape-model-using-python-apis","text":"The ShapeEvaluation() module of ShapeWorks python API, calcutates the three evaluation metrics given the correspondence model. The correspondence model can be read using the ParticleSystem() module. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) The ShapeEvaluation() module has two types of commands which can query either a particular metric at the specified mode of variation or get the metric values for all the modes of variation. To access the metrics at a specified mode of variation: # Get the compactness of a specific mode nCompactness = sw . ShapeEvaluation . ComputeCompactness ( particleSystem = particle_data , Modes = 3 ) # Get the generalization of a specific mode and saves the reconstructions nGeneralization = sw . ShapeEvaluation . ComputeGeneralization ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) # Calculate specificity of a given mode and saves the reconstructions nSpecificity = sw . ShapeEvaluation . ComputeSpecificity ( particleSystem = particle_data , nModes = 3 , saveTo = save_dir ) To access the metrics for all the modes of variations: # Get compactness of all the modes allCompactness = sw . ShapeEvaluation . ComputeFullCompactness ( particleSystem = particle_data ) #Get generalization values for all modes allGeneralization = sw . ShapeEvaluation . ComputeFullGeneralization ( particleSystem = particle_data ) #Get specificity values for all modes allSpecificity = sw . ShapeEvaluation . ComputeFullSpecificity ( particleSystem = particle_data ) Details about the evaluation functions can be found in the API Reference Generalization value of the 3rd mode - 0.09600121582319728 Generalization Best Reconstruction Generalization Worst Reconstruction Specificity value of the 3rd mode - 0.21431799055403217 Specificity Best Reconstruction Specificity Worst Reconstruction","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/ellipsoid-pca.html","text":"Ellipsoid: Shape Statistics in Python What is the Use Case? The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case. Relevant Arguments --tiny_test Analyzing Shape Model Using Python APIs The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#ellipsoid-shape-statistics-in-python","text":"","title":"Ellipsoid: Shape Statistics in Python"},{"location":"use-cases/stats-based/ellipsoid-pca.html#what-is-the-use-case","text":"The ellipsoid_pca use case demonstrates the functionality of shape statistics tools of ShapeWorks python API. These APIs include reading particle files and computing eigenvectors, eigenvalues, and PCA loadings. This use case reads the correspondence model of the ellipsoid segmentation images use case.","title":"What is the Use Case?"},{"location":"use-cases/stats-based/ellipsoid-pca.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/ellipsoid-pca.html#analyzing-shape-model-using-python-apis","text":"The ParticleShapeStatistics() of ShapeWorks python API analyzes the optimized particle-based shape model by calculating the principal components of the shape model, eigenvalues, eigenvectors, and PCA loadings. This tool also estimates the variance explained by each mode and generates plots for PCA metrics similar to ShapeWorks Studio. # Read the particle files from a pre-trained shape model particle_data = sw . ParticleSystem ( < list of local point files > ) To perform PCA: shape_statistics = sw . ParticleShapeStatistics () shape_statistics . PCA ( particleSystem = particle_data , domainsPerShape = 1 ) Using shape_statistics object, you can now extract the following entities: Calculate principal components : principalComponentProjections() Extract the loadings: pcaLoadings() Eigen Values: eigenValues() Eigen Vectors: eigenVectors() Number of shapes in the model: sampleSize() Dimension of each shape: numDims() Variance explained by each mode: percentVarByMode() Details about shape statistics functions can be found in the API Reference When the use case is run, plots similar to those below will be generated.","title":"Analyzing Shape Model Using Python APIs"},{"location":"use-cases/stats-based/femur-pvalues.html","text":"Femur: Group Difference Statistics in Python What and Where is the Use Case? This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution. Relevant Arguments --tiny_test Analyzing Shape Model For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#femur-group-difference-statistics-in-python","text":"","title":"Femur: Group Difference Statistics in Python"},{"location":"use-cases/stats-based/femur-pvalues.html#what-and-where-is-the-use-case","text":"This use case demonstrates the functionality of shape statistics tools to perform hypothesis testing of group shape differences. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. The data has 21 examples of normal femurs and 5 examples of pathological femurs with cam impingement. This use case analyzes the femur shape model obtained from running the Femur: SSM from Meshes with Cutting Planes use case. Separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric (nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The use case also demonstrates Linear Discrimination of Variation (LDA) for analyzing shape variation between the subgroups of patients with and without cam impingement and the distribution of individual shapes among these groups. In the group of samples, the mean shape (i.e., average correspondence particle locations) of the group of patients with cam impingement was compared to the mean shape of the group without cam impingement. The linear discrimination between the two groups was defined as the difference vector between the two mean shape vectors. The shape of each subject was then mapped/projected onto this vector by taking the dot product between the subject-specific shape representation (the particle correspondences) and this difference vector. This mapping results in a single scalar value (or a \"shape-based score\") that places subject-specific anatomy on a group-based shape difference that is statistically derived from the shape population. For interpretability, the mappings of the group mean shapes were normalized to -1 (patients with cam impingement) and 1 (without cam impingement). The other subjects' mappings were then similarly normalized relative to these values, giving a shape distribution of individual members of the population close to the mean shapes of their respective groups. A univariate Gaussian distribution was then fit to the normalized mapping of each group to define the probability density function of the shape scores for each group. Here are femur samples with their optimized correspondences. A brief overview of the analysis: Given a shape model with group IDs, we create the subsets based on the group IDs. Since the shape models are in correspondence, we access one particle location at a time and create two vectors. x: All particle locations of group 1 at ith location y: All particle locations of group 2 at ith location Using the two-sample Hotelling-T2 test, we are trying to see if the particle positions at the ith location of all group 1 samples come from the same distribution as the particle position at ith location of group 2 samples. If the group differences are significant, the particle positions are not from the same distribution.","title":"What and Where is the Use Case?"},{"location":"use-cases/stats-based/femur-pvalues.html#relevant-arguments","text":"--tiny_test","title":"Relevant Arguments"},{"location":"use-cases/stats-based/femur-pvalues.html#analyzing-shape-model","text":"For the femur mode, separate statistical tests for differences in correspondence positions are applied to every correspondence index. We use Hotelling \\(T^2\\) metric(nonparametric permutation test) with false discovery rate correction (FDR) for multiple comparisons. This method helps identify and visualize localized regions of significant shape differences. The null hypothesis for this test is that the distributions of the locations of corresponding sample points are the same regardless of the groups. Hence, lower p-values would mean we can reject the null hypothesis and conclude that the group differences are significant and not from the same distribution. This use case calculates the p-values and saves them in a text file. This same functionality is also available in ShapeWorks Studio, where you can also visualize the p-values on the mean shapes. The use case also generates a plot based on LDA with the shape-based scores for both the groups of femurs.","title":"Analyzing Shape Model"},{"location":"users/citation.html","text":"How to Cite ShapeWorks? Acknowledgements If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\" Citation When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#how-to-cite-shapeworks","text":"","title":"How to Cite ShapeWorks?"},{"location":"users/citation.html#acknowledgements","text":"If you use ShapeWorks in work that leads to published research, we humbly ask that you to cite ShapeWorks , add the following to the 'Acknowledgments' section of your paper: \"The National Institutes of Health supported this work under grant numbers NIBIB-U24EB029011, NIAMS-R01AR076120, NHLBI-R01HL135568, NIBIB-R01EB016701, and NIGMS-P41GM103545.\" and add the following 'disclaimer': \"The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.\"","title":"Acknowledgements"},{"location":"users/citation.html#citation","text":"When referencing ShapeWorks, please include a bibliographical reference to the paper below, and, if possible, include a link to shapeworks.sci.utah.edu . Joshua Cates, Shireen Elhabian, Ross Whitaker. \"Shapeworks: particle-based shape correspondence and visualization software.\" Statistical Shape and Deformation Analysis. Academic Press, 2017. 257-298. @incollection{cates2017shapeworks, title = {Shapeworks: particle-based shape correspondence and visualization software}, author = {Cates, Joshua and Elhabian, Shireen and Whitaker, Ross}, booktitle = {Statistical Shape and Deformation Analysis}, pages = {257--298}, year = {2017}, publisher = {Elsevier} }","title":"Citation"},{"location":"users/install.html","text":"How to Install ShapeWorks? First, download ShapeWorks Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases. Next, follow the instructions for your platform. Windows Mac Linux Installing ShapeWorks on Windows Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\ Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid ShapeWorks also includes interactive Jupyter Python notebook examples. Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Mac Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started. Installing ShapeWorks on Linux Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages. ShapeWorks comes with examples to get you started. Studio Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface. Python Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here . ShapeWorks also includes interactive Jupyter Python notebook examples. Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"How to Install ShapeWorks?"},{"location":"users/install.html#how-to-install-shapeworks","text":"","title":"How to Install ShapeWorks?"},{"location":"users/install.html#first-download-shapeworks","text":"Release Builds We provide official user releases for Windows, MacOS, and Linux. Their features can be seen at Release Notes . Development Builds We also provide up-to-date development builds from the master branch Windows Dev Build Mac Dev Build Linux Dev Build Please understand that these are in-progress development builds, not official releases.","title":"First, download ShapeWorks"},{"location":"users/install.html#next-follow-the-instructions-for-your-platform","text":"Windows Mac Linux","title":"Next, follow the instructions for your platform."},{"location":"users/install.html#installing-shapeworks-on-windows","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Windows (remember these are in-progress development builds, not official releases). Download and install Miniconda for Windows. https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Double-click on the ShapeWorks installer that you downloaded and follow the installation steps. Open an Anaconda terminal and change directory to the chosen installation path. cd \"C:\\Program Files\\ShapeWorks\" Create the shapeworks conda environment, installing everything necessary to run. install_shapeworks.bat Note: You can pass a different name for the environment, enabling multiple installations. install_shapeworks shapeworks_61 Warning If you already have anaconda/miniconda installed, this step may hang. If so please uninstall anaconda/miniconda, re-install it, then run install_shapeworks again. This seems to be an occasional problem with Anaconda on Windows. Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Windows"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started","text":"Copy the Examples folder to another location of your choosing (you can also use Explorer). xcopy /E/H Examples %HOMEPATH%\\ShapeWorks-Examples\\","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the Python folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py ellipsoid","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples","text":"Open an Anaconda terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd %HOMEPATH%\\ShapeWorks-Examples\\Python\\notebooks\\tutorials Start the Jupyter notebook server. This will open a new tab in your web browser. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-mac","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Mac (remember these are in-progress development builds, not official releases). Install the ShapeWorks .pkg file by double-clicking on the file. Open a terminal and change directory to the installation path. cd /Applications/ShapeWorks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Mac"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_1","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_1","text":"Copy the /Applications/ShapeWorks/Examples folder to another location of your choosing. (You can also use Finder.) Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_1","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/install.html#installing-shapeworks-on-linux","text":"Please make sure that you download the latest ShapeWorks binary release , or up-to-date development builds from the master branch for Linux (remember these are in-progress development builds, not official releases). Open a terminal and change directory to the installation path (where you unzipped the downloaded file). cd /path/to/shapeworks Create a protected conda environment that installs everything necessary to run. source install_shapeworks.sh Note: You can pass a different name for the environment, enabling multiple installations. source install_shapeworks.sh shapeworks_61 Important Your shapeworks conda environment must always be activated before using ShapeWorks python packages.","title":"Installing ShapeWorks on Linux"},{"location":"users/install.html#shapeworks-comes-with-examples-to-get-you-started_2","text":"","title":"ShapeWorks comes with examples to get you started."},{"location":"users/install.html#studio_2","text":"Open ShapeWorks Studio Select \"Open Exising Project\" Select Examples/Studio/Ellipsoid/ellipsoid.xlsx Experiment with the Studio interface.","title":"Studio"},{"location":"users/install.html#python_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Copy the Examples folder to another location of your choosing. cp -r Examples $HOME/ShapeWorks-Examples Change to the Python folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python Run one of the included use cases. To list them all, run: python RunUseCase.py --help . python RunUseCase.py More information about running use cases can be found here .","title":"Python"},{"location":"users/install.html#shapeworks-also-includes-interactive-jupyter-python-notebook-examples_2","text":"Open a terminal and activate the shapeworks conda environment (use the environment name passed to install_shapeworks above). conda activate shapeworks Change to the notebook tutorials folder of the Examples directory you copied. cd $HOME/ShapeWorks-Examples/Python/notebooks/tutorials Start the Jupyter notebook server. This will open a new tab in your web broswer. jupyter notebook Click on a notebook to get started.","title":"ShapeWorks also includes interactive Jupyter Python notebook examples."},{"location":"users/papers.html","text":"Relevant Papers Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Revelant Papers"},{"location":"users/papers.html#relevant-papers","text":"Note If you would like to have your publication listed here: e-mail us! The following selected papers give background on the methods used in ShapeWorks, and a sample of the areas ShapeWorks has been applied: M. Jacxsens, S. Elhabian, S. Brady, P. Chalmers, R. Tashjian, and H. Henninger. \"Coracoacromial morphology: a contributor to recurrent traumatic anterior glenohumeral instability,\" Journal of Shoulder and Elbow Surgery, 1:1316-1325, 2019. P. R. Atkins, Y. Shin, P. Agrawal, S. Y. Elhabian, R. T. Whitaker, J. A. Weiss, S. K. Aoki, C. L. Peters ,and A. E. Anderson. \"Which Two-dimensional Radiographic Measurements of Cam Femoroacetabular Impingement Best Describe the Three-dimensional Shape of the Proximal Femur?,\" Clinical Orthopaedics and Related Research, 477(1):242\u2013253, 2019. T. Sodergren, R. Bhalodia, R. Whitaker, J. Cates, N. Marrouche, and S. Elhabian. \"Mixture modeling of global shape priors and autoencoding local intensity priors for left atrium segmentation,\" In STACOM- MICCAI: Statistical Atlases and Computational Modeling of the Heart workshop, page in press. Springer, 2018. A. Goparaju, I. Csecs, A. Morris, E. Kholmovski, N. Marrouche, R. Whitaker, and S. Elhabian. \"On the Evaluation and Validation of Off-the-Shelf Statistical Shape Modeling Tools: A Clinical Application,\" In International Workshop on Shape in Medical Imaging, pages 14\u201327. Springer, 2018. E. T. Bieging, A. Morris, B. D. Wilson, C. J. McGann, N. F. Marrouche, and J. Cates. \"Left atrial shape predicts recurrence after atrial fibrillation catheter ablation,\" Journal of Cardiovascular Electrophysiology, 2018. P. R. Atkins, S. Y. Elhabian, P. Agrawal, M. D. Harris, R. T. Whitaker, J. A. Weiss, C. L. Peters, and A. E. Anderson. \"Quantitative comparison of cortical bone thickness using correspondence-based shape modeling in patients with cam femoroacetabular impingement,\" Journal of Orthopaedic Research, 35(8):1743\u20131753, 2017. J. Cates, L. Nevell, S. I. Prajapati, L. D. Nelon, J. Y. Chang, M. E. Randolph, B. Wood, C. Keller, and R. T. Whitaker. \"Shape analysis of the basioccipital bone in Pax7-deficient mice,\" Scientific Reports, 7(1):17955, 2017. J. Cates, S. Elhabian, and R. Whitaker. \"ShapeWorks: particle-based shape correspondence and visualization software,\" In G. Zheng, S. Li, and G. Szekely, editors, Statistical Shape and Deformation Analysis: Methods, Implementation and Applications, 1st Edition, chapter 10. Academic Press, 2017. P. Agrawal, S.Y. Elhabian, R.T. Whitaker, \"Learning Deep Features for Automated Placement of Correspondence Points on Ensembles of Complex Shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, pp. 185-193. Springer, Cham, 2017. S. Sultana, P. Agrawal, S. Elhabian, R. Whitaker, T. Rashid, J. Blatt, J. Cetas, and M. Audette. \"Towards a statistical shape-aware deformable contour model for cranial nerve identification,\" In Workshop on Clinical Image-Based Procedures, pages 68\u201376. Springer, 2016. J. Cates, E. Bieging, A. Morris, G. Gardner, N. Akoum, E. Kholmovski, N. Marrouche, C. McGann, and R. S. MacLeod. \"Computational shape models characterize shape change of the left atrium in atrial fibrillation,\" Clinical Medicine Insights. Cardiology, 8(Suppl 1):99, 2015. Ken Museth. \"VDB: High-resolution sparse volumes with dynamic topology\" ACM Transactions on Graphics, July 2013, Article No.: 27 M. Datar, I. Lyu, S. Kim, J. Cates, M. Styner, R. Whitaker. \"Geodesic distances to landmarks for dense correspondence on ensembles of complex shapes,\" In International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer, Berlin, Heidelberg, pp. 19-26, 2013. M.D. Harris, M. Datar, R.T. Whitaker, E.R. Jurrus, C.L. Peters, A.E. Anderson. \"Statistical Shape Modeling of Cam Femoroacetabular Impingement,\" In Journal of Orthopaedic Research, Vol. 31, No. 10, pp. 1620--1626. 2013. K.B. Jones, M. Datar, S. Ravichandran, H. Jin, E. Jurrus, R.T. Whitaker, M.R. Capecchi. \"Toward an Understanding of the Short Bone Phenotype Associated with Multiple Osteochondromas,\" In Journal of Orthopaedic Research, Vol. 31, No. 4, pp. 651--657. 2013. J. Cates, P.T. Fletcher, Z. Warnock, R.T. Whitaker. \"A Shape Analysis Framework for Small Animal Phenotyping with Application to Mice with a Targeted Disruption of Hoxd11,\" In Proceedings of the 5th IEEE International Symposium on Biomedical Imaging (ISBI '08), pp. 512--516. 2008. DOI: 10.1109/ISBI.2008.4541045 J. Cates, P.T. Fletcher, M. Styner, H. Hazlett, R.T. Whitaker. \"Particle-Based Shape Analysis of Multi-Object Complexes,\" In Proceedings of the 11th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI '08), Lecture Notes In Computer Science (LCNS), pp. 477--485. 2008. ISBN: 978-3-540-85987-1 J. Cates, P. T. Fletcher, M. Styner, M. Shenton, and R. Whitaker. \"Shape modeling and analysis with entropy-based particle systems,\" In Information Processing in Medical Imaging, pages 333\u2013345. Springer, 2007.","title":"Relevant Papers"},{"location":"workflow/analyze.html","text":"How to Analyze Your Shape Model? Surface Correspondences ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out Running ShapeWorks Studio When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen Using XML Files You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml Using Spreadsheets ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets Surface Reconstruction For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... . Statistical Analysis Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis. Group Differences If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups) Feature Maps ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#how-to-analyze-your-shape-model","text":"","title":"How to Analyze Your Shape Model?"},{"location":"workflow/analyze.html#surface-correspondences","text":"ShapeWorks includes a Qt and VTK-based graphical user interface (GUI), ShapeWorks Studio , that allows visualizing the optimized particle system (i.e., correspondence model) for each shape sample where particle coloring is used to reflect correspondence among shapes. Particles' coloring reflects surface correspondences across different shape samples You can scroll through the dataset and zoom in and out to inspect fewer or more samples. ShapeWorks Studio keeps a consistent camera view across all shape samples to facilitate qualitative comparisons of different samples relative to each other. Correspondence model inspectation by scrolling though the dataset and zooming in & out","title":"Surface Correspondences"},{"location":"workflow/analyze.html#running-shapeworks-studio","text":"When you open ShapeWorks Studio without a project, either from terminal or double-clicking on the application binary/exe file, the splash screen is displayed to enable you to load a recent project, open existing projects on your local machine, or create a new project. ShapeWorks Studio splash screen","title":"Running ShapeWorks Studio"},{"location":"workflow/analyze.html#using-xml-files","text":"You can run ShapeWorks Studio using an XML parameter file that includes the following tags. [required]: list of _world.particles files (output of the shapeworks optimize ) [optional]: the group id (1 or 2) in case the data contains groups [optional]: list of _world.particles files (output of the shapeworks optimize ), same as [optional]: list of _local.particles files (output of the shapeworks optimize ) [optional]: list of distance transforms (input of the shapeworks optimize ) Please note the following: If the xml file only contains the list, VTK-based surface reconstruction is used for surface reconstruction. To enable particle-based surface reconstruction, , , and lists should be given. Examples/Python/.py include an analyze step that generates analyze.xml , which includes the path to the input data and corresponding particles. All lists should have the same order of shape samples Given the XML files, you can launch ShapeWorks Studio through the terminal using the following command. $ ShapeWorksStudio analyze.xml","title":"Using XML Files"},{"location":"workflow/analyze.html#using-spreadsheets","text":"ShapeWorks Studio can also load datasets (and shape models) using spreadsheets, a more user-friendly user-editable file format. See the ellipsoid studio example in Examples/Studio/ellipsoid.xlsx for an example. ShapeWorks Studio keeps track of results from different phases in individual sheets","title":"Using Spreadsheets"},{"location":"workflow/analyze.html#surface-reconstruction","text":"For visualization purposes, the shape's particle system is used to reconstruct its surface mesh using a template-deformation approach to establish an inter-sample dense surface correspondence given a sparse set of optimized particles. To avoid introducing bias due to template choice, we use an unbiased framework for template mesh construction that entails: A generalized Procrustes alignment to define the mean particle system A nonlinear warping function built using the shape's particle system and the mean one as control points. A mean distance transform (DT) computed by averaging warped sample-specific DT. The template mesh will then be constructed by triangulating the isosurface of this mean DT. A warping function is constructed to deform the dense template mesh to the sample space using the sample's and mean particle systems as control points to reconstruct a sample-specific surface mesh. Particle-based surface reconstruction currently supported by ShapeWorks Studio (old) VTK-based surface reconstruction (new) particle-based surface reconstruction You can export any mesh using File -> Export -> Export Current Mesh ... .","title":"Surface Reconstruction"},{"location":"workflow/analyze.html#statistical-analysis","text":"Statistical analysis is performed using principal component analysis (PCA), where the mean and modes of shape variation are computed based on the optimized correspondence model. Animation is allowed to watch the shape morph at various standard deviations along a user-selected variation mode. Animating the shape variation along with a principal component while passing through the mean shape You can also export the eigenvalues and each shape's PCA loadings in an excel sheet for further analysis.","title":"Statistical Analysis"},{"location":"workflow/analyze.html#group-differences","text":"If there are groups in the data, ShapeWorks Studio can visualize significant group differences. Statistical group differences for characterizing scapular morphology in Hill-Sachs patients If you are using an XML file to load your data into ShapeWorks Studio , a group id (1 or 2) should be given to each sample. If you are using a spreadsheet, specify group columns in the data (first) sheet in the spreadsheet with the prefix group_ , which enables adding multiple groups to your project and selecting the group-of-interest within ShapeWorks Studio. Groups as columns in the project spreadsheet In the Group tab of the Analyze panel, choose which column to indicate the group set of interest Then, select which groups you would like to compare (now support more than two groups)","title":"Group Differences"},{"location":"workflow/analyze.html#feature-maps","text":"ShapeWorks Studio has the ability to integrate feature maps . A feature map is a 3d image volume that contains scalar values to be associated with each shape\u2019s surface. For example, this could be raw or processed CT/MRI data. The feature map can be displayed for each surface by choosing the desired feature map in the feature map combobox at the bottom of the screen. After the correspondence is generated, the average feature map can be displayed on the mean shape in the analysis tab.","title":"Feature Maps"},{"location":"workflow/groom.html","text":"How to Groom Your Dataset? ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands . Common Pre-Processing Steps for Segmentations Resampling images and segmentations This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing. Aligning segmentations Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Clip segmentations In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename ) Cropping and padding segmentations In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename ) Converting segmentations to smooth signed distance transforms For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon. Common Pre-Processing Steps for Meshes Reflect meshes It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename ) Meshes to volumes Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands Remesh Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 ) Aligning meshes Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform ) Extract Shared Boundary In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol ) Input shapes with shared surface Output extracted surfaces Extract Contour The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes ) Smoothing Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#how-to-groom-your-dataset","text":"ShapeWorks needs suitable distance transforms or meshes for establishing shape correspondence. The groom stage has the pipeline to generate aligned distance transforms from binary segmentations or groomed meshes from unaligned meshes. Common grooming steps are outlined below. For descriptions of the ShapeWorks commands used, see: ShapeWorks Commands .","title":"How to Groom Your Dataset?"},{"location":"workflow/groom.html#common-pre-processing-steps-for-segmentations","text":"","title":"Common Pre-Processing Steps for Segmentations"},{"location":"workflow/groom.html#resampling-images-and-segmentations","text":"This grooming step resamples all the binary volumes, which in a raw setting could be in different physical spaces (different dimensions and voxel spacing). This grooming step brings all segmentations to the same voxel spacing, typically isotropic spacing (e.g., 1,1,1). A smaller voxel spacing than the original spacing improves the resolution of the segmentations and reduces the aliasing (i.e., staircase) artifact resulting from the thresholding/binarization process. Resampling both images and segmentations If your dataset contains both images (e.g., CTs, MRIs) and binary segmentations, it is recommended that resampling is performed on both to keep them aligned for subsequent analyses that might entail/need imaging data. Since image resampling entails interpolation, directly resampling binary segmentations will not result in a binary segmentation, but rather an interpolated version that does not have two distinct labels (i.e., foreground and background). To mitigate this behavior, we need first to convert the binary segmentations (with zero-one voxels) to a continuous-valued (gray-scale) image. This can be done by either antialiasing the segmentations, which smooths the foreground-background interface, or converting a segmentation to a signed distance transform, where each voxel encodes the physical distance to the closest surface point (zero-one interface) with the sign indicating whether the voxel is inside or outside the foreground region. Here is a resampling pipeline example for binary segmentation that uses antialiasing: antialias the binary segmentation to convert it to a smooth continuous-valued image resample the antialiased image using the same (and possible smaller) voxel spacing for all dimensions binarize (aka thresholding) the resampled image to results in a binary segmentation with the desired voxel spacing Here is an example of resampling an ellipsoid with spacing (1,1,2) to have spacing (1,1,1): antialias_iterations = 30 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) shape_seg . resample ([ 1 , 1 , 1 ], sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename ) Resampling images Images are already given as a continued-valued grid of pixels. Hence, images can be directly resampled without any pre- or post-processing steps. Resampling images reduces pixelation and smooths out intensity noise. Resampling segmentations smooths out shape boundaries and reduces binarization aliasing.","title":"Resampling images and segmentations"},{"location":"workflow/groom.html#aligning-segmentations","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Rigid alignment (aka registration) is an optimization process that might get stuck in a bad local minima if shapes are significantly out of alignment. To bring shapes closer, we can remove translation differences using center-of-mass alignment. This factors out translations to reduce the risk of misalignment and allow for a medoid sample to be automatically selected as the reference for subsequent rigid alignment. Applying transformation to segmentations Applying a transformation to segmentations entails interpolation due to image resampling in the new coordinate frame. Similar to the resampling workflow, we will first antialias the segmentation to convert it to a continuous-valued image with a smooth foreground-background interface, then apply the transformation, and finally binarize the tranformed image. Hence, the shapes alignment pipeline includes the following steps: Center-of-mass alignment for segmentations: antialias the binary segmentation to convert it to a smooth continuous-valued image translate the binary segmentation so that the center of the image doamin is the center of mass of the shape. binarize (aka thresholding) to get a binary segmentation recenter moves the center of the image (which is now the center of mass) to (0,0,0) Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_image_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: antialias the binary segmentation and reference to convert them to a smooth continuous-valued image createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference binarize (aka thresholding) to get a binary segmentation Here is an example of performing center of mass alignment on one ellipsoid: shape_seg = sw . Image ( in_shape_filename ) antialias_iterations = 30 translation_vector = shape_seg . center () - shape_seg . centerOfMass () shape_seg . antialias ( antialias_iterations ) . translate ( translation_vector ) . binarize () . recenter () . write ( out_shape_filename ) Finding the reference: ref_index = sw . find_reference_image_index ( shape_seg_list ) ref_seg = shape_seg_list [ ref_index ] . write ( 'reference.nrrd' ) Rigid alignment: antialias_iterations = 30 ref_seg = sw . Image ( ref_shape_filename ) shape_seg = sw . Image ( in_shape_filename ) ref_seg . antialias ( antialias_iterations ) shape_seg . antialias ( antialias_iterations ) iso_value = 1e-20 icp_iterations = 200 rigidTransform = shape_seg . createTransform ( ref_seg , sw . TransformType . IterativeClosestPoint , iso_value , icp_iterations ) shape_seg . applyTransform ( rigidTransform , ref_seg . origin (), ref_seg . dims (), ref_seg . spacing (), ref_seg . coordsys (), sw . InterpolationType . Linear ) shape_seg . binarize () . write ( out_shape_filename )","title":"Aligning segmentations"},{"location":"workflow/groom.html#clip-segmentations","text":"In some cases, binary segmentations need to be clipped with a cutting plane so that only the desired part of the shape is reflected in the shape model. To perform this step, you can use clip defined the cutting plane defined using three points. Example of clipping: shape_seg = sw . Image ( in_shape_filename ) cutting_plane_point_1 = [ 10 , 10 , 0 ] cutting_plane_point_2 = [ - 10 , - 10 , 0 ] cutting_plane_point_3 = [ 10 , - 10 , 0 ] shape_seg . clip ( cutting_plane_point_1 , cutting_plane_point_2 , cutting_plane_point_3 , ! []( ! []( ! []())) ) . write ( out_shape_filename )","title":"Clip segmentations"},{"location":"workflow/groom.html#cropping-and-padding-segmentations","text":"In many cases, image boundaries are not tight around shapes. This leaves too much irrelevant background voxels that might increase the memory footprint when optimizing the shape model. We can remove this irrelevant background while keeping our segmentations intact and avoid cropped segmentations to touch image boundaries, which results in artifical holes in the shape boundary and does not allow particles to be distributed in regions touching the image boundary. This cropping and padding step entails the following steps: ImageUtils.boundingBox : computes the smallest bounding box (ShapeWorks region) that fits all segmentations in the given shape cohort. Note that this step should be applied to at segmentations that share the same coordinate frame (i.e., aligned) crop the segmentation using the computed bounding box pad the cropped segmentation to ensure the shape is not touching the image boundary Example of cropping and padding: iso_value = 0.5 # a threshold value between 0 and 1 for binary segmentations padding_size = 10 # number of voxels to pad for each dimension padding_value = 0 # the constant value used to pad the segmentations segs_bounding_box = sw . ImageUtils . boundingBox ( shape_seg_list , iso_value ) shape_seg = sw . Image ( in_shape_filename ) shape_seg . crop ( segs_bounding_box ) . pad ( padding_size , padding_value ) . write ( out_shape_filename )","title":"Cropping and padding segmentations"},{"location":"workflow/groom.html#converting-segmentations-to-smooth-signed-distance-transforms","text":"For numerical computations for correspondences optimization, we need to convert binary segmentations to a continuous-valued image that satisfies the following requirements. smooth for gradient updates stability reflect the shape's surface (i.e., foreground-background) interface provide a signal for the particle to snap (move back) to the surface in case particles gets off the surface during optimization, which is a typical scenario when using gradient descent based optimization An antialiased segmentation satisfies the first two requirements. However, if a particles leaves the surface (i.e., the zero-level set) during model optimization, which is typical in gradient descent based optimization, it would be challenging to snap it back to the surface. A representation that satisfies all the requirements is the signed distance transform . A signed distance transform assigns to each voxel the physical distance to the closest point on the surface (i.e., the minimum distance from that voxel to nearest voxel on the foreground-background interface). The sign is used to indicate whether that voxel is inside or outside the foreground object. The zero-level set (zero-distance to the surface) indicates the foreground-background interface (i.e., the shape's surface). The gradient of a signed distance transform at a voxels indicates what direction to move in from that voxels to most rapidly increase the value of this distance. Hence, we can use the negative of this gradient as a signal to move a particle back to the surface. The computeDT API needs an iso_value that defines the foreground-background interface. To create a smoother interface, we first antialias the segmentation then compute the distance transform at the zero-level set. We then need to smooth the DT as it will have some remaining aliasing effect of binarization. So the steps are: antialias the binary segmentation to convert it to a smooth continuous-valued image computeDT : Compute distance transform gaussianBlur : Apply smoothing by convolving the image with a 3D gaussian filter with a given sigma (in physical coordinates) Save the distance transform iso_value = 0 sigma = 1.3 shape_seg = sw . Image ( in_shape_filename ) shape_seg . antialias ( antialias_iterations ) . computeDT ( iso_value ) . gaussianBlur ( sigma ) . write ( out_shape_filename ) Gaussian blur with a small sigma. Note aliasing left-overs! Gaussian blur with a larger sigma. Note a smooth surface. Caution when using Gaussian blur The gaussianBlur method could be use for blobby-like structures. However, for shapes with thin features and high curvature regions, the gaussian blurring method could impact the underlying geometrical features. For these shapes, topology-preserving smoothing is recommended. Topology-preserving smoothing is currently under developement and will be released soon.","title":"Converting segmentations to smooth signed distance transforms"},{"location":"workflow/groom.html#common-pre-processing-steps-for-meshes","text":"","title":"Common Pre-Processing Steps for Meshes"},{"location":"workflow/groom.html#reflect-meshes","text":"It is common in medical imaging data to have a left and right anatomy. To align and model all such shapes, we must reflect some meshes so that all are oriented the same. reflect : reflects the mesh across the given axis (typically x-axis for anatomy) Here is an example of reflecting a mesh: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_mesh . reflect ( sw . X ) . write ( out_mesh_filename )","title":"Reflect meshes"},{"location":"workflow/groom.html#meshes-to-volumes","text":"Meshes can be converted to binary segmentations if desired so that grooming can be done on segmentations and optimization on distance transforms. The steps to convert meshes to volumes are: toImage convert the mesh to a signed distance transform binarize (aka thresholding) to get a binary segmentation Example of turning a mesh to a segmentation: shape_mesh = sw . Mesh ( in_mesh_filename ) shape_seg = shape_mesh . toImage () . binarize () . write ( out_shape_filename ) For list of commands, check out ShapeWorks Commands","title":"Meshes to volumes"},{"location":"workflow/groom.html#remesh","text":"Remeshing creates meshes with evenly spaced vertices. - remeshPercent remeshes the mesh to have a given percent of the current number of vertices mesh . remeshPercent ( percentage = 0.80 , adaptivity = 1.0 )","title":"Remesh"},{"location":"workflow/groom.html#aligning-meshes","text":"Rigidly aligning a cohort of shapes entails removing differences across these shapes pertaining to global transformations, i.e., translation and rotation. This step requires a reference coordinate frame to align all shapes to, where one of the shapes can be selected as a reference. Hence, the shapes alignment pipeline includes the following steps: Reference shape selection: One option for a reference is to select the shape that is closest to all other samples in the given cohort, i.e., the medoid shape. If shape instances are misaligned (i.e., do not share the same coordinate frame), translational and rotational differences should be factored out before reference selection. Use the pymodule function find_reference_mesh_index that perform pairwise rigid registration using the iterative closest point method and selects the sample that is closest to all other samples after factoring out global transformation differences. Rigid alignment: createTransform : compute the rigid transformation parameters that would align a segmentation to the reference shape applyTransform : apply the rigid transformation to the segmentation and make it have the same cooridnate system as the reference Here is an example of performing reference selection and rigid alignment on a list of meshes: # reference selection ref_index = sw . find_reference_mesh_index ( mesh_list ) ref_mesh = mesh_list [ ref_index ] # align all meshes in the list to the reference for mesh in mesh_list : # compute rigid transformation rigid_transform = mesh . createTransform ( ref_mesh , sw . Mesh . AlignmentType . Rigid , 100 ) # apply rigid transform mesh . applyTransform ( rigid_transform )","title":"Aligning meshes"},{"location":"workflow/groom.html#extract-shared-boundary","text":"In this step, we ingest the two original shapes and the output consists of three new shapes, two of which correspond to the original shapes and one for the shared boundary. Let us designate the original meshes as Lo and Ro. Then: Find all the triangles in Lo that are close to Ro, and construct a mesh with these triangles called Ls. A triangle with vertices v0, v1 and v2 is considered close to a mesh if the shortest euclidean distance to the mesh for all the three vertices is below a small threshold. We similarly find all the triangles in Ro that are close to Lo and designate this mesh as Rs Find the remainder of the mesh in Lo after removing the triangles in Ls and designate this as Lr. Similarly, we find the remainder of the mesh in Ro after removing the triangles in Rs and designate this as Rr. Arbitrary designed Rs as the shared surface M. Snap all the points on the boundary loop of Lr to the boundary loop of M Return three new shapes Lr, M and Rr extracted_l , extracted_r , extracted_s = sw . MeshUtils . sharedBoundaryExtractor ( mesh_l , mesh_r , tol )","title":"Extract Shared Boundary"},{"location":"workflow/groom.html#input-shapes-with-shared-surface","text":"","title":"Input shapes with shared surface"},{"location":"workflow/groom.html#output-extracted-surfaces","text":"","title":"Output extracted surfaces"},{"location":"workflow/groom.html#extract-contour","text":"The boundary loop of the shared surface M obtained using the sharedBoundaryExtractor is computed. output_contour = sw . MeshUtils . boundaryLoopExtractor ( extracted_shared_meshes )","title":"Extract Contour"},{"location":"workflow/groom.html#smoothing","text":"Laplacian Smoothing allows you to reduce noise on a mesh\u2019s surface with minimal changes to its shape.The effect is to \"relax\" the mesh, making the cells better shaped and the vertices more evenly distributed. mesh . smooth ( iterations , relaxation )","title":"Smoothing"},{"location":"workflow/optimize.html","text":"How to Optimize Your Shape Model? Particle-based Shape Modeling ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term) Particle-based Representation More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration . Shape vs. Configuration Spaces This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization. World vs. Local Coordinates For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) . Optimization Cost Function Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces. Particles Initialization & Optimization ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes. On Algorithmic Parameters Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand. Correspondence Relative Weighting One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape) Shape Statistics in Initialization and Optimization Steps At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles Starting and Ending Regularization Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure. Optimizing Correspondences You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format. Parameter Tuning General Process The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model. Qualitative Assessment To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors. Tips and Tricks Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this. Correspondences on New Samples ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#how-to-optimize-your-shape-model","text":"","title":"How to Optimize Your Shape Model?"},{"location":"workflow/optimize.html#particle-based-shape-modeling","text":"ShapeWorks constructs statistically optimal anatomical mapping across different shape samples by automatically computing a dense set of corresponding landmark positions that are geometrically consistent on a set of anatomy segmentations or surface meshes and does not rely on any specific surface parameterization . ShapeWorks uses a set of interacting particle systems , one for each shape, to produce optimal sets of surface correspondences in an ensemble. Particles interact with one another via mutually repelling forces to cover optimally and, therefore, describe surface geometry. Particles are positioned on surfaces automatically by optimizing the model's information content via an entropy optimization scheme. ShapeWorks optimizes landmark positions to minimize the overall information content of the model (first term) while maintaining a good sampling of surface geometry (second term)","title":"Particle-based Shape Modeling"},{"location":"workflow/optimize.html#particle-based-representation","text":"More formally, consider a cohort of shapes \\(\\mathcal{S} = \\{\\mathbf{z}_1, \\mathbf{z}_2, ..., \\mathbf{z}_N\\}\\) of \\(N\\) surfaces, each with its own set of \\(M\\) corresponding particles \\(\\mathbf{z}_n = [\\mathbf{z}_n^1, \\mathbf{z}_n^2, ..., \\mathbf{z}_n^M] \\in \\mathbb{R}^{dM}\\) where each particle \\(\\mathbf{z}_n^m \\in \\mathbb{R}^d\\) lives in a \\(d-\\) dimensional Cartesian space (typically \\(d=3\\) for anatomies), and whose ordering implies correspondence among shapes. Each of the particles is called a correspondence point, and is constrained to lie on the shape's surface. Collectively, the set of \\(M\\) particles is known as the configuration .","title":"Particle-based Representation"},{"location":"workflow/optimize.html#shape-vs-configuration-spaces","text":"This particle-based representation incorporates two types of random variables: a shape space variable \\(\\mathbf{Z} \\in \\mathbb{R}^{dM}\\) and a particle position variable \\(\\mathbf{X}_n \\in \\mathbb{R}^d\\) that encodes the distribution of particles on the \\(n-\\) th shape ( configuration space ). This particle-based representation avoids many of the problems inherent in parametric representations such as the limitation to specific topologies, processing steps necessary to construct parameterizations, and bias toward model initialization.","title":"Shape vs. Configuration Spaces"},{"location":"workflow/optimize.html#world-vs-local-coordinates","text":"For groupwise modeling, shapes in the shape space should share the same world coordinate system. Hence, we use generalized Procrustes alignment to estimate a rigid transformation matrix \\(\\mathbf{T}_n\\) that can transform the particles in the \\(n-\\) th shape local coordinate \\(\\mathbf{x}_n^m\\) in the configuration space to the world common coordinate \\(\\mathbf{z}_n^m\\) in the shape space such that \\(\\mathbf{z}_n^m = \\mathbf{T}_n\\mathbf{x}_n^m\\) .","title":"World vs. Local Coordinates"},{"location":"workflow/optimize.html#optimization-cost-function","text":"Correspondences are established by minimizing a combined shape correspondence and surface sampling cost function \\(Q = \\alpha H(\\mathbf{Z}) - \\sum_{n=1}^N H(\\mathbf{X}_n)\\) , where \\(H\\) is an entropy estimation of the shape distribution in the shape space, and \\(\\alpha\\) is the relative weighting of the correspondence term. In particular, ShapeWorks explicitly models the inherent trade-off between the statistical simplicity of the model (i.e., compactness or lowest entropy) in the shape space (i.e., inter-surface) and the accuracy of the shape representations (i.e., good surface samplings or highest entropy) in the configuration space (i.e., intra-surface). The cost function \\(Q\\) is minimized using gradient descent with an adaptive time step. Because correspondence points (or particles) in this formulation are not tied to a specific surface parameterization, the method operates directly on both volumetric data and triangular surface meshes. It can also be easily extended to arbitrary shapes, even nonmanifold surfaces.","title":"Optimization Cost Function"},{"location":"workflow/optimize.html#particles-initialization-optimization","text":"ShapeWorks entails a nonconvex optimization problem. Hence, it is not practical to perform the optimization of the configuration space (intra-surface) and the shape space (inter-surface) with a full set of correspondence points (or particles) in one step. We address this using a coarse-to-fine optimization scheme to speed up convergence to an acceptable local minimum. In particular, the optimization is performed as a multi-step process where particles are added via spitting each particle to produce a new, nearby particle at each step until the desired number of particles is reached. ShapeWorks uses a particle splitting strategy, in which the full set of particles is optimized in a multi-scale (i.e., coarse-to-fine) fashion For these steps, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) is weighted to downplay the effect of the correspondence term (default \\(\\alpha = 0.05\\) ), which results in an evenly spaced distribution of particles on each surface. These steps are collectively called the initialization steps. At each scale, the initialization step is followed by an optimization step. For this step, the optimization of the configuration space (intra-surface) and the shape space (inter-surface) are weighted (equally or sometimes using \\(\\alpha > 1\\) to emphasize the correspondence term). Thus, the initialization proceeds simultaneously with the optimization in a multi-scale fashion, generating progressively more detailed correspondence models with each split. For both, the initialization and optimization steps, the weighting to the shape space may be set by the user. Further, as each step of the optimization is an iterative process, the number of iterations may be set by the user. At each scale, the number of iterations could impact the quality of the optimized model The first particle: The particle system is initialized with a single particle on each shape. The first particle is found by raster-scanning the signed distance map and finding the first zero crossing. The particle system can also be initialized using user-defined sparse corresponding landmarks across all shapes.","title":"Particles Initialization & Optimization"},{"location":"workflow/optimize.html#on-algorithmic-parameters","text":"Optimizing the shape models entails several algorithmic parameters. Below, we highlight the most important ones that might need tuning depending on the dataset at hand.","title":"On Algorithmic Parameters"},{"location":"workflow/optimize.html#correspondence-relative-weighting","text":"One difference between initialization and optimization steps is how important the correspondence (inter-surface) objective is compared to the surface sampling (intra-surface) term using a relative weighting factor for the correspondence term (i.e., \\(\\alpha\\) in \\(Q\\) ). Hence initial_relative_weighting is the weight (or \\(\\alpha\\) ) used in initialization steps and the relative_weighing is the weight (or \\(\\alpha\\) ) used for optimization steps. Typically initial_relative_weighting is selected to be small (in the order of 0.01) to enable particles to be uniformly distributed (i.e., evenly spaced) over each shape, and hence optimization starts with a good surface sampling. It can be noted that by allowing correspondence to dominate the optimization process (using higher relative weighting), particles tend to be distributed in regions with relatively small variability across the given population. As the relative weighting tends to infinity, particles will be cluttered in one spot on each surface, which means that all shapes will be represented as a point at the shape space origin. Also, using lower relative weighting, i.e., allowing surface sampling to dominate the optimization process, results in particles becoming out-of-correspondence. As we increase the relative_weighting , i.e., the correspondence term weight, particles tend to be distributed over surface regions that have less variability across shape samples; hence the shape distribution in the shape space tends to collapse to a single point (i.e., shape)","title":"Correspondence Relative Weighting"},{"location":"workflow/optimize.html#shape-statistics-in-initialization-and-optimization-steps","text":"At earlier scales, we do not have enough particles to describe the geometry of each surface. Hence, to quantify the notion of correspondence (inter-surface), we use mean energy (i.e., pushing all shapes in the shape space to the mean shape or, in other words, the covariance matrix is assumed to be identity). As more particles are added to the correspondence model, we use the entropy of the distribution of the shapes (assumed to be Gaussian distributed), where we have more particles that can reveal the covariance structure of the shape space. This behavior is controlled by the use_shape_statistics_after parameter, which specifies the number of particles, after which shape statistics can be used in the initialization and optimization steps. Using shape statistics (i.e., covariance structure) results in a better correspondence over iterations, below we use use_shape_statistics_after after 1024 particles","title":"Shape Statistics in Initialization and Optimization Steps"},{"location":"workflow/optimize.html#starting-and-ending-regularization","text":"Particle movement during optimization (due to the correspondence term) entails computing the covariance matrix's inverse. We regularize the covariance matrix to handle degenerate covariances. starting_regularization and ending_regularization parameters determine the covariance matrix's regularization for the shape-space entropy estimation. This regularization exponentially decays along with optimization iterations where better covariance structure can be estimated with a better correspondence model. Higher regularization values would undermine the ensemble's underlying covariance structure and favors all shapes to converge to the mean shape. Hence, it is recommended to use starting regularization value as ~5% of the covariance matrix's expected highest eigenvalue while ending regularization can be taken as ten times less than the starting value. This regularization can be considered as having a Gaussian ball in the shape space. Starting regularization pushes all samples to the mean and hides the underlying \u201cunoptimized\u201d covariance structure. Ending regularization should be small enough to reveal the optimized covariance structure.","title":"Starting and Ending Regularization"},{"location":"workflow/optimize.html#optimizing-correspondences","text":"You can use either ShapeWorks Studio or shapeworks optimize or shapeworks optimize command to optimize your shape model. Both use a set of algorithmic parameters to control the optimization process. See the for details regarding the XML file and project file format.","title":"Optimizing Correspondences"},{"location":"workflow/optimize.html#parameter-tuning","text":"","title":"Parameter Tuning"},{"location":"workflow/optimize.html#general-process","text":"The general process for parameter tuning is to: Select a subsample of data to tune on. Start with default parameters and a small number of particles. Tune parameters one at a time until particles are evenly spread over the entire geometry and in good correspondence. Optimize on the entire cohort with the best set of hyper-parameters and desired number of particles to get the final shape model.","title":"General Process"},{"location":"workflow/optimize.html#qualitative-assessment","text":"To assess the quality of an optimized shape model, consider the following: Are the particles evenly spaced, covering the entire geometry of each sample? Are the particles in good correspondence across the samples? This can be assessed by inspecting the neighboring correspondences of particles (in Studio hover over a particle and press \u20181\u2019 to visualize). Does the surface reconstruction result in non-anatomical/plausible shapes? Do the shape modes of variation (PCA) reflect meaningful and are they smooth variations? All particles should move at similar velocities and along similar trajectories to their neighbors.","title":"Qualitative Assessment"},{"location":"workflow/optimize.html#tips-and-tricks","text":"Use a Subsample : To reduce the time spent tuning algorithmic parameters for model optimization, tuning should be done on a representative subsample. If working with complex shapes or highly variable anatomies, start with a small subset (e.g., 5 samples) with shapes that are most similar. A clustering-based approach can be used to automate this selection e.g., k-means on segmentations, spectral clustering on meshes. Once parameters have been found which result in a good correspondence model on the subset, the subset size can be increased. It may be helpful to increase the subset size and re-assess before moving to the full cohort. Start Small : Parameter tuning time can also be decreased by starting with a smaller number of particles and iterations than desired. In general, parameters which yield a good shape model with fewer particles will also yield a good model with increased particles. For this reason, the number of particles should be the last parameter tuned. Procrustes : Only consider using Procrustes if the groomed cohort has left-out misalignments. Unevenly Distributed : If particles are not evenly distributed on the surface, try increasing initialization iterations or decreasing relative weighting. Bad Correspondence : If particles are not in good correspondence, try increasing relative weighting. If particles are flipping sides on thin structures, enabling normals can resolve this.","title":"Tips and Tricks"},{"location":"workflow/optimize.html#correspondences-on-new-samples","text":"ShapeWorks supports an optimization mode, namely fixed domains , to place (i.e., optimize) correspondences on new shapes using a pre-existing shape model. In the fixed domains mode, particles on selected shapes that construct the pre-existing shape model are fixed, and particles on new shapes are optimized to represent them in the context of this shape model. See Fixed Domains for Ellipsoid: Correspondences on New Shape for an example. To enable the fixed domains mode, the XML should have the below additional tags. For this mode, you can use \"use_shape_statistics_after\": 0 to enable shape statistics in all the steps as the pre-existing shape model already has enough particles optimized to reflect the covariance structure in the shape space. : A list of local.particles files to be fixed, i.e., the pre-existing shape model. The new (to be optimized) samples/domains should be initialized with the mean particles. : A list of domain ids (starting from 0) of the domains that are fixed (i.e., not optimized).","title":"Correspondences on New Samples"},{"location":"workflow/parameters.html","text":"ShapeWorks supports two formats for handling the data for performing grooming and optimization via the python interface and ShapeWorksStudio : XML Parameter file Project excel file Project JSON file (swproj) The project excel/json file formats are the current standard project file format. The older XML format is deprecated and will not have newer features added to it. Users are encouraged to use the project excel/json file. XML Parameter File (deprecated) Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed. Parameter Dictionary in Python Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , } Project Excel File ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings. Project JSON File ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ... Python API for Generation Project Sheet The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Optimization Parameters"},{"location":"workflow/parameters.html#xml-parameter-file-deprecated","text":"Here is the list of the parameters to be included in the file. : List of surface meshes or distance transforms (i.e., groom stage output) that comprises your dataset. : The directory to save the output produced by the ShapeWorks optimization. : (default: image) The type of the domain in , image for signed distance transforms, and mesh for triangular surface meshes. : (default: 1) The number of domains for anatomies with multiple structures (domains), e.g., joints. The list of should be ordered to list a consistent order of the domains (surface mesh or distance transform) of each shape (e.g., shape1-domain1, shape1-domain2, shape2-domain1, shape2-domain2 ... etc.). : (default: 4.0 of is not active) The off-surface distance (in voxel units, largest spacing dimension) used to truncate (zero out) distance values for signed distance transforms beyond the narrow band radius (i.e., a narrow band of 4.0 preserve distance values within +/- 4.0 voxels off the surface). This is used to reduce the memory footprint required for keeping volumetric distance transforms in memory. If you get an error that particles are shooting outside the narrow band, please consider increasing this value. Narrow banding is disabled if is active. This does not significantly affect the memory footprint since distance transforms of the fixed domains are not loaded in memory. : The desired number of particles to be placed. ShapeWorks will produce the smallest power-of-2 number of particles greater than or equal to the given . : (default: 1000) The number of iterations in the initialization step for each split (i.e., scale). : (default: 2000) Number of iterations for each optimization step. : (default: 1) A flag to save the particles for each split in the initialization steps. : (default: 1) A flag to enable using the XYZ coordinates for particles as a feature for correspondence. : (default: 0) A flag to consider surface normals (along with particles positions, i.e., 1 ) as a correspondence feature. : A vector of weights that scale each dimension considered in the correspondence entropy. For example, if only XYZ coordinates are used for particles, is a vector of three weights that scale the particle's x- and y- and z- coordinates (default = 1). If surface normals are also used, should be a vector of 6 entries, 3 for the XYZ coordinates, and 3 for the surface normal (usually on a scale of 10), assuming 3D anatomies. : (default: -1) (e.g., 32 or 64) The number of particles after which to use shape space entropy (i.e., the covariance structure) in the initialization and optimization steps. Use -1 if you want shape statistics only used when the number of particles reaches the desired . Hence, all initialization and optimization steps will use mean energy till the is reached. : (default: 1000) Sets the starting regularization value (usually high value). : (default: 1.0) Sets the ending regularization value (usually small value less than 1). : (default: 0.05) The relative weight of the correspondence term in the initialization steps to make sure that optimization steps start with evenly spaced particle distributions that cover the entire surfaces (usually in the order of ~0.1 or 0.01). : (default: 1) The relative weight of the correspondence term in the optimization steps. : (default: 1) A flag to enable factoring out scaling in the shape space when performing the Procrustes alignment. : (default: 3) Number of iterations (interval) between performing Procrustes alignment; use 0 to turn Procrustes off. : (default: 0) A flag that should be enabled when is enabled to cache and interpolate surface normals using isosurfaces. : (default: 0) A flag to save the shape (correspondence) models through the initialization/optimization steps for debugging and troubleshooting. : (default: 50) The interval (number of iterations) to be used to save the checkpoints. : (default: 0) '0' : almost zero verbosity (error messages only), '1': minimal verbosity (notification of running initialization/optimization steps), '2': additional details about parameters read from xml and files written, '3': full verbosity. : (default: 0) Used to change the expected behavior of the particles sampler, where the sampler is expected to distribute evenly spaced particles to cover all the surface. Currently, 0 is used to trigger the update project method of cutting planes. ' `: Number of cutting planes for each shape if constrained particle optimization is used. : A list of cutting planes for all shapes. Three points define each cutting plane in an order that indicates the plane's normal, i.e., the direction where particles are allowed to be distributed.","title":"XML Parameter File (deprecated)"},{"location":"workflow/parameters.html#parameter-dictionary-in-python","text":"Prior to ShapeWorks 6.3 , all the In Examples/Python/ ,we used XML files to run optimization. A python code - Examples/Python/OptimizeUtils.py was used to convert a list of parameter dictionary in python to an XML file. Below is a list of the currently exposed algorithmic parameters. All the keys of this parameter dictionary correspond to the XML tags , except for \"normals_strength\" that sets the of the surface normal vector. { \"number_of_particles\" : 1024 , \"use_normals\" : 0 , \"normals_strength\" : 0.0 , \"checkpointing_interval\" : 10000 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 4000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 10 , \"ending_regularization\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 0 , \"verbosity\" : 2 , }","title":"Parameter Dictionary in Python"},{"location":"workflow/parameters.html#project-excel-file","text":"ShapeWorks Studio and the shapeworks commands groom and optimize use a new project format based on XLSX. The new spreadsheet format profiles a uniform, easy to edit, easy to organize way of inputting data into shapeworks for grooming, optimizing, and analyzing data. Users input shapes (either binary segmentations or meshes) in the first sheet (or datasheet) using unique column names to indicate type: Prefix Description shape_ An input shape (segmentation/mesh) with a given name. * Specify multiple shape_ columns to input multiple anatomies for each subject group_ An group column with categorical types feature_ A feature volume (such as an MRI or CT) Many other columns will be filled in automatically by the ShapeWorks tools. A more complete example is provided in Examples/Studio/FeatureMap/feature_map_example.xlsx : After completing the grooming and optimization steps, this worksheet will look like this: There will also be new worksheets with parameters from those tools and other studio settings.","title":"Project Excel File"},{"location":"workflow/parameters.html#project-json-file","text":"ShapeWorks also supports a JSON version of the Excel project file for easier interoperability with other tools as well as text editor support. The format is very similar to that of the Excel spreadsheet with JSON objects for each sheet and for the data sheet, one object per subject with key/values the same as spreasheet columns. For example: { \"data\": [ { \"name\": \"\", \"shape_femur\": \"195916_R_FM_align.nrrd\", \"shape_pelvis\": \"195916_R_PV_align.ply\", \"groomed_femur\": \"groomed/195916_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/195916_R_PV_align_groomed.vtk\", }, { \"name\": \"\", \"shape_femur\": \"187609_R_FM_align.nrrd\", \"shape_pelvis\": \"187609_R_PV_align.ply\", \"groomed_femur\": \"groomed/187609_R_FM_align_DT.nrrd\", \"groomed_pelvis\": \"groomed/187609_R_PV_align_groomed.vtk\", }, ... \"optimize\": { \"ending_regularization\": \"1.000000\", \"geodesic_cache_multiplier\": \"0\", \"initial_relative_weighting\": \"0.050000\", \"iterations_per_split\": \"1000\", \"multiscale\": \"false\", \"multiscale_particles\": \"32\", ...","title":"Project JSON File"},{"location":"workflow/parameters.html#python-api-for-generation-project-sheet","text":"The Project class of ShapeWorks lets you create the project excel sheet. It comprises various functions to add the input shape names, groomed file names, optimization parameters, transform matrices, etc. A details description of the C++ class and its functions can be found here . The C++ functions also have a python interface, the use of which is demonstrated in the use cases. Setting up the project sheet using the python API entails the following steps: Subjects: Each input shape(segmentation/mesh) is called a subject . This represents a single row of the datasheet. Using the Python API, an object of type Subject can be initialized, and the following properties can be set: Number of domains Original filename : Filename (including the relative path) of the input shape Groomed filename : Filename (including the relative path) of the groomed shape Groomed transform : Transform matrix obtained after grooming( list of 16 numbers). The 4x4 matrix should follow VTK transform matrix format. Constraint filename : Filename of the JSON file containing the plane constraint. Example of JSON file containing two plane constraints { \"planes\" : [ { \"points\" : [[ 10 , 10 , 0 ], [ -10 , -10 , 0 ], [ 10 , -10 , 0 ]] }, { \"points\" : [[ 10 , 0 , 10 ], [ -10 , 0 , 10 ], [ 10 , 0 , -10 ]] } ] } Setting up the subjects # Set subjects subjects = [] number_domains = 1 transforms = np . eye ( 4 ) # 4x4 matrix for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( number_domains ) subject . set_original_filenames ( input_shape_name [ i ]) subject . set_groomed_filenames ( groomed_shape_name [ i ]) transform = [ transforms . flatten () ] #flatten into a vector and convert to list subject . set_groomed_transforms ( transform ) subject . set_constraints_filenames ( plane_name [ i ]) #name pf the json file of the constraint plane subjects . append ( subject ) # create a list of all subjects Specify if the shape is part of fixed domain. If the shape is marked with \"fixed\" = \"yes\" they refer to the shapes of the pre-existing model If the shape is marked with \"fixed\" = \"no\", new correspondences will be placed on these new shapes using a pre-existing shape model. subject . set_extra_values ({ \"fixed\" : \"yes\" }) If there are multiple domains, the subjects will contain list of string of filenames. # Set subjects subjects = [] domains_per_shape = 2 for i in range ( number_of_shapes ): subject = sw . Subject () subject . set_number_of_domains ( domains_per_shape ) rel_seg_files = [] rel_groom_files = [] transform = [] for d in range ( domains_per_shape ): shape_files += input_shape_name [ i * domains_per_shape + d ] groom_files += groomed_shape_name [ i * domains_per_shape + d ] transform . append ( transforms [ i * domains_per_shape + d ] . flatten ()) subject . set_groomed_transforms ( transform ) subject . set_groomed_filenames ( groom_files ) subject . set_original_filenames ( shape_files ) subjects . append ( subject ) 2. Parameters: Each optimization parameter can be set using Parameter object. The parameter object consists of a list of type Variant parameters = sw . Parameters () # Create a dictionary for all the parameters required by optimization parameter_dictionary = { \"number_of_particles\" : 512 , \"use_normals\" : 0 , \"normals_strength\" : 10.0 , \"checkpointing_interval\" : 200 , \"keep_checkpoints\" : 0 , \"iterations_per_split\" : 1000 , \"optimization_iterations\" : 500 , \"starting_regularization\" : 100 , \"ending_regularization\" : 0.1 , \"recompute_regularization_interval\" : 2 , \"domains_per_shape\" : 1 , \"relative_weighting\" : 10 , \"initial_relative_weighting\" : 0.1 , \"procrustes\" : 1 , \"procrustes_interval\" : 1 , \"procrustes_scaling\" : 1 , \"save_init_splits\" : 1 , \"debug_projection\" : 0 , \"verbosity\" : 0 , \"use_statistics_in_init\" : 0 , \"adaptivity_mode\" : 0 } for key in parameter_dictionary : parameters . set ( key , sw . Variant ([ parameter_dictionary [ key ]])) parameters . set ( \"domain_type\" , sw . Variant ( 'mesh' )) 3. Project: Once, the list of subjects and parameters, are created, they can be set in the project file using the Project object # Set project project = sw . Project () project . set_subjects ( subjects ) # provide the sheet name - 'optimize' for the optimization parameter project . set_parameters ( \"optimize\" , parameters ) project . save ( spreadsheet_file )","title":"Python API for Generation Project Sheet"}]} \ No newline at end of file diff --git a/dev/sitemap.xml b/dev/sitemap.xml index 68973b7e3a..b52937db12 100644 --- a/dev/sitemap.xml +++ b/dev/sitemap.xml @@ -2,3042 +2,3042 @@ https://www.sci.utah.edu/software/shapeworks.html/6.5/index.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/todo.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/contact.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/license.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/release-notes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/about/team.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classColorScheme.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classColorSchemes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classCustomSlider.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classCustomSurfaceReconstructionFilter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEAreaCoverage.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEAreaCoverage_1_1Surface.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEAutoMesher.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECVDDecimationModifier.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECVDDecimationModifier_1_1Cluster.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECVDDecimationModifier_1_1NODE.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFECoreMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEEdge.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEElement.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEElementData.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEElement__.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFace.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFillHole.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFillHole_1_1EdgeRing.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEFixMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEItem.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEMeshSmoothingModifier.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENode.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENodeElementList.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENodeFaceList.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFENodeNodeList.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFETri3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEVTKExport.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classFEVTKimport.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classGLCOLOR.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classLegacyMeshGenerator.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classMeshSettings.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classObjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classObjectWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleEvent_1_1_01Parent.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleGradientDescentPositionOptimizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomainWithCurvature.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomainWithGradN.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImageDomainWithGradients.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleImplicitSurfaceDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleMeanCurvatureAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleProcrustesRegistration.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleShapeLinearRegressionMatrixAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleShapeMatrixAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classParticleShapeMixedEffectsMatrixAttribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classPreferences.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classProcrustes3D.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classReconstruction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classStudioLogger.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classSurfaceReconstructor.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1AdvancedTransform.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1BSplineInterpolateImageFunctionWithDoubleCoefficents.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1CompactlySupportedRBFSparseKernelTransform.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1Functor_1_1MultiplyByConstant.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1KernelTransform2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1MultiplyByConstantImageFilter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1SparseKernelTransform.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1TPGACLevelSetImageFilter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classitk_1_1ThinPlateSplineKernelTransform2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classmat3d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classmatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classmeshFIM.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classobject__reader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classobject__writer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classquatd.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1AnalysisTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1AnalysisUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Analyze.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1AnalyzeCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ColorMap.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ColorMaps.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Command.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CompareSettings.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CompareWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Constraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Constraints.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ContourDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CorrespondenceFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1CurvatureSamplingFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DataTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DeepSSMJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DeepSSMParameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DeepSSMTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DisentangledCorrespondenceFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1DualVectorFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1EigenUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExcelProjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExcelProjectWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Executable.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExportImageDialog.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ExportUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1FreeFormConstraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GenericContainer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GenericContainerArray.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GradientDescentOptimizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Groom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroomCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroomParameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroomTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1GroupPvalueJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Image.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomainWithCurvature.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradN.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageDomainWithGradients.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageLabel.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImageUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ImplicitSurfaceDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1IndexRegion.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Job.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1JsonProjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1JsonProjectWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1KeyboardShortcuts.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkDefinition.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkItemDelegate.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkTableModel.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LandmarkWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LegacyCorrespondenceFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LegacyShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Lightbox.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LinearRegressionShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1LogWindow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Logging.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MatrixContainer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeanCurvatureContainer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshCache.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshGenerator.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshManager.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshReconstructors.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshSlice.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWarper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWorkItem.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWorkQueue.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWorker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MeshWrapper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1MixedEffectsShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1NetworkAnalysisJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Observer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizationVisualizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Optimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeParameterFile.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeParameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1OptimizeTool.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PaintWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Parameters.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleArea.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleAreaJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleAreaPanel.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleColors.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleEvent.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleGaussianModeWriter.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleGoodBadAssessment.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleNormalEvaluationJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleRegionDomain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleRegionNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleShapeStatistics.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSurfaceNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSystem.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSystemCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ParticleSystemEvaluation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Particles.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PhysicalRegion.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PickResult.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PlaneConstraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PlaneWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTree.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PowerOfTwoPointTreeNode.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PreferencesWindow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProcrustesRegistration.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Project.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProjectCommandGroup.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProjectReader.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ProjectUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1PythonWorker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1QMeshWarper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1QOptimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ReconstructSurface.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Sampler.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1SamplingFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Session.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Shape.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeEvaluation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeEvaluationJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeGradientMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeMatrix.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeWorksStudioApp.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Shape_1_1Point.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeworksCommand.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeworksUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1ShapeworksWorker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1SliceView.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1SplashScreen.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StatsGroupLDAJob.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StatusBarWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StringUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioHandleWidget.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioInteractorStyle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioMesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioSliceInteractorStyle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioUtils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1StudioVtkOutputWindow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Style.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Subject.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Telemetry.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1UpdateChecker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Variant.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1VectorFunction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1VectorImage.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Viewer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Visualizer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1VtkMeshWrapper.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1WheelEventForwarder.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1Worker.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classshapeworks_1_1shapeworks__exception.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvec2d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvec3d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvec6d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/classvtkPolyDataToImageData.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/index_classes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structColorScheme_1_1rgb.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structFECVDDecimationModifier_1_1EDGE.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structFEFillHole_1_1FACE.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structIntersection.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structQuad.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structRay.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structSimilarityTransform3D.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structTriangle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structVTKEXPORT.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structfmt_1_1formatter_3_01QString_01_4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1CurvatureSamplingFunction_1_1CrossDomainNeighborhood.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1MeshGeoEntry.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1MultiVariateNormalRandom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Observer_1_1DefinedCallbacksStruct.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1ParticlePointIndexPair.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1ParticleRegionNeighborhood_1_1IteratorNodePair.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Reconstruction.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Sampler_1_1CuttingPlaneType.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1Sampler_1_1SphereType.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1SharedCommandData.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1powstruct.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Classes/structshapeworks_1_1powstruct_3_01a_00_010_01_4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/AnalysisTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/AnalysisUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Analyze_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ColorMap_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ColorSchemes_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Command_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Commands_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CompareWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ConstraintType_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Constraint_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Constraints_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ContourDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CorrespondenceFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CorrespondenceMode_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CurvatureSamplingFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CustomSlider_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/CustomSurfaceReconstructionFilter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DataTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DeepSSMJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DeepSSMParameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DeepSSMTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DisentangledCorrespondenceFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DomainType_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/DualVectorFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/EigenUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/EvaluationUtil_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExcelProjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExcelProjectWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Exception_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Executable_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExportImageDialog_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ExportUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEAreaCoverage_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEAutoMesher_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FECVDDecimationModifier_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FECoreMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEElement_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEFillHole_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEFixMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEMeshSmoothingModifier_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FENodeElementList_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FENodeFaceList_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FENodeNodeList_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEVTKExport_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FEVTKImport_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/FreeFormConstraint_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GenericContainerArray_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GenericContainer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GradientDescentOptimizer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GroomParameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GroomTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Groom_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/GroupPvalueJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomainWithCurvature_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomainWithGradN_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomainWithGradients_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageLabel_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImageUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Image_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ImplicitSurfaceDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Intersect_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ItkToVtk_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Job_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/JsonProjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/JsonProjectWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/KeyboardShortcuts_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LandmarkItemDelegate_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LandmarkTableModel_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LandmarkWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LegacyCorrespondenceFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LegacyMeshGenerator_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LegacyShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Lightbox_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LinearRegressionShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/LogWindow_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Logging_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeanCurvatureContainer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MemoryUsage_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshCache_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshComputeThickness_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshGenerator_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshGeoEntry_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshGroup_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshManager_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshSettings_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshSlice_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWarper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWorkQueue_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWorker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MeshWrapper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Mesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/MixedEffectsShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Module_8dox.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/NetworkAnalysisJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ObjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ObjectWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Observer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizationVisualizer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizeParameterFile_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizeParameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/OptimizeTool_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Optimize_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PaintWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Parameters_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleAreaJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleAreaPanel_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleArea_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleColors_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleEvents_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleFile_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleGaussianModeWriter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleGoodBadAssessment_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleNeighborhood_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleNormalEvaluationJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleNormalEvaluation_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticlePointIndexPair_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleRegionDomain_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleRegionNeighborhood_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleShapeStatistics_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleSurfaceNeighborhood_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleSystemEvaluation_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ParticleSystem_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Particles_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PlaneConstraint_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PlaneWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PowerOfTwoPointTree_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PreferencesWindow_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Preferences_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Procrustes3D_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ProcrustesRegistration_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ProjectReader_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ProjectUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Project_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PythonAnalyze_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/PythonWorker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/QMeshWarper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/QOptimize_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ReconstructSurface_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Reconstruction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Region_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Sampler_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SamplingFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Session_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeEvaluationJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeEvaluation_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeGradientMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeMatrix_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeWorksStudioApp_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeWorksWorker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Shape_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/ShapeworksUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Shapeworks_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SharedCommandData_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SliceView_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SplashScreen_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StackWalker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StatsGroupLDAJob_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StatusBarWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StringUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioEnums_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioHandleWidget_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioInteractorStyle_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioLogger_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioMesh_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioSliceInteractorStyle_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioUtils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/StudioVtkOutputWindow_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Style_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Subject_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/SurfaceReconstructor_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Telemetry_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/UpdateChecker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Utils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Variant_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/VectorFunction_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/VectorImage_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Viewer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Visualizer_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/VtkMeshWrapper_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/WheelEventForwarder_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/WindowsCrashHandler_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/Worker_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_0e4564af99249380ef1f30404400c0a3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_18c9fb63c9ecb061d3bfcf14463b37a6.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_2efd803177123288b92908ec296fe578.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_36d0ece48b2c599ca7cdf3fcf70a4111.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_37dfc33913c47c48c20c22cdbf1559c0.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_3c387d8f52af5a1c9b80596228515621.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_409787ee32d93aa6a212981d92e6dc9a.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_4481568adb70067b4bb4b5ce096891b2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_48521012c292b6dfb1bd2f2ae5aacf6c.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_486a45e6ebc11931a27093b877e14af3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_4ea27a77bf632cd63100af8008b8abf4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_645c19d7da098e01621cdebb663b8767.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_6cd87311705ab44b460cce19838a0cf5.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_6e6cb9563333489fde7459b1f95e59a5.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_73a09fceee206218e6d903b3c5deb969.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_7d4dd3d8a2b1d1a0e92682acfb57f0f0.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_85653c7ab6d0c0e003ea454a8b2baba9.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_8703d550aef9c899d5cf3c4cd311a554.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_8c1195e4829fa17630c4278c41da729a.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_9e4ba78685e6608cfdea07960abd189c.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_9e99c41d3802fada2a0119d079df0956.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_a4bc8cdb2751c8604311dac5c98fb558.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_aee3ea6bcd7d0f0da850c3e9fd33d5af.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b0b944fd4368961b4965dd28c72a00a2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b61e4180fa497c41c4b364a945b36efe.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b6c1f9d4f6080dc79a7a9d2c69150815.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_b92c77c85671879e4c48e03051777b7e.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_baf8d66207f3fc39faf866e67ca98ce2.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_c13ed27a749775eeb2d59234813cae48.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_c8a30dba58b805ee2d567ab327483fca.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_c8ce71b7fc76205395f44c2291e69b75.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_cb8980ab440f994989990a6313097edf.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_d77cc112773b74d11448b7fad9142c8e.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_e938d55d0d25a8e3889ca0b02966a6b3.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_f02d5d8e81e1edd3722111e50e18938d.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_f27aadd9c7f02e71212dbf7893d91496.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/dir_f6c26397dfcef1d1f5f1786f8168e7dd.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/index_files.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkAdvancedTransform_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkCompactlySupportedRBFSparseKernelTransform_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkKernelTransform2_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkMultiplyByConstantImageFilter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkSparseKernelTransform_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkTPGACLevelSetImageFilter_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/itkThinPlateSplineKernelTransform2_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/math3d_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/meshFIM_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/pybind__utils_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/resource_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/stdafx_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Files/vtkPolyDataToImageData_8h.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Common.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Constraint.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Image.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/group__Group-Mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Modules/index_groups.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/index_namespaces.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceUi.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespacefmt.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceitk.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceitk_1_1Functor.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1particles.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1project.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1prefixes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceshapeworks_1_1project_1_1types.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespacestd.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/api/Namespaces/namespaceutils.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/backlog/ShapeworksCmdTools.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/backlog/fim_v4.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-analyze-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-data-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-dataset.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-groom-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-optimize-module.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-project.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/cloud-shape-viewer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/getting-started-with-cloud.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/cloud/swcc.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/deep-learning/data-augmentation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/deep-learning/deep-ssm.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/deep-learning/pytorch-gpu.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/build.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/commands.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/contribute.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/datasets.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/docs.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/gh-actions.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/markdown.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/modify-datasets.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/new-notebook.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/new-use-case.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/onboarding.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/paths.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/python-apis.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/shapeworks-library.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/dev/tests.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/examples.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/how-tos.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/interfaces.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/shapes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/sw-stories.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/getting-started/workflow.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/ellipsoid-joint-generation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/free-form-constraints.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/new-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/openvdb.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/shapeworks-command.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/shapeworks-python.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/ssm-eval.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/new/sw-meshes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/array-passing-without-copying.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/create-and-apply-image-transforms.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/create-and-apply-mesh-transforms.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-data-augmentation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-exploring-segmentations.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-meshes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-notebooks.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-segmentations.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/notebooks/getting-started-with-shape-cohort-generation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/python/python-api.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/deepssm-in-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/getting-started-with-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/multiple-domains.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-analyze.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-data.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-export.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-groom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-optimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/studio-viewer.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/studio/using-constraints.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/tools/ShapeWorksCommands.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/right-ventricle.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/use-cases.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/constraint-based/ellipsoid-cutting-planes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/constraint-based/femur-cutting-planes-studio.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/constraint-based/femur-cutting-planes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/contour-based/supershapes-contour.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/deep-learning-based/deep-ssm-femur.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/ellipsoid-multiple-domain-mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/ellipsoid_mesh.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/hip.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/lumps.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/mesh-based/thin-cavity-bean.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/multistep/fixed-domain-ellipsoid.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/multistep/incremental_supershapes.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/segmentation-based/ellipsoid-multiple-domain.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/segmentation-based/ellipsoid.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/segmentation-based/left-atrium.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/shared-boundary-based/peanut.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/stats-based/ellipsoid-evaluate.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/stats-based/ellipsoid-pca.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/use-cases/stats-based/femur-pvalues.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/users/citation.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/users/install.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/users/papers.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/analyze.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/groom.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/optimize.html - 2023-10-24 + 2023-10-25 daily https://www.sci.utah.edu/software/shapeworks.html/6.5/workflow/parameters.html - 2023-10-24 + 2023-10-25 daily \ No newline at end of file diff --git a/dev/sitemap.xml.gz b/dev/sitemap.xml.gz index 7fb986d5f8f4e1557c860a0a8daf93865375ec0a..c2b33014648741eb413533c2b21902e6b66b0513 100644 GIT binary patch delta 5428 zcmV-470c@KEAuM{ABzYG6*oDN2l9W((tTwA+R?}Omh~HIH2v#m!DPGp>E!5@`P-g6 zeck`NFK(4kA%1UGtI?it)mz4GxB#u>)Ef#HKvPT1(4tqCOt=`9SQq5CALPlI`#Ofq z3HLwGRIBvLOFTm3F&IFjv8r3OQjkUh8g;`seI_T8jnyN!?&`jjtp%aHyf}Z=#Lkpc zO4x<~k#6JLc)y4!bfZ<*WVSFn@a)U^IdR!Bf3~ijHrz;THoqs&S|?xdF+Y4fzd&JB zn*6x~!MPAH^8TWAYE*BrXwI2sSVXtCAUu~i%7jy8+h0_RhU2duFW^4QeglK{2z2|r zx72~40IiBgS#?U;tvfehn)rVQB?t&*f2UqaV}Ypr%?gI({{})@Yng(ed|Cf?@i-`L zad>10!}IRy?BmtP&k!tEv|)VbZ`XI!lV(<7+^UnlK-M~K0V9g>vHmA<`*{D?9mbu(f>O zu??N8j>#UC>#MZevr*qOJ8D9P^c(jBI-oz91`Kj&C6{&|Dg``@*Tnj#6L@N^mi1_{ zj^d40T>G%1`Ai#Ua_T7@2ZgxuAHI@3G3^*N8J|jd&D?4}Vy@`~j1MRuNnA9I(^U;5 ztfq#XlFC7{y`CjadJca9^fJK<0%>JOA=Q=IY(UI~Kjz|rxKVz$vc-@K(%yNS{8ZdC zC+oyov)(jHcSvw=S58&#>3wfW52|H$wh%7Iev%#DMmSev-O`z&rtyjJ7HVolqoP6#*DEx6;-@H3LyP|t)SA@EV>#gi>{QWXtIFJXkV>T5iB+hKbKq0fee18qW zqNV`Y?XAX%=^c%}{* z#sQFWs9 zW>CHGfyRSB8WHr6#<5~PZKdA;v-&bnQ0w8GXjrYTe^oUu+zr#LBWI=?Tt?LGDGl}3 zeUFyJcOzQQN7jBJAL#;yypS8}QGFH{kDS^Yt-uNy{v3Z2sJP)ZBysnP>XsnkeD1)U zTP<0uHn5DSg62{aT`Ju{Tf|enp5)$ibcB#%<~8D})@+B!`Ld)6tCZ?Bs!|;)7kJEK zVuUsuCqhu8aoUwP_pBWW)2}gUY^YqgfhV*Q+drklE42NOs5s@ee~F1xbo&j|D^^pB z3WsU|;}(BSzvA>$KzvCtq&FB-Py5xV9^DIk#0cvI{*89EVp^=WN?Sfc-hfw5=kA!k zJEunW5;W*^fb^YD #ivjmK}_Hm1AB_Oq$10-yg+uX43yNP*l3Joz0cr+&8>WbRZ6^N;?#f6bl3~~f#haeE4_8h$e2oZtiAAscnmaY z?axrL)q}YV0selOF~5_;I{8{x*6m*7o+E$jMf*yj?`2(g1~Z2B5)e1B=q2ZOahpO) zpY6^_&RWV)ZmNfJI2v&9nSw}Q;g7z4i;ilX0ds#_rq4UMw zeH`sDTG&u1?Cult zoioeUYMvG59)^x4{hXy+K0gZ`W=@`(IvuR|)){18-sw$^!F73Y_T~JXxa_7(hifHd zBS}wFzt7)Ypg>;Aw*5u5)7o90o`G;pu17-X=DO}-((cxp z^`=p}OV2UT*4{_63EwL^(|mtf|90`;Hy=N*F>spBdTH(V8?#Q%-KMuu{Amt=x<|Je z2IfmU>S^xC>%`ybO|6WXJ4PTC-hb==!#pfOUGxCn?{D&rt(B9H*zWtDd}h5+9U|+Y zeXV~yO-3Yf#@e=K+-EKN&m&SF>hPzO#cA;D4U-y~^pCAxrkT5To_K%ai)c~*4;&TQ zz-Z#%tgxA{C~MutG}XGVcLRaru7)jXT+priH^n~b7{T@QEyzJV7}$H}32xGl*=-cL zA5qW>vTv+yP7Xc&eT(MXa*F{oB~f9}{F{R3n4G%TY`_4Sz0(E&X1a|~I3N~eaG#np zvH@rg9jLrg2ZRHJf^dIkdaFh~d+Pvbv?epCUifxVPd-U3EZ-tLe55~hAcs$8tm;;+ z6wWXQftfq9ymTMA4_E-gIi&@_bUP;+R;%k@RgHr3JU<782xFs3L%p2>(gO6toz)=- zz59G*?aNY#;E^umhI$MS)pPG2&l5h*Bd7L7i%2M>c`y$I(tv*<2_A{Nf2VE<0A*0x z&Z*UswQ2)GgdwLdFZ`IiGj&heEf50EXs4bB0OIV=Qo{kblqSDO04Nu}L>$2Pdz7M& zfbs~ky*$RMQ_5~-zX6f}Aj{*E>h==gN*W77bjdgY;rPEnaD0iuqVV=T6Awg`WFkSJ7>670 zq$Y&G;_P0Vf;(TO-99BDpn-XL_W=>g3vq)4hQV^hYHBf1F#OdM3IN5>N-hr*p-@iD zp&Lf{B=&CYJJJRZf}q>{YE+LEdOsopiM;RhMa{@BsW`ID+G|9nEp%~ zJx{oVS|qiZ2PGhoYKY0bJ*9p6m+`0!3=)4tKI;J{c#s=kcmNUx1v)H;?(DwK z8bQA~=DA@#KnlSz5e&@KkrwClfW!q3IMbk2oYjF))DAH3*l3JozTX0YSUyi^N{P2j zocd<=2BK}jf$YW96BwvzFwt`>EhP2fH5&}r%XvdESo3fpuxt1m6O&NTCU^JBy0c~6 za~ywFV_!0Zxn?_KsRNXWGZ+jGz-jWs!+_dVOgt#QFZDqBW3zrxlPa;+1YlcfYDoKH z1_P3|d_)AmqPQNNh&Jgt5RBLEynw^FN}(zs_cR!(WqX+LId*oddX(96GYv>)*(ad% z#ZNF1*Q2>Hd$SY?3E|e99X!Ef9L6C-a3Fup#9GajrQvh&3GJf}!wGdL-GHa%q?5p!r2;I{Gjpi-WAR(!h)6n`2$YnEWXBYk0p|F4a z;;x#OV78h^np%l6KiqR=cL2GiGnH?31R<_H3`BwOj54V>m|G4>W`D7FA4fZk79@oL zWS@;SMD%kX!8rW~45`o2*DX;ym1ABi?LL2xkX<+H$L35kvz?s-08AJGC?WN2MAfqzv`!0_hfkPLBg!a^iy}_a zq%7+ysiKm2QsoUTi!yw|G#3$Z%E~(7%c|n6;G#+0G8Pfb;y4B%EJVZ8w2FUIo)tVR zc@ps?;i7Kh<+9=t03lDyLX^!iVa<}oysFD+S>;JmF5_jM0IXpaRYh44rHQCg#&VX# zNma(8N+=h+VgQ6$>DH=bqAsE+FY2sze=RvhRbEzcod6J)%OsBC#0k%&&P7wlwMd$T z(ULLVpXXXKbzQPfSIIuV+uaTKwpjH0qG zS>0se6Xw~H$CW4qi>i{M*ojXrsIK$eFJxW-5OPr#X&e{PlGRyOXL-aq#Z{S>EaJ@) zfRJ)tSIazgf3mV_1Qpq`s^g|w(z0RzghlGMXTymoiQEn?-7Q!}PU(NBE*wfZL+<7yZ&%Pf69VxX9CpXGu}=EEcRt5cJZDvYHiT zUOK%dk4o-@DT|6Kk63>#;W z9?au9tMa7~Ny!VhUn2%!AJ%zHSzJa9%c{a1NS@Vcp0O%hx}Sg45CS20I;hARCrBf~ zi;5Mj5(&?%co{kKAAqn*cu{bt+7xkFxVwXA&WK8*Wn4I;u|QZuXYPtTPolzmNmF<2 zH)ZY&j)JqQ1DkJZ}h?=U(Dra6)5zEs! zjjDnKz>P1QAa&+NQWR-jWFn5UtaK~NL=|TVF9BpJRcYz$LlKE&$x2E~XHT%Gj*=?R zoiYdDFKr?xTSQ4^OfdE|d0P1>A~msyn`IL_gSaW#?+SL-)}_q zU`U7N>LBOkwm)$|YTZU7^-0tshw z#e@h{Gk({q%~3E5l#$#kc%apMQGPcth3ko+@ay6{PcomHA|7n@-W6XyP;9%U;+{qlTnsc*vl z{=L<*9xa7Ru-6lVT>+tZu-|>NU9hP+VX%J$9n*J0J@mnTeDeyYLeVwJ-P!8|LXz*ci_TWl_5q#8LEwkF#nvw5*52Y^WRcE5v~H&i^H8 z@Q7A9rkT%-1L--Iyx6}JHr|VL?LFin{d_U4X4rg_YxcFUd1WyzLallK&zQGRSX(*3 zu(V@07#JG6bw`M^duexznpl4yIGC3W#?o-&I}3<|h2~^%o%cH7dYG2eMT&5HTHt(-5zgnLUXi%leq;me>ieJ&17Vj5ZQ(> z2b+8wYqr}4zg)rI0ooaBGTiKhnLzrE=4~4;z`(pN5#skhq#~aL9DXEvVhA?Y@k9`E enBxgzV48Jg|KCo;^uv(-`F{XOcEDZi{s91tYHyMN delta 5427 zcmV-370l}MEAlG`ABzYGLP9u^2l9VO=0382?dW5C%lZv9n*Q~(V6xr)baM2{{B2L3 zzV83s7q?2N5WhF8)o4$+>Mi3oT!2<`>J5bpps6KhXwfT6CR_|ltPAqn5Ax*9eH}yQ zg!`Xos#SXBB_5&i7!07%Sk#M8*U^vo8OaXt&=bKm>)i#U!X85 zP5#`0;9Lk8d4JJ5HLAB*H0R7RETY?65S~jMWx}bl?JufD!|_*-7jU0tzkxw}1iF3R zTk1eifL6t$tU9Ia)}0$LP5gg@5(I>@zf-TIu|QP*W(7m?e*+<{wM;=!zN~+{cpQ|r zI6Sh0;dys;_VMcDX9$)n+AzNJx9dCVNi(Z3Zq-R&AZwkrfDy&`SpSo_{Y(rciZKIy z)e^#2dYhwM=2|Tq{%X+j} zNAX50u6vIrS8dgF;;S4`0cin0Absj8CP!W^OefG1qhg#s`#-Brcl9>8b`2 zR#QVxN#!8fUeA&yJ%@h)dYRw_fwZ!tkm^cpHX!E0A9L|Q+$g_W*<#2AY45yEek$&n zlXYUPS#KJpJ0!TbE2k>=^uD*G2h}n=TL_n9KgkYnBb=+TZs|->)A&Sq3$?gssv8)$ z?QS&=-rG##^V`eSz_g*?NcYr2uKKjRYRYN59$PDicK3F7<^_Kd193g=L0_$5g2eX6 zm79+)PCoY@6#h7_Z{D4rUC}+YD?(kw^;Y&b{(hM+9LR&&F`Eh$5@)tzppe;KzQ2ZG zQBwfy_EzJ>^bSZ5I8nWSjm%<*f#(lRhEUJiosnj(R11uUW59lc@85(==4`o+_2QjY z;{ZrGRoPxMWHf&R$u{juOfqMg5me69HwnK=u^|h|=Y7vi_SkTkTeG)n)Ihlnulckl zGpJtpK;yw5jR<;3<5)4Dw$g8aS$!EOsP%A8G^|$Fzp5G+?uKdBku%c`E+gvpl!kii zzDG;qyAiGDBWu5qk8}Y;UdRpgs6LB}M^5dHR$zq;e-3{MRNU|ylDPXtbxV+NK6hZw zt(L4+8(2nEL362zE|u<}E#j$OPjYWMIzmV>^BVC~Yqmq=d|6V3RZ8_5RjCe@3p{2q zF+!V-6CtS4IPJ=td)AJG>DQPvHdHR$z!O@D?Vr-&725tsRGf0#zr@5Ty8Q;~6|1R5 zg+sM~af^SZUvc^=Aiks+(i@Dar~PVFkM0FNVuW=9|3E(7=hV`MSpvpf`?$rm5|CQW0TMRLZEjfi-9)`-+@n?-h>UWxwY9=T zd)W^Ld?D55tL%k(z+~H?v}}J#Hg8AdIO2;2TiAb~APwLDh;_#JmQdMXo%@~+*7=0j zHTfHSps{SvcFlUWfxQP{eQPt^QKu~f3c2#Lib2^>123NKE7Jq)$@{8iMpLgZS9!whV|3}GfvIBkWV3O zG~&hhIbgnbY&1r)-e+*Z=2kwzDka`Baq2&3I_!o0KytIKmEJmLWK5+y)?WBRJO-My z_GhTr>cL!w0Dr&CnBU1^oqVk;>vpek&yj!iqJ5>%_p+`#gBinm35c6m^pf+txJ@CY z&vs`dXDw_A-;LyVpUI3Zq~_kTo}im7O@z2^SM@;pW3zrxH_ENwS`&RAlpmCUBz>Oc z3R{N(JW2WwpuT(S5F6K0zm{egaO;IZA!s`)mLqr}2LY zkX!RR7!0wRYn>6v{4-Q8XeZh$Ld;0i1bJvk2b&>|o&P@3d9~B5>?ou<9R^g&**Syh zI9xqF!;Qf_Gol)S&xEjs;8bM#MG~T~a5cEswkxiQAaxqcteM+hc6W|7XykKEEp=oy;t;Ff2f-|zZHZ$VN?(|k4ANHtKUH-GM4b=hjd#ow zhul8GsVCSiYrbxY+Nl`vQfc=~FtcD_{enl&Zt0QJ0CP9o6Hf#RNeV-fgOGpNyBpQ+ z&Y5LvHO~rj4?{kKk4@ARg|;JUmx`*MCxTy|5Y!?hB! zk))@o-{ZqwT+{xki>zrdGzx9V3tm@4xl`VIG#CE_wj(_c!^**2>98Z1;UnKC@n^4w3cH zzScjUCL@wKV{KbA?z0yC=Mkw7b@)@t;xu^nhDnV~`o~r;)688vPdtC|MYO2@2abwt zU^MY>R@lr}l(p_+nrhwGyMe%QSHqSxF6h?%n_{1IjNp3u7UZBF4D3Dg1UKo&>^6$r zk0@vb**DfUCx@Q?zD4tGxy68)lBh6f{!PJiOitZvHei6v-f05>Gu=ig91sgKxKGU) z*#I<$4pd&L1Hu79K{$Uiy;Y;0y>$RIT9X-6FMPYGC!Zu1mTwUrKGL5$ki#c4R&}dZ z3TK#uz|0+4Ub>Im2P^>LoYDedx}6gZtJU?dszyP1o}Yt4gt5`2q25jbX#slS&gu|^ z-hDo@_GKwV@JJVOLp_Fv>bZB1=LsL@kyHDkMI;o`JeUUpX~2Jw1dqhszf-pafHEj; z=hSM+TD1Wo!jRLK7k*6MnYt(K76<`nv{TOm0CDzbso?-zN|RqC0F(<~A`amDJxb9> zKzRh&ULIrBDP^~^-vCJfkmd17b$bbLC5;6kx@4SyaQxpOIKISS(mpX*-gg)*n&?vL z4k#4-j(XCP`zU{^;~{;jHQT{ag%7mv9(_)RyB~)+3J73IbwF{Fi3cJ|GLaxqjKht0 zQWHX8adxjw!JV(tZl976(7?RB`+x}Lg}6Zi!(h2$HMJNh82;)B1%P5`C6|YZP$(zn z&RKz^7ZcFi0T9F;{M*@f~RP;S4vo7U}1%1RzXDL(ak{lAEoq6#__4On;`0 zo+n&FEt1;IgAx!(Hol`&=p5I?`X|2|PK4o_I;D5N8w9i4-#llGZ$U^@H;k6nTgmTw zC*dHVKwN(zSUS#eGdK(wAN_$Kxn{kS%otm2MN?xd3_&)HCW9cs2pmk)JD46o&Wayo z@oA)yU}#VlW}XlO!4f`%d?azvG{mhzvi`4?7=5C?P>*4Qd?4%JJ9KA52v>cqfg)8i z3`mgbsSk4SAak1MR2B9-bqxiJp3*-3%Xm}<1_^&6pY;F}JjjhNJOBxU0v(n^cXnTA zjiBEg^W3l=Acf$V2nJ^ANQ-lNK;i-ioN3T1&gwuYY6qBiY&1qP-*16HET1PdrNmn% zPJJ_b1JSnNK=xwl2@KRUnCQ8c7Lxk#nhgf*<-8#nta-Q)*fso(iAgAEle>Fm-Ptnk zIgWp-u`ijyT(h0A)B(!G84Lyo;57N+VLumwF)mu~|Q;NtIY@0=RJ> z;wPAh>(Shpy;+Kcgm7!l4xZpK4&#s^IFNs4Vy))N((pO_yI6sSS4bEVOlbP>_Mz1gU$}umMcAtMo$gZ39V{@jN+0M=Z049t8l#u#1qHLLGtf{Ib ztI{%}CT`Lwi?S?=c*N513FDGiO`WH_B3?&%EYiB+O`K(UTBile!zWCr5oMIdMG+@y zQkHd7NX&4TE%}U&kCNE zJc)Rca8Wn$a#`^RfRLwUA-B0M;;zs-i52(nM4#V>wIW zq$*=kC6o(ZF#y7>bZb>IQ5R8^7j;&(gC$?7btvpnLQ;;Kwb7V%~Y zKu9^St7V?LKUrBdf{JWe)p1iTX<0Dfr*wbwrQ54jUI7q_ zOo&vJEU9A=vxurBFB5lB)XSoY8UU@WT;|J^7tGy-&K{&FO3B?G8FQL=&1wd)hGh|@ zV!4bMH5D(bN-TNflyEMb^kK^-z->|bi+<^>r=)6FT;yrQv!p0_77JD+2zqHnS5Rrykgq~wL$uMq>V59>UpEH0ylWmVx0B+u$J&sdc$-A{jN2!W709aLnE6Qq&g zMa2qMiG=4>yo{Xr4?tKYyePO+ZHl-o+}*)5XGEpZGA^9aSRkySGj~OvCsEN5NTDasoJqJWfe?E8iW%Vo6jdVp%25kcv~zoT>vrSh6${HCvY6QR-|c;r1)5 z)1=5sx2Oz(kW+sV*G0n%w^f&EwQRDCCrK4kUeyJFq~Ud0m63N~L`_v?l`}7@h~;UV zMpZ!q;KmnDkUH}sDT=f%G7-mFR=O2sqKdPGmjJSqsAXWF@7gvnN)|*D@@LN$j zC_n#~aog@z<1i>~Nql~Lxf+-@^c(4(S}59ANC^Vd_1IcDw7a*vsTC*d?Uc0X-bZLU z?*L(U#`qi9lrV;kHQ`dxr?>C}) zFr-6sawx263qle3Vvx{*W?Of{3f9>Dz???l48ngWoc`$r0Hi0F-z5@F(^(`OXFY)7 z+{U-@R2Zr>64|TI!cqBU>jJ)*{+ez$%%TBCocrp-1I`brk&oZOYWjzEH-M2^frK-; zVnPI}8NX}Q=BT0QSttCI`k-kV+1=g;nG?-hHH!J43pURcS#*=l6*`SzmI0v{vY}%* z>s^0!AWNe56H-8M0#@XXF{bwy_ftoja9K8Ft?V}oW0}txSUgC(T}*F<%VZvSko6{l zXjrtwbnjN=WV%z>xbcJ8r_2$ezgwPIR0%_3BSf!S@a$6%O-!!Fn$gGG3LebLHVGrbFy#F7b9puRGt zPv~))(+R<{RSyfRAW)>A?9hao2=kg|`V0oigL|m7#GvtSH?4XIk;Q3LC)BobFiL-l z#XprhF^diLq=R)sc_R0ppoOnlSn#K0QWGkSS9;Af1|?JiHBf&q>QKM_k-oL}MFEh^ zdT_8Hrd!ZGYlHp%4-2297UunT@FJKKrZw9w24;-E4}CmIjn*BKVHc=*`;5jlF-r?~ z*qyC7w7Z4$`TGldsD?9Ocz!#=(0zY1(g_h{`wK>T99pHPm+2W4aWxUd=QqKg-Ueht z-;{Hn2v=LBLpP&l{qV?L8Y0AOHcjz-uQAF#U_)xp^6h;WI#oCK!=Qywoio-=z$o*N zL(*&bAYN?>pTa3dP9}%XG3C03k8wzI4WA_3q|iObIN9!j`$?^@^q7l3zD|F|9|7l# z9TFVOiI$tKUHA!w+86wV4fFIUY>elFvZ&n);wXB;$5}NSTGqp1Hq?#!6=J}8=l_y4 zctool)68eaf%F_pUhLlq8}CKB_8#((e!iGiGi<)eHTzoFyt0@Uq1L?rXUtnDtgRei zSlY203=ECkx+BEdy|lYUO{{+p9L&oGV`(_?odv`}L_D1;6gt^+O_M{py*;|s!p1xH zk^hy{$0da$YpJmd<_x*93!H81J|h;j8hgR?ZjU!Op*h;X$=rgOKO8xqW->BMh-^cc zgH67THQQ~2U#?*90PT!58E$sMOdx$n^R^8aU|?RC2=V(LQjt#r4nHG3F$5dycp?Zn d%<%*